Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 0 additions & 20 deletions e2e/tests/comments-panel.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -239,26 +239,6 @@ test.describe('Comments Panel — Git Mode', () => {
await expect(card.locator('.resolved-badge')).toContainText('Resolved');
});

test('unresolved carried-forward comment shows Unresolved badge', async ({ page, request }) => {
const mdPath = await getMdPath(request);
await addComment(request, mdPath, 1, 'Still unresolved');

// Finish + round-complete to carry forward
await request.post('/api/finish');
const round = (await request.get('/api/session').then(r => r.json())).review_round;
await request.post('/api/round-complete');
await waitForRound(request, round);

await loadPage(page);
await page.keyboard.press('Shift+C');

const card = panelCards(page).first();
await expect(card).toBeVisible();
await expect(card.locator('.carried-forward-label')).toContainText('Unresolved');
// Should NOT have a resolved badge
await expect(card.locator('.resolved-badge')).toHaveCount(0);
});

test('clicking resolved comment in panel scrolls to inline resolved comment', async ({ page, request }) => {
const mdPath = await getMdPath(request);
await addComment(request, mdPath, 1, 'Resolve and scroll');
Expand Down
6 changes: 0 additions & 6 deletions frontend/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -4206,12 +4206,6 @@
: 'Lines ' + comment.start_line + '-' + comment.end_line;
headerLeft.appendChild(lineRef);
}
if (opts.showCarriedForward && comment.carried_forward && !comment.resolved) {
const label = document.createElement('span');
label.className = 'carried-forward-label';
label.textContent = 'Unresolved';
headerLeft.appendChild(label);
}
const time = document.createElement('span');
time.className = 'comment-time';
time.textContent = formatTime(comment.created_at);
Expand Down
8 changes: 0 additions & 8 deletions frontend/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -1002,14 +1002,6 @@ body.dragging .line-comment-gutter.drag-range:not(.drag-endpoint) .line-add { op
font-family: var(--font-body);
}

.comment-card.carried-forward {
border-color: var(--orange);
}
.carried-forward-label {
font-size: 11px;
color: var(--orange);
font-weight: 500;
}
.comment-round-badge {
font-size: 10px;
font-weight: 500;
Expand Down
4 changes: 0 additions & 4 deletions frontend/theme.css
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@
--diff-word-add-bg: rgba(63, 185, 80, 0.4);
--diff-word-del-bg: rgba(248, 81, 73, 0.4);
--badge-resolved-bg: rgba(158, 206, 106, 0.12);
--badge-unresolved-bg: rgba(255, 158, 100, 0.14);
--yellow-subtle: rgba(224, 175, 104, 0.08);
--yellow-bg: rgba(224, 175, 104, 0.14);
--yellow-border: rgba(224, 175, 104, 0.2);
Expand Down Expand Up @@ -92,7 +91,6 @@
--diff-word-add-bg: rgba(26, 127, 55, 0.25);
--diff-word-del-bg: rgba(207, 34, 46, 0.25);
--badge-resolved-bg: rgba(26, 127, 55, 0.1);
--badge-unresolved-bg: rgba(188, 76, 0, 0.1);
--yellow-subtle: rgba(154, 103, 0, 0.06);
--yellow-bg: rgba(154, 103, 0, 0.1);
--yellow-border: rgba(154, 103, 0, 0.16);
Expand Down Expand Up @@ -139,7 +137,6 @@
--diff-word-add-bg: rgba(63, 185, 80, 0.4);
--diff-word-del-bg: rgba(248, 81, 73, 0.4);
--badge-resolved-bg: rgba(158, 206, 106, 0.12);
--badge-unresolved-bg: rgba(255, 158, 100, 0.14);
--yellow-subtle: rgba(224, 175, 104, 0.08);
--yellow-bg: rgba(224, 175, 104, 0.14);
--yellow-border: rgba(224, 175, 104, 0.2);
Expand Down Expand Up @@ -185,7 +182,6 @@
--diff-word-add-bg: rgba(26, 127, 55, 0.25);
--diff-word-del-bg: rgba(207, 34, 46, 0.25);
--badge-resolved-bg: rgba(26, 127, 55, 0.1);
--badge-unresolved-bg: rgba(188, 76, 0, 0.1);
--yellow-subtle: rgba(154, 103, 0, 0.06);
--yellow-bg: rgba(154, 103, 0, 0.1);
--yellow-border: rgba(154, 103, 0, 0.16);
Expand Down
28 changes: 15 additions & 13 deletions integration_hashes_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions integrations/aider/CONVENTIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ crit

## After review

Read `.crit.json` to find the user's inline comments. Comments have three scopes: line comments in `files.<path>.comments` (with `start_line`/`end_line`), file comments (same array, `scope: "file"`, lines are 0), and review comments in the top-level `review_comments` array (`scope: "review"`, not tied to any file). A comment is unresolved if `"resolved": false` or if the `resolved` field is missing. Address each unresolved comment by revising the referenced file. After addressing, reply with what you did: `crit comment --reply-to <id> --resolve --author 'Aider' '<what you did>'`. This works for both file comment IDs (`c1`) and review comment IDs (`r0`).
Read `.crit.json` to find the user's inline comments. Comments have three scopes: line comments in `files.<path>.comments` (with `start_line`/`end_line`), file comments (same array, `scope: "file"`, lines are 0), and review comments in the top-level `review_comments` array (`scope: "review"`, not tied to any file). Address each unresolved comment by revising the referenced file. After addressing, reply with what you did: `crit comment --reply-to <id> --author 'Aider' '<what you did>'`. This works for both file comment IDs (`c1`) and review comment IDs (`r0`).

When addressing multiple comments, use `--json` to resolve them all in one call:
When addressing multiple comments, use `--json` to reply to them all in one call:

```bash
echo '[
{"reply_to": "c1", "body": "Fixed", "resolve": true},
{"reply_to": "c2", "body": "Refactored as suggested", "resolve": true}
{"reply_to": "c1", "body": "Fixed"},
{"reply_to": "c2", "body": "Refactored as suggested"}
]' | crit comment --json --author 'Aider'
```

Expand All @@ -58,8 +58,8 @@ crit comment --author 'Aider' '<body>' # Review-level c
crit comment --author 'Aider' <path> '<body>' # File-level comment
crit comment --author 'Aider' <path>:<line> '<body>' # Line comment
crit comment --author 'Aider' <path>:<start>-<end> '<body>' # Line range comment
crit comment --reply-to c1 --resolve --author 'Aider' '<body>' # Reply to file comment
crit comment --reply-to r0 --resolve --author 'Aider' '<body>' # Reply to review comment
crit comment --reply-to c1 --author 'Aider' '<body>' # Reply to file comment
crit comment --reply-to r0 --author 'Aider' '<body>' # Reply to review comment
```

Paths are relative, line numbers are 1-indexed, comments are appended (never replaced). Creates `.crit.json` automatically if it doesn't exist.
Expand Down
8 changes: 4 additions & 4 deletions integrations/claude-code/commands/crit.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,14 @@ For each unresolved comment:
2. If a comment contains a suggestion block, apply that specific change
3. Revise the **referenced file** to address the feedback - this could be the plan file or any code file from the git diff
4. Use the Edit tool to make targeted changes
5. Reply to the comment with what you did: `crit comment --reply-to <id> --resolve --author 'Claude Code' '<what you did>'`
5. Reply to the comment with what you did: `crit comment --reply-to <id> --author 'Claude Code' '<what you did>'`

When addressing multiple comments, use `--json` to resolve them all in one call:
When addressing multiple comments, use `--json` to reply to them all in one call:

```bash
echo '[
{"reply_to": "c1", "body": "Fixed", "resolve": true},
{"reply_to": "c2", "body": "Refactored as suggested", "resolve": true}
{"reply_to": "c1", "body": "Fixed"},
{"reply_to": "c2", "body": "Refactored as suggested"}
]' | crit comment --json --author 'Claude Code'
```

Expand Down
20 changes: 10 additions & 10 deletions integrations/claude-code/skills/crit-cli/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,23 +60,23 @@ After a crit review session, comments are in `.crit.json`. Comments have three s
- Address each unresolved comment by editing the relevant file at the referenced location
- Before acting on a comment, check its `replies` array — if you have already replied, the reviewer may be following up conversationally rather than requesting a new code change

### Resolving comments
### Replying to comments

After addressing a comment, reply to it using the CLI:

```bash
crit comment --reply-to c1 --resolve --author 'Claude Code' 'Fixed by extracting to helper'
crit comment --reply-to r0 --resolve --author 'Claude Code' 'All issues addressed'
crit comment --reply-to c1 --author 'Claude Code' 'Fixed by extracting to helper'
crit comment --reply-to r0 --author 'Claude Code' 'All issues addressed'
```

This adds a reply to the comment thread and marks it resolved. Works for both file comment IDs (`c1`, `c2`, ...) and review comment IDs (`r0`, `r1`, ...). You can also reply without resolving (omit `--resolve`) if discussion is ongoing.
This adds a reply to the comment thread. Works for both file comment IDs (`c1`, `c2`, ...) and review comment IDs (`r0`, `r1`, ...). Resolving is a user action — do not mark comments resolved from AI.

### Plan mode comments

When reviewing plans (via `crit plan` or the ExitPlanMode hook), `.crit.json` is stored in `~/.crit/plans/<slug>/` — not the project root. Use `--plan <slug>` so `crit comment` finds the right file:

```bash
crit comment --plan my-plan-2026-03-23 --reply-to c1 --resolve --author 'Claude Code' 'Updated the plan'
crit comment --plan my-plan-2026-03-23 --reply-to c1 --author 'Claude Code' 'Updated the plan'
```

The `--plan` flag resolves to the plan storage directory automatically. The slug is shown in the review feedback prompt. **Always use `--plan` when responding to plan review comments** — without it, `crit comment` looks in the project root and won't find the comments.
Expand Down Expand Up @@ -110,8 +110,8 @@ crit comment --author 'Claude Code' 'Overall architecture looks solid'
crit comment --author 'Claude Code' src/auth.go 'This file needs restructuring'
crit comment --author 'Claude Code' src/auth.go:42 'Missing null check on user.session — will panic if session expired'
crit comment --author 'Claude Code' src/handler.go:15-28 'This error is swallowed silently'
crit comment --reply-to c1 --resolve --author 'Claude Code' 'Added null check on line 42'
crit comment --reply-to r0 --resolve --author 'Claude Code' 'All issues addressed'
crit comment --reply-to c1 --author 'Claude Code' 'Added null check on line 42'
crit comment --reply-to r0 --author 'Claude Code' 'All issues addressed'
```

Rules:
Expand All @@ -133,8 +133,8 @@ echo '[
{"path": "session.go", "body": "restructure", "scope": "file"},
{"file": "src/auth.go", "line": 42, "body": "Missing null check"},
{"file": "src/auth.go", "line": "50-55", "body": "Extract to helper"},
{"reply_to": "c1", "body": "Fixed — added null check", "resolve": true},
{"reply_to": "r0", "body": "Done", "resolve": true}
{"reply_to": "c1", "body": "Fixed — added null check"},
{"reply_to": "r0", "body": "Done"}
]' | crit comment --json --author 'Claude Code'
```

Expand All @@ -150,7 +150,7 @@ JSON schema per entry:
| `author` | string | no | Per-entry override (falls back to `--author`) |
| `scope` | string | no | `"review"`, `"file"`, or omit to infer from context |
| `reply_to` | string | yes (reply) | Comment ID (`"c1"` or `"r0"`) |
| `resolve` | bool | no | Mark the parent comment resolved |
| `resolve` | bool | no | Mark the parent comment resolved (user action — don't set from AI) |

Scope inference when `scope` is omitted:
- Has `reply_to` → reply
Expand Down
12 changes: 6 additions & 6 deletions integrations/cline/crit.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ crit

## After review

Read `.crit.json` to find the user's inline comments. Comments have three scopes: line comments in `files.<path>.comments` (with `start_line`/`end_line`), file comments (same array, `scope: "file"`, lines are 0), and review comments in the top-level `review_comments` array (`scope: "review"`, not tied to any file). A comment is unresolved if `"resolved": false` or if the `resolved` field is missing. Address each unresolved comment by revising the referenced file. After addressing, reply with what you did: `crit comment --reply-to <id> --resolve --author 'Cline' '<what you did>'`. This works for both file comment IDs (`c1`) and review comment IDs (`r0`).
Read `.crit.json` to find the user's inline comments. Comments have three scopes: line comments in `files.<path>.comments` (with `start_line`/`end_line`), file comments (same array, `scope: "file"`, lines are 0), and review comments in the top-level `review_comments` array (`scope: "review"`, not tied to any file). Address each unresolved comment by revising the referenced file. After addressing, reply with what you did: `crit comment --reply-to <id> --author 'Cline' '<what you did>'`. This works for both file comment IDs (`c1`) and review comment IDs (`r0`).

When addressing multiple comments, use `--json` to resolve them all in one call:
When addressing multiple comments, use `--json` to reply to them all in one call:

```bash
echo '[
{"reply_to": "c1", "body": "Fixed", "resolve": true},
{"reply_to": "c2", "body": "Refactored as suggested", "resolve": true}
{"reply_to": "c1", "body": "Fixed"},
{"reply_to": "c2", "body": "Refactored as suggested"}
]' | crit comment --json --author 'Cline'
```

Expand All @@ -58,8 +58,8 @@ crit comment --author 'Cline' '<body>' # Review-level c
crit comment --author 'Cline' <path> '<body>' # File-level comment
crit comment --author 'Cline' <path>:<line> '<body>' # Line comment
crit comment --author 'Cline' <path>:<start>-<end> '<body>' # Line range comment
crit comment --reply-to c1 --resolve --author 'Cline' '<body>' # Reply to file comment
crit comment --reply-to r0 --resolve --author 'Cline' '<body>' # Reply to review comment
crit comment --reply-to c1 --author 'Cline' '<body>' # Reply to file comment
crit comment --reply-to r0 --author 'Cline' '<body>' # Reply to review comment
```

Paths are relative, line numbers are 1-indexed, comments are appended (never replaced). Creates `.crit.json` automatically if it doesn't exist.
Expand Down
Loading
Loading