{
	"issue": {
		"url": "https://api.github.com/repos/laurent22/joplin/issues/14751",
		"repository_url": "https://api.github.com/repos/laurent22/joplin",
		"labels_url": "https://api.github.com/repos/laurent22/joplin/issues/14751/labels{/name}",
		"comments_url": "https://api.github.com/repos/laurent22/joplin/issues/14751/comments",
		"events_url": "https://api.github.com/repos/laurent22/joplin/issues/14751/events",
		"html_url": "https://github.com/laurent22/joplin/pull/14751",
		"id": 4078507096,
		"node_id": "PR_kwDOBLftOs7KulXs",
		"number": 14751,
		"title": "Android: Fixes #14722: Fix keyboard dismissal gap in tag association modal",
		"user": {
			"login": "Code-Smokker",
			"id": 186810936,
			"node_id": "U_kgDOCyKCOA",
			"avatar_url": "https://avatars.githubusercontent.com/u/186810936?v=4",
			"gravatar_id": "",
			"url": "https://api.github.com/users/Code-Smokker",
			"html_url": "https://github.com/Code-Smokker",
			"followers_url": "https://api.github.com/users/Code-Smokker/followers",
			"following_url": "https://api.github.com/users/Code-Smokker/following{/other_user}",
			"gists_url": "https://api.github.com/users/Code-Smokker/gists{/gist_id}",
			"starred_url": "https://api.github.com/users/Code-Smokker/starred{/owner}{/repo}",
			"subscriptions_url": "https://api.github.com/users/Code-Smokker/subscriptions",
			"organizations_url": "https://api.github.com/users/Code-Smokker/orgs",
			"repos_url": "https://api.github.com/users/Code-Smokker/repos",
			"events_url": "https://api.github.com/users/Code-Smokker/events{/privacy}",
			"received_events_url": "https://api.github.com/users/Code-Smokker/received_events",
			"type": "User",
			"user_view_type": "public",
			"site_admin": false
		},
		"labels": [
			{
				"id": 519700741,
				"node_id": "MDU6TGFiZWw1MTk3MDA3NDE=",
				"url": "https://api.github.com/repos/laurent22/joplin/labels/bug",
				"name": "bug",
				"color": "cf353b",
				"default": true,
				"description": "It's a bug"
			},
			{
				"id": 1079605111,
				"node_id": "MDU6TGFiZWwxMDc5NjA1MTEx",
				"url": "https://api.github.com/repos/laurent22/joplin/labels/mobile",
				"name": "mobile",
				"color": "ffc274",
				"default": false,
				"description": "All mobile platforms"
			},
			{
				"id": 1366672041,
				"node_id": "MDU6TGFiZWwxMzY2NjcyMDQx",
				"url": "https://api.github.com/repos/laurent22/joplin/labels/android",
				"name": "android",
				"color": "bfd4f2",
				"default": false,
				"description": ""
			},
			{
				"id": 1367396396,
				"node_id": "MDU6TGFiZWwxMzY3Mzk2Mzk2",
				"url": "https://api.github.com/repos/laurent22/joplin/labels/tags",
				"name": "tags",
				"color": "91ca55",
				"default": false,
				"description": "tag related issue"
			}
		],
		"state": "closed",
		"locked": false,
		"assignees": [],
		"milestone": null,
		"comments": 5,
		"created_at": "2026-03-15T14:40:04Z",
		"updated_at": "2026-03-18T10:43:08Z",
		"closed_at": "2026-03-18T10:12:47Z",
		"assignee": null,
		"author_association": "NONE",
		"active_lock_reason": null,
		"draft": false,
		"pull_request": {
			"url": "https://api.github.com/repos/laurent22/joplin/pulls/14751",
			"html_url": "https://github.com/laurent22/joplin/pull/14751",
			"diff_url": "https://github.com/laurent22/joplin/pull/14751.diff",
			"patch_url": "https://github.com/laurent22/joplin/pull/14751.patch",
			"merged_at": null
		},
		"body": "## Summary\r\n\r\nThis PR fixes an issue on Android where the tag association modal sometimes leaves a blank gap at the bottom after the on-screen keyboard is opened and then dismissed. The issue occurs because the modal layout does not properly resize after the keyboard hides. The changes improve keyboard state tracking and adjust modal behavior to ensure the layout recalculates correctly.\r\n\r\n## Details\r\n\r\n- Added a dependency array to the `useKeyboardState` hook to stabilize keyboard event listeners.\r\n- Updated `KeyboardAvoidingView` behavior for Android devices (API ≥ 35) to use `height` instead of `padding`.\r\n- Adjusted scroll overflow handling in `NoteTagsDialog` to prevent layout issues after keyboard dismissal.\r\n- Ensured the modal container properly resizes when the keyboard visibility changes.\r\n- No changes were made to existing tag logic or modal functionality beyond keyboard handling.\r\n\r\n# Testing\r\n\r\n- Tested on Android Emulator (API 36).\r\n- Opened a note and launched the **Tag association dialog**.\r\n- Focused on the **Search tags** input to trigger the keyboard.\r\n- Dismissed the keyboard and verified the modal layout.\r\n- Confirmed that the blank gap no longer appears.\r\n\r\n### Related Issue\r\n\r\n- Fixes #14722\r\n\r\n## Notes\r\n\r\n- No database, synchronization, or tag management logic was modified.\r\n- The fix only improves modal layout recalculation when the keyboard is dismissed.\r\n\r\nBefore: \r\n<img width=\"492\" height=\"960\" alt=\"image\" src=\"https://github.com/user-attachments/assets/3a7a3b10-54dc-42c5-9456-363e1dcf38f2\" />\r\n\r\nAfter: \r\n<img width=\"478\" height=\"988\" alt=\"image\" src=\"https://github.com/user-attachments/assets/4488327b-b877-4c5d-92cd-4599c3c72c7a\" />\r\n\r\nhttps://github.com/user-attachments/assets/43308300-e86f-4884-8a8a-b6ebae87d1d5\r\n\r\n",
		"closed_by": {
			"login": "laurent22",
			"id": 1285584,
			"node_id": "MDQ6VXNlcjEyODU1ODQ=",
			"avatar_url": "https://avatars.githubusercontent.com/u/1285584?v=4",
			"gravatar_id": "",
			"url": "https://api.github.com/users/laurent22",
			"html_url": "https://github.com/laurent22",
			"followers_url": "https://api.github.com/users/laurent22/followers",
			"following_url": "https://api.github.com/users/laurent22/following{/other_user}",
			"gists_url": "https://api.github.com/users/laurent22/gists{/gist_id}",
			"starred_url": "https://api.github.com/users/laurent22/starred{/owner}{/repo}",
			"subscriptions_url": "https://api.github.com/users/laurent22/subscriptions",
			"organizations_url": "https://api.github.com/users/laurent22/orgs",
			"repos_url": "https://api.github.com/users/laurent22/repos",
			"events_url": "https://api.github.com/users/laurent22/events{/privacy}",
			"received_events_url": "https://api.github.com/users/laurent22/received_events",
			"type": "User",
			"user_view_type": "public",
			"site_admin": false
		},
		"reactions": {
			"url": "https://api.github.com/repos/laurent22/joplin/issues/14751/reactions",
			"total_count": 0,
			"+1": 0,
			"-1": 0,
			"laugh": 0,
			"hooray": 0,
			"confused": 0,
			"heart": 0,
			"rocket": 0,
			"eyes": 0
		},
		"timeline_url": "https://api.github.com/repos/laurent22/joplin/issues/14751/timeline",
		"performed_via_github_app": null,
		"state_reason": null
	},
	"comments": [
		{
			"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4063123689",
			"html_url": "https://github.com/laurent22/joplin/pull/14751#issuecomment-4063123689",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14751",
			"id": 4063123689,
			"node_id": "IC_kwDOBLftOs7yLljp",
			"user": {
				"login": "github-actions[bot]",
				"id": 41898282,
				"node_id": "MDM6Qm90NDE4OTgyODI=",
				"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
				"gravatar_id": "",
				"url": "https://api.github.com/users/github-actions%5Bbot%5D",
				"html_url": "https://github.com/apps/github-actions",
				"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
				"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
				"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
				"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
				"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
				"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
				"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
				"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
				"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
				"type": "Bot",
				"user_view_type": "public",
				"site_admin": false
			},
			"created_at": "2026-03-15T14:40:16Z",
			"updated_at": "2026-03-18T10:43:08Z",
			"body": "****CLA Assistant Lite bot**** All contributors have signed the CLA  ✍️ ✅",
			"author_association": "CONTRIBUTOR",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4063123689/reactions",
				"total_count": 0,
				"+1": 0,
				"-1": 0,
				"laugh": 0,
				"hooray": 0,
				"confused": 0,
				"heart": 0,
				"rocket": 0,
				"eyes": 0
			},
			"performed_via_github_app": {
				"id": 15368,
				"client_id": "Iv1.05c79e9ad1f6bdfa",
				"slug": "github-actions",
				"node_id": "MDM6QXBwMTUzNjg=",
				"owner": {
					"login": "github",
					"id": 9919,
					"node_id": "MDEyOk9yZ2FuaXphdGlvbjk5MTk=",
					"avatar_url": "https://avatars.githubusercontent.com/u/9919?v=4",
					"gravatar_id": "",
					"url": "https://api.github.com/users/github",
					"html_url": "https://github.com/github",
					"followers_url": "https://api.github.com/users/github/followers",
					"following_url": "https://api.github.com/users/github/following{/other_user}",
					"gists_url": "https://api.github.com/users/github/gists{/gist_id}",
					"starred_url": "https://api.github.com/users/github/starred{/owner}{/repo}",
					"subscriptions_url": "https://api.github.com/users/github/subscriptions",
					"organizations_url": "https://api.github.com/users/github/orgs",
					"repos_url": "https://api.github.com/users/github/repos",
					"events_url": "https://api.github.com/users/github/events{/privacy}",
					"received_events_url": "https://api.github.com/users/github/received_events",
					"type": "Organization",
					"user_view_type": "public",
					"site_admin": false
				},
				"name": "GitHub Actions",
				"description": "Automate your workflow from idea to production",
				"external_url": "https://help.github.com/en/actions",
				"html_url": "https://github.com/apps/github-actions",
				"created_at": "2018-07-30T09:30:17Z",
				"updated_at": "2026-05-05T14:51:38Z",
				"permissions": {
					"actions": "write",
					"administration": "read",
					"artifact_metadata": "write",
					"attestations": "write",
					"checks": "write",
					"code_quality": "write",
					"contents": "write",
					"copilot_requests": "write",
					"deployments": "write",
					"discussions": "write",
					"issues": "write",
					"merge_queues": "write",
					"metadata": "read",
					"models": "read",
					"packages": "write",
					"pages": "write",
					"pull_requests": "write",
					"repository_hooks": "write",
					"repository_projects": "write",
					"security_events": "write",
					"statuses": "write",
					"vulnerability_alerts": "read"
				},
				"events": [
					"branch_protection_rule",
					"check_run",
					"check_suite",
					"create",
					"delete",
					"deployment",
					"deployment_status",
					"discussion",
					"discussion_comment",
					"fork",
					"gollum",
					"issues",
					"issue_comment",
					"label",
					"merge_group",
					"milestone",
					"page_build",
					"public",
					"pull_request",
					"pull_request_review",
					"pull_request_review_comment",
					"push",
					"registry_package",
					"release",
					"repository",
					"repository_dispatch",
					"status",
					"watch",
					"workflow_dispatch",
					"workflow_run"
				]
			}
		},
		{
			"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4063124605",
			"html_url": "https://github.com/laurent22/joplin/pull/14751#issuecomment-4063124605",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14751",
			"id": 4063124605,
			"node_id": "IC_kwDOBLftOs7yLlx9",
			"user": {
				"login": "coderabbitai[bot]",
				"id": 136622811,
				"node_id": "BOT_kgDOCCSy2w",
				"avatar_url": "https://avatars.githubusercontent.com/in/347564?v=4",
				"gravatar_id": "",
				"url": "https://api.github.com/users/coderabbitai%5Bbot%5D",
				"html_url": "https://github.com/apps/coderabbitai",
				"followers_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/followers",
				"following_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/following{/other_user}",
				"gists_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/gists{/gist_id}",
				"starred_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/starred{/owner}{/repo}",
				"subscriptions_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/subscriptions",
				"organizations_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/orgs",
				"repos_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/repos",
				"events_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/events{/privacy}",
				"received_events_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/received_events",
				"type": "Bot",
				"user_view_type": "public",
				"site_admin": false
			},
			"created_at": "2026-03-15T14:40:34Z",
			"updated_at": "2026-03-15T15:16:41Z",
			"body": "<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\nNo actionable comments were generated in the recent review. 🎉\n\n<details>\n<summary>ℹ️ Recent review info</summary>\n\n<details>\n<summary>⚙️ Run configuration</summary>\n\n**Configuration used**: Path: .coderabbit.yaml\n\n**Review profile**: CHILL\n\n**Plan**: Pro\n\n**Run ID**: `e2436aa3-d899-446e-9658-346fbcc3da2f`\n\n</details>\n\n<details>\n<summary>📥 Commits</summary>\n\nReviewing files that changed from the base of the PR and between 71eb260d5b421c1f3710ffd07307228f0633f46b and a318c8be09615f1a8484245d7ea9c7ffc515a85c.\n\n</details>\n\n<details>\n<summary>📒 Files selected for processing (1)</summary>\n\n* `packages/app-mobile/components/screens/NoteTagsDialog.tsx`\n\n</details>\n\n</details>\n\n---\n\n\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nPlatform-aware keyboard handling: KeyboardAvoidingView now selects 'height' for newer Android versions; NoteTagsDialog modal scrolling/overflow is conditional by platform and container gains flex styling; keyboard listeners in useKeyboardState are mounted once on component mount.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Keyboard Behaviour Component** <br> `packages/app-mobile/components/KeyboardAvoidingView.tsx`|Import `Platform`; compute `behavior` as `Platform.OS === 'android' && Platform.Version >= 35 ? 'height' : 'padding'`; replace hardcoded `'padding'` and add explanatory comment.|\n|**Tag Dialog UI Component** <br> `packages/app-mobile/components/screens/NoteTagsDialog.tsx`|Import `Platform`; expand exported `Props` to include `noteId: string | null`, `onCloseRequested?: () => void`, and `tags: TagEntity[]`; make `modalPropOverrides.scrollOverflow` platform-conditional (`true` on iOS with `keyboardShouldPersistTaps: true`, `false` on Android); add `flex: 1` to container style.|\n|**Keyboard Hook** <br> `packages/app-mobile/utils/hooks/useKeyboardState.ts`|Add empty dependency array to `useEffect` so keyboard listeners register on mount and cleanup on unmount (effect no longer re-runs each render).|\n\n## Sequence Diagram(s)\n\n```mermaid\nsequenceDiagram\n    participant User\n    participant NoteTagsDialog\n    participant KeyboardAvoidingView\n    participant OS_Keyboard\n\n    User->>NoteTagsDialog: open tag dialog & focus input\n    NoteTagsDialog->>OS_Keyboard: request keyboard\n    OS_Keyboard->>KeyboardAvoidingView: keyboardDidShow\n    KeyboardAvoidingView->>NoteTagsDialog: adjust layout (behavior computed by Platform)\n    NoteTagsDialog->>User: render adjusted modal (scrollOverflow conditional)\n    User->>OS_Keyboard: dismiss keyboard\n    OS_Keyboard->>KeyboardAvoidingView: keyboardDidHide\n    KeyboardAvoidingView->>NoteTagsDialog: restore layout\n```\n\n## Suggested reviewers\n\n- Kaushalendra-Marcus\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 6</summary>\n\n<details>\n<summary>✅ Passed checks (6 passed)</summary>\n\n|               Check name              | Status   | Explanation                                                                                                                                                                                                                                                                                                                 |\n| :-----------------------------------: | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n|              Title check              | ✅ Passed | The title clearly and specifically describes the main fix: addressing keyboard dismissal gap in the tag association modal on Android, directly matching the primary objective of issue `#14722`.                                                                                                                              |\n|           Description check           | ✅ Passed | The description is well-detailed and directly related to the changeset, explaining the Android keyboard issue, the specific fixes applied, testing methodology, and including before/after evidence of the fix.                                                                                                             |\n|          Linked Issues check          | ✅ Passed | The changes directly address issue `#14722`'s requirements: adding dependency array to useKeyboardState stabilises keyboard listeners, KeyboardAvoidingView behaviour adjustment for Android API ≥35 improves layout handling, and NoteTagsDialog scroll overflow adjustment prevents layout issues after keyboard dismissal. |\n|       Out of Scope Changes check      | ✅ Passed | All changes are directly related to fixing the keyboard dismissal gap issue in the tag association modal; no out-of-scope modifications to unrelated functionality, database logic, or tag management were introduced.                                                                                                      |\n|           Docstring Coverage          | ✅ Passed | No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.                                                                                                                                                                                                                  |\n| Pr Description Must Follow Guidelines | ✅ Passed | The pull request description contains all three required sections: problem statement describing the keyboard-induced blank gap issue, solution explaining the four changes made, and test plan with verification details and before/after images.                                                                           |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing Touches</summary>\n\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"07f1e7d6-8a8e-4e23-9900-8731c2c87f58\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Post copyable unit tests in a comment\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n<!-- pr_review_plan_action_start -->\n\n<details>\n<summary>📝 Coding Plan</summary>\n\n- [ ] <!-- {\"checkboxId\": \"6ad8a4e1-0b3a-4ea2-9b5b-d82c1f47d1f2\"} --> Generate coding plan for human review comments\n\n</details>\n\n<!-- pr_review_plan_action_end -->\n\n<!-- tips_start -->\n\n---\n\nThanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=laurent22/joplin&utm_content=14751)! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.\n\n<details>\n<summary>❤️ Share</summary>\n\n- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)\n- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)\n- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)\n- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)\n\n</details>\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- [encoded data, 7916 characters] -->\n\n<!-- internal state end -->",
			"author_association": "CONTRIBUTOR",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4063124605/reactions",
				"total_count": 0,
				"+1": 0,
				"-1": 0,
				"laugh": 0,
				"hooray": 0,
				"confused": 0,
				"heart": 0,
				"rocket": 0,
				"eyes": 0
			},
			"performed_via_github_app": {
				"id": 347564,
				"client_id": "Iv1.6aaafe4fe882736b",
				"slug": "coderabbitai",
				"node_id": "A_kwHOB96YWc4ABU2s",
				"owner": {
					"login": "coderabbitai",
					"id": 132028505,
					"node_id": "O_kgDOB96YWQ",
					"avatar_url": "https://avatars.githubusercontent.com/u/132028505?v=4",
					"gravatar_id": "",
					"url": "https://api.github.com/users/coderabbitai",
					"html_url": "https://github.com/coderabbitai",
					"followers_url": "https://api.github.com/users/coderabbitai/followers",
					"following_url": "https://api.github.com/users/coderabbitai/following{/other_user}",
					"gists_url": "https://api.github.com/users/coderabbitai/gists{/gist_id}",
					"starred_url": "https://api.github.com/users/coderabbitai/starred{/owner}{/repo}",
					"subscriptions_url": "https://api.github.com/users/coderabbitai/subscriptions",
					"organizations_url": "https://api.github.com/users/coderabbitai/orgs",
					"repos_url": "https://api.github.com/users/coderabbitai/repos",
					"events_url": "https://api.github.com/users/coderabbitai/events{/privacy}",
					"received_events_url": "https://api.github.com/users/coderabbitai/received_events",
					"type": "Organization",
					"user_view_type": "public",
					"site_admin": false
				},
				"name": "coderabbitai",
				"description": "# Transforming Code Reviews with AI\r\n\r\n## Features\r\n\r\n**Automated Reviews**: Continuous reviews of the pull requests including incremental commits. \r\n\r\n**Summarization**: Generates high-level summary and a technical walkthrough of the PR changes. \r\n\r\n**Line-by-line review**: Provides line-by-line suggestions committable with one click.\r\n\r\n**Codebase verification**:  Verifies the impact on the overall codebase and identifies missing changes.\r\n\r\n**Insights into your code**:  Ask any questions on your codebase within the pull request \r\n\r\n**Chat about your code** : Chat with the bot around your code. The more you chat, the smarter it gets.\r\n\r\n**Issue Validation**:  Validates the PR against the linked issues and identifies other related issues \r\n\r\n\r\n\r\n",
				"external_url": "https://coderabbit.ai?utm_source=cr_app&utm_medium=github",
				"html_url": "https://github.com/apps/coderabbitai",
				"created_at": "2023-06-14T15:47:27Z",
				"updated_at": "2026-03-14T07:58:44Z",
				"permissions": {
					"actions": "read",
					"checks": "write",
					"contents": "write",
					"discussions": "read",
					"issues": "write",
					"members": "read",
					"metadata": "read",
					"pull_requests": "write",
					"statuses": "write"
				},
				"events": [
					"issues",
					"issue_comment",
					"label",
					"organization",
					"pull_request",
					"pull_request_review",
					"pull_request_review_comment",
					"pull_request_review_thread",
					"release",
					"repository"
				]
			}
		},
		{
			"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4063267604",
			"html_url": "https://github.com/laurent22/joplin/pull/14751#issuecomment-4063267604",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14751",
			"id": 4063267604,
			"node_id": "IC_kwDOBLftOs7yMIsU",
			"user": {
				"login": "Code-Smokker",
				"id": 186810936,
				"node_id": "U_kgDOCyKCOA",
				"avatar_url": "https://avatars.githubusercontent.com/u/186810936?v=4",
				"gravatar_id": "",
				"url": "https://api.github.com/users/Code-Smokker",
				"html_url": "https://github.com/Code-Smokker",
				"followers_url": "https://api.github.com/users/Code-Smokker/followers",
				"following_url": "https://api.github.com/users/Code-Smokker/following{/other_user}",
				"gists_url": "https://api.github.com/users/Code-Smokker/gists{/gist_id}",
				"starred_url": "https://api.github.com/users/Code-Smokker/starred{/owner}{/repo}",
				"subscriptions_url": "https://api.github.com/users/Code-Smokker/subscriptions",
				"organizations_url": "https://api.github.com/users/Code-Smokker/orgs",
				"repos_url": "https://api.github.com/users/Code-Smokker/repos",
				"events_url": "https://api.github.com/users/Code-Smokker/events{/privacy}",
				"received_events_url": "https://api.github.com/users/Code-Smokker/received_events",
				"type": "User",
				"user_view_type": "public",
				"site_admin": false
			},
			"created_at": "2026-03-15T15:51:14Z",
			"updated_at": "2026-03-15T15:51:14Z",
			"body": "I have read the CLA Document and I hereby sign the CLA",
			"author_association": "NONE",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4063267604/reactions",
				"total_count": 0,
				"+1": 0,
				"-1": 0,
				"laugh": 0,
				"hooray": 0,
				"confused": 0,
				"heart": 0,
				"rocket": 0,
				"eyes": 0
			},
			"performed_via_github_app": null
		},
		{
			"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4067327569",
			"html_url": "https://github.com/laurent22/joplin/pull/14751#issuecomment-4067327569",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14751",
			"id": 4067327569,
			"node_id": "IC_kwDOBLftOs7ybn5R",
			"user": {
				"login": "mrjo118",
				"id": 6963004,
				"node_id": "MDQ6VXNlcjY5NjMwMDQ=",
				"avatar_url": "https://avatars.githubusercontent.com/u/6963004?v=4",
				"gravatar_id": "",
				"url": "https://api.github.com/users/mrjo118",
				"html_url": "https://github.com/mrjo118",
				"followers_url": "https://api.github.com/users/mrjo118/followers",
				"following_url": "https://api.github.com/users/mrjo118/following{/other_user}",
				"gists_url": "https://api.github.com/users/mrjo118/gists{/gist_id}",
				"starred_url": "https://api.github.com/users/mrjo118/starred{/owner}{/repo}",
				"subscriptions_url": "https://api.github.com/users/mrjo118/subscriptions",
				"organizations_url": "https://api.github.com/users/mrjo118/orgs",
				"repos_url": "https://api.github.com/users/mrjo118/repos",
				"events_url": "https://api.github.com/users/mrjo118/events{/privacy}",
				"received_events_url": "https://api.github.com/users/mrjo118/received_events",
				"type": "User",
				"user_view_type": "public",
				"site_admin": false
			},
			"created_at": "2026-03-16T12:31:48Z",
			"updated_at": "2026-03-16T12:31:48Z",
			"body": "Please update your PR description to follow the template in the GSoC guideline, including the AI policy and disclosure. Also give the guidelines a full read. There is a couple of files with unncessary blank lines added, and these should be removed",
			"author_association": "COLLABORATOR",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4067327569/reactions",
				"total_count": 0,
				"+1": 0,
				"-1": 0,
				"laugh": 0,
				"hooray": 0,
				"confused": 0,
				"heart": 0,
				"rocket": 0,
				"eyes": 0
			},
			"performed_via_github_app": null
		},
		{
			"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4081290381",
			"html_url": "https://github.com/laurent22/joplin/pull/14751#issuecomment-4081290381",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14751",
			"id": 4081290381,
			"node_id": "IC_kwDOBLftOs7zQ4yN",
			"user": {
				"login": "laurent22",
				"id": 1285584,
				"node_id": "MDQ6VXNlcjEyODU1ODQ=",
				"avatar_url": "https://avatars.githubusercontent.com/u/1285584?v=4",
				"gravatar_id": "",
				"url": "https://api.github.com/users/laurent22",
				"html_url": "https://github.com/laurent22",
				"followers_url": "https://api.github.com/users/laurent22/followers",
				"following_url": "https://api.github.com/users/laurent22/following{/other_user}",
				"gists_url": "https://api.github.com/users/laurent22/gists{/gist_id}",
				"starred_url": "https://api.github.com/users/laurent22/starred{/owner}{/repo}",
				"subscriptions_url": "https://api.github.com/users/laurent22/subscriptions",
				"organizations_url": "https://api.github.com/users/laurent22/orgs",
				"repos_url": "https://api.github.com/users/laurent22/repos",
				"events_url": "https://api.github.com/users/laurent22/events{/privacy}",
				"received_events_url": "https://api.github.com/users/laurent22/received_events",
				"type": "User",
				"user_view_type": "public",
				"site_admin": false
			},
			"created_at": "2026-03-18T10:12:47Z",
			"updated_at": "2026-03-18T10:12:47Z",
			"body": "Thanks for the submission.\r\n\r\nWhile this PR targets an existing issue, the proposed solution is not suitable for the project in its current form. Bringing it up to an acceptable standard would require significant redesign and guidance.\r\n\r\nFor future contributions, please ensure changes are well-aligned with the existing architecture and sufficiently tested.\r\n\r\nPlease make sure you read our guidelines: https://github.com/joplin/gsoc\r\n\r\nAnd our AI policy: https://github.com/joplin/gsoc/blob/master/ai_policy.md",
			"author_association": "OWNER",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4081290381/reactions",
				"total_count": 0,
				"+1": 0,
				"-1": 0,
				"laugh": 0,
				"hooray": 0,
				"confused": 0,
				"heart": 0,
				"rocket": 0,
				"eyes": 0
			},
			"performed_via_github_app": null
		}
	]
}