{
	"issue": {
		"url": "https://api.github.com/repos/laurent22/joplin/issues/14823",
		"repository_url": "https://api.github.com/repos/laurent22/joplin",
		"labels_url": "https://api.github.com/repos/laurent22/joplin/issues/14823/labels{/name}",
		"comments_url": "https://api.github.com/repos/laurent22/joplin/issues/14823/comments",
		"events_url": "https://api.github.com/repos/laurent22/joplin/issues/14823/events",
		"html_url": "https://github.com/laurent22/joplin/pull/14823",
		"id": 4097743321,
		"node_id": "PR_kwDOBLftOs7LqxnH",
		"number": 14823,
		"title": "All: Fixes #14821: Correct disabled master key filtering in showMissingMasterKeyMessage",
		"user": {
			"login": "Prasad8830",
			"id": 144712280,
			"node_id": "U_kgDOCKAiWA",
			"avatar_url": "https://avatars.githubusercontent.com/u/144712280?v=4",
			"gravatar_id": "",
			"url": "https://api.github.com/users/Prasad8830",
			"html_url": "https://github.com/Prasad8830",
			"followers_url": "https://api.github.com/users/Prasad8830/followers",
			"following_url": "https://api.github.com/users/Prasad8830/following{/other_user}",
			"gists_url": "https://api.github.com/users/Prasad8830/gists{/gist_id}",
			"starred_url": "https://api.github.com/users/Prasad8830/starred{/owner}{/repo}",
			"subscriptions_url": "https://api.github.com/users/Prasad8830/subscriptions",
			"organizations_url": "https://api.github.com/users/Prasad8830/orgs",
			"repos_url": "https://api.github.com/users/Prasad8830/repos",
			"events_url": "https://api.github.com/users/Prasad8830/events{/privacy}",
			"received_events_url": "https://api.github.com/users/Prasad8830/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": 1366675015,
				"node_id": "MDU6TGFiZWwxMzY2Njc1MDE1",
				"url": "https://api.github.com/repos/laurent22/joplin/labels/sync",
				"name": "sync",
				"color": "91ca55",
				"default": false,
				"description": "sync related issue"
			}
		],
		"state": "closed",
		"locked": false,
		"assignees": [],
		"milestone": null,
		"comments": 6,
		"created_at": "2026-03-18T21:12:15Z",
		"updated_at": "2026-03-20T00:44:16Z",
		"closed_at": "2026-03-20T00:44:03Z",
		"assignee": null,
		"author_association": "NONE",
		"active_lock_reason": null,
		"draft": false,
		"pull_request": {
			"url": "https://api.github.com/repos/laurent22/joplin/pulls/14823",
			"html_url": "https://github.com/laurent22/joplin/pull/14823",
			"diff_url": "https://github.com/laurent22/joplin/pull/14823.diff",
			"patch_url": "https://github.com/laurent22/joplin/pull/14823.patch",
			"merged_at": null
		},
		"body": "## Summary\r\n\r\nThis pull request fixes an issue in `showMissingMasterKeyMessage()` in `packages/lib/services/e2ee/utils.ts`.\r\n\r\nThe function filters out disabled master keys from `notLoadedMasterKeys` before deciding whether to show the missing master key warning. It used `Array.pop()` inside a reverse-index-based loop. Since `pop()` always removes the last element of the array, it could remove the wrong key when the disabled key was not at the end of the list.\r\n\r\nThis change replaces that logic with `splice(i, 1)` so that the disabled key at the current index is removed correctly.\r\n\r\n## Problem\r\n\r\nCurrent code:\r\n\r\n    for (let i = notLoadedMasterKeys.length - 1; i >= 0; i--) {\r\n        const mk = syncInfo.masterKeys.find(mk => mk.id === notLoadedMasterKeys[i]);\r\n\r\n        if (!mk) continue;\r\n        if (!masterKeyEnabled(mk)) notLoadedMasterKeys.pop();\r\n    }\r\n\r\nIn this loop, the intent is to remove the disabled key currently being inspected. However, `.pop()` removes the last array element, not the element at index `i`.\r\n\r\nExample:\r\n\r\n- `notLoadedMasterKeys = [key1_disabled, key2_disabled, key3_enabled]`\r\n- When the loop reaches `key2_disabled`, `.pop()` removes `key3_enabled`\r\n- This leaves incorrect key IDs in the array during warning evaluation\r\n\r\n## What this PR changes\r\n\r\n- Replaces `notLoadedMasterKeys.pop()` with `notLoadedMasterKeys.splice(i, 1)` in `showMissingMasterKeyMessage()`\r\n- Adds a regression test covering the case where disabled keys appear before an enabled key in `notLoadedMasterKeys`\r\n\r\n## Why this fix is correct\r\n\r\nThe loop already iterates in reverse, which is a safe pattern when removing elements by index during iteration.\r\n\r\nUsing `splice(i, 1)` removes exactly the disabled key currently being processed, which matches the intended behaviour of the function.\r\n\r\n## Testing\r\n\r\n### Automated tests\r\n\r\nAdded a regression test in:\r\n\r\n`packages/lib/services/e2ee/utils.test.ts`\r\n\r\nThe test covers a case where:\r\n\r\n- Multiple keys are present\r\n- Disabled keys appear before an enabled key\r\n- Only disabled keys should be removed from the warning check\r\n\r\n### Manual verification\r\n\r\n1. Create multiple master keys.\r\n2. Mark some keys as disabled and leave at least one enabled.\r\n3. Pass those key IDs through the missing master key warning path.\r\n4. Confirm that only disabled keys are filtered out.\r\n5. Confirm that the warning still appears when an enabled unloaded key remains.\r\n6. Confirm that no warning appears when only disabled unloaded keys remain.\r\n\r\n## Impact\r\n\r\nThis change is limited to the filtering logic in a single E2EE utility function and does not introduce any public API changes.\r\n\r\n## Related issue\r\n\r\nFixes #14821",
		"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/14823/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/14823/timeline",
		"performed_via_github_app": null,
		"state_reason": null
	},
	"comments": [
		{
			"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4085610810",
			"html_url": "https://github.com/laurent22/joplin/pull/14823#issuecomment-4085610810",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14823",
			"id": 4085610810,
			"node_id": "IC_kwDOBLftOs7zhXk6",
			"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-18T21:12:44Z",
			"updated_at": "2026-03-19T17:02:39Z",
			"body": "<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nThis pull request fixes a bug in the E2EE master key filtering logic where incorrect array elements were being removed during backwards iteration, adds a regression test to prevent recurrence, introduces a new React hook for handling item event listeners, improves error resilience in the website build process, and includes auto-generated TypeScript build metadata.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**E2EE Master Key Filtering Bug Fix** <br> `packages/lib/services/e2ee/utils.ts`, `packages/lib/services/e2ee/utils.test.ts`|Fixed incorrect element removal in `showMissingMasterKeyMessage` by replacing `.pop()` with `.splice(i, 1)` to correctly remove disabled master keys during backwards iteration. Added regression test validating correct filtering behaviour with multiple disabled/enabled entries. Also removed duplicate early-return check in `migrateMasterPassword`.|\n|**Event Handler Hook** <br> `packages/app-desktop/gui/NoteListItem/utils/useItemEventHandlers.js`|New React hook that attaches change and click event listeners to input elements and buttons within a note list item, with proper cleanup on unmount to prevent memory leaks.|\n|**Build Tooling & Metadata** <br> `packages/tools/website/build.ts`, `packages/lib/tsconfig.tsbuildinfo`|Enhanced sponsor-loading error handling in website build to gracefully fall back to empty sponsor data when GitHub OAuth tokens are missing, with user-facing warnings. Added TypeScript build metadata artefact.|\n\n## Possibly related PRs\n\n- **#14651**: Refactors event wiring for note list items, potentially intersecting with the newly introduced `useItemEventHandlers` hook implementation.\n\n## Suggested labels\n\n`bug`, `sync`\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|           Description check           | ✅ Passed | The description is comprehensive and directly related to the changeset, explaining the bug, the fix, testing approach, and expected impact with clear examples.                                                                                                                        |\n|          Linked Issues check          | ✅ Passed | The PR fully addresses linked issue `#14821`: replaces pop() with splice(i, 1) in showMissingMasterKeyMessage and adds regression test covering the exact scenario described in the issue.                                                                                               |\n|       Out of Scope Changes check      | ✅ Passed | All changes are in-scope: the core fix to utils.ts, regression test in utils.test.ts, build artifacts (tsconfig.tsbuildinfo), and error-handling improvement in website build.ts support the primary objective.                                                                        |\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 PR description includes all three required sections: problem identification (disabled master keys removed incorrectly due to Array.pop() misuse), solution explanation (replacing pop() with splice(i, 1)), and test plan (regression test for disabled keys before enabled ones). |\n|              Title check              | ✅ Passed | The title accurately describes the main fix: correcting disabled master key filtering logic in showMissingMasterKeyMessage, which is the primary focus across the code changes.                                                                                                        |\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\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=14823)! 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, 7184 characters] -->\n\n<!-- internal state end -->",
			"author_association": "CONTRIBUTOR",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4085610810/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/4085646185",
			"html_url": "https://github.com/laurent22/joplin/pull/14823#issuecomment-4085646185",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14823",
			"id": 4085646185,
			"node_id": "IC_kwDOBLftOs7zhgNp",
			"user": {
				"login": "personalizedrefrigerator",
				"id": 46334387,
				"node_id": "MDQ6VXNlcjQ2MzM0Mzg3",
				"avatar_url": "https://avatars.githubusercontent.com/u/46334387?v=4",
				"gravatar_id": "",
				"url": "https://api.github.com/users/personalizedrefrigerator",
				"html_url": "https://github.com/personalizedrefrigerator",
				"followers_url": "https://api.github.com/users/personalizedrefrigerator/followers",
				"following_url": "https://api.github.com/users/personalizedrefrigerator/following{/other_user}",
				"gists_url": "https://api.github.com/users/personalizedrefrigerator/gists{/gist_id}",
				"starred_url": "https://api.github.com/users/personalizedrefrigerator/starred{/owner}{/repo}",
				"subscriptions_url": "https://api.github.com/users/personalizedrefrigerator/subscriptions",
				"organizations_url": "https://api.github.com/users/personalizedrefrigerator/orgs",
				"repos_url": "https://api.github.com/users/personalizedrefrigerator/repos",
				"events_url": "https://api.github.com/users/personalizedrefrigerator/events{/privacy}",
				"received_events_url": "https://api.github.com/users/personalizedrefrigerator/received_events",
				"type": "User",
				"user_view_type": "public",
				"site_admin": false
			},
			"created_at": "2026-03-18T21:20:06Z",
			"updated_at": "2026-03-18T21:20:06Z",
			"body": "Thank you for the pull request!\r\n\r\nThere are a few file changes that aren't related to fixing https://github.com/laurent22/joplin/issues/14821 (e.g. adding `useItemEventHandlers.js`). Please review the diff in the [files changed](https://github.com/laurent22/joplin/pull/14823/changes) tab and revert unnecessary changes.",
			"author_association": "COLLABORATOR",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4085646185/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/4085650249",
			"html_url": "https://github.com/laurent22/joplin/pull/14823#issuecomment-4085650249",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14823",
			"id": 4085650249,
			"node_id": "IC_kwDOBLftOs7zhhNJ",
			"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-18T21:20:57Z",
			"updated_at": "2026-03-20T00:44:16Z",
			"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/4085650249/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/4085666506",
			"html_url": "https://github.com/laurent22/joplin/pull/14823#issuecomment-4085666506",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14823",
			"id": 4085666506,
			"node_id": "IC_kwDOBLftOs7zhlLK",
			"user": {
				"login": "Prasad8830",
				"id": 144712280,
				"node_id": "U_kgDOCKAiWA",
				"avatar_url": "https://avatars.githubusercontent.com/u/144712280?v=4",
				"gravatar_id": "",
				"url": "https://api.github.com/users/Prasad8830",
				"html_url": "https://github.com/Prasad8830",
				"followers_url": "https://api.github.com/users/Prasad8830/followers",
				"following_url": "https://api.github.com/users/Prasad8830/following{/other_user}",
				"gists_url": "https://api.github.com/users/Prasad8830/gists{/gist_id}",
				"starred_url": "https://api.github.com/users/Prasad8830/starred{/owner}{/repo}",
				"subscriptions_url": "https://api.github.com/users/Prasad8830/subscriptions",
				"organizations_url": "https://api.github.com/users/Prasad8830/orgs",
				"repos_url": "https://api.github.com/users/Prasad8830/repos",
				"events_url": "https://api.github.com/users/Prasad8830/events{/privacy}",
				"received_events_url": "https://api.github.com/users/Prasad8830/received_events",
				"type": "User",
				"user_view_type": "public",
				"site_admin": false
			},
			"created_at": "2026-03-18T21:24:29Z",
			"updated_at": "2026-03-18T21:24:29Z",
			"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/4085666506/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/4085675713",
			"html_url": "https://github.com/laurent22/joplin/pull/14823#issuecomment-4085675713",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14823",
			"id": 4085675713,
			"node_id": "IC_kwDOBLftOs7zhnbB",
			"user": {
				"login": "Prasad8830",
				"id": 144712280,
				"node_id": "U_kgDOCKAiWA",
				"avatar_url": "https://avatars.githubusercontent.com/u/144712280?v=4",
				"gravatar_id": "",
				"url": "https://api.github.com/users/Prasad8830",
				"html_url": "https://github.com/Prasad8830",
				"followers_url": "https://api.github.com/users/Prasad8830/followers",
				"following_url": "https://api.github.com/users/Prasad8830/following{/other_user}",
				"gists_url": "https://api.github.com/users/Prasad8830/gists{/gist_id}",
				"starred_url": "https://api.github.com/users/Prasad8830/starred{/owner}{/repo}",
				"subscriptions_url": "https://api.github.com/users/Prasad8830/subscriptions",
				"organizations_url": "https://api.github.com/users/Prasad8830/orgs",
				"repos_url": "https://api.github.com/users/Prasad8830/repos",
				"events_url": "https://api.github.com/users/Prasad8830/events{/privacy}",
				"received_events_url": "https://api.github.com/users/Prasad8830/received_events",
				"type": "User",
				"user_view_type": "public",
				"site_admin": false
			},
			"created_at": "2026-03-18T21:26:34Z",
			"updated_at": "2026-03-18T21:26:34Z",
			"body": "I have read the CLA Document and I hereby sign the CLA\r\n\r\nrecheck",
			"author_association": "NONE",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4085675713/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/4094634272",
			"html_url": "https://github.com/laurent22/joplin/pull/14823#issuecomment-4094634272",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14823",
			"id": 4094634272,
			"node_id": "IC_kwDOBLftOs70Dykg",
			"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-20T00:44:03Z",
			"updated_at": "2026-03-20T00:44:04Z",
			"body": "Thanks for the contribution. We’re closing this PR because it does not follow the project’s contribution policy: it is not based on a triaged, accepted issue and does not address a concrete problem agreed upon by maintainers.\r\n\r\nWhile the change itself is not necessarily incorrect, reviewing and maintaining such PRs takes time away from higher-priority work.\r\n\r\nPlease see our [Contribution Scope Policy](https://joplinapp.org/help/dev/#contribution-scope) for details on what kinds of contributions we accept.\r\n\r\nIf you intend to participate in GSoC, please make sure you read our [GSoC guidelines](https://github.com/joplin/gsoc).\r\n\r\nAnd [please pay attention to our AI policy](https://github.com/joplin/gsoc/blob/master/ai_policy.md).\r\n",
			"author_association": "OWNER",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4094634272/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
		}
	]
}