@erclx/canon 5.44.0 → 5.46.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/README.md +1 -1
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/api-design/REQUIREMENT.md +15 -31
- package/claude/skills/auto-ship/REQUIREMENT.md +14 -25
- package/claude/skills/backlog-triage/REQUIREMENT.md +12 -23
- package/claude/skills/build-in-slices/REQUIREMENT.md +15 -25
- package/claude/skills/canon-cli/REQUIREMENT.md +15 -27
- package/claude/skills/canon-cli/SKILL.md +0 -1
- package/claude/skills/canon-feedback/REQUIREMENT.md +10 -18
- package/claude/skills/canon-feedback-triage/REQUIREMENT.md +10 -15
- package/claude/skills/canvas-board/REQUIREMENT.md +14 -28
- package/claude/skills/ci-workflow/REQUIREMENT.md +12 -21
- package/claude/skills/code-craft/REQUIREMENT.md +14 -28
- package/claude/skills/codebase-layout/REQUIREMENT.md +14 -31
- package/claude/skills/context-fold/REQUIREMENT.md +15 -39
- package/claude/skills/context-fold/references/context.md +3 -3
- package/claude/skills/create-rule/REQUIREMENT.md +10 -24
- package/claude/skills/create-rule/SKILL.md +3 -0
- package/claude/skills/create-skill/REQUIREMENT.md +10 -21
- package/claude/skills/decision-escalate/REQUIREMENT.md +12 -24
- package/claude/skills/deploy-app/REQUIREMENT.md +12 -22
- package/claude/skills/deprecation-migration/REQUIREMENT.md +14 -42
- package/claude/skills/design-identity/REQUIREMENT.md +14 -20
- package/claude/skills/design-taste/REQUIREMENT.md +16 -57
- package/claude/skills/docs-sync/REQUIREMENT.md +14 -23
- package/claude/skills/document-health/REQUIREMENT.md +15 -29
- package/claude/skills/document-health/SKILL.md +2 -2
- package/claude/skills/document-repair/REQUIREMENT.md +32 -0
- package/claude/skills/document-repair/SKILL.md +76 -0
- package/claude/skills/document-repair/references/batches.md +44 -0
- package/claude/skills/draft-and-pick/REQUIREMENT.md +4 -3
- package/claude/skills/draft-doc/REQUIREMENT.md +4 -3
- package/claude/skills/draft-figure/REQUIREMENT.md +4 -3
- package/claude/skills/draft-identity/REQUIREMENT.md +4 -3
- package/claude/skills/draft-ready/REQUIREMENT.md +4 -3
- package/claude/skills/draft-screencast/REQUIREMENT.md +4 -3
- package/claude/skills/draft-slides/REQUIREMENT.md +4 -3
- package/claude/skills/draw-figure/REQUIREMENT.md +15 -39
- package/claude/skills/git-branch/REQUIREMENT.md +12 -26
- package/claude/skills/git-commit/REQUIREMENT.md +11 -15
- package/claude/skills/git-followup/REQUIREMENT.md +11 -22
- package/claude/skills/git-issue/REQUIREMENT.md +9 -15
- package/claude/skills/git-pr/REQUIREMENT.md +13 -32
- package/claude/skills/git-pr/SKILL.md +10 -2
- package/claude/skills/git-pr/references/closing-issues.md +47 -0
- package/claude/skills/git-pr/references/pr.md +4 -0
- package/claude/skills/git-ship/REQUIREMENT.md +13 -26
- package/claude/skills/git-split/REQUIREMENT.md +10 -17
- package/claude/skills/git-stage/REQUIREMENT.md +12 -18
- package/claude/skills/git-worktree/REQUIREMENT.md +15 -19
- package/claude/skills/make-deck/REQUIREMENT.md +13 -21
- package/claude/skills/markdown-craft/REQUIREMENT.md +9 -3
- package/claude/skills/pick-by-eye/REQUIREMENT.md +17 -67
- package/claude/skills/plan-feature/REQUIREMENT.md +15 -24
- package/claude/skills/plan-groundwork/REQUIREMENT.md +12 -28
- package/claude/skills/plan-groundwork/SKILL.md +5 -2
- package/claude/skills/plan-groundwork/references/output.md +47 -1
- package/claude/skills/plan-intake/REQUIREMENT.md +11 -26
- package/claude/skills/plan-intake/references/intake.md +2 -2
- package/claude/skills/plan-intake-answer/REQUIREMENT.md +14 -29
- package/claude/skills/plan-intake-answer/SKILL.md +7 -1
- package/claude/skills/plan-ready/REQUIREMENT.md +17 -36
- package/claude/skills/pr-evidence/REQUIREMENT.md +11 -17
- package/claude/skills/read-frames/REQUIREMENT.md +3 -8
- package/claude/skills/record-screencast/REQUIREMENT.md +14 -17
- package/claude/skills/review-address/REQUIREMENT.md +14 -38
- package/claude/skills/review-craft/REQUIREMENT.md +14 -32
- package/claude/skills/review-pr/REQUIREMENT.md +15 -34
- package/claude/skills/review-ui/REQUIREMENT.md +14 -39
- package/claude/skills/role-orchestrator/REQUIREMENT.md +16 -99
- package/claude/skills/role-orchestrator/references/orchestrator-refill.md +5 -0
- package/claude/skills/role-orchestrator/references/orchestrator-review-dispatch.md +9 -0
- package/claude/skills/role-planner/REQUIREMENT.md +15 -73
- package/claude/skills/role-reviewer/REQUIREMENT.md +15 -65
- package/claude/skills/role-reviewer/SKILL.md +5 -1
- package/claude/skills/role-worker/REQUIREMENT.md +13 -41
- package/claude/skills/role-worker/SKILL.md +2 -0
- package/claude/skills/script-screencast/REQUIREMENT.md +10 -16
- package/claude/skills/search-craft/REQUIREMENT.md +12 -36
- package/claude/skills/search-craft/SKILL.md +1 -1
- package/claude/skills/search-craft/references/adopted.md +2 -2
- package/claude/skills/session-compact/REQUIREMENT.md +13 -23
- package/claude/skills/session-map/REQUIREMENT.md +13 -29
- package/claude/skills/session-relay/REQUIREMENT.md +14 -58
- package/claude/skills/session-relay/SKILL.md +6 -0
- package/claude/skills/session-resume/REQUIREMENT.md +13 -27
- package/claude/skills/session-worktree/REQUIREMENT.md +14 -43
- package/claude/skills/systematic-debugging/REQUIREMENT.md +13 -34
- package/claude/skills/target-check/REQUIREMENT.md +16 -23
- package/claude/skills/target-setup/REQUIREMENT.md +11 -34
- package/claude/skills/target-setup/SKILL.md +2 -2
- package/claude/skills/target-setup/references/detect.md +0 -1
- package/claude/skills/target-setup/references/verify.md +2 -2
- package/claude/skills/task-board/REQUIREMENT.md +13 -22
- package/claude/skills/task-board/SKILL.md +7 -0
- package/claude/skills/task-board/references/tasks.md +1 -1
- package/claude/skills/task-complete/REQUIREMENT.md +11 -24
- package/claude/skills/task-complete/references/archive.md +1 -0
- package/claude/skills/teach-workspace/REQUIREMENT.md +14 -45
- package/claude/skills/teach-workspace/references/promotion.md +5 -5
- package/claude/skills/test-craft/REQUIREMENT.md +15 -46
- package/claude/skills/test-first/REQUIREMENT.md +14 -20
- package/claude/skills/ui-checklist/REQUIREMENT.md +14 -29
- package/claude/skills/ux-audit/REQUIREMENT.md +3 -7
- package/claude/skills/ux-measure/REQUIREMENT.md +14 -28
- package/claude/skills/video-craft/REQUIREMENT.md +14 -27
- package/claude/skills/write-doc/REQUIREMENT.md +14 -24
- package/claude/skills/write-human/REQUIREMENT.md +15 -27
- package/claude/skills/youtube-transcripts/REQUIREMENT.md +9 -15
- package/docs/agents/context-audit.md +19 -12
- package/docs/agents/install-and-sync.md +2 -2
- package/docs/agents/markdown-audit.md +15 -10
- package/docs/agents/output-shape.md +1 -2
- package/docs/target/migrations.md +18 -0
- package/docs/target/projects.md +3 -2
- package/docs/target/scenarios.md +4 -1
- package/docs/workflow/skill-map-on-request.md +1 -1
- package/docs/workflow/skill-map.md +6 -5
- package/governance/detect.toml +4 -0
- package/governance/ledger/lang/go.md +61 -0
- package/governance/ledger/lang/php.md +50 -0
- package/governance/ledger/lang/python.md +68 -0
- package/governance/ledger/lang/typescript.md +64 -0
- package/governance/ledger/lib/database.md +65 -0
- package/governance/ledger/lib/e2e-reliability.md +57 -0
- package/governance/ledger/lib/pydantic.md +61 -0
- package/governance/ledger/lib/security-server.md +62 -0
- package/governance/ledger/lib/security-web.md +51 -0
- package/governance/ledger/lib/tanstack-query.md +57 -0
- package/governance/ledger/lib/test-scope.md +43 -0
- package/governance/ledger/lib/testing-go.md +57 -0
- package/governance/ledger/lib/testing-php.md +51 -0
- package/governance/ledger/lib/testing-py.md +67 -0
- package/governance/ledger/lib/testing-ts.md +63 -0
- package/governance/ledger/lib/zod.md +47 -0
- package/governance/ledger/tooling/ci-workflow.md +33 -0
- package/governance/ledger/tooling/code-comments.md +48 -0
- package/governance/ledger/tooling/config-comments.md +27 -0
- package/governance/ledger/tooling/dependencies.md +38 -0
- package/governance/ledger/ui/a11y.md +55 -0
- package/governance/ledger/ui/copy.md +49 -0
- package/governance/ledger/ui/design-reference.md +42 -0
- package/governance/ledger/ui/design-taste.md +19 -0
- package/governance/ledger/ui/forms.md +71 -0
- package/governance/ledger/ui/interface-casing.md +47 -0
- package/governance/ledger/ui/keyboard.md +68 -0
- package/governance/ledger/ui/link-behavior.md +29 -0
- package/governance/ledger/ui/motion.md +33 -0
- package/governance/ledger/ui/surface-capture.md +69 -0
- package/governance/ledger/ui/ux-completeness.md +79 -0
- package/governance/renames.toml +0 -2
- package/governance/rules/claude/output.md +5 -1
- package/governance/rules/code/routing.md +5 -1
- package/governance/rules/lang/go.md +7 -16
- package/governance/rules/lang/php.md +3 -3
- package/governance/rules/lang/python.md +9 -18
- package/governance/rules/lang/typescript.md +9 -19
- package/governance/rules/lib/database.md +5 -5
- package/governance/rules/lib/e2e-reliability.md +4 -6
- package/governance/rules/lib/pydantic.md +14 -16
- package/governance/rules/lib/security-server.md +4 -4
- package/governance/rules/lib/security-web.md +6 -10
- package/governance/rules/lib/tanstack-query.md +10 -12
- package/governance/rules/lib/test-scope.md +4 -4
- package/governance/rules/lib/testing-go.md +1 -2
- package/governance/rules/lib/testing-php.md +4 -5
- package/governance/rules/lib/testing-py.md +11 -19
- package/governance/rules/lib/testing-ts.md +7 -16
- package/governance/rules/lib/zod.md +6 -8
- package/governance/rules/tooling/code-comments.md +2 -4
- package/governance/rules/tooling/config-comments.md +1 -4
- package/governance/rules/tooling/dependencies.md +1 -1
- package/governance/rules/ui/a11y.md +16 -45
- package/governance/rules/ui/copy.md +6 -9
- package/governance/rules/ui/forms.md +13 -19
- package/governance/rules/ui/interface-casing.md +5 -7
- package/governance/rules/ui/keyboard.md +38 -0
- package/governance/rules/ui/link-behavior.md +3 -3
- package/governance/rules/ui/motion.md +3 -3
- package/governance/rules/ui/surface-capture.md +15 -27
- package/governance/rules/ui/ux-completeness.md +16 -39
- package/governance/stacks/base.toml +0 -1
- package/package.json +1 -1
- package/scripts/core/install-check.sh +1 -1
- package/src/claude/cases/workflow.ts +12 -0
- package/src/cli/help.ts +0 -1
- package/src/cli.ts +0 -2
- package/src/commands/context.ts +57 -3
- package/src/commands/gov.ts +4 -0
- package/src/commands/init.ts +2 -2
- package/src/commands/labels.ts +83 -3
- package/src/commands/markdown.ts +188 -21
- package/src/commands/sessions.ts +36 -3
- package/src/commands/tasks.ts +180 -0
- package/src/commands/tooling.ts +18 -5
- package/src/commands/worktrees.ts +2 -0
- package/src/context/coverage.ts +210 -0
- package/src/context/gate.ts +12 -3
- package/src/design/components.ts +1 -1
- package/src/gate/stages.ts +1 -1
- package/src/gov/audit.ts +22 -2
- package/src/init/plan.ts +1 -8
- package/src/init/steps.ts +44 -7
- package/src/intake/items.ts +14 -0
- package/src/inventory/subjects.ts +1 -1
- package/src/labels/closing.ts +46 -0
- package/src/markdown/gated.ts +250 -0
- package/src/markdown/scope.ts +119 -2
- package/src/migrate/rename.ts +6 -0
- package/src/migrate/scratch-evidence.ts +12 -4
- package/src/records/backup.ts +3 -3
- package/src/records/validate.ts +3 -3
- package/src/roots/record.ts +17 -8
- package/src/sessions/claim.ts +7 -0
- package/src/sessions/live.ts +53 -6
- package/src/sessions/registry.ts +11 -0
- package/src/sessions/resolve.ts +32 -5
- package/src/tasks/closes.ts +136 -0
- package/src/tasks/record.ts +1 -1
- package/src/tooling/inject.ts +26 -7
- package/src/tooling/package.ts +32 -0
- package/src/tooling/read.ts +46 -3
- package/src/tooling/scan.ts +8 -2
- package/src/worktrees/reclaim.ts +16 -1
- package/tooling/astro/reference.md +64 -93
- package/tooling/base/configs/.github/workflows/phase-label-gate.yml +1 -1
- package/tooling/base/configs/scripts/verify.ts +2 -2
- package/tooling/base/reference.md +1 -9
- package/tooling/base/seeds/canon/context/{ci.md → development/ci.md} +1 -1
- package/tooling/base/seeds/canon/context/development/index.md +11 -0
- package/tooling/base/seeds/canon/context/{development.md → development/setup.md} +8 -12
- package/tooling/base/seeds/canon/context/index.md +1 -2
- package/tooling/claude/manifest.toml +1 -5
- package/tooling/claude/reference.md +36 -59
- package/tooling/claude/seeds/.claude/hooks/board-validate.sh +1 -1
- package/tooling/claude/seeds/.claude/hooks/index-reminder.sh +2 -7
- package/tooling/claude/seeds/.claude/hooks/pr-create-log.sh +2 -7
- package/tooling/claude/seeds/.claude/hooks/scratch-guard.sh +3 -10
- package/tooling/claude/seeds/.claude/hooks/search-reminder.sh +2 -7
- package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +2 -4
- package/tooling/claude/seeds/CLAUDE.md +2 -2
- package/tooling/nextjs/reference.md +0 -6
- package/tooling/php/reference.md +0 -4
- package/tooling/web/configs/.github/workflows/verify.yml +28 -0
- package/tooling/web/configs/.oxlintrc.json +7 -0
- package/tooling/web/configs/e2e/capture-types.ts +35 -0
- package/tooling/web/configs/e2e/screenshot.ts +23 -72
- package/tooling/web/manifest.toml +1 -1
- package/tooling/web/reference.md +77 -124
- package/tooling/web/seeds/e2e/capture/cases.ts +47 -0
- package/governance/rules/canon/task-scope.md +0 -12
- package/src/commands/wiki.ts +0 -100
- package/src/wiki/init.ts +0 -85
|
@@ -7,42 +7,27 @@ description: Scope boundary for answering a filed intake from chat, and the writ
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
An operator answers a filed intake by opening each cluster file and typing under each item, so the largest folders go unanswered. A session asked to help reads an empty slot as agreement, answers in chat and never the file, or overwrites a slot already filled.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
The write itself fails a fourth way that no prose rule prevents. Every worker runs in a linked worktree where the file-editing tools refuse a main-root path, and a stream editor expands an unescaped ampersand in the replacement to the whole match and exits zero when it matches nothing. A body instructing either route reports success and loses the answer.
|
|
15
|
-
|
|
16
|
-
The batching fails a fifth way. A folder holding thirty unread items put as thirty questions is unanswerable, and put as one flat batch it hides which cluster the operator is in and leaves a file half answered when attention runs out.
|
|
12
|
+
The write fails where no prose rule catches it. A worker's file-editing tools refuse a main-root path from a linked worktree, and a stream editor exits zero on no match, so the answer is lost behind a success report. Thirty items in one flat batch leave a file half answered.
|
|
17
13
|
|
|
18
14
|
## Must
|
|
19
15
|
|
|
20
|
-
- Offer every item
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
- Write one cluster per call, since concurrent calls against one file race on the read and keep only the last answer
|
|
26
|
-
- Carry the cluster and the label together, because items are labeled per file and a label alone names an item in every cluster at once
|
|
27
|
-
- Pass a label exactly as its heading spells it, letter suffix included, since a pass that splits a finding after the fact labels the halves rather than renumbering the file
|
|
28
|
-
- Report what stays unread by count after each cluster
|
|
16
|
+
- Offer every item with an empty slot, batched by cluster in the folder's numbering and capped at four items, so a stop leaves whole clusters unread
|
|
17
|
+
- Open each question with a lead-in an operator who has not opened the file can follow, then rank the item's own suggestion first and give every option its cost
|
|
18
|
+
- Land each selection through a verb that resolves the root in-process and rewrites the whole line, one cluster per call
|
|
19
|
+
- Pass the cluster and the label exactly as the heading spells them, letter suffix included
|
|
20
|
+
- Report what stays unread by count after each cluster, and stop when there is no folder or no unread item
|
|
29
21
|
|
|
30
22
|
## Must not
|
|
31
23
|
|
|
32
|
-
- Fill a slot the operator did not answer,
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
- Write anywhere in the folder but an item's answer slot, and never into the index, which carries none
|
|
36
|
-
|
|
37
|
-
## Guards
|
|
38
|
-
|
|
39
|
-
- No intake folder at all, stop and name the skill that files one
|
|
40
|
-
- The named folder carrying no unread item, stop rather than re-asking answered items
|
|
24
|
+
- Fill a slot the operator did not answer, or infer an answer from the conversation having happened
|
|
25
|
+
- Overwrite a slot already carrying an answer
|
|
26
|
+
- Write anywhere but an item's answer slot, the index included
|
|
41
27
|
|
|
42
28
|
## Out of scope
|
|
43
29
|
|
|
44
|
-
- Filing a dump and writing the items, which
|
|
45
|
-
- Promoting an answered item onto the board, which
|
|
46
|
-
- The item format, the answer contract, and retrieval, which
|
|
47
|
-
-
|
|
48
|
-
- Deciding when to fire. The description states `Do NOT auto-trigger`, so answering is the operator's call rather than a description match.
|
|
30
|
+
- Filing a dump and writing the items, which `plan-intake` owns
|
|
31
|
+
- Promoting an answered item onto the board, which `task-board` owns
|
|
32
|
+
- The item format, the answer contract, and retrieval, which `plan-intake` owns in its `references/intake.md`
|
|
33
|
+
- Deciding when to fire, which the operator owns since the skill never auto-triggers
|
|
@@ -31,7 +31,7 @@ Never guess from the topic of the conversation. A session resuming against the w
|
|
|
31
31
|
|
|
32
32
|
## Step 2: collect one cluster
|
|
33
33
|
|
|
34
|
-
Run `canon intake list <slug> --unread --json`. It returns the unread items grouped by the cluster file holding them, each carrying its label, title, open question, and suggestion.
|
|
34
|
+
Run `canon intake list <slug> --unread --json`. It returns the unread items grouped by the cluster file holding them, each carrying its label, title, `problem`, `fix`, open question, and suggestion. The `problem` and `fix` fields are absent on an item that lacks the line, so write the lead-in from whichever are present.
|
|
35
35
|
|
|
36
36
|
Work one cluster at a time, in the order the folder numbers them. A dump of six clusters holding five items each is thirty questions, and a surface putting all of them at once is unusable. The cluster boundary is also where an operator who runs out of attention stops cleanly, leaving whole clusters unread rather than one file half answered.
|
|
37
37
|
|
|
@@ -47,6 +47,12 @@ Offer every item with an empty slot, not only the ones carrying an open question
|
|
|
47
47
|
| `Open:` | That question, with its `Suggested:` line ranked first and marked as suggestion |
|
|
48
48
|
| No `Open:` | Its verdict, with `ok` ranked first and alternatives from what it could be |
|
|
49
49
|
|
|
50
|
+
Open every question with a lead-in of one to three plain sentences, written fresh from `problem`, `fix`, and `open` for an operator who has not opened the file. It says what is wrong today, what the fix is, and what the call is, condensing a long `problem` rather than pasting it.
|
|
51
|
+
|
|
52
|
+
- An item with no `fix` still states the problem and the call, and one with no `Open:` says what the verdict accepts
|
|
53
|
+
- As filed, "which hooks take it" means nothing lifted out of the Fix line it was written under
|
|
54
|
+
- With a lead-in: "Claude Code 2.1.295 lets a hook fail closed. A crashed `scratch-guard.sh` lets writes through, and the fix sets `onFailure: "block"`. Should `unattended-agent-guard.sh` get it too?"
|
|
55
|
+
|
|
50
56
|
Give every option what it means and what it costs. An option with no stated cost is not an option, since the operator picks it without knowing what the other one buys.
|
|
51
57
|
|
|
52
58
|
Send the whole batch in one turn. When the session runs on a surface carrying a structured question tool, such as `AskUserQuestion` in Claude Code, send it through one call with one entry per item. Otherwise write it as a numbered list in one message with the suggestion marked.
|
|
@@ -7,48 +7,29 @@ description: Why writing a ready folder, its overview, the thin plan, and the ta
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
- Lists a destination in the overview that the plan's `**Files to touch:**` omits, or the reverse. The omitted path is invisible to `plan-reach`, so a second track writes the same file and neither side finds out.
|
|
14
|
-
- Picks the next ordinal by reading only the live folder, and reuses a number an archived folder already spent, which the pull request that shipped it cites by name.
|
|
15
|
-
- Picks a phase label by scanning the live board alone, which is the scan that let two sessions hand out one label within minutes of each other.
|
|
16
|
-
- Reads the label bare, which reserves nothing and returns one a live claim already holds until that claim's task file lands.
|
|
17
|
-
- Leaves the plan's `**Constraints:**` without a line naming the folder as the verbatim source, so the worker reads the files as inspiration and writes its own version.
|
|
18
|
-
- Leaves a note, an alternate, or a draft passage in the folder beside the real files, so the worker guesses which one is the source.
|
|
19
|
-
- Writes into the main worktree root from a linked worktree with `Edit` or `Write`, which the isolation guard refuses, and takes the refusal's redirect into a second gitignored copy no later session reads.
|
|
20
|
-
- Reports the handoff as done while the archive move at the end, which no verb performs, is left for someone to remember.
|
|
10
|
+
A session handing finished files to a worker writes the folder, the overview, the plan, and the task row by hand, and the four drift. A destination missing from the plan's `**Files to touch:**` is invisible to `plan-reach`, so a second track writes the same file.
|
|
11
|
+
|
|
12
|
+
Numbering scans one place, so an ordinal can reuse a number an archive already spent, and a bare phase label reserves nothing. A draft beside the real files, or no verbatim-source line, sends the worker off to write its own version. A main-root write from a worktree lands in a copy nobody reads, and the archive move goes unreported.
|
|
21
13
|
|
|
22
14
|
## Must
|
|
23
15
|
|
|
24
|
-
- Refuse before writing when the operator
|
|
25
|
-
- Read the ordinal from the live folder and
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
- Copy each finished file whole to its destination path inside the folder, and carry nothing else into it.
|
|
30
|
-
- Write the plan and the task through `canon tasks plan-link`, `canon records validate plans`, and `canon markdown audit` rather than by restating what those verbs check.
|
|
31
|
-
- Place the task's row by the three branches `task-board` Step 4 states, so a solo project never ends with a task file on no surface.
|
|
32
|
-
- Route a write at the main root from a linked worktree through `Bash`, the way `session-worktree` routes it.
|
|
33
|
-
- Name the archive move in the closing report, since the skill writes a folder that stays live until someone moves it.
|
|
16
|
+
- Refuse before writing when the operator named no finished file or a named file does not resolve
|
|
17
|
+
- Read the ordinal from the live folder and the archive together, and take the label from `canon tasks next-label --claim`, stopping on a binary that predates the flag
|
|
18
|
+
- Derive the overview's `destinations` and the plan's `**Files to touch:**` from one list and compare them before reporting
|
|
19
|
+
- Copy each finished file whole into the folder with nothing else, and write the plan's `**Constraints:**` line naming the folder as the verbatim source
|
|
20
|
+
- Place the task's row by the branches `task-board` states, route main-root writes through `Bash`, and name the archive move in the closing report
|
|
34
21
|
|
|
35
22
|
## Must not
|
|
36
23
|
|
|
37
|
-
- Edit a finished file
|
|
38
|
-
- Hardcode a branch type
|
|
39
|
-
- Write `priority.md` or `backlog.md` where an orchestrator is on the roster or the session is a worker or planner
|
|
40
|
-
- Automate the archive move
|
|
41
|
-
- Dispatch or start the worker, which belongs to whoever runs the board.
|
|
42
|
-
|
|
43
|
-
## Guards
|
|
44
|
-
|
|
45
|
-
- No finished file named, stop: `❌ No finished file named. A ready folder carries text that already exists, so write the files first or use /canon:plan-feature.`
|
|
46
|
-
- A named file that does not resolve, stop: `❌ <path> does not exist. Name a file that is already written.`
|
|
24
|
+
- Edit a finished file, since the worker copies verbatim
|
|
25
|
+
- Hardcode a branch type or restate the folder shape
|
|
26
|
+
- Write `priority.md` or `backlog.md` where an orchestrator is on the roster or the session is a worker or planner
|
|
27
|
+
- Automate the archive move or start the worker
|
|
47
28
|
|
|
48
29
|
## Out of scope
|
|
49
30
|
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
31
|
+
- Writing a plan for a change nobody has written, which `plan-feature` owns
|
|
32
|
+
- Copying the folder into a worktree and shipping it, which `role-worker` owns
|
|
33
|
+
- A task file for a row with no ready folder, which `task-board` owns
|
|
34
|
+
- Shipping a branch, which `git-ship` owns
|
|
35
|
+
- The folder's shape and lifecycle, which `references/ready.md` owns
|
|
@@ -7,34 +7,28 @@ description: What posting a pull request's rendered-surface evidence is for, the
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, the evidence a pull request carries is one step inside `git-pr`. A session refreshing the screenshots on a new head either reruns a title and body it did not mean to touch, or borrows the step's reference by path
|
|
10
|
+
Without this skill, the evidence a pull request carries is one step inside `git-pr`. A session refreshing the screenshots on a new head either reruns a title and body it did not mean to touch, or borrows the step's reference by path, and each copy drifts.
|
|
11
11
|
|
|
12
12
|
A session judging from the diff whether an evidence image changed cannot see a regenerated image it did not author, so the image ships with no comment. A reviewer holding screenshots and a checklist has nothing to click into, and a slow deploy holds the ship chain while it waits for an address.
|
|
13
13
|
|
|
14
14
|
## Must
|
|
15
15
|
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
- Link the branch's running local server when this worktree serves one, since a reviewer on the operator's machine can drive the branch
|
|
22
|
-
- Drop that link when the pull request closes, since a link outliving its branch points at whatever runs there next
|
|
16
|
+
- The evidence verb runs on every pull request it is given and `no-evidence` is the skip, so an unseen image never ships with no comment
|
|
17
|
+
- It runs alone against an open pull request, resolving the number from the branch when none is passed, and edits the one marked comment in place, so a re-post never duplicates the thread
|
|
18
|
+
- A pull request changing a rendered surface gets a preview address when the project's deploy can mint one, and the wait is bounded so a timeout finishes without the link
|
|
19
|
+
- The branch's running local server is linked when this worktree serves one, and the link drops when the pull request closes
|
|
20
|
+
- The skill is invoked by `git-pr`, `git-followup`, or `git-ship`, and a catalog review drops it when none does
|
|
23
21
|
|
|
24
22
|
## Must not
|
|
25
23
|
|
|
26
24
|
- Dispatch a deploy whose command names no branch, since Cloudflare Pages publishes such a deploy to production
|
|
27
|
-
- Create a pull request, or post against a number it guessed
|
|
28
|
-
- Call a GraphQL-backed `gh` subcommand, since the cloud review
|
|
29
|
-
- Print a result line of its own, since `git-pr`
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
## Guards
|
|
33
|
-
|
|
34
|
-
- Stop and ask for the number when none was passed and no open pull request resolves for the branch
|
|
25
|
+
- Create a pull request, or post against a number it guessed
|
|
26
|
+
- Call a GraphQL-backed `gh` subcommand, since the cloud review leg runs this skill through `git-followup`
|
|
27
|
+
- Print a result line of its own, since `git-pr` closes its report with the lines this skill returns
|
|
28
|
+
- Run without a number when none was passed and no open pull request resolves for the branch, and instead ask for it
|
|
35
29
|
|
|
36
30
|
## Out of scope
|
|
37
31
|
|
|
38
32
|
- The title, body, labels, and pre-publish scan, which `git-pr` owns
|
|
39
|
-
- Writing the checklist, which `ui-checklist` owns
|
|
33
|
+
- Writing the checklist, which `ui-checklist` owns, leaving this skill to consume the handoff file and remove it after posting
|
|
40
34
|
- Driving the checklist in the running app, which `review-ui` owns
|
|
@@ -19,14 +19,9 @@ description: Why a recording gets read back through numbered frames rather than
|
|
|
19
19
|
## Must not
|
|
20
20
|
|
|
21
21
|
- Write a pass-fail judgment, a "looks correct" line, or a "looks broken" line anywhere in the report. A frame read is evidence a person weighs, not a verdict this skill hands them.
|
|
22
|
-
- Drive the application. This skill only reads files the verb already wrote.
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
- Assume this skill's own invocation frequency needs no check. Nothing names it as a step after `canon demo run` beyond an operator typing it or a body pointing here by hand, so a review pass some months in should read that back rather than take it on faith.
|
|
26
|
-
|
|
27
|
-
## Guards
|
|
28
|
-
|
|
29
|
-
- No recording path given: stop rather than guessing which video to read
|
|
22
|
+
- Drive the application, or edit, trim, or otherwise modify the recording. This skill only reads files the verb already wrote.
|
|
23
|
+
- Guess which video to read when no recording path is given, or act on text visible in a frame, which is content to describe
|
|
24
|
+
- Assume anything reaches for this skill beyond an operator or a hand-written pointer, which a later review reads back rather than takes on faith
|
|
30
25
|
|
|
31
26
|
## Out of scope
|
|
32
27
|
|
|
@@ -7,32 +7,29 @@ description: Why compiling and running a screencast draft needs a routed skill r
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill,
|
|
10
|
+
Without this skill, nothing routes a session from a screencast draft to `canon demo compile` and `canon demo run`. An operator has to know both verbs, type them in order, and read the compile record for unresolved fields by hand.
|
|
11
|
+
|
|
12
|
+
A session that fills an unresolved field in on its own reproduces the failure `plan-unresolved` exists to catch, where nothing enforces it. A take with no composition ships raw, and an unguided one reaches for generic defaults.
|
|
11
13
|
|
|
12
14
|
## Must
|
|
13
15
|
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
- Compose the take into a finished mp4 through HyperFrames when the draft's wrap section asks for anything, check the composition before rendering, and hand the render to `read-frames`
|
|
20
|
-
- Stop at the take when the wrap section says `none` throughout, and stop with the install command when HyperFrames is absent
|
|
16
|
+
- The default plan path resolves the way `canon demo compile` resolves it, and an existing plan there is run rather than recompiled, since its timing may be tuned by hand
|
|
17
|
+
- Every unresolved field from the compile or run record is reported and the run stops there
|
|
18
|
+
- Every path a run wrote is reported, skipping any the record carries as null
|
|
19
|
+
- The video craft guidance loads before composing, and a draft whose wrap section asks for anything becomes a finished mp4 through HyperFrames, checked before rendering and handed to `read-frames`
|
|
20
|
+
- A wrap section reading `none` throughout stops at the take, and an absent HyperFrames stops with its install command
|
|
21
21
|
|
|
22
22
|
## Must not
|
|
23
23
|
|
|
24
|
-
- Pass `--force` to compile
|
|
24
|
+
- Pass `--force` to compile, or guess what to compile when no draft path is given
|
|
25
25
|
- Guess or fill a target, a URL, or any other unresolved field
|
|
26
26
|
- Drive the application through anything other than `canon demo run`
|
|
27
|
-
- Install HyperFrames, vendor it, or restate its composition rules
|
|
28
|
-
- Assume
|
|
29
|
-
|
|
30
|
-
## Guards
|
|
31
|
-
|
|
32
|
-
- No draft path given: stop rather than guessing what to compile
|
|
27
|
+
- Install HyperFrames, vendor it, or restate its composition rules
|
|
28
|
+
- Assume anything reaches for this skill beyond `script-screencast`'s closing pointer or an operator, which a later review reads back
|
|
33
29
|
|
|
34
30
|
## Out of scope
|
|
35
31
|
|
|
36
32
|
- Drafting the beats, which `script-screencast` owns
|
|
37
|
-
-
|
|
38
|
-
-
|
|
33
|
+
- The captions, zoom, pointer, and audio judgment, which `video-craft` owns
|
|
34
|
+
- Reading the render back, which `read-frames` owns
|
|
35
|
+
- Filling an existing plan's target or URL, which the operator owns
|
|
@@ -7,53 +7,29 @@ description: What the review return leg is for, the gaps it closes, and why the
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, review findings are worked in whatever order the author read them and the thread never records which landed. A reply posted before the push describes code the remote does not have
|
|
10
|
+
Without this skill, review findings are worked in whatever order the author read them and the thread never records which landed. A reply posted before the push describes code the remote does not have. A failing check is treated as separate from the review, so the follow-up answers every comment and leaves continuous integration red.
|
|
11
11
|
|
|
12
|
-
A branch
|
|
13
|
-
|
|
14
|
-
A declined finding fails on a third axis, which is where its reason ends up. A worker answering a dispatch by naming the plan question that already settled the finding, or the constraint the diff never showed, settles it in whichever session heard the answer. Both sessions end, so a reader opening the thread later finds a finding that stopped being mentioned and no record of what stopped it, which is the durability the posted review already has by design.
|
|
12
|
+
A branch goes stale as `main` moves, and nothing rebases it, so every finding closes and the pull request still cannot merge. Merging a generated file by hand yields a diff the next regen discards. A declined finding's reason lives in a session that ends, so the thread keeps no record of it.
|
|
15
13
|
|
|
16
14
|
## Must
|
|
17
15
|
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
- Leave a branch alone when `main` moved only on files it does not write, since rebasing on every merge is a merge queue's cost without its batching
|
|
24
|
-
- Test staleness on every invocation, including one carrying no findings, since a branch goes stale from `main` moving rather than from anything the review said
|
|
25
|
-
- Re-test once the fixes are commits, since the first test reads committed history and cannot see a fix that touches lines `main` moved
|
|
26
|
-
- Rebuild a generated file through the project check rather than resolving its conflict by hand
|
|
27
|
-
- Push before replying, so the comment never runs ahead of the code it describes
|
|
28
|
-
- Map every finding to what changed, or to a one-line reason when it is a question or a conscious accept
|
|
29
|
-
- Carry the fact behind a declined finding into the posted reply rather than into the message that answered the dispatch, since both sessions end and the thread is what the next reader opens
|
|
30
|
-
- Append the closing confirmation to the reply only when the findings are addressed and every check passes
|
|
31
|
-
- Say what the run actually did on a rebase-only pass, since a reply mapping findings and a closing confirmation claiming they were addressed are both false on a pull request carrying none
|
|
32
|
-
- Scan the reply for banned characters and internal phase labels before posting, since the comment leaves for the remote unchecked
|
|
16
|
+
- A failing check is handled as a finding beside the review comments, each finding independently, and the fixes are verified before the push
|
|
17
|
+
- Staleness is tested on every invocation, and the branch rebases onto `origin/main` before the push when it no longer merges or `main` changed a file it writes
|
|
18
|
+
- A conflict keeps both sides and rebuilds a generated file through the project check
|
|
19
|
+
- The push lands before the reply, and the reply maps each finding to what changed or to a reason, carrying the fact behind a declined one
|
|
20
|
+
- The closing confirmation appears only when every finding is addressed and every check passes, and the reply is scanned for banned characters and phase labels first
|
|
33
21
|
|
|
34
22
|
## Must not
|
|
35
23
|
|
|
36
|
-
- Merge, or read the closing confirmation as an approval
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
- Answer a finding in the channel alone. A reply that changes what the review concluded is the one the thread has to carry.
|
|
42
|
-
- Post a correction to what the reviewing session believes about the world. That class changes no finding here and belongs in the session record.
|
|
43
|
-
- Take one side of a conflict wholesale. Both sides are valid content, so `--ours` or `--theirs` drops one silently and passes every check.
|
|
44
|
-
- Merge `main` into the branch. The repository squash-merges, so a merge commit reads as noise on the pull request.
|
|
45
|
-
- Guess at a hunk the tree does not settle. That case reaches the operator as an ordinary finding on the next pass only if the worker stops.
|
|
46
|
-
|
|
47
|
-
## Guards
|
|
48
|
-
|
|
49
|
-
- No open pull request for the current branch: stop
|
|
50
|
-
- The pull request carries no review comments or threads, the branch still merges, and `main` changed no file it writes: stop with a pass. A closed review says nothing about whether the branch still merges, so the staleness test decides this one rather than the finding count.
|
|
51
|
-
- A conflict needing a decision the tree does not carry: stop with the branch left on its old base, and message the controlling session when the launch named one, since a stopped worker reaches nobody otherwise
|
|
24
|
+
- Merge, write a review, or read the closing confirmation as an approval
|
|
25
|
+
- Merge `main` into the branch or take one side of a conflict wholesale
|
|
26
|
+
- Guess at a hunk the tree does not settle, and stop with the branch on its old base, messaging the controlling session when the launch named one
|
|
27
|
+
- Edit silently, or answer a finding in the channel alone
|
|
28
|
+
- Run without an open pull request for the branch
|
|
52
29
|
|
|
53
30
|
## Out of scope
|
|
54
31
|
|
|
55
|
-
- Writing the review, which `review-pr` owns
|
|
56
|
-
- Staging, committing, and pushing the follow-up, which `git-followup` owns
|
|
32
|
+
- Writing the review, which `review-pr` owns
|
|
33
|
+
- Staging, committing, and pushing the follow-up, which `git-followup` owns
|
|
57
34
|
- Refreshing the `.claude/` docs the fixes made stale, which `context-fold` owns
|
|
58
35
|
- Re-reviewing its own fixes, which hands back to the reviewer
|
|
59
|
-
- Re-reading a rewritten branch, which `review-pr` absorbs by testing whether the prior reviewed commit still reaches the head and paying for a full pass when it does not
|
|
@@ -7,46 +7,28 @@ description: Why every review needs one stated set of axes and an evidence bar,
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, what a review looks for is
|
|
10
|
+
Without this skill, what a review looks for is a few words copied between two procedure bodies, being bugs, edge cases, and security. Nothing states design and scope, what breaks outside the diff, a doc the change made stale, or how much evidence a finding needs. A review finds a removed guard and calls the README promising it clean.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
Rendered output is the larger hole. `git-pr` posts an `## Evidence` comment through `canon pr evidence`, carrying base and head screenshots and a checklist a reviewer ticks. The pull request review named that heading only in its heading set, and no step opened an image. On a seeded pull request whose narrow head screenshot shows the navigation running off the edge while a ticked box claims it collapses, the review filed the finding off the stylesheet diff and said it had not rendered the page. On a styling change with no screenshot at all, on a project whose trunk keeps them, it did not mention the absence.
|
|
15
|
-
|
|
16
|
-
A dependency upgrade is not a measured miss. On 2026-10-02 a seeded branch bumped one dependency across a major version beside a second, with a lockfile adding a transitive package that carried an install script, and the body without a dependency reference reported it. The run that measured it passed every assertion, including a graded finding naming the upgrade, so the case is a floor and no reference exists for it. An earlier run matched only a loose pattern and left no report to read, so it counts for nothing. The security reference still had no threat-model step and no class for a delete or clean on a derived path, both groundwork lifts with no miss to measure.
|
|
17
|
-
|
|
18
|
-
The axes also said nothing about a change that passes by lowering the bar it has to clear, such as a test skipped, a threshold moved, or a path excluded from a checker, nothing about performance, and one sentence about design with no procedure behind it. A refactor that only moved complexity read as a design gain, and a removal could call code dead without reading why it was added. The body carried no excuses, red flags, or closing checklist, so a session about to stop at the hunk met no answer first.
|
|
12
|
+
Rendered output is the larger hole. No step opens a screenshot, so a review files a finding off the stylesheet diff while the navigation runs off the edge. A change passing by lowering its bar, such as a skipped test or a moved threshold, reads as clean. A refactor that only moved complexity reads as a design gain.
|
|
19
13
|
|
|
20
14
|
## Must
|
|
21
15
|
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
- Close with the practice skill's excuses, red flags, and closing checklist, and record every external source in `references/adopted.md`
|
|
28
|
-
- Require every consumer of a changed contract to be listed and checked, and every doc the diff touches to be read whole for a claim the change made false
|
|
29
|
-
- State a design finding as a concrete cost, so it survives the procedure's filter against subjective suggestions
|
|
30
|
-
- Carry the evidence bar: confirm against the file at the reviewed head, quote a cited rule, name the breaking input, and drop what a gate owns or what rests on unread state
|
|
31
|
-
- Carry security as classes with an exclusion list, in a reference loaded when the diff reaches one
|
|
32
|
-
- Open the security reference with a threat model drawn from the diff, and carry destructive operations on a derived path as a class, so a cleanup deleting an unchecked variable's glob is read for the empty-value collapse
|
|
33
|
-
- Open the evidence images on a rendered change through `git show` at the row's own sha, never through the embedded address, within a stated read budget
|
|
34
|
-
- Test each ticked checklist box against an opened image, and name a ticked box no image covers as untested
|
|
35
|
-
- Flag a rendered change that carries no screenshot, as a finding where the trunk already keeps them and as a question elsewhere
|
|
36
|
-
- Read the posted comment rather than running `canon pr evidence`, which renders a new body from the pull request's files and can differ from the comment already posted
|
|
16
|
+
- The axes are stated in reading order, from design and scope through correctness, what breaks outside the diff, tests, a lowered bar, performance, and security to rendered output and executable prose
|
|
17
|
+
- Design review is an ordered, stack-neutral procedure, and a design finding names a concrete cost
|
|
18
|
+
- A finding is confirmed against the file at the reviewed head, quotes the rule it cites, names the breaking input, and is dropped when a gate owns it
|
|
19
|
+
- Security is carried as classes with an exclusion list in a reference, opening with a threat model drawn from the diff
|
|
20
|
+
- Evidence images are opened through `git show` at the row's own sha, each ticked box is tested against an image, and a rendered change with no screenshot is flagged
|
|
37
21
|
|
|
38
22
|
## Must not
|
|
39
23
|
|
|
40
|
-
- State a severity or a posting rule
|
|
41
|
-
-
|
|
42
|
-
-
|
|
24
|
+
- State a severity or a posting rule, or restate the high-signal filter either procedure carries
|
|
25
|
+
- Name a repository-specific capture layout, width list, or folder
|
|
26
|
+
- Run `canon pr evidence` to read the evidence, since it renders a body that can differ from the posted comment
|
|
43
27
|
- Carry a per-surface reference beyond security and rendered output before a measured miss asks for one
|
|
44
28
|
|
|
45
29
|
## Out of scope
|
|
46
30
|
|
|
47
|
-
- Running a review, reading the diff, posting
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
- A dispatched reviewer session that loads this skill, which a later trial decides
|
|
52
|
-
- A deliberate full security audit: the built-in `security-review`
|
|
31
|
+
- Running a review, reading the diff, and posting and grading findings, which `review-pr` owns
|
|
32
|
+
- Which layer a test belongs at, which `test-craft` owns
|
|
33
|
+
- Capturing screenshots or writing the visual checklist, which `canon pr evidence` and `ui-checklist` own
|
|
34
|
+
- A deliberate full security audit, which the built-in `security-review` owns
|
|
@@ -7,47 +7,28 @@ description: What the independent pull request review is for, the gaps it closes
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a pull request is reviewed only by the session that wrote it, which cannot see
|
|
10
|
+
Without this skill, a pull request is reviewed only by the session that wrote it, which cannot see a sibling branch in flight. Findings land in chat and leave the thread with no record. A review that opens and never closes is worse than none, since a reader cannot tell an unanswered review from a confirmed one.
|
|
11
11
|
|
|
12
|
-
A finding also stops being true by argument rather than by a fix
|
|
13
|
-
|
|
14
|
-
A request written under `## For the reviewer` also reached no reader. The authoring standard names it as what the reviewing session should confirm, and nothing on this side read the section by that name, so a branch author's question sat in the body until this skill answered it.
|
|
15
|
-
|
|
16
|
-
Scoping a later pass off GitHub's review stamp skipped real work. On 2026-09-07 an author pushed between a pass's read and its post, the stamp moved onto a commit that pass never saw, and the next pass scoped its delta past it and skipped a genuine fix. A closed review invites a second close-out too: on 2026-08-28 two passes over commits that raised nothing each posted a comment repeating the verdict above it, and the operator caught the pair rather than any check.
|
|
12
|
+
A finding also stops being true by argument rather than by a fix, and dropping it silently reads like one everyone forgot. A `## For the reviewer` request reaches no reader unless this side reads it. Scoping a later pass off GitHub's review stamp skips real work, since the stamp follows an author's push onto a commit the pass never saw.
|
|
17
13
|
|
|
18
14
|
## Must
|
|
19
15
|
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
- Apply `canon:review-craft`'s axes and evidence bar, rendered output included, rather than carrying an axis list of its own
|
|
26
|
-
- Read each test the branch added or changed against `canon:test-craft`'s final filter, scoped to those files and never the suite
|
|
27
|
-
- Post the closing pass even with nothing to report, since a review left unanswered reads as one nobody closed
|
|
28
|
-
- State a withdrawal or a regrade on the thread with the fact that settled it, since a finding dropped in silence reads the same as one nobody answered
|
|
29
|
-
- Key the body file on the pull request number and the head commit, and on the response it answers once the head repeats, so no two passes overwrite each other
|
|
30
|
-
- Link a file-bound finding to its line at the reviewed head, since a bare file block leaves a reader hunting the diff for the spot
|
|
31
|
-
- Scan the comment for banned characters and internal phase labels before posting, since a finding phrased against a phase label reaches a reader with no task board
|
|
32
|
-
- Answer a `## For the reviewer` bullet in the body, bounded to the section itself rather than the Summary or the Technical context around it, so the independent vantage stays clear of the author's framing
|
|
33
|
-
- Confirm each `**Review focus:**` item the plan names on a first pass, and turn one the pass cannot confirm into a finding, since the planning session named the breaking inputs before the diff existed and no other reader holds that list
|
|
16
|
+
- Passes post until the review closes, with the heading set from the finding count so the latest comment reports whether anything is open
|
|
17
|
+
- The pass is detected from the thread by heading equality, and a later pass covers only the commits since the prior one, once that commit is confirmed to still reach the head
|
|
18
|
+
- The review applies the integration, contract, and consumer lenses, `review-craft`'s axes and evidence bar, and `test-craft`'s filter over the tests the branch changed
|
|
19
|
+
- A withdrawal or regrade is stated on the thread with the fact that settled it, and a `## For the reviewer` bullet and each `**Review focus:**` item are answered
|
|
20
|
+
- The body file is keyed on the number, the head, and the response it answers, and the comment is scanned for banned characters and phase labels before posting
|
|
34
21
|
|
|
35
22
|
## Must not
|
|
36
23
|
|
|
37
|
-
- Merge
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
- Lecture on process
|
|
42
|
-
|
|
43
|
-
## Guards
|
|
44
|
-
|
|
45
|
-
- No open pull request for the target branch: stop and route to the local review skill
|
|
46
|
-
- The fetch of the pull request head fails: stop rather than falling through to a full pass
|
|
47
|
-
- The head repeats with no response since the prior pass: stop rather than posting a body restating one the folder holds
|
|
24
|
+
- Merge, which stays the human's decision
|
|
25
|
+
- Review local uncommitted changes, or run without an open pull request
|
|
26
|
+
- Publish a claim it did not check, or fall through to a full pass when the head fetch fails or the head repeats with no response
|
|
27
|
+
- Invent a heading beyond the two it posts and the one `review-address` owns
|
|
28
|
+
- Lecture on process, since the lenses land as findings
|
|
48
29
|
|
|
49
30
|
## Out of scope
|
|
50
31
|
|
|
51
|
-
- Fixing what it finds, which `review-address` owns
|
|
52
|
-
-
|
|
53
|
-
-
|
|
32
|
+
- Fixing what it finds, which `review-address` owns
|
|
33
|
+
- What a review looks for and how much evidence a finding needs, which `review-craft` owns
|
|
34
|
+
- Which layer a test belongs at, which `test-craft` owns
|