{ "issue": { "url": "https://api.github.com/repos/laurent22/joplin/issues/14510", "repository_url": "https://api.github.com/repos/laurent22/joplin", "labels_url": "https://api.github.com/repos/laurent22/joplin/issues/14510/labels{/name}", "comments_url": "https://api.github.com/repos/laurent22/joplin/issues/14510/comments", "events_url": "https://api.github.com/repos/laurent22/joplin/issues/14510/events", "html_url": "https://github.com/laurent22/joplin/pull/14510", "id": 4007086104, "node_id": "PR_kwDOBLftOs7HHuxG", "number": 14510, "title": "Desktop: Setup screen to allow choice of editor during setup", "user": { "login": "SinisterDeveloper", "id": 80232412, "node_id": "MDQ6VXNlcjgwMjMyNDEy", "avatar_url": "https://avatars.githubusercontent.com/u/80232412?v=4", "gravatar_id": "", "url": "https://api.github.com/users/SinisterDeveloper", "html_url": "https://github.com/SinisterDeveloper", "followers_url": "https://api.github.com/users/SinisterDeveloper/followers", "following_url": "https://api.github.com/users/SinisterDeveloper/following{/other_user}", "gists_url": "https://api.github.com/users/SinisterDeveloper/gists{/gist_id}", "starred_url": "https://api.github.com/users/SinisterDeveloper/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/SinisterDeveloper/subscriptions", "organizations_url": "https://api.github.com/users/SinisterDeveloper/orgs", "repos_url": "https://api.github.com/users/SinisterDeveloper/repos", "events_url": "https://api.github.com/users/SinisterDeveloper/events{/privacy}", "received_events_url": "https://api.github.com/users/SinisterDeveloper/received_events", "type": "User", "user_view_type": "public", "site_admin": false }, "labels": [ { "id": 519700743, "node_id": "MDU6TGFiZWw1MTk3MDA3NDM=", "url": "https://api.github.com/repos/laurent22/joplin/labels/enhancement", "name": "enhancement", "color": "5ebeff", "default": true, "description": "Feature requests and code enhancements" }, { "id": 1080341216, "node_id": "MDU6TGFiZWwxMDgwMzQxMjE2", "url": "https://api.github.com/repos/laurent22/joplin/labels/desktop", "name": "desktop", "color": "ffc274", "default": false, "description": "All desktop platforms" }, { "id": 1366672371, "node_id": "MDU6TGFiZWwxMzY2NjcyMzcx", "url": "https://api.github.com/repos/laurent22/joplin/labels/editor", "name": "editor", "color": "91ca55", "default": false, "description": "" } ], "state": "closed", "locked": false, "assignees": [], "milestone": null, "comments": 5, "created_at": "2026-03-01T12:36:32Z", "updated_at": "2026-03-01T16:15:14Z", "closed_at": "2026-03-01T13:12:28Z", "assignee": null, "author_association": "NONE", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/laurent22/joplin/pulls/14510", "html_url": "https://github.com/laurent22/joplin/pull/14510", "diff_url": "https://github.com/laurent22/joplin/pull/14510.diff", "patch_url": "https://github.com/laurent22/joplin/pull/14510.patch", "merged_at": null }, "body": "### Resolves high priority issue #9432\r\n\r\n## Summary\r\n\r\nI have added a Dialog to the app setup sequence to allow users to choose the editor of their choice\r\n\r\n## Problem Description\r\n\r\nAs outlined by the issue referenced, the end users need to be given a choice to choose their editor mode (Rich/Markdown) during the app setup sequence\r\n\r\n## Solution Overview\r\n\r\n- The RTE editor is the default selected option, as requested in the issue\r\n- The dialog is placed at the center of the screen when user opens the app for the first time\r\n\r\nThe Issue referenced asks for screenshot of editor above the choice title (RTE/Markdown), however I was not sure what Markdown aspects should be shown in the screenshot. And I felt that the contributors would have a better idea and judgement to decide what to use\r\n\r\nSo for now, I added the fa-icons representing each above the text, instead of the screenshot\r\n\r\nI will modify it to use the screenshot once I know what to add, or if anything else is desired\r\n\r\n## Changes Involved\r\n\r\n- A new setting `editor.modeSelectorShown` added to represent whether the editor choice was shown to the user during the setup\r\n\r\n## Screenshots\r\n\r\n\"image\"\r\n\r\n## Test Plan\r\n\r\nUnit test added (`desktop/gui/editorModeSelectorStartup.test.ts`) to test the dialog display behavior\r\n\r\n## Environment Details\r\n\r\n**Platform**: macOS\r\n**Platform Version**: 26.3\r\n**Build Version**: 25D125\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/14510/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/14510/timeline", "performed_via_github_app": null, "state_reason": null }, "comments": [ { "url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3979882547", "html_url": "https://github.com/laurent22/joplin/pull/14510#issuecomment-3979882547", "issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14510", "id": 3979882547, "node_id": "IC_kwDOBLftOs7tODAz", "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-01T12:37:01Z", "updated_at": "2026-03-01T12:50:49Z", "body": "\n\n\n
\n📝 Walkthrough\n\n## Walkthrough\n\nThis pull request introduces a new editor mode selector dialog feature for the Joplin desktop application. It adds UI components for choosing between Rich Text and Markdown editor modes, integrates the dialog into the application's state management and dialog registry, includes startup logic to conditionally display the selector on first launch, and adds a new persistent setting to track selector visibility.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Configuration files**
`.eslintignore`, `.gitignore`|Added editor mode selector component and startup files to ignore lists.|\n|**Editor mode selector components**
`packages/app-desktop/gui/EditorModeSelector.tsx`, `packages/app-desktop/gui/EditorModeSelectorDialog.tsx`|Created new React components: a styled radiogroup UI component for mode selection and a dialog wrapper component with helper functions for committing selections and dismissing the dialog.|\n|**Startup and initialization**
`packages/app-desktop/gui/editorModeSelectorStartup.ts`, `packages/app-desktop/gui/editorModeSelectorStartup.test.ts`|Added startup logic to conditionally open the editor mode selector dialog based on a persistent setting, with unit tests validating the conditional display behaviour.|\n|**Integration with app state and dialogs**
`packages/app-desktop/app.reducer.ts`, `packages/app-desktop/gui/Root.tsx`, `packages/app-desktop/gui/WindowCommandsAndDialogs/utils/appDialogs.tsx`|Registered new dialog name in enum, scheduled startup check in component lifecycle, and registered dialog renderer in the application's dialog registry.|\n|**Styling**
`packages/app-desktop/gui/styles/editor-mode-selector-dialog.scss`, `packages/app-desktop/gui/styles/index.scss`|Added modal dialog layout styling with responsive content sizing and imported new stylesheet.|\n|**Settings metadata**
`packages/lib/models/settings/builtInMetadata.ts`|Added new boolean setting `editor.modeSelectorShown` to track whether the selector has been displayed to the user.|\n\n## Sequence Diagram(s)\n\n```mermaid\nsequenceDiagram\n participant Root as Application Root\n participant Startup as editorModeSelectorStartup\n participant Settings as Settings\n participant Dispatch as Action Dispatcher\n participant Dialog as EditorModeSelector Dialog\n participant User as User\n participant Editor as Editor State\n\n Root->>Startup: openEditorModeSelector(dispatch)\n Startup->>Settings: Check editor.modeSelectorShown\n alt Setting not shown yet\n Startup->>Dispatch: dispatch(DIALOG_OPEN, 'editorModeSelector')\n Dispatch->>Dialog: Render EditorModeSelectorDialog\n Dialog->>User: Display mode selection UI\n User->>Dialog: Select mode (markdown/richText)\n Dialog->>Dispatch: commitEditorModeSelection(dispatch, mode)\n Dispatch->>Editor: Update editor.view setting\n Dispatch->>Settings: Set editor.modeSelectorShown = true\n Dialog->>Dialog: Close dialog\n else Setting already shown\n Startup-->>Startup: Return without action\n end\n```\n\n## Possibly related PRs\n\n- PR laurent22/joplin#14403: Both PRs modify `packages/lib/models/settings/builtInMetadata.ts`—the main PR adds the new `editor.modeSelectorShown` setting while the related PR reorganises existing editor-scoped settings.\n\n## Suggested labels\n\n`enhancement`, `desktop`, `editor`\n\n
\n\n\n\n\n\n\n
\n🚥 Pre-merge checks | ✅ 2 | ❌ 2\n\n### ❌ Failed checks (1 error, 1 warning)\n\n| Check name | Status | Explanation | Resolution |\n| :-----------------------------------: | :--------- | :-------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Pr Description Must Follow Guidelines | ❌ Error | The PR description lacks a dedicated Test Plan section mandated by GSOC 2024 and CONTRIBUTING guidelines. | Add three required sections: Problem Description, Solution overview, and Test Plan documenting tests added, manual testing steps, and editor.modeSelectorShown verification. |\n| Docstring Coverage | ⚠️ Warning | Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. | Write docstrings for the functions missing them to satisfy the coverage threshold. |\n\n
\n✅ Passed checks (2 passed)\n\n| Check name | Status | Explanation |\n| :---------------: | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Title check | ✅ Passed | The title accurately describes the main change: adding a setup screen to allow users to choose their editor during application setup, which is clearly reflected throughout the changeset. |\n| Description check | ✅ Passed | The pull request description clearly relates to the changeset, describing an editor mode selector dialog added during app setup to allow users to choose between Rich Text and Markdown editors. |\n\n
\n\n✏️ Tip: You can configure your own custom pre-merge checks in the settings.\n\n
\n\n\n\n\n\n
\n✨ Finishing Touches\n\n
\n🧪 Generate unit tests (beta)\n\n- [ ] Create PR with unit tests\n- [ ] Post copyable unit tests in a comment\n\n
\n\n
\n\n\n\n\n\n---\n\nThanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=laurent22/joplin&utm_content=14510)! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.\n\n
\n❤️ Share\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
\n\nComment `@coderabbitai help` to get the list of available commands and usage tips.\n\n\n\n\n\n\n\n\n", "author_association": "CONTRIBUTOR", "reactions": { "url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3979882547/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/3979893237", "html_url": "https://github.com/laurent22/joplin/pull/14510#issuecomment-3979893237", "issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14510", "id": 3979893237, "node_id": "IC_kwDOBLftOs7tOFn1", "user": { "login": "SinisterDeveloper", "id": 80232412, "node_id": "MDQ6VXNlcjgwMjMyNDEy", "avatar_url": "https://avatars.githubusercontent.com/u/80232412?v=4", "gravatar_id": "", "url": "https://api.github.com/users/SinisterDeveloper", "html_url": "https://github.com/SinisterDeveloper", "followers_url": "https://api.github.com/users/SinisterDeveloper/followers", "following_url": "https://api.github.com/users/SinisterDeveloper/following{/other_user}", "gists_url": "https://api.github.com/users/SinisterDeveloper/gists{/gist_id}", "starred_url": "https://api.github.com/users/SinisterDeveloper/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/SinisterDeveloper/subscriptions", "organizations_url": "https://api.github.com/users/SinisterDeveloper/orgs", "repos_url": "https://api.github.com/users/SinisterDeveloper/repos", "events_url": "https://api.github.com/users/SinisterDeveloper/events{/privacy}", "received_events_url": "https://api.github.com/users/SinisterDeveloper/received_events", "type": "User", "user_view_type": "public", "site_admin": false }, "created_at": "2026-03-01T12:43:33Z", "updated_at": "2026-03-01T12:43:33Z", "body": "# AI Assistance Disclosure \r\n\r\nI have used AI assistance for the following:\r\n\r\n- Understanding and navigating the codebase\r\n- Writing the tests involved\r\n- Refactoring the UI element (Dialog)'s styling to match the pattern implemented by the rest of the codebase\r\n- Refactoring some implementation code which did not align with codebase practices\r\n- Code the `scss` styling files in `gui/styles`\r\n- Helping me modularize the code to fit codebase patterns", "author_association": "NONE", "reactions": { "url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3979893237/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/3979933935", "html_url": "https://github.com/laurent22/joplin/pull/14510#issuecomment-3979933935", "issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14510", "id": 3979933935, "node_id": "IC_kwDOBLftOs7tOPjv", "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-01T13:12:28Z", "updated_at": "2026-03-01T13:12:28Z", "body": "Thanks for looking into this but I think it needs to be part of a wider feature: we'd want some kind of screen on startup where the user select various options, indeed like the editor, but also sync target, encryption preferences, etc. There are various issues about this and they probably should be consolidated into one.\r\n\r\nAlso there are UI consideration - what should we display exactly in the dialog, should there be any explanation, should we include images or screenshots for additional clarity, etc.\r\n\r\nBecause of this I would prefer to close this PR for now until all this as been specified correctly.", "author_association": "OWNER", "reactions": { "url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3979933935/reactions", "total_count": 1, "+1": 1, "-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/3980129368", "html_url": "https://github.com/laurent22/joplin/pull/14510#issuecomment-3980129368", "issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14510", "id": 3980129368, "node_id": "IC_kwDOBLftOs7tO_RY", "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-01T14:46:33Z", "updated_at": "2026-03-01T16:15:14Z", "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/3980129368/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/3980292321", "html_url": "https://github.com/laurent22/joplin/pull/14510#issuecomment-3980292321", "issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14510", "id": 3980292321, "node_id": "IC_kwDOBLftOs7tPnDh", "user": { "login": "SinisterDeveloper", "id": 80232412, "node_id": "MDQ6VXNlcjgwMjMyNDEy", "avatar_url": "https://avatars.githubusercontent.com/u/80232412?v=4", "gravatar_id": "", "url": "https://api.github.com/users/SinisterDeveloper", "html_url": "https://github.com/SinisterDeveloper", "followers_url": "https://api.github.com/users/SinisterDeveloper/followers", "following_url": "https://api.github.com/users/SinisterDeveloper/following{/other_user}", "gists_url": "https://api.github.com/users/SinisterDeveloper/gists{/gist_id}", "starred_url": "https://api.github.com/users/SinisterDeveloper/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/SinisterDeveloper/subscriptions", "organizations_url": "https://api.github.com/users/SinisterDeveloper/orgs", "repos_url": "https://api.github.com/users/SinisterDeveloper/repos", "events_url": "https://api.github.com/users/SinisterDeveloper/events{/privacy}", "received_events_url": "https://api.github.com/users/SinisterDeveloper/received_events", "type": "User", "user_view_type": "public", "site_admin": false }, "created_at": "2026-03-01T15:27:34Z", "updated_at": "2026-03-01T15:27:34Z", "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/3980292321/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 } ] }