@joshuafolkken/kit 1.1455.0 → 1.1471.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/dependency-update/SKILL.md +26 -55
- package/.claude/skills/epic-commands/SKILL.md +87 -148
- package/.claude/skills/epic-commands/epic-bundle.md +45 -77
- package/.claude/skills/epic-commands/execution-waves.md +44 -81
- package/.claude/skills/verify-ui/SKILL.md +25 -50
- package/.claude/skills/workflow-commands/background-commands.md +36 -47
- package/.claude/skills/workflow-commands/backlogrun-child.md +72 -85
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +91 -121
- package/.claude/skills/workflow-commands/backlogrun-park.md +73 -117
- package/.claude/skills/workflow-commands/backlogrun-progress.md +7 -9
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +11 -20
- package/.claude/skills/workflow-commands/backlogrun-steps.md +43 -52
- package/.claude/skills/workflow-commands/chain-rule.md +24 -34
- package/.claude/skills/workflow-commands/followup.md +57 -76
- package/.claude/skills/workflow-commands/issue-comments.md +43 -60
- package/.claude/skills/workflow-commands/kickoff.md +65 -74
- package/.claude/skills/workflow-commands/observation-filing.md +62 -107
- package/.claude/skills/workflow-commands/observation-ledger.md +56 -111
- package/.claude/skills/workflow-commands/pre-gate-cut.md +89 -138
- package/.claude/skills/workflow-commands/prerequisite.md +10 -15
- package/.claude/skills/workflow-commands/progress-watcher.md +21 -26
- package/.claude/skills/workflow-commands/retrospective.md +31 -50
- package/.claude/skills/workflow-commands/split-assessment.md +34 -58
- package/.claude/skills/workflow-commands/working-tree-hold.md +54 -71
- package/CLAUDE.md +6 -5
- package/dist/CLAUDE.md +6 -5
- package/dist/hooks/batch-guard.js +6 -6
- package/dist/hooks/{chunk-7WQBPLUN.js → chunk-43ZHT22P.js} +31 -15
- package/dist/hooks/{chunk-LIAFCXL7.js → chunk-AS74OU3D.js} +23 -7
- package/dist/hooks/{chunk-3C4XRYG6.js → chunk-E7OIKX5Z.js} +17 -12
- package/dist/hooks/{chunk-Z4XI7CZS.js → chunk-EUMACUK2.js} +18 -12
- package/dist/hooks/{chunk-WNLVGT7E.js → chunk-H5HVWYXK.js} +4 -4
- package/dist/hooks/{chunk-HHI6FO3R.js → chunk-IIGFYXKC.js} +345 -240
- package/dist/hooks/{chunk-GPLGZ6IC.js → chunk-J47HU5H5.js} +14 -3
- package/dist/hooks/{chunk-OLMO72ON.js → chunk-K4EOONYM.js} +1 -1
- package/dist/hooks/{chunk-D5QBTOCZ.js → chunk-K4LMBQC2.js} +4 -4
- package/dist/hooks/{chunk-TBJFTSUY.js → chunk-KC5AK2GF.js} +8 -6
- package/dist/hooks/chunk-SHGPANFB.js +56 -0
- package/dist/hooks/{chunk-5H4SSDSD.js → chunk-YHBZAJSV.js} +3 -3
- package/dist/hooks/{chunk-HFGWYGUV.js → chunk-YYPI7SJZ.js} +5 -5
- package/dist/hooks/codex-hook-adapter.js +13 -13
- package/dist/hooks/duplicate-read-guard.js +7 -7
- package/dist/hooks/format-edited.js +3 -3
- package/dist/hooks/inputs.json +216 -214
- package/dist/hooks/investigation-guard.js +7 -7
- package/dist/hooks/pretool-guard.js +12 -12
- package/dist/hooks/session-lang.js +6 -5
- package/dist/hooks/stop-guard.js +18 -14
- package/dist/josh.js +5 -6
- package/dist/managed-marker/index.js +1 -2
- package/dist/version/index.js +15 -12
- package/eslint/base.js +2 -1
- package/eslint/rules/unicorn.js +16 -0
- package/package.json +3 -3
- package/prompts/coding-standards.md +12 -22
- package/prompts/collaboration-workflow/file-edits.md +26 -44
- package/prompts/collaboration-workflow/gh-rest.md +20 -36
- package/prompts/collaboration-workflow/glossary.md +5 -7
- package/prompts/collaboration-workflow/issue-citation.md +7 -13
- package/prompts/collaboration-workflow/issue-template.md +29 -29
- package/prompts/collaboration-workflow/operating-rules.md +35 -44
- package/prompts/collaboration-workflow/output-bounds.md +15 -15
- package/prompts/collaboration-workflow/overview.md +14 -19
- package/prompts/collaboration-workflow/plan-comment.md +13 -13
- package/prompts/collaboration-workflow/principles.md +50 -53
- package/prompts/collaboration-workflow/proposal-request.md +1 -9
- package/prompts/collaboration-workflow/report-format.md +32 -49
- package/prompts/collaboration-workflow/residency.md +10 -10
- package/prompts/collaboration-workflow/rule-delivery.md +9 -9
- package/prompts/collaboration-workflow/shell-body.md +10 -20
- package/prompts/collaboration-workflow/turn-batching.md +8 -14
- package/prompts/collaboration-workflow/upstream-interrupt.md +26 -34
- package/prompts/collaboration-workflow/wip-cap.md +24 -30
- package/prompts/collaboration-workflow.md +24 -25
- package/prompts/refactoring.md +33 -43
- package/prompts/review-rubric.md +84 -129
- package/prompts/review.md +111 -141
- package/prompts/sonar-hotspot-handling.md +22 -50
- package/prompts/testing-guide.md +48 -99
- package/scripts/adopt/adopt-toolkits.ts +2 -4
- package/scripts/agent/agent-exit-record.ts +23 -1
- package/scripts/agent/codex-agent-argv.ts +7 -2
- package/scripts/backlog/backlog-budget-cli.ts +1 -2
- package/scripts/backlog/backlog-drive-carried.ts +26 -0
- package/scripts/backlog/backlog-drive-cli.ts +10 -5
- package/scripts/backlog/backlog-drive-named.ts +2 -4
- package/scripts/backlog/backlog-drive-restore.ts +19 -1
- package/scripts/backlog/backlog-drive-seats.ts +27 -0
- package/scripts/backlog/backlog-drive.ts +11 -6
- package/scripts/backlog/backlog-ready.ts +13 -6
- package/scripts/behavior/behavior-rules.ts +3 -2
- package/scripts/cost-runtime/codex-usage.ts +4 -2
- package/scripts/cost-runtime/cost-cli.ts +1 -2
- package/scripts/delegation/investigation-guard.ts +1 -1
- package/scripts/delegation/investigation-reads.ts +1 -1
- package/scripts/discovery/repo-discovery.ts +4 -2
- package/scripts/discovery/repo-origin.ts +2 -4
- package/scripts/doctor/doctor-logic.ts +6 -3
- package/scripts/document/document-byte-budget.ts +27 -27
- package/scripts/document/document-byte-check.ts +1 -2
- package/scripts/document/entry-read-budget.ts +2 -2
- package/scripts/epic/epic-audit-rationale.ts +8 -2
- package/scripts/epic/epic-bundle-cli.ts +1 -2
- package/scripts/epic/epic-chains.ts +6 -2
- package/scripts/epic/epic-close-comment.ts +1 -2
- package/scripts/gate/verification-gate.ts +7 -2
- package/scripts/gh/git-pr.ts +6 -2
- package/scripts/git/git-common-directory.ts +3 -3
- package/scripts/git/git-diff-reads.ts +16 -9
- package/scripts/git/git-execa-error.ts +1 -2
- package/scripts/hooks/format-edited-file.ts +10 -4
- package/scripts/hooks/pre-push-unit.ts +15 -4
- package/scripts/hooks/pretool-guard.ts +23 -29
- package/scripts/hooks/step-zero-notice.ts +3 -2
- package/scripts/init/hook-command-rewrite.ts +6 -2
- package/scripts/init/init-logic-deploy-vps.ts +4 -2
- package/scripts/issue/behavior-change-lint.ts +12 -6
- package/scripts/issue/issue-scout-cli.ts +3 -2
- package/scripts/josh/file-map-stamp.ts +1 -3
- package/scripts/josh/hook-decision.ts +17 -2
- package/scripts/lane/lane-await.ts +3 -2
- package/scripts/lane/lane-child-invocation.ts +14 -1
- package/scripts/lane/lane-guard-policy.ts +4 -4
- package/scripts/lane/lane-ledger.ts +9 -0
- package/scripts/lane/lane-load.ts +9 -2
- package/scripts/lane/lane-measure-cli.ts +2 -0
- package/scripts/lane/lane-parked.ts +18 -0
- package/scripts/lane/lane-process-load.ts +125 -0
- package/scripts/lane/lane-process-stats.ts +93 -0
- package/scripts/lane/lane-registry.ts +8 -3
- package/scripts/lane/lane-session-broker.ts +29 -5
- package/scripts/lane/lane-spent.ts +14 -3
- package/scripts/lane/lane-stats.ts +1 -0
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/overrides/lockfile-overrides.ts +1 -3
- package/scripts/propagate/propagate.ts +1 -2
- package/scripts/release/release-progress.ts +3 -2
- package/scripts/report/report-lint.ts +7 -4
- package/scripts/review/review-record-cli.ts +6 -2
- package/scripts/rules/destructive-command.ts +6 -9
- package/scripts/rules/direct-filing.ts +3 -7
- package/scripts/rules/early-heartbeat.ts +7 -18
- package/scripts/rules/file-body.ts +6 -13
- package/scripts/rules/filing-cap.ts +3 -6
- package/scripts/rules/git-force.ts +5 -9
- package/scripts/rules/implementation-cut.ts +37 -35
- package/scripts/rules/index-guard.ts +4 -7
- package/scripts/rules/issue-comments.ts +5 -15
- package/scripts/rules/josh-git-bare.ts +3 -6
- package/scripts/rules/lane-background.ts +10 -21
- package/scripts/rules/lane-carry-conflict.ts +7 -17
- package/scripts/rules/lane-interactive-ask.ts +6 -11
- package/scripts/rules/lane-park.ts +5 -13
- package/scripts/rules/lane-split-park.ts +2 -7
- package/scripts/rules/lane-switch-main.ts +9 -12
- package/scripts/rules/oracle-consulted.ts +4 -5
- package/scripts/rules/piped-verification.ts +81 -31
- package/scripts/rules/poll-loop.ts +7 -17
- package/scripts/rules/pre-gate-cut.ts +7 -21
- package/scripts/rules/prior-comment-read.ts +7 -5
- package/scripts/rules/protected-files.ts +5 -9
- package/scripts/rules/raw-field-body.ts +3 -7
- package/scripts/rules/rule-body-guard.ts +4 -11
- package/scripts/rules/run-tail-rule.ts +6 -22
- package/scripts/rules/shell-body-trigger.ts +4 -6
- package/scripts/rules/shell-segments.ts +7 -0
- package/scripts/rules/stop-rules.ts +16 -29
- package/scripts/rules/test-declared-commit.ts +4 -10
- package/scripts/rules/third-party-write.ts +5 -10
- package/scripts/rules/worktree-guard.ts +5 -12
- package/scripts/run/board/run-board-github.ts +11 -3
- package/scripts/run/board/run-board-idle.ts +31 -0
- package/scripts/run/board/run-board-read.ts +9 -12
- package/scripts/run/board/run-board-reason.ts +7 -3
- package/scripts/run/board/run-board-state.ts +4 -0
- package/scripts/run/board/run-board-status.ts +18 -3
- package/scripts/run/board/run-board-thanks.ts +7 -2
- package/scripts/run/board/run-board-tick.ts +32 -7
- package/scripts/run/carry/run-carry-args.ts +1 -3
- package/scripts/run/carry/run-carry-conversation.ts +7 -2
- package/scripts/run/cut/run-cut-cli.ts +15 -20
- package/scripts/run/cut/run-cut-decline.ts +72 -0
- package/scripts/run/cut/run-cut-ready.ts +74 -0
- package/scripts/run/cut/run-cut-report.ts +13 -0
- package/scripts/run/cut/run-cut.ts +10 -1
- package/scripts/run/hold/run-hold-cli.ts +14 -3
- package/scripts/run/hold/run-hold.ts +6 -3
- package/scripts/run/merge/run-merge-cli.ts +30 -7
- package/scripts/run/merge/run-merge-ship.ts +59 -1
- package/scripts/run/merge/run-merge.ts +3 -2
- package/scripts/run/run-ending.ts +31 -3
- package/scripts/run/run-parent-cut-hook.ts +5 -10
- package/scripts/run/run-preflight.ts +1 -2
- package/scripts/run/run-stop-notify.ts +1 -2
- package/scripts/run/run-watcher-guard.ts +6 -3
- package/scripts/run/ship/run-ship-review-steps.ts +13 -4
- package/scripts/run/ship/run-ship-review.ts +15 -2
- package/scripts/run/tidy/run-tidy-cli.ts +3 -3
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -2
- package/scripts/safe-chain/project-config.ts +7 -2
- package/scripts/sync/sync-hook-safety.ts +8 -2
- package/scripts/test/unit-worker-share.ts +3 -2
- package/scripts/time-runtime/time-batch-guard.ts +3 -3
- package/scripts/time-runtime/time-hook-transcript.ts +3 -2
- package/scripts/time-runtime/time-shell.ts +10 -0
- package/scripts/version/effective-upstream.ts +3 -4
- package/scripts/version/kit-version-config.ts +8 -2
- package/scripts/version/latest-corepack.ts +1 -2
- package/scripts/version/release-hold.ts +11 -4
- package/scripts/version/version-commands.ts +12 -4
- package/dist/hooks/chunk-UT7YC3N2.js +0 -56
package/prompts/review-rubric.md
CHANGED
|
@@ -1,91 +1,64 @@
|
|
|
1
1
|
# Code Review Rubric
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
the
|
|
13
|
-
|
|
14
|
-
**Default hypothesis: this diff contains at least one non-trivial issue.** Your job is not to confirm
|
|
15
|
-
the implementation is correct — it is to find the issue. Work through each category assuming the code
|
|
16
|
-
is wrong until you can prove otherwise. Do not declare a category clean unless you have actively
|
|
17
|
-
tried to break it.
|
|
18
|
-
|
|
19
|
-
**In the second round that hypothesis is aimed at the fix delta, not at the whole diff again.**
|
|
20
|
-
Applied twice to one diff it returns new findings whether or not the code changed, because returning
|
|
21
|
-
none is what it rules out — see "The second round is a verification pass" below.
|
|
3
|
+
The rubric the reviewer applies: severity, output format, the nine categories and stop conditions.
|
|
4
|
+
`pnpm josh review:brief` prints its absolute path for `/code-review`, which runs in a forked process
|
|
5
|
+
reading no other repository document, so this file stands alone. Orchestration (when a review runs,
|
|
6
|
+
which round is due, the gate, the PR) is in `prompts/review.md` and the `workflow-commands` skill,
|
|
7
|
+
already resolved into the brief.
|
|
8
|
+
|
|
9
|
+
**Default hypothesis: this diff contains at least one non-trivial issue.** Your job is to find it, not
|
|
10
|
+
to confirm correctness. Assume each category is wrong until proven otherwise; declare one clean only
|
|
11
|
+
after actively trying to break it. In the second round the hypothesis is aimed at the fix delta, not
|
|
12
|
+
the whole diff (see "The second round is a verification pass" below).
|
|
22
13
|
|
|
23
14
|
---
|
|
24
15
|
|
|
25
16
|
## Severity (decided by a test, never by discretion)
|
|
26
17
|
|
|
27
|
-
|
|
28
|
-
fixed before the PR is opened — so a borderline finding rated `medium` costs a whole round, and
|
|
29
|
-
whether it got one must not be left to whoever happened to be reviewing.
|
|
18
|
+
`medium` blocks opening the PR, so a borderline `medium` costs a whole round — decide it by test.
|
|
30
19
|
|
|
31
20
|
**A finding is `medium` or higher only when both of these hold:**
|
|
32
21
|
|
|
33
|
-
1. **It reaches something real** — a runtime code path, a distributed artifact a consumer reads,
|
|
34
|
-
the verification that guards either
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
suite — the failure mode this repository's marker suites exist to prevent — could never exceed
|
|
38
|
-
`low` and would always be skippable in one line.
|
|
22
|
+
1. **It reaches something real** — a runtime code path, a distributed artifact a consumer reads, or
|
|
23
|
+
the verification that guards either (a test, fixture or CI check whose defect lets one of the first
|
|
24
|
+
two ship unnoticed). `package.json` does not ship `**/*.test.ts` or `**/*-fixture.ts`, so without
|
|
25
|
+
this third member a vacuous or wrongly-pinned suite could never exceed `low`.
|
|
39
26
|
2. **You can write the concrete failure scenario** — the inputs or state, and the wrong output,
|
|
40
27
|
breakage or misreading that follows. Not "this could be confusing": the actual sequence.
|
|
41
28
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
is the one that decides borderline cases.
|
|
45
|
-
|
|
46
|
-
**Test 2 asks whether a scenario can be written, not whether you wrote one.** The cheap action — not
|
|
47
|
-
attempting it — produces the non-blocking severity. So the obligation is to **attempt the scenario
|
|
48
|
-
for every finding that passes test 1, and to say so when the attempt failed**: "no failure scenario —
|
|
49
|
-
<what you tried>" is the evidence, and a `low` on a test-1 finding without it is not a severity, it
|
|
50
|
-
is a skipped step.
|
|
29
|
+
Fail either test and the finding is `low` — **a finding whose failure scenario you cannot write is
|
|
30
|
+
`low` however uncomfortable it looks**.
|
|
51
31
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
32
|
+
Test 2 asks whether a scenario can be written, not whether you wrote one: attempt it for every finding
|
|
33
|
+
that passes test 1, and when the attempt fails write "no failure scenario — <what you tried>". A `low`
|
|
34
|
+
on a test-1 finding without that line is a skipped step.
|
|
55
35
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
36
|
+
Distributed artifacts — `CLAUDE.md`, `prompts/**`, `.claude/**`, `docs/**` — are reviewed at the same
|
|
37
|
+
level as runtime code: a dangling pointer or a citation naming the wrong file reaches every consumer,
|
|
38
|
+
and no test covers prose.
|
|
59
39
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
40
|
+
`high` is fixed before committing and blocks the merge regardless of round count. A `low` that fails
|
|
41
|
+
test 1 (does not reach the user) may be dropped with a one-line reason; a `low` that passed test 1 and
|
|
42
|
+
lacks only a failure scenario still reaches the user, so if it closes in a few lines inside a file the
|
|
43
|
+
diff already touches, fix it.
|
|
64
44
|
|
|
65
45
|
---
|
|
66
46
|
|
|
67
47
|
## The second round is a verification pass, not a second full review
|
|
68
48
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
**What changes is the question, never the standard.** A confirmed High still blocks the merge
|
|
75
|
-
whatever the round count, the cap in `prompts/review.md` → "Review round cap" still holds, and every rule here applies to this pass
|
|
76
|
-
unchanged.
|
|
49
|
+
Read twice under "assume it is wrong", one diff returns new findings whether or not the code changed,
|
|
50
|
+
so round 2 asks a different question. **The question changes, never the standard**: a confirmed High
|
|
51
|
+
still blocks the merge, the cap in `prompts/review.md` → "Review round cap" still holds, and every rule
|
|
52
|
+
here applies unchanged.
|
|
77
53
|
|
|
78
|
-
| |
|
|
79
|
-
| -------------- | -------------------- |
|
|
80
|
-
| **Scope** | the whole change | the
|
|
81
|
-
| **Question** | "review this change" | "did each first-round finding
|
|
82
|
-
| **Categories** | all nine | category 1
|
|
83
|
-
| **Output** | the full template | one line per first-round finding with its resolution, then
|
|
54
|
+
| | First round | Second round |
|
|
55
|
+
| -------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| **Scope** | the whole change | the fix delta: what round 1's fixes wrote, plus call sites of any signature they changed |
|
|
57
|
+
| **Question** | "review this change" | "did each first-round finding close, and did the fix introduce a defect?" |
|
|
58
|
+
| **Categories** | all nine | category 1, plus categories the fix delta touches (i18n only for an added user-visible string, Tests only for a test) |
|
|
59
|
+
| **Output** | the full template | one line per first-round finding with its resolution, then new findings inside the fix delta |
|
|
84
60
|
|
|
85
|
-
The
|
|
86
|
-
no fix touched.
|
|
87
|
-
|
|
88
|
-
Template for the second round:
|
|
61
|
+
The round-2 brief names the in-scope files; do not re-read parts no fix touched.
|
|
89
62
|
|
|
90
63
|
```md
|
|
91
64
|
### First-round findings
|
|
@@ -102,35 +75,27 @@ Template for the second round:
|
|
|
102
75
|
<counts by severity across both sections, and overall go/no-go>
|
|
103
76
|
```
|
|
104
77
|
|
|
105
|
-
|
|
106
|
-
pass narrows what is read, not what counts — an unresolved High blocks exactly as it did in the first
|
|
107
|
-
round.
|
|
78
|
+
An unclosed first-round finding keeps its original severity; an unresolved High blocks as before.
|
|
108
79
|
|
|
109
80
|
---
|
|
110
81
|
|
|
111
82
|
## Review output format
|
|
112
83
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
**This is the first round's format.** The second round is a verification pass and has its own,
|
|
116
|
-
narrower one — see above.
|
|
84
|
+
First-round format (round 2 uses the one above). Give every category an explicit verdict; omit none.
|
|
117
85
|
|
|
118
86
|
For each finding:
|
|
119
87
|
|
|
120
88
|
- Cite `file_path:line_number`
|
|
121
|
-
- State
|
|
122
|
-
by discretion
|
|
89
|
+
- State severity (`high` / `medium` / `low`) by the two tests in "Severity"
|
|
123
90
|
- Explain the concrete problem and the minimal fix
|
|
124
|
-
- On a
|
|
125
|
-
scenario — <what you tried>`
|
|
91
|
+
- On a test-1 finding rated `low`, write `no failure scenario — <what you tried>`
|
|
126
92
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
93
|
+
A category with no findings needs a proof statement, e.g. `No issues — checked null returns on X,
|
|
94
|
+
verified Y edge case, Z is guarded by type.` A bare `No issues` is allowed only for Security,
|
|
95
|
+
Performance, i18n and Comments when there is genuinely nothing to check (no auth code, hot paths, user
|
|
96
|
+
strings or comments touched).
|
|
131
97
|
|
|
132
|
-
Template — one `###` heading per category
|
|
133
|
-
`### Summary`:
|
|
98
|
+
Template — one `###` heading per category in the order of "Review categories", then `### Summary`:
|
|
134
99
|
|
|
135
100
|
```md
|
|
136
101
|
### Bug risks & logic errors
|
|
@@ -159,25 +124,23 @@ No issues — `parse_ids` returns what its name says; no near-copy of `split_ids
|
|
|
159
124
|
|
|
160
125
|
## Review categories (must all be checked)
|
|
161
126
|
|
|
162
|
-
|
|
163
|
-
fix delta actually touches** — the verification pass above is the only thing that narrows this list.
|
|
127
|
+
Round 1 checks all nine; round 2 checks category 1 plus the categories its fix delta touches.
|
|
164
128
|
|
|
165
129
|
### 1. Bug risks & logic errors
|
|
166
130
|
|
|
167
|
-
Actively try to break the changed code
|
|
131
|
+
Actively try to break the changed code.
|
|
168
132
|
|
|
169
|
-
-
|
|
170
|
-
|
|
133
|
+
- Off-by-one, nullability, promise handling, race conditions: for every modified function with
|
|
134
|
+
branching, trace at least one non-happy path and write it:
|
|
171
135
|
`Traced [input/state] → [result] — confirmed/flagged because [reason]`.
|
|
172
|
-
-
|
|
173
|
-
-
|
|
136
|
+
- Broken invariants, wrong return types, mishandled edge cases
|
|
137
|
+
- Boundary values and concurrency: empty / zero / max inputs, unawaited promises, shared state,
|
|
174
138
|
re-entrancy
|
|
175
|
-
-
|
|
176
|
-
|
|
177
|
-
-
|
|
139
|
+
- Impact outside the diff: open the callers of every changed export or signature and verify they still
|
|
140
|
+
hold; flag duplication the change introduces
|
|
141
|
+
- Regressions in existing behavior covered elsewhere
|
|
178
142
|
|
|
179
|
-
|
|
180
|
-
allowed.
|
|
143
|
+
**`No issues` requires at least one explicit trace statement.**
|
|
181
144
|
|
|
182
145
|
### 2. Security
|
|
183
146
|
|
|
@@ -189,67 +152,59 @@ allowed.
|
|
|
189
152
|
|
|
190
153
|
- Obvious hotspots, N+1 queries, unnecessary re-renders / reactive churn
|
|
191
154
|
- Large payloads, unbounded loops, blocking I/O on request paths
|
|
192
|
-
-
|
|
155
|
+
- Flag only concrete impact, not speculative micro-optimization
|
|
193
156
|
|
|
194
157
|
### 4. Project conventions (`CLAUDE.md`)
|
|
195
158
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
switching `no-restricted-syntax` off
|
|
159
|
+
Do not re-check what lint enforces (the gate already ran). Check what lint misses: non-identical
|
|
160
|
+
duplication, a name whose shape passes but whose meaning misleads, grouping and file layout, Svelte
|
|
161
|
+
semantics, and test placement beyond the `*.spec.*` / top-level `tests/` bans. **A lint gap the change
|
|
162
|
+
opens is itself a finding** — a disabled rule, an ignored path, an added `eslint-disable`, a block
|
|
163
|
+
switching `no-restricted-syntax` off.
|
|
201
164
|
|
|
202
165
|
### 5. i18n
|
|
203
166
|
|
|
204
167
|
- All user-visible strings (labels, buttons, toasts, validation errors, page titles) use message keys
|
|
205
|
-
- Message keys are added to
|
|
206
|
-
- No hardcoded user-visible strings
|
|
168
|
+
- Message keys are added to all locale message files, not just one
|
|
169
|
+
- No hardcoded user-visible strings
|
|
207
170
|
|
|
208
171
|
### 6. Tests
|
|
209
172
|
|
|
210
173
|
- Every code change has a corresponding test (unit or E2E) per `CLAUDE.md` Code Change Rules Step 0
|
|
211
|
-
- Test titles are English only
|
|
212
|
-
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
- **Requirement check**: does the test verify the behavior described in the issue/task, or just that
|
|
217
|
-
code executes without error?
|
|
174
|
+
- Test titles are English only and describe behavior, not implementation
|
|
175
|
+
- **Mutation check**: for the most critical test added or changed — if the key assertion/condition in
|
|
176
|
+
the implementation were inverted or removed, would it fail? If no or uncertain, rewrite it.
|
|
177
|
+
- **Requirement check**: does the test verify the behavior the issue/task describes, or only that code
|
|
178
|
+
runs without error?
|
|
218
179
|
|
|
219
180
|
### 7. Comments & content
|
|
220
181
|
|
|
221
182
|
- Comments are English only
|
|
222
|
-
- No narration comments (`// Added for issue #123`, `// TODO: refactor later`) — only
|
|
223
|
-
explaining non-obvious _why_
|
|
183
|
+
- No narration comments (`// Added for issue #123`, `// TODO: refactor later`) — only non-obvious _why_
|
|
224
184
|
- No duplicated logic that should be extracted
|
|
225
185
|
|
|
226
186
|
### 8. Assumptions audit
|
|
227
187
|
|
|
228
|
-
List 2–3 implicit assumptions
|
|
229
|
-
assumption were violated. This section cannot be empty or say "No assumptions."
|
|
230
|
-
|
|
231
|
-
Examples of assumptions worth naming:
|
|
188
|
+
List 2–3 implicit assumptions and what breaks if each is violated. Never empty or "No assumptions."
|
|
232
189
|
|
|
233
|
-
- "The API always returns an array (not null)" —
|
|
234
|
-
- "The locale file always has this key" —
|
|
235
|
-
- "The animation completes before the next interaction" — race
|
|
190
|
+
- "The API always returns an array (not null)" — null-ref if the API changes
|
|
191
|
+
- "The locale file always has this key" — shows a key string if a locale is missing
|
|
192
|
+
- "The animation completes before the next interaction" — race if the user acts fast
|
|
236
193
|
|
|
237
194
|
### 9. Confidence floor
|
|
238
195
|
|
|
239
|
-
State the **one concrete thing**
|
|
240
|
-
|
|
241
|
-
logic path that gives you that confidence — that trace itself is the proof.
|
|
196
|
+
State the **one concrete thing** you are least confident about, and why. Never "Nothing" or "No
|
|
197
|
+
concerns"; if nothing is uncertain, trace the logic path that gives that confidence as the proof.
|
|
242
198
|
|
|
243
199
|
---
|
|
244
200
|
|
|
245
201
|
## Stop conditions
|
|
246
202
|
|
|
247
|
-
- **A checkout that cannot be attested**
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
-
|
|
252
|
-
-
|
|
253
|
-
- **Low** findings → document in the PR body if skipped
|
|
203
|
+
- **A checkout that cannot be attested** (`pnpm josh review:attest <nonce>` exits non-zero) → report
|
|
204
|
+
`REVIEW TARGET MISMATCH`, no findings and no verdict of any kind: the review read a tree the brief did
|
|
205
|
+
not describe.
|
|
206
|
+
- High findings → must fix before committing
|
|
207
|
+
- Medium findings → must fix before opening the PR
|
|
208
|
+
- Low findings → document in the PR body if skipped
|
|
254
209
|
|
|
255
|
-
If the diff is empty or trivial (e.g. whitespace only), state that
|
|
210
|
+
If the diff is empty or trivial (e.g. whitespace only), state that and skip the review.
|