文件
mynode/readme/cla/consent_records/jellyfrostt_73933245.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

391 行
30 KiB
JSON

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

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

{
"issue": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/14870",
"repository_url": "https://api.github.com/repos/laurent22/joplin",
"labels_url": "https://api.github.com/repos/laurent22/joplin/issues/14870/labels{/name}",
"comments_url": "https://api.github.com/repos/laurent22/joplin/issues/14870/comments",
"events_url": "https://api.github.com/repos/laurent22/joplin/issues/14870/events",
"html_url": "https://github.com/laurent22/joplin/pull/14870",
"id": 4118759092,
"node_id": "PR_kwDOBLftOs7Ml28K",
"number": 14870,
"title": "Chore: Mobile: Fixes #14834: Fix JSDOM scrollIntoView error in tests",
"user": {
"login": "jellyfrostt",
"id": 73933245,
"node_id": "MDQ6VXNlcjczOTMzMjQ1",
"avatar_url": "https://avatars.githubusercontent.com/u/73933245?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/jellyfrostt",
"html_url": "https://github.com/jellyfrostt",
"followers_url": "https://api.github.com/users/jellyfrostt/followers",
"following_url": "https://api.github.com/users/jellyfrostt/following{/other_user}",
"gists_url": "https://api.github.com/users/jellyfrostt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/jellyfrostt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/jellyfrostt/subscriptions",
"organizations_url": "https://api.github.com/users/jellyfrostt/orgs",
"repos_url": "https://api.github.com/users/jellyfrostt/repos",
"events_url": "https://api.github.com/users/jellyfrostt/events{/privacy}",
"received_events_url": "https://api.github.com/users/jellyfrostt/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"
}
],
"state": "closed",
"locked": false,
"assignees": [],
"milestone": null,
"comments": 3,
"created_at": "2026-03-23T07:10:50Z",
"updated_at": "2026-03-29T10:56:09Z",
"closed_at": "2026-03-29T10:39:23Z",
"assignee": null,
"author_association": "CONTRIBUTOR",
"active_lock_reason": null,
"draft": false,
"pull_request": {
"url": "https://api.github.com/repos/laurent22/joplin/pulls/14870",
"html_url": "https://github.com/laurent22/joplin/pull/14870",
"diff_url": "https://github.com/laurent22/joplin/pull/14870.diff",
"patch_url": "https://github.com/laurent22/joplin/pull/14870.patch",
"merged_at": "2026-03-29T10:39:23Z"
},
"body": "## AI Assistance Disclosure\r\n\r\nThis PR was developed with AI assistance (Claude). AI was used for:\r\n\r\n- Drafting the polyfill implementation\r\n- Grammar check the wording and phrases used in drafting PR message\r\n- Reviewing adherence to Joplin coding style\r\n\r\nAll generated code was reviewed, understood, and validated with local test runs.\r\n\r\n## Problem\r\n\r\nAfter `Note.test.tsx` tests complete, a deferred `setTimeout` in `afterFullPageRender.ts` calls `element.scrollIntoView()`. JSDOM does not implement `Element.prototype.scrollIntoView`, so this throws a `TypeError` that surfaces as a \"Cannot log after tests are done\" warning. The existing JSDOM mock (`ExtendedWebView/index.jest.tsx`) already polyfilled `window.scrollBy` but not `scrollIntoView`.\r\n\r\n## Solution\r\n\r\nExtracted the inline `scrollBy` polyfill from `index.jest.tsx` into a shared polyfill string (`polyfillScrollFunctions.ts`) and added a guarded no-op for `Element.prototype.scrollIntoView`. The polyfill runs inside the isolated JSDOM context via `dom.window.eval()`, so it does not affect Jest's global jsdom environment or other test files.\r\n\r\nThis is a low-risk change as it only adds a no-op function to an isolated test mock. No production code is modified.\r\n\r\n## Test plan\r\n\r\n- `yarn test Note.test` - 21/21 pass\r\n- `yarn test handleAnchorClick` - 5/5 pass (file not modified, unaffected by change)\r\n- 'yarn test-ci' - 36/37 suites pass (1 pre-existing flaky failure in `NoteEditor.test.tsx`, unrelated to the change in the PR)\r\n\r\n<img width=\"1860\" height=\"602\" alt=\"Screenshot 2026-03-23 132418\" src=\"https://github.com/user-attachments/assets/1882bde6-fc5d-4523-bd6a-7e49b3578843\" />\r\n<img width=\"597\" height=\"141\" alt=\"Screenshot 2026-03-23 135537\" src=\"https://github.com/user-attachments/assets/4fd9804a-8dbd-48e8-b49c-ee31a245f2a5\" />\r\n\r\nAdditional things to note: we recognized one failing test (NoteEditor.test.tsx) in the full suite and identified that the failing test is a pre-existing flaky test that is unrelated to the changes in this PR. It fails intermittently due to timing issues in the editor component tests and was already failing prior to the changes made in this PR.",
"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/14870/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/14870/timeline",
"performed_via_github_app": null,
"state_reason": null
},
"comments": [
{
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4108482658",
"html_url": "https://github.com/laurent22/joplin/pull/14870#issuecomment-4108482658",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14870",
"id": 4108482658,
"node_id": "IC_kwDOBLftOs704nhi",
"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-23T07:10:59Z",
"updated_at": "2026-03-29T10:56:09Z",
"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/4108482658/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/4108483776",
"html_url": "https://github.com/laurent22/joplin/pull/14870#issuecomment-4108483776",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14870",
"id": 4108483776,
"node_id": "IC_kwDOBLftOs704nzA",
"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-23T07:11:16Z",
"updated_at": "2026-03-23T13:59:15Z",
"body": "<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nThis change refactors scroll-related polyfill logic in the mobile app's extended WebView component. A new utility module is created containing reusable JavaScript snippet strings for polyfilling `window.scrollBy` and `Element.prototype.scrollIntoView`, which replaces the previously inline polyfill code in the test setup configuration.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Ignore files** <br> `.eslintignore`, `.gitignore`|Added exclusion patterns for the new polyfill utility file to prevent linting and version control tracking.|\n|**Polyfill module** <br> `packages/app-mobile/components/ExtendedWebView/utils/polyfillScrollFunctions.ts`|New utility module exporting a JavaScript snippet string that defines no-op polyfills for `window.scrollBy` and `Element.prototype.scrollIntoView` when not natively available.|\n|**Test configuration** <br> `packages/app-mobile/components/ExtendedWebView/index.jest.tsx`|Refactored to import and use the new `polyfillScrollFunctions` module instead of hardcoding inline `window.scrollBy` polyfill logic during JSDOM setup.|\n\n## Suggested labels\n\n`mobile`, `bug`\n\n## Suggested reviewers\n\n- laurent22\n- personalizedrefrigerator\n\n</details>\n\n<!-- walkthrough_end -->\n\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 4</summary>\n\n<details>\n<summary>✅ Passed checks (4 passed)</summary>\n\n| Check name | Status | Explanation |\n| :-----------------------------------: | :------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Description check | ✅ Passed | The description is comprehensive and directly related to the changeset, detailing the problem, solution, and test results with appropriate context. |\n| Docstring Coverage | ✅ Passed | No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. |\n| Pr Description Must Follow Guidelines | ✅ Passed | The PR description fulfils all requirements: clear problem statement, comprehensive solution explanation, and concrete test plan results. It avoids restating implementation details and provides purposeful context including scope clarification and code provenance disclosure. |\n| Title check | ✅ Passed | The title clearly and specifically summarizes the main change: extracting and enhancing a polyfill for scrollIntoView errors in JSDOM tests, which aligns with the core purpose of this PR. |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing Touches</summary>\n\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} --> Create PR with unit tests\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n<!-- tips_start -->\n\n---\n\nThanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=laurent22/joplin&utm_content=14870)! 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<!-- 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 -->\n\n<!-- internal state end -->",
"author_association": "CONTRIBUTOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4108483776/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/4108492186",
"html_url": "https://github.com/laurent22/joplin/pull/14870#issuecomment-4108492186",
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14870",
"id": 4108492186,
"node_id": "IC_kwDOBLftOs704p2a",
"user": {
"login": "jellyfrostt",
"id": 73933245,
"node_id": "MDQ6VXNlcjczOTMzMjQ1",
"avatar_url": "https://avatars.githubusercontent.com/u/73933245?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/jellyfrostt",
"html_url": "https://github.com/jellyfrostt",
"followers_url": "https://api.github.com/users/jellyfrostt/followers",
"following_url": "https://api.github.com/users/jellyfrostt/following{/other_user}",
"gists_url": "https://api.github.com/users/jellyfrostt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/jellyfrostt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/jellyfrostt/subscriptions",
"organizations_url": "https://api.github.com/users/jellyfrostt/orgs",
"repos_url": "https://api.github.com/users/jellyfrostt/repos",
"events_url": "https://api.github.com/users/jellyfrostt/events{/privacy}",
"received_events_url": "https://api.github.com/users/jellyfrostt/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"created_at": "2026-03-23T07:13:25Z",
"updated_at": "2026-03-23T07:13:25Z",
"body": "I have read the CLA Document and I hereby sign the CLA",
"author_association": "CONTRIBUTOR",
"reactions": {
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/4108492186/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
}
]
}