{
	"issue": {
		"url": "https://api.github.com/repos/laurent22/joplin/issues/14397",
		"repository_url": "https://api.github.com/repos/laurent22/joplin",
		"labels_url": "https://api.github.com/repos/laurent22/joplin/issues/14397/labels{/name}",
		"comments_url": "https://api.github.com/repos/laurent22/joplin/issues/14397/comments",
		"events_url": "https://api.github.com/repos/laurent22/joplin/issues/14397/events",
		"html_url": "https://github.com/laurent22/joplin/pull/14397",
		"id": 3967386023,
		"node_id": "PR_kwDOBLftOs7FGvOU",
		"number": 14397,
		"title": "Mobile: Fixes #14187: Fix table style/border/class attributes being lost in RTE",
		"user": {
			"login": "SohamJuneja",
			"id": 138424822,
			"node_id": "U_kgDOCEAx9g",
			"avatar_url": "https://avatars.githubusercontent.com/u/138424822?v=4",
			"gravatar_id": "",
			"url": "https://api.github.com/users/SohamJuneja",
			"html_url": "https://github.com/SohamJuneja",
			"followers_url": "https://api.github.com/users/SohamJuneja/followers",
			"following_url": "https://api.github.com/users/SohamJuneja/following{/other_user}",
			"gists_url": "https://api.github.com/users/SohamJuneja/gists{/gist_id}",
			"starred_url": "https://api.github.com/users/SohamJuneja/starred{/owner}{/repo}",
			"subscriptions_url": "https://api.github.com/users/SohamJuneja/subscriptions",
			"organizations_url": "https://api.github.com/users/SohamJuneja/orgs",
			"repos_url": "https://api.github.com/users/SohamJuneja/repos",
			"events_url": "https://api.github.com/users/SohamJuneja/events{/privacy}",
			"received_events_url": "https://api.github.com/users/SohamJuneja/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": 1366672371,
				"node_id": "MDU6TGFiZWwxMzY2NjcyMzcx",
				"url": "https://api.github.com/repos/laurent22/joplin/labels/editor",
				"name": "editor",
				"color": "91ca55",
				"default": false,
				"description": ""
			},
			{
				"id": 1802916084,
				"node_id": "MDU6TGFiZWwxODAyOTE2MDg0",
				"url": "https://api.github.com/repos/laurent22/joplin/labels/renderer",
				"name": "renderer",
				"color": "91ca55",
				"default": false,
				"description": "About the note renderer"
			},
			{
				"id": 2153491154,
				"node_id": "MDU6TGFiZWwyMTUzNDkxMTU0",
				"url": "https://api.github.com/repos/laurent22/joplin/labels/import",
				"name": "import",
				"color": "91ca55",
				"default": false,
				"description": "Related to importing files such as ENEX, JEX, etc."
			},
			{
				"id": 2431153506,
				"node_id": "MDU6TGFiZWwyNDMxMTUzNTA2",
				"url": "https://api.github.com/repos/laurent22/joplin/labels/plugins",
				"name": "plugins",
				"color": "91ca55",
				"default": false,
				"description": "Anything related to Joplin's plugin system"
			},
			{
				"id": 5991245949,
				"node_id": "LA_kwDOBLftOs8AAAABZRsofQ",
				"url": "https://api.github.com/repos/laurent22/joplin/labels/markdown-editor",
				"name": "markdown-editor",
				"color": "91ca55",
				"default": false,
				"description": "About the Markdown editor"
			}
		],
		"state": "closed",
		"locked": false,
		"assignees": [],
		"milestone": null,
		"comments": 11,
		"created_at": "2026-02-20T08:57:09Z",
		"updated_at": "2026-03-17T12:54:41Z",
		"closed_at": "2026-03-01T12:25:03Z",
		"assignee": null,
		"author_association": "NONE",
		"active_lock_reason": null,
		"draft": false,
		"pull_request": {
			"url": "https://api.github.com/repos/laurent22/joplin/pulls/14397",
			"html_url": "https://github.com/laurent22/joplin/pull/14397",
			"diff_url": "https://github.com/laurent22/joplin/pull/14397.diff",
			"patch_url": "https://github.com/laurent22/joplin/pull/14397.patch",
			"merged_at": null
		},
		"body": "## AI Assistance Disclosure\r\n\r\nUsed AI as a reference while navigating unfamiliar parts of the codebase. All code changes were written, reviewed, and tested by me.\r\n\r\n## What was happening\r\n\r\nWhen you created a table in the desktop RTE with a background colour (or any inline `style`) and then opened the same note on mobile and made any edit, the style was wiped on save.\r\n\r\nThere were two separate places stripping the attributes:\r\n\r\n1. **ProseMirror schema** (`packages/editor/ProseMirror/schema.ts`) — the `table` node override had no `getAttrs` in `parseDOM`, so `style`, `border` and `class` were silently discarded when the HTML was loaded into the editor. \r\n\r\n2. **Turndown GFM plugin** (`packages/turndown-plugin-gfm/src/tables.js`) — `tableShouldBeHtml()` only kept tables as HTML when they contained complex block elements (lists, headings, code, etc.).\r\n\r\n## What this PR changes\r\n\r\n- `schema.ts`: added `style`, `border` and `class` to the `table` node attrs, wired up `getAttrs` in `parseDOM` to capture them, and updated `toDOM` to re-emit them.\r\n\r\n- `tables.js`: added an early `return true` in `tableShouldBeHtml()` when the table node has a `style` attribute, so styled tables are always kept as HTML.\r\n\r\n- `schema.test.ts`: new regression test that creates an editor with a styled table and asserts the three attributes survive a parse → serialize round-trip.\r\n\r\nFIX:\r\nMarkdown: <div class=\"joplin-table-wrapper\"><table border=\"1\" class=\"jop-noMdConv\" style=\"border-collapse: collapse; background-color: rgb(248, 202, 198);\"><tbody><tr><td><p>Test Task</p></td></tr></tbody></table></div>\r\n\r\nRTE: \r\n<img width=\"1356\" height=\"342\" alt=\"image\" src=\"https://github.com/user-attachments/assets/0ccebf35-bac3-40bf-94af-da6b6504ced7\" />\r\n\r\nMarkdown: <div class=\"joplin-table-wrapper\"><table border=\"1\" class=\"jop-noMdConv\" style=\"border-collapse: collapse; background-color: rgb(248, 202, 198);\"><tbody><tr><td><p>Test Task Soham</p></td></tr></tbody></table></div>\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/14397/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/14397/timeline",
		"performed_via_github_app": null,
		"state_reason": null
	},
	"comments": [
		{
			"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3932509375",
			"html_url": "https://github.com/laurent22/joplin/pull/14397#issuecomment-3932509375",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14397",
			"id": 3932509375,
			"node_id": "IC_kwDOBLftOs7qZVS_",
			"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-02-20T08:57:20Z",
			"updated_at": "2026-03-01T14:44:01Z",
			"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/3932509375/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/3932510434",
			"html_url": "https://github.com/laurent22/joplin/pull/14397#issuecomment-3932510434",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14397",
			"id": 3932510434,
			"node_id": "IC_kwDOBLftOs7qZVji",
			"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-02-20T08:57:37Z",
			"updated_at": "2026-02-23T17:01:46Z",
			"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**Configuration used**: Path: .coderabbit.yaml\n\n**Review profile**: CHILL\n\n**Plan**: Pro\n\n<details>\n<summary>📥 Commits</summary>\n\nReviewing files that changed from the base of the PR and between b69dcdc9302376811bcca91fb4be021abf606a15 and 75eee964386b12eeb99c77eb6f39d2d67ce3604f.\n\n</details>\n\n<details>\n<summary>📒 Files selected for processing (2)</summary>\n\n* `.eslintignore`\n* `.gitignore`\n\n</details>\n\n<details>\n<summary>🚧 Files skipped from review as they are similar to previous changes (2)</summary>\n\n* .gitignore\n* .eslintignore\n\n</details>\n\n</details>\n\n---\n\n\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nAdds per-table attributes (style, border, class) to the ProseMirror table node with DOM parse/serialize support, includes a test verifying attribute preservation, adds ignore entries for the test file, and updates turndown logic to keep styled tables as HTML when configured.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Configuration** <br> `/.eslintignore`, `/.gitignore`|Added ignore entries to exclude `packages/editor/ProseMirror/schema.test.js` from linting/version control.|\n|**ProseMirror Schema** <br> `packages/editor/ProseMirror/schema.ts`, `packages/editor/ProseMirror/schema.test.ts`|Table node extended to accept per-table attributes (`style`, `border`, `class`); parseDOM/getAttrs reads these from DOM and toDOM emits only non-empty attrs. New test verifies serialized HTML preserves these attributes.|\n|**Turndown GFM Plugin** <br> `packages/turndown-plugin-gfm/src/tables.js`|`tableShouldBeHtml` now returns true for tables with a `style` attribute when `options.preserveNestedTables` is truthy, preserving styled tables as HTML rather than converting to Markdown.|\n\n## Sequence Diagram(s)\n\n```mermaid\nsequenceDiagram\n    participant Editor as Editor (ProseMirror)\n    participant Serializer as HTML Serializer\n    participant DOM as DOM Element\n    participant Turndown as Turndown GFM Plugin\n    participant Output as Output (HTML / Markdown)\n\n    Editor->>Serializer: provide document containing table with attrs (style, border, class)\n    Serializer->>DOM: toDOM emits table element with non-empty attrs\n    DOM->>Serializer: serialized HTML string\n    Serializer->>Turndown: pass HTML table\n    Turndown->>Turndown: tableShouldBeHtml checks `style` and `options.preserveNestedTables`\n    alt keep as HTML\n        Turndown->>Output: emit HTML\n    else convert to Markdown\n        Turndown->>Output: emit Markdown table\n    end\n```\n\n## Suggested labels\n\n`renderer`\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 3</summary>\n\n<details>\n<summary>✅ Passed checks (3 passed)</summary>\n\n|     Check name     | Status   | Explanation                                                                                                                                                                                                         |\n| :----------------: | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n|     Title check    | ✅ Passed | The title clearly and specifically summarises the main change: fixing table style/border/class attributes being lost in the RTE on mobile, which directly corresponds to the primary objective of the pull request. |\n|  Description check | ✅ Passed | The description is directly related to the changeset, providing detailed context about the problem, the two locations requiring fixes, and the specific changes made to resolve the issue.                          |\n| Docstring Coverage | ✅ Passed | No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.                                                                                                          |\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<!-- tips_start -->\n\n---\n\nThanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=laurent22/joplin&utm_content=14397)! 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, 6416 characters] -->\n\n<!-- internal state end -->",
			"author_association": "CONTRIBUTOR",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3932510434/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/3932521823",
			"html_url": "https://github.com/laurent22/joplin/pull/14397#issuecomment-3932521823",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14397",
			"id": 3932521823,
			"node_id": "IC_kwDOBLftOs7qZYVf",
			"user": {
				"login": "SohamJuneja",
				"id": 138424822,
				"node_id": "U_kgDOCEAx9g",
				"avatar_url": "https://avatars.githubusercontent.com/u/138424822?v=4",
				"gravatar_id": "",
				"url": "https://api.github.com/users/SohamJuneja",
				"html_url": "https://github.com/SohamJuneja",
				"followers_url": "https://api.github.com/users/SohamJuneja/followers",
				"following_url": "https://api.github.com/users/SohamJuneja/following{/other_user}",
				"gists_url": "https://api.github.com/users/SohamJuneja/gists{/gist_id}",
				"starred_url": "https://api.github.com/users/SohamJuneja/starred{/owner}{/repo}",
				"subscriptions_url": "https://api.github.com/users/SohamJuneja/subscriptions",
				"organizations_url": "https://api.github.com/users/SohamJuneja/orgs",
				"repos_url": "https://api.github.com/users/SohamJuneja/repos",
				"events_url": "https://api.github.com/users/SohamJuneja/events{/privacy}",
				"received_events_url": "https://api.github.com/users/SohamJuneja/received_events",
				"type": "User",
				"user_view_type": "public",
				"site_admin": false
			},
			"created_at": "2026-02-20T09:00:33Z",
			"updated_at": "2026-02-20T09:00:33Z",
			"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/3932521823/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/3932926629",
			"html_url": "https://github.com/laurent22/joplin/pull/14397#issuecomment-3932926629",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14397",
			"id": 3932926629,
			"node_id": "IC_kwDOBLftOs7qa7Kl",
			"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-02-20T10:27:01Z",
			"updated_at": "2026-02-20T10:27:01Z",
			"body": "Adding a hard link to the issue for reference: https://github.com/laurent22/joplin/issues/14187",
			"author_association": "COLLABORATOR",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3932926629/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/3946026738",
			"html_url": "https://github.com/laurent22/joplin/pull/14397#issuecomment-3946026738",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14397",
			"id": 3946026738,
			"node_id": "IC_kwDOBLftOs7rM5by",
			"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-02-23T17:01:04Z",
			"updated_at": "2026-02-23T17:01:04Z",
			"body": "> [force-pushed](https://github.com/laurent22/joplin/compare/a7eadd269473c931d17c9791d23d44b80d7ce819..b69dcdc9302376811bcca91fb4be021abf606a15) the fix/mobile-table-style-lost branch from [a7eadd2](https://github.com/laurent22/joplin/commit/a7eadd269473c931d17c9791d23d44b80d7ce819) to [b69dcdc](https://github.com/laurent22/joplin/commit/b69dcdc9302376811bcca91fb4be021abf606a15)\r\n\r\nIt usually shouldn't be necessary to force-push:\r\n- A clean version history isn't necessary. When merging, all commits will be [squashed](https://github.blog/open-source/git/squash-your-commits/#enter-commit-squashing). \r\n- It also makes the review process more difficult.",
			"author_association": "COLLABORATOR",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3946026738/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/3946057710",
			"html_url": "https://github.com/laurent22/joplin/pull/14397#issuecomment-3946057710",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14397",
			"id": 3946057710,
			"node_id": "IC_kwDOBLftOs7rNA_u",
			"user": {
				"login": "SohamJuneja",
				"id": 138424822,
				"node_id": "U_kgDOCEAx9g",
				"avatar_url": "https://avatars.githubusercontent.com/u/138424822?v=4",
				"gravatar_id": "",
				"url": "https://api.github.com/users/SohamJuneja",
				"html_url": "https://github.com/SohamJuneja",
				"followers_url": "https://api.github.com/users/SohamJuneja/followers",
				"following_url": "https://api.github.com/users/SohamJuneja/following{/other_user}",
				"gists_url": "https://api.github.com/users/SohamJuneja/gists{/gist_id}",
				"starred_url": "https://api.github.com/users/SohamJuneja/starred{/owner}{/repo}",
				"subscriptions_url": "https://api.github.com/users/SohamJuneja/subscriptions",
				"organizations_url": "https://api.github.com/users/SohamJuneja/orgs",
				"repos_url": "https://api.github.com/users/SohamJuneja/repos",
				"events_url": "https://api.github.com/users/SohamJuneja/events{/privacy}",
				"received_events_url": "https://api.github.com/users/SohamJuneja/received_events",
				"type": "User",
				"user_view_type": "public",
				"site_admin": false
			},
			"created_at": "2026-02-23T17:06:59Z",
			"updated_at": "2026-02-23T17:06:59Z",
			"body": "> > [force-pushed](https://github.com/laurent22/joplin/compare/a7eadd269473c931d17c9791d23d44b80d7ce819..b69dcdc9302376811bcca91fb4be021abf606a15) the fix/mobile-table-style-lost branch from [a7eadd2](https://github.com/laurent22/joplin/commit/a7eadd269473c931d17c9791d23d44b80d7ce819) to [b69dcdc](https://github.com/laurent22/joplin/commit/b69dcdc9302376811bcca91fb4be021abf606a15)\r\n> \r\n> It usually shouldn't be necessary to force-push:\r\n> \r\n> * A clean version history isn't necessary. When merging, all commits will be [squashed](https://github.blog/open-source/git/squash-your-commits/#enter-commit-squashing).\r\n> * It also makes the review process more difficult.\r\n\r\nUnderstood, sorry about that! ",
			"author_association": "NONE",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3946057710/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/3979864426",
			"html_url": "https://github.com/laurent22/joplin/pull/14397#issuecomment-3979864426",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14397",
			"id": 3979864426,
			"node_id": "IC_kwDOBLftOs7tN-lq",
			"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-01T12:25:03Z",
			"updated_at": "2026-03-01T12:25:03Z",
			"body": "Sorry this is a bit unclear whether we should implement this or not, so I'll need to close the PR for now. There should be a discussion first, maybe to scope what we want the Rich Text editors to do, and what markup should be preserved or not",
			"author_association": "OWNER",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3979864426/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/4065620698",
			"html_url": "https://github.com/laurent22/joplin/pull/14397#issuecomment-4065620698",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14397",
			"id": 4065620698,
			"node_id": "IC_kwDOBLftOs7yVHLa",
			"user": {
				"login": "mjm2705",
				"id": 178797209,
				"node_id": "U_kgDOCqg6mQ",
				"avatar_url": "https://avatars.githubusercontent.com/u/178797209?v=4",
				"gravatar_id": "",
				"url": "https://api.github.com/users/mjm2705",
				"html_url": "https://github.com/mjm2705",
				"followers_url": "https://api.github.com/users/mjm2705/followers",
				"following_url": "https://api.github.com/users/mjm2705/following{/other_user}",
				"gists_url": "https://api.github.com/users/mjm2705/gists{/gist_id}",
				"starred_url": "https://api.github.com/users/mjm2705/starred{/owner}{/repo}",
				"subscriptions_url": "https://api.github.com/users/mjm2705/subscriptions",
				"organizations_url": "https://api.github.com/users/mjm2705/orgs",
				"repos_url": "https://api.github.com/users/mjm2705/repos",
				"events_url": "https://api.github.com/users/mjm2705/events{/privacy}",
				"received_events_url": "https://api.github.com/users/mjm2705/received_events",
				"type": "User",
				"user_view_type": "public",
				"site_admin": false
			},
			"created_at": "2026-03-16T07:22:40Z",
			"updated_at": "2026-03-16T07:22:40Z",
			"body": "It was me that raised the original issue on the forums ... does this mean the bug remains?  Disappointing if so.",
			"author_association": "NONE",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4065620698/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/4066631072",
			"html_url": "https://github.com/laurent22/joplin/pull/14397#issuecomment-4066631072",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14397",
			"id": 4066631072,
			"node_id": "IC_kwDOBLftOs7yY92g",
			"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-16T10:23:58Z",
			"updated_at": "2026-03-16T10:24:23Z",
			"body": "> It was me that raised the original issue on the forums ... does this mean the bug remains? Disappointing if so.\r\n\r\n@mjm2705 Yes it does unfortunately. Customising background colour in tables is not a markdown feature, so support in the RTE may be dropped in future by the sounds of it",
			"author_association": "COLLABORATOR",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4066631072/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/4074600716",
			"html_url": "https://github.com/laurent22/joplin/pull/14397#issuecomment-4074600716",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14397",
			"id": 4074600716,
			"node_id": "IC_kwDOBLftOs7y3XkM",
			"user": {
				"login": "mjm2705",
				"id": 178797209,
				"node_id": "U_kgDOCqg6mQ",
				"avatar_url": "https://avatars.githubusercontent.com/u/178797209?v=4",
				"gravatar_id": "",
				"url": "https://api.github.com/users/mjm2705",
				"html_url": "https://github.com/mjm2705",
				"followers_url": "https://api.github.com/users/mjm2705/followers",
				"following_url": "https://api.github.com/users/mjm2705/following{/other_user}",
				"gists_url": "https://api.github.com/users/mjm2705/gists{/gist_id}",
				"starred_url": "https://api.github.com/users/mjm2705/starred{/owner}{/repo}",
				"subscriptions_url": "https://api.github.com/users/mjm2705/subscriptions",
				"organizations_url": "https://api.github.com/users/mjm2705/orgs",
				"repos_url": "https://api.github.com/users/mjm2705/repos",
				"events_url": "https://api.github.com/users/mjm2705/events{/privacy}",
				"received_events_url": "https://api.github.com/users/mjm2705/received_events",
				"type": "User",
				"user_view_type": "public",
				"site_admin": false
			},
			"created_at": "2026-03-17T12:28:16Z",
			"updated_at": "2026-03-17T12:44:50Z",
			"body": "@mrjo118 All a bit strange given that desktop pre-release 3.6.6 is just out including a strikingly similar fix (#10562) for Windows 🤔  ",
			"author_association": "NONE",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4074600716/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/4074748843",
			"html_url": "https://github.com/laurent22/joplin/pull/14397#issuecomment-4074748843",
			"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14397",
			"id": 4074748843,
			"node_id": "IC_kwDOBLftOs7y37ur",
			"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-17T12:54:17Z",
			"updated_at": "2026-03-17T12:54:41Z",
			"body": "> @mrjo118 All a bit strange given that desktop pre-release 3.6.6 is just out including a strikingly similar fix (#10562) for Windows 🤔\r\n\r\nThat fix is a little different. That fixes properties being lost when switching from RTE to the Markdown editor. The markdown editor should be lossless, but when you make changes in the RTE, it will make structural changes to the raw markdown and probably can lose some html as well",
			"author_association": "COLLABORATOR",
			"reactions": {
				"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4074748843/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
		}
	]
}