文件
mynode/readme/cla/consent_records/vikash7485_236372001.json
chen 301194963b
一些检查失败了
automerge / automerge (push) Has been cancelled
react-native-android-build-apk / AssembleRelease (push) Has been cancelled
Build macOS M1 / Main (push) Has been cancelled
Joplin Continuous Integration / Main (macos-15-intel) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-11-vs2026-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-2025) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04-arm) (push) Has been cancelled
Joplin UI tests / Main (ubuntu-22.04) (push) Has been cancelled
Joplin UI tests / Main (windows-2025) (push) Has been cancelled
Joplin UI tests / Mobile (push) Has been cancelled
Close stale issues / ProcessStaleIssues (push) Has been cancelled
feat: Initial clean release of CHM
2026-11-04 11:29:39 +08:00

535 行
35 KiB
JSON

此文件含有不可见的 Unicode 字符

此文件含有人类无法区分的不可见的 Unicode 字符,但可以由计算机进行不同的处理。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

{
"issue": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/14413",
"repository_url": "https://api.github.com/repos/laurent22/joplin",
"labels_url": "https://api.github.com/repos/laurent22/joplin/issues/14413/labels{/name}",
"comments_url": "https://api.github.com/repos/laurent22/joplin/issues/14413/comments",
"events_url": "https://api.github.com/repos/laurent22/joplin/issues/14413/events",
"html_url": "https://github.com/laurent22/joplin/pull/14413",
"id": 3971864628,
"node_id": "PR_kwDOBLftOs7FVR-s",
"number": 14413,
"title": "Mobile: Reset undo/redo state when toggling editor plugin",
"user": {
"login": "vikash7485",
"id": 236372001,
"node_id": "U_kgDODhbAIQ",
"avatar_url": "https://avatars.githubusercontent.com/u/236372001?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/vikash7485",
"html_url": "https://github.com/vikash7485",
"followers_url": "https://api.github.com/users/vikash7485/followers",
"following_url": "https://api.github.com/users/vikash7485/following{/other_user}",
"gists_url": "https://api.github.com/users/vikash7485/gists{/gist_id}",
"starred_url": "https://api.github.com/users/vikash7485/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/vikash7485/subscriptions",
"organizations_url": "https://api.github.com/users/vikash7485/orgs",
"repos_url": "https://api.github.com/users/vikash7485/repos",
"events_url": "https://api.github.com/users/vikash7485/events{/privacy}",
"received_events_url": "https://api.github.com/users/vikash7485/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": ""
}
],
"state": "closed",
"locked": false,
"assignees": [],
"milestone": null,
"comments": 6,
"created_at": "2026-02-21T11:18:12Z",
"updated_at": "2026-02-22T18:42:20Z",
"closed_at": "2026-02-22T08:50:39Z",
"assignee": null,
"author_association": "NONE",
"active_lock_reason": null,
"draft": false,
"pull_request": {
"url": "https://api.github.com/repos/laurent22/joplin/pulls/14413",
"html_url": "https://github.com/laurent22/joplin/pull/14413",
"diff_url": "https://github.com/laurent22/joplin/pull/14413.diff",
"patch_url": "https://github.com/laurent22/joplin/pull/14413.patch",
"merged_at": null
},
"body": "## Summary\r\nAfter toggling an editor plugin via the eye button, pressing undo caused the mobile app to crash.\r\n\r\n## Root Cause\r\nThe [componentDidUpdate](cci:1://file:///c:/Users/LENOVO/OneDrive/Desktop/joplin/joplin/packages/app-mobile/components/screens/Note/Note.tsx:648:1-751:2) logic in [Note.tsx](cci:7://file:///c:/Users/LENOVO/OneDrive/Desktop/joplin/joplin/packages/app-mobile/components/screens/Note/Note.tsx:0:0-0:0) already resets the undo/redo state when switching `editorType` or `mode` (added in #13505). However, toggling a plugin via the eye button changes `plugins.shownEditorViewIds` — neither `editorType` nor `mode` changes. \r\n\r\nBecause the state wasn't cleared, `undoRedoButtonState.canUndo` remained `true` while the built-in editor was unmounted and `editorRef.current` became `null`. When the user tapped the undo button, it threw a null reference exception, crashing the app.\r\n\r\n## Changes\r\n1. **Extend Reset Condition:** The [componentDidUpdate](cci:1://file:///c:/Users/LENOVO/OneDrive/Desktop/joplin/joplin/packages/app-mobile/components/screens/Note/Note.tsx:648:1-751:2) reset condition has been updated to also fire when `plugins.shownEditorViewIds` changes (any plugin eye-button toggle).\r\n2. **Defense-in-Depth:** Added `?.` optional chaining to `editorRef.current?.undo()` and `editorRef.current?.redo()` as a safeguard against null-reference crashes if the button is ever visible while the editor is unmounted.\r\n\r\n### Code Diff\r\n\r\n```typescript\r\n// packages/app-mobile/components/screens/Note/Note.tsx\r\n\r\n@@ -438,7 +438,7 @@\r\n \tprivate screenHeader_undoButtonPress() {\r\n \t\tif (this.useEditorBeta()) {\r\n-\t\t\tthis.editorRef.current.undo();\r\n+\t\t\tthis.editorRef.current?.undo();\r\n \t\t} else {\r\n \t\t\tvoid this.undoRedo('undo');\r\n \t\t}\r\n\r\n@@ -445,7 +445,7 @@\r\n \tprivate screenHeader_redoButtonPress() {\r\n \t\tif (this.useEditorBeta()) {\r\n-\t\t\tthis.editorRef.current.redo();\r\n+\t\t\tthis.editorRef.current?.redo();\r\n \t\t} else {\r\n \t\t\tvoid this.undoRedo('redo');\r\n \t\t}\r\n\r\n@@ -706,7 +706,8 @@\r\n \t\t\t});\r\n \t\t}\r\n \r\n-\t\tif (this.props.visibleEditorPluginIds !== prevProps.visibleEditorPluginIds || ... ) {\r\n+\t\tconst editorPluginIdsChanged = this.props.visibleEditorPluginIds !== prevProps.visibleEditorPluginIds;\r\n+\t\tif (editorPluginIdsChanged || ... ) {\r\n \t\t\tconst { editorPlugin } = getShownPluginEditorView(this.props.plugins, this.props.windowId);\r\n \t\t\t\r\n \t\t\tif (!editorPlugin && this.props.editorNoteReloadTimeRequest > this.state.noteLastLoadTime) {\r\n \t\t\t\tvoid shared.reloadNote(this);\r\n@@ -713,4 +713,6 @@\r\n-\t\t\t\r\n-\t\t\t\t// Clear the undo / redo state ...\r\n-\t\t\t\tif (!this.useEditorBeta()) {\r\n-\t\t\t\t\tvoid this.undoRedoService_.reset();\r\n+\t\t\t}\r\n+\r\n+\t\t\tif ((!editorPlugin && ...) || editorPluginIdsChanged) {\r\n+\t\t\t\tif (!this.useEditorBeta()) {\r\n+\t\t\t\t\tvoid this.undoRedoService_.reset();\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/14413/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/14413/timeline",
"performed_via_github_app": null,
"state_reason": null
},
"comments": [
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3938628129",
"html_url": "https://github.com/laurent22/joplin/pull/14413#issuecomment-3938628129",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14413",
"id": 3938628129,
"node_id": "IC_kwDOBLftOs7qwrIh",
"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-21T11:18:23Z",
"updated_at": "2026-02-22T08:50:47Z",
"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/3938628129/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/3938628507",
"html_url": "https://github.com/laurent22/joplin/pull/14413#issuecomment-3938628507",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14413",
"id": 3938628507,
"node_id": "IC_kwDOBLftOs7qwrOb",
"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-21T11:18:45Z",
"updated_at": "2026-02-21T18:41:00Z",
"body": "<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: review paused by coderabbit.ai -->\n\n> [!NOTE]\n> ## Reviews paused\n> \n> It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the `reviews.auto_review.auto_pause_after_reviewed_commits` setting.\n> \n> Use the following commands to manage reviews:\n> - `@coderabbitai resume` to resume automatic reviews.\n> - `@coderabbitai review` to trigger a single review.\n> \n> Use the checkboxes below for quick actions:\n> - [ ] <!-- {\"checkboxId\": \"7f6cc2e2-2e4e-497a-8c31-c9e4573e93d1\"} --> ▶️ Resume reviews\n> - [ ] <!-- {\"checkboxId\": \"e9bb8d72-00e8-4f67-9cb2-caf3b22574fe\"} --> 🔍 Trigger review\n\n<!-- end of auto-generated comment: review paused by coderabbit.ai -->\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nTightens TypeScript signatures and spacing in the Note screen, adds optional chaining for editor calls, refines editor-plugin-change detection to reset undo/redo and trigger editor remounts when plugin IDs change, and adjusts several class member types.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Note screen (single file)** <br> `packages/app-mobile/components/screens/Note/Note.tsx`|Normalized TypeScript spacing and union formatting for state and members; updated member signatures (e.g., `backHandler`, `refreshResource`, `commandRegistration_`); added optional chaining for editor operations (`editorRef.current?.undo()`, `editorRef.current?.redo()`); introduced `editorPluginIdsChanged` detection to reset undo/redo and trigger editor remount/refresh; minor formatting tweaks.|\n\n## Sequence Diagram(s)\n\n```mermaid\nsequenceDiagram\n participant User\n participant NoteScreen\n participant CommandService\n participant Editor\n\n User->>NoteScreen: Open note / toggle editor plugins\n NoteScreen->>CommandService: read/set command runtime & setMode(mode)\n NoteScreen->>NoteScreen: compute editorPluginIdsChanged?\n alt plugin IDs changed\n NoteScreen->>Editor: reset undo/redo\n NoteScreen->>Editor: remount/refresh editor (refreshKey)\n else no plugin change\n NoteScreen->>Editor: normal load\n end\n User->>Editor: undo / redo action\n Editor-->>NoteScreen: optional-chained return (safe call)\n NoteScreen->>NoteScreen: update state accordingly\n```\n\n## Possibly related issues\n\n- laurent22/joplin#14387: Related to editor plugin switching and undo/redo reset logic; this PR's explicit undo/redo resets and plugin-ID change detection address the same area.\n\n</details>\n\n<!-- walkthrough_end -->\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 directly describes the main fix: resetting undo/redo state when editor plugins are toggled, which is the core issue addressed in the PR. |\n| Description check | ✅ Passed | The description comprehensively explains the bug, root cause, and the implemented fix with code examples, all directly relevant to the changeset. |\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\n\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<!-- 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= -->\n\n<!-- internal state end -->",
"author_association": "CONTRIBUTOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3938628507/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/3938660302",
"html_url": "https://github.com/laurent22/joplin/pull/14413#issuecomment-3938660302",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14413",
"id": 3938660302,
"node_id": "IC_kwDOBLftOs7qwy_O",
"user": {
"login": "vikash7485",
"id": 236372001,
"node_id": "U_kgDODhbAIQ",
"avatar_url": "https://avatars.githubusercontent.com/u/236372001?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/vikash7485",
"html_url": "https://github.com/vikash7485",
"followers_url": "https://api.github.com/users/vikash7485/followers",
"following_url": "https://api.github.com/users/vikash7485/following{/other_user}",
"gists_url": "https://api.github.com/users/vikash7485/gists{/gist_id}",
"starred_url": "https://api.github.com/users/vikash7485/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/vikash7485/subscriptions",
"organizations_url": "https://api.github.com/users/vikash7485/orgs",
"repos_url": "https://api.github.com/users/vikash7485/repos",
"events_url": "https://api.github.com/users/vikash7485/events{/privacy}",
"received_events_url": "https://api.github.com/users/vikash7485/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-02-21T11:47:52Z",
"updated_at": "2026-02-21T11:47:52Z",
"body": "I have read the CLA Document and I hereby sign the CLA\r\n\r\n",
"author_association": "NONE",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3938660302/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/3939145643",
"html_url": "https://github.com/laurent22/joplin/pull/14413#issuecomment-3939145643",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14413",
"id": 3939145643,
"node_id": "IC_kwDOBLftOs7qyper",
"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-21T17:35:50Z",
"updated_at": "2026-02-21T17:44:14Z",
"body": "Please remove all the unnecessary formatting changes and just include what is required for the fix.\r\n\r\nAlso you have not provided any evidence of testing",
"author_association": "COLLABORATOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3939145643/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/3939700824",
"html_url": "https://github.com/laurent22/joplin/pull/14413#issuecomment-3939700824",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14413",
"id": 3939700824,
"node_id": "IC_kwDOBLftOs7q0xBY",
"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-21T23:36:15Z",
"updated_at": "2026-02-21T23:48:57Z",
"body": "I have given your code change a test. It does fix the issue, but the only required code changes to resolve it are those shown in this screenshot. All other changes are redundant:\r\n\r\n<img width=\"1347\" height=\"583\" alt=\"change required\" src=\"https://github.com/user-attachments/assets/601669ec-7d17-4f79-bdb6-570e64562cfa\" />\r\n\r\nAlso, please read the AI policy: https://github.com/joplin/gsoc/blob/master/ai_policy.md",
"author_association": "COLLABORATOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3939700824/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/3940522192",
"html_url": "https://github.com/laurent22/joplin/pull/14413#issuecomment-3940522192",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14413",
"id": 3940522192,
"node_id": "IC_kwDOBLftOs7q35jQ",
"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-02-22T08:50:39Z",
"updated_at": "2026-02-22T08:50:48Z",
"body": "Thanks for the submission.\r\n\r\nWhile this PR targets an existing issue, the proposed solution is not suitable for the project in its current form. Bringing it up to an acceptable standard would require significant redesign and guidance.\r\n\r\nFor future contributions, please ensure changes are well-aligned with the existing architecture and sufficiently tested.\r\n\r\nPlease make sure you read our guidelines: https://github.com/joplin/gsoc\r\n\r\nAnd our AI policy: https://github.com/joplin/gsoc/blob/master/ai_policy.md",
"author_association": "OWNER",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3940522192/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
}
]
}