一些检查失败了
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
454 行
32 KiB
JSON
454 行
32 KiB
JSON
{
|
||
"issue": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/14409",
|
||
"repository_url": "https://api.github.com/repos/laurent22/joplin",
|
||
"labels_url": "https://api.github.com/repos/laurent22/joplin/issues/14409/labels{/name}",
|
||
"comments_url": "https://api.github.com/repos/laurent22/joplin/issues/14409/comments",
|
||
"events_url": "https://api.github.com/repos/laurent22/joplin/issues/14409/events",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14409",
|
||
"id": 3971555531,
|
||
"node_id": "PR_kwDOBLftOs7FUW90",
|
||
"number": 14409,
|
||
"title": "Support recurring to-do alarms with RRULE frequency and interval",
|
||
"user": {
|
||
"login": "RiyanshiTomar",
|
||
"id": 189696797,
|
||
"node_id": "U_kgDOC06LHQ",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/189696797?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/RiyanshiTomar",
|
||
"html_url": "https://github.com/RiyanshiTomar",
|
||
"followers_url": "https://api.github.com/users/RiyanshiTomar/followers",
|
||
"following_url": "https://api.github.com/users/RiyanshiTomar/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/RiyanshiTomar/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/RiyanshiTomar/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/RiyanshiTomar/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/RiyanshiTomar/orgs",
|
||
"repos_url": "https://api.github.com/users/RiyanshiTomar/repos",
|
||
"events_url": "https://api.github.com/users/RiyanshiTomar/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/RiyanshiTomar/received_events",
|
||
"type": "User",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"labels": [
|
||
{
|
||
"id": 519700743,
|
||
"node_id": "MDU6TGFiZWw1MTk3MDA3NDM=",
|
||
"url": "https://api.github.com/repos/laurent22/joplin/labels/enhancement",
|
||
"name": "enhancement",
|
||
"color": "5ebeff",
|
||
"default": true,
|
||
"description": "Feature requests and code enhancements"
|
||
},
|
||
{
|
||
"id": 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": 1080341216,
|
||
"node_id": "MDU6TGFiZWwxMDgwMzQxMjE2",
|
||
"url": "https://api.github.com/repos/laurent22/joplin/labels/desktop",
|
||
"name": "desktop",
|
||
"color": "ffc274",
|
||
"default": false,
|
||
"description": "All desktop platforms"
|
||
},
|
||
{
|
||
"id": 2115946553,
|
||
"node_id": "MDU6TGFiZWwyMTE1OTQ2NTUz",
|
||
"url": "https://api.github.com/repos/laurent22/joplin/labels/database",
|
||
"name": "database",
|
||
"color": "91ca55",
|
||
"default": false,
|
||
"description": "Database issues"
|
||
}
|
||
],
|
||
"state": "closed",
|
||
"locked": false,
|
||
"assignees": [],
|
||
"milestone": null,
|
||
"comments": 4,
|
||
"created_at": "2026-02-21T07:21:48Z",
|
||
"updated_at": "2026-02-21T08:39:48Z",
|
||
"closed_at": "2026-02-21T08:39:36Z",
|
||
"assignee": null,
|
||
"author_association": "NONE",
|
||
"active_lock_reason": null,
|
||
"draft": false,
|
||
"pull_request": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/pulls/14409",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14409",
|
||
"diff_url": "https://github.com/laurent22/joplin/pull/14409.diff",
|
||
"patch_url": "https://github.com/laurent22/joplin/pull/14409.patch",
|
||
"merged_at": null
|
||
},
|
||
"body": "**Solved**: https://github.com/laurent22/joplin/issues/14391\r\n\r\n**This PR resolves the recurring to-do reminder request by finalizing RRULE-compatible alarm behavior:**\r\n\r\n-> Adds recurrence storage and migration support via notes.alarm_recurrence.\r\n\r\n-> Wires recurrence through alarm scheduling and due-note processing.\r\n\r\n-> Adds desktop recurrence selection in the alarm flow and clears recurrence when alarms are cleared (desktop/mobile).\r\n\r\n-> Fixes recurrence logic to parse both FREQ and INTERVAL, enabling schedules like every 2 weeks/months/years to calculate the next trigger correctly.\r\n\r\nThis closes the gap where recurrence existed but interval-based RRULEs were not respected during next-trigger computation.\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/14409/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/14409/timeline",
|
||
"performed_via_github_app": null,
|
||
"state_reason": null
|
||
},
|
||
"comments": [
|
||
{
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3938355044",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14409#issuecomment-3938355044",
|
||
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14409",
|
||
"id": 3938355044,
|
||
"node_id": "IC_kwDOBLftOs7qvodk",
|
||
"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-21T07:22:00Z",
|
||
"updated_at": "2026-02-21T08:39:48Z",
|
||
"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/3938355044/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/3938355809",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14409#issuecomment-3938355809",
|
||
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14409",
|
||
"id": 3938355809,
|
||
"node_id": "IC_kwDOBLftOs7qvoph",
|
||
"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-21T07:22:24Z",
|
||
"updated_at": "2026-02-21T07:30:37Z",
|
||
"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 PR introduces recurring alarm functionality for to-do notes. It adds a database field to store recurrence patterns in RRULE format, implements UI prompts for selecting recurrence options, updates the database schema, and enhances the AlarmService to compute next trigger times based on recurrence settings.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Desktop UI Recurrence Selection** <br> `packages/app-desktop/gui/WindowCommandsAndDialogs/commands/editAlarm.ts`|Introduces three helper functions for recurrence management: `recurrenceToOption()` converts stored RRULE to UI options, `recurrenceOptionLabel()` provides localized labels, and `optionToRecurrence()` maps UI selections back to RRULE format. Implements a two-step prompt flow: initial time selection followed by recurrence dropdown (NONE/DAILY/WEEKLY/MONTHLY/YEARLY).|\n|**Mobile UI Recurrence Reset** <br> `packages/app-mobile/components/screens/Note/Note.tsx`|Clears `alarm_recurrence` field when date is cleared (null input) during alarm dialog acceptance.|\n|**Database Schema** <br> `packages/lib/JoplinDatabase.ts`, `packages/lib/services/database/migrations/50.ts`, `packages/lib/services/database/migrations/index.ts`|Adds new `alarm_recurrence TEXT NOT NULL DEFAULT \"\"` column to notes table via migration script 50. Registers migration in index.|\n|**Database Entity Types** <br> `packages/lib/services/database/types.ts`, `packages/lib/models/Note.ts`|Adds optional `alarm_recurrence?: string` field to NoteEntity interface. Updates `dueNotes()` query to fetch notes with future due dates OR non-empty recurrence patterns.|\n|**Alarm Service Recurrence Logic** <br> `packages/lib/services/AlarmService.ts`|Introduces `alarmRecurrenceFrequency()` and `nextTriggerTime()` private methods to parse RRULE frequency and compute next trigger time based on recurrence (DAILY/WEEKLY/MONTHLY/YEARLY). Updates scheduling flow to load full note data and recalculate due times for recurring alarms.|\n\n## Sequence Diagram\n\n```mermaid\nsequenceDiagram\n actor User\n participant Desktop UI\n participant AlarmService\n participant Database\n \n User->>Desktop UI: Opens alarm editor\n Desktop UI->>Desktop UI: Shows time selection prompt\n User->>Desktop UI: Selects due time\n Desktop UI->>Desktop UI: Shows recurrence selection dropdown\n User->>Desktop UI: Selects recurrence option (Daily/Weekly/etc)\n Desktop UI->>Database: Saves note with todo_due & alarm_recurrence\n Desktop UI->>AlarmService: Emits AlarmChange event\n AlarmService->>Database: Loads full note with recurrence\n AlarmService->>AlarmService: Parses RRULE and calculates next trigger time\n AlarmService->>Database: Updates todo_due if next trigger differs\n AlarmService->>AlarmService: Schedules alarm with updated time\n```\n\n## Possibly related issues\n\n- `#14391`: Implements repeating to-do alarms with RRULE-based recurrence storage and scheduling logic across database, UI, and service layers.\n\n## Suggested labels\n\n`desktop`, `mobile`, `database`, `enhancement`\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: adding support for recurring to-do alarms with RRULE frequency and interval support. |\n| Description check | ✅ Passed | The description is comprehensive and directly related to the changeset, explaining the problem solved, implementation approach, and specific improvements made across multiple components. |\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- [ ] <!-- {\"checkboxId\": \"7962f53c-55bc-4827-bfbf-6a18da830691\"} --> 📝 Generate docstrings (stacked PR)\n- [ ] <!-- {\"checkboxId\": \"3e1879ae-f29b-4d0d-8e06-d12b7ba33d98\"} --> 📝 Generate docstrings (commit on current branch)\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<!-- announcements_start -->\n\n> [!TIP]\n> [Issue Planner](https://www.coderabbit.ai/issue-planner) is now in beta. Read the [docs](https://docs.coderabbit.ai/issues/planning) and try it out! Share your feedback on [Discord](https://discord.com/invite/coderabbit).\n\n<!-- announcements_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/3938355809/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/3938358212",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14409#issuecomment-3938358212",
|
||
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14409",
|
||
"id": 3938358212,
|
||
"node_id": "IC_kwDOBLftOs7qvpPE",
|
||
"user": {
|
||
"login": "RiyanshiTomar",
|
||
"id": 189696797,
|
||
"node_id": "U_kgDOC06LHQ",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/189696797?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/RiyanshiTomar",
|
||
"html_url": "https://github.com/RiyanshiTomar",
|
||
"followers_url": "https://api.github.com/users/RiyanshiTomar/followers",
|
||
"following_url": "https://api.github.com/users/RiyanshiTomar/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/RiyanshiTomar/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/RiyanshiTomar/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/RiyanshiTomar/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/RiyanshiTomar/orgs",
|
||
"repos_url": "https://api.github.com/users/RiyanshiTomar/repos",
|
||
"events_url": "https://api.github.com/users/RiyanshiTomar/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/RiyanshiTomar/received_events",
|
||
"type": "User",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"created_at": "2026-02-21T07:23:41Z",
|
||
"updated_at": "2026-02-21T07:23:41Z",
|
||
"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/3938358212/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/3938460844",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14409#issuecomment-3938460844",
|
||
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14409",
|
||
"id": 3938460844,
|
||
"node_id": "IC_kwDOBLftOs7qwCSs",
|
||
"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-21T08:39:36Z",
|
||
"updated_at": "2026-02-21T08:39:36Z",
|
||
"body": "Hello, this is too big of an issue as a start, and the issue is not properly specified yet, so please choose something else.",
|
||
"author_association": "OWNER",
|
||
"reactions": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3938460844/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
|
||
}
|
||
]
|
||
} |