@journeykit/canon 0.30.0 → 0.31.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.
Files changed (123) hide show
  1. package/dist/skills/SKILL.src.md +47 -21
  2. package/dist/skills/reference/brief-polish.md +4 -4
  3. package/dist/skills/reference/brief-shape.md +38 -7
  4. package/dist/skills/reference/canon-authoring.md +6 -6
  5. package/dist/skills/reference/canon-gate.md +41 -32
  6. package/dist/skills/reference/canon-learn.md +2 -2
  7. package/dist/skills/reference/canon-plan-import.md +2 -2
  8. package/dist/skills/reference/canon-plugins.md +6 -6
  9. package/dist/skills/reference/canon-report-dashboard.md +10 -6
  10. package/dist/skills/reference/canon-review.md +24 -24
  11. package/dist/skills/reference/canon-storage.md +2 -2
  12. package/dist/skills/reference/canon-subject.md +132 -98
  13. package/dist/skills/reference/role-implementer.md +42 -28
  14. package/dist/skills/reference/role-orchestrator.md +36 -21
  15. package/dist/skills/reference/role-planner.md +32 -17
  16. package/dist/skills/reference/role-reviewer.md +48 -30
  17. package/man/canon-adapter-authorize.1 +2 -2
  18. package/man/canon-adapter-validate.1 +2 -2
  19. package/man/canon-adapter.1 +2 -2
  20. package/man/canon-artifacts-move.1 +2 -2
  21. package/man/canon-artifacts-store.1 +2 -2
  22. package/man/canon-artifacts-verify.1 +2 -2
  23. package/man/canon-artifacts.1 +2 -2
  24. package/man/canon-brief-approve.1 +7 -4
  25. package/man/canon-brief-check.1 +2 -2
  26. package/man/canon-brief-show.1 +2 -2
  27. package/man/canon-brief.1 +8 -7
  28. package/man/canon-change-new.1 +4 -4
  29. package/man/canon-change.1 +3 -3
  30. package/man/canon-completion.1 +2 -2
  31. package/man/canon-context-pack-add.1 +2 -2
  32. package/man/canon-context-pack-show.1 +2 -2
  33. package/man/canon-context-pack-verify.1 +2 -2
  34. package/man/canon-context-pack.1 +2 -2
  35. package/man/canon-context.1 +2 -2
  36. package/man/canon-dashboard.1 +2 -2
  37. package/man/canon-demo-init.1 +2 -2
  38. package/man/canon-demo-review.1 +2 -2
  39. package/man/canon-demo.1 +2 -2
  40. package/man/canon-dispatch-begin.1 +10 -10
  41. package/man/canon-dispatch-diff.1 +2 -2
  42. package/man/canon-dispatch-end.1 +2 -2
  43. package/man/canon-dispatch.1 +2 -2
  44. package/man/canon-divergence-accept.1 +6 -6
  45. package/man/canon-divergence-add.1 +6 -6
  46. package/man/canon-divergence-defer.1 +6 -6
  47. package/man/canon-divergence-list.1 +2 -2
  48. package/man/canon-divergence-resolve.1 +6 -6
  49. package/man/canon-divergence.1 +2 -2
  50. package/man/canon-evidence-add.1 +16 -16
  51. package/man/canon-evidence-approval-payload.1 +10 -10
  52. package/man/canon-evidence-audit.1 +10 -10
  53. package/man/canon-evidence.1 +3 -3
  54. package/man/canon-export.1 +2 -2
  55. package/man/canon-feature-new.1 +6 -6
  56. package/man/canon-feature.1 +2 -2
  57. package/man/canon-finding-add.1 +11 -11
  58. package/man/canon-finding-close.1 +8 -8
  59. package/man/canon-finding-list.1 +4 -4
  60. package/man/canon-finding.1 +4 -4
  61. package/man/canon-format.1 +2 -2
  62. package/man/canon-gate-check.1 +2 -2
  63. package/man/canon-gate-install-hooks.1 +2 -2
  64. package/man/canon-gate-promote.1 +2 -2
  65. package/man/canon-gate.1 +2 -2
  66. package/man/canon-ingest-plans.1 +2 -2
  67. package/man/canon-ingest-records.1 +4 -4
  68. package/man/canon-ingest-sessions.1 +2 -2
  69. package/man/canon-ingest.1 +2 -2
  70. package/man/canon-init.1 +2 -2
  71. package/man/canon-inventory-sync.1 +2 -2
  72. package/man/canon-inventory.1 +2 -2
  73. package/man/canon-ledger-compact.1 +2 -2
  74. package/man/canon-ledger.1 +2 -2
  75. package/man/canon-migrate.1 +7 -2
  76. package/man/canon-plugin-sync.1 +2 -2
  77. package/man/canon-plugin.1 +2 -2
  78. package/man/canon-policy-approve.1 +2 -2
  79. package/man/canon-policy-show.1 +2 -2
  80. package/man/canon-policy.1 +2 -2
  81. package/man/canon-prompt-add.1 +2 -2
  82. package/man/canon-prompt-show.1 +2 -2
  83. package/man/canon-prompt.1 +2 -2
  84. package/man/canon-purge.1 +2 -2
  85. package/man/canon-query.1 +5 -5
  86. package/man/canon-regime-show.1 +2 -2
  87. package/man/canon-regime.1 +2 -2
  88. package/man/canon-report-build.1 +2 -2
  89. package/man/canon-report-check.1 +2 -2
  90. package/man/canon-report-snapshot.1 +2 -2
  91. package/man/canon-report.1 +2 -2
  92. package/man/canon-retrieve.1 +5 -5
  93. package/man/canon-review-change.1 +6 -6
  94. package/man/canon-review-scenario.1 +6 -6
  95. package/man/canon-review.1 +2 -2
  96. package/man/canon-scenario-new.1 +10 -10
  97. package/man/canon-scenario.1 +2 -2
  98. package/man/canon-schema.1 +2 -2
  99. package/man/canon-search.1 +104 -0
  100. package/man/canon-selftest.1 +2 -2
  101. package/man/canon-skills-check.1 +2 -2
  102. package/man/canon-skills-doctor.1 +2 -2
  103. package/man/canon-skills-install.1 +2 -2
  104. package/man/canon-skills-show.1 +2 -2
  105. package/man/canon-skills.1 +2 -2
  106. package/man/canon-status.1 +7 -2
  107. package/man/canon-strategy-approval-payload.1 +2 -2
  108. package/man/canon-strategy-promote.1 +2 -2
  109. package/man/canon-strategy-rollback.1 +5 -5
  110. package/man/canon-strategy.1 +2 -2
  111. package/man/canon-subject-adopt.1 +4 -4
  112. package/man/canon-subject-move.1 +5 -5
  113. package/man/canon-subject-new.1 +5 -5
  114. package/man/canon-subject-show.1 +2 -2
  115. package/man/canon-subject-unadopt.1 +5 -5
  116. package/man/canon-subject.1 +2 -2
  117. package/man/canon-task-done.1 +2 -2
  118. package/man/canon-task.1 +2 -2
  119. package/man/canon-tier-age.1 +2 -2
  120. package/man/canon-tier.1 +2 -2
  121. package/man/canon-trace.1 +56 -0
  122. package/man/canon.1 +8 -2
  123. package/package.json +4 -4
@@ -63,17 +63,17 @@ canon context-pack verify sha256:00000000000000000000000000000000000000000000000
63
63
  ```
64
64
  ```text
65
65
  # Add a divergence candidate, staged with no run_seq yet
66
- canon divergence add <SCENARIO_ID> --actor-id <ACTOR_ID> [--project-id <PROJECT_ID>] [--rev <REV>] [--state <open|still-divergent|resolved|deferred>] [--reason <TEXT>] [--expiry <TIMESTAMP>] [--round <N>] [--session-id <SESSION_ID>] [--detail <TEXT>] [--role <ROLE>] [--promote | --no-promote] [--input]
66
+ canon divergence add <SCENARIO_ID> --actor <ACTOR_ID> [--project <PROJECT_ID>] [--rev <REV>] [--state <open|still-divergent|resolved|deferred>] [--reason <TEXT>] [--expiry <TIMESTAMP>] [--round <N>] [--session <SESSION_ID>] [--detail <TEXT>] [--role <ROLE>] [--promote | --no-promote] [--input]
67
67
  ```
68
68
  ```bash
69
- canon divergence add auth.login.01 --actor-id alice --role reviewer
69
+ canon divergence add auth.login.01 --actor alice --role reviewer
70
70
  ```
71
71
  ```text
72
72
  # Directly record a deferred divergence (requires --reason/--expiry)
73
- canon divergence defer <SCENARIO_ID> --actor-id <ACTOR_ID> --reason <TEXT> --expiry <TIMESTAMP> [--project-id <PROJECT_ID>] [--rev <REV>] [--round <N>] [--session-id <SESSION_ID>] [--role <ROLE>] [--input]
73
+ canon divergence defer <SCENARIO_ID> --actor <ACTOR_ID> --reason <TEXT> --expiry <TIMESTAMP> [--project <PROJECT_ID>] [--rev <REV>] [--round <N>] [--session <SESSION_ID>] [--role <ROLE>] [--input]
74
74
  ```
75
75
  ```bash
76
- canon divergence defer auth.login.01 --actor-id alice --reason "waiting on the vendor" --expiry 2030-01-01T00:00:00Z --role reviewer
76
+ canon divergence defer auth.login.01 --actor alice --reason "waiting on the vendor" --expiry 2030-01-01T00:00:00Z --role reviewer
77
77
  ```
78
78
  ```text
79
79
  # List the current divergence burn-down state
@@ -84,45 +84,45 @@ canon divergence list --as-of 2030-01-01
84
84
  ```
85
85
  ```text
86
86
  # Directly record a resolved divergence
87
- canon divergence resolve <SCENARIO_ID> --actor-id <ACTOR_ID> [--project-id <PROJECT_ID>] [--rev <REV>] [--round <N>] [--session-id <SESSION_ID>] [--detail <TEXT>] [--role <ROLE>] [--input]
87
+ canon divergence resolve <SCENARIO_ID> --actor <ACTOR_ID> [--project <PROJECT_ID>] [--rev <REV>] [--round <N>] [--session <SESSION_ID>] [--detail <TEXT>] [--role <ROLE>] [--input]
88
88
  ```
89
89
  ```bash
90
- canon divergence resolve auth.login.01 --actor-id alice --role reviewer
90
+ canon divergence resolve auth.login.01 --actor alice --role reviewer
91
91
  ```
92
92
  ```text
93
93
  # Record one attributed EvidenceRecord for a task or scenario
94
- canon evidence add [--task-id <TASK_ID>] [--project-id <PROJECT_ID>] [--class <CLASS>] [--ref <TEXT>] [--verdict <faithful|not-applicable|divergent>] [--summary <TEXT>] [--command-result <TEXT>] [--scenario-id <SCENARIO_ID>] [--run-id <RUN_ID>] [--surface-ref <PATH_OR_EFFECT>]* [--actor-id <ACTOR_ID>] [--role <ROLE>] [--session-id <SESSION_ID>] [--approver <NAME>] [--approval-role <human>] [--signature-file <FILE>] [--approval-at <TIMESTAMP>] [--rev <REV>] [--artifact <PATH>]* [--report <FORMAT:PATH>]* [--report-case <NAME>]* [--all-scenarios] [--max-artifact-mib <N>] [--override-reason <TEXT>] [--promote | --no-promote] [--input]
94
+ canon evidence add [--task <TASK_ID>] [--project <PROJECT_ID>] [--class <CLASS>] [--ref <TEXT>] [--verdict <faithful|not-applicable|divergent>] [--summary <TEXT>] [--command-result <TEXT>] [--scenario <SCENARIO_ID>] [--run <RUN_ID>] [--surface-ref <PATH_OR_EFFECT>]* [--actor <ACTOR_ID>] [--role <ROLE>] [--session <SESSION_ID>] [--approver <NAME>] [--approval-role <human>] [--signature-file <FILE>] [--approval-at <TIMESTAMP>] [--rev <REV>] [--artifact <PATH>]* [--report <FORMAT:PATH>]* [--report-case <NAME>]* [--all-scenarios] [--max-artifact-mib <N>] [--override-reason <TEXT>] [--promote | --no-promote] [--input]
95
95
  ```
96
96
  ```bash
97
- canon evidence add --scenario-id auth.login.01 --class test-run --ref "npm test" --role implementer
97
+ canon evidence add --scenario auth.login.01 --class test-run --ref "npm test" --role implementer
98
98
  ```
99
99
  ```text
100
100
  # Emit exact bytes for external `ssh-keygen -Y sign -n canon-approval-v1`
101
- canon evidence approval-payload --approver <NAME> --approval-at <TIMESTAMP> [--task-id <TASK_ID>] [--project-id <PROJECT_ID>] [--scenario-id <SCENARIO_ID>] [--run-id <RUN_ID>] [--rev <REV>] [--surface-ref <PATH_OR_EFFECT>]*
101
+ canon evidence approval-payload --approver <NAME> --approval-at <TIMESTAMP> [--task <TASK_ID>] [--project <PROJECT_ID>] [--scenario <SCENARIO_ID>] [--run <RUN_ID>] [--rev <REV>] [--surface-ref <PATH_OR_EFFECT>]*
102
102
  ```
103
103
  ```bash
104
- canon evidence approval-payload --scenario-id auth.login.01 --project-id root --approver alice --approval-at 2030-01-01T00:00:00Z
104
+ canon evidence approval-payload --scenario auth.login.01 --project root --approver alice --approval-at 2030-01-01T00:00:00Z
105
105
  ```
106
106
  ```text
107
107
  # Record an external evaluator's re-audit of one scenario (class `audit`; the verdict follows --audit-result; canon never runs the evaluator)
108
- canon evidence audit <SCENARIO_ID> --ref <TEXT> --evaluator-id <ID> --evaluator-version <TEXT> --evaluator-digest <DIGEST> --audit-result <confirmed|refuted|indeterminate> [--project-id <PROJECT_ID>] [--summary <TEXT>] [--command-result <TEXT>] [--run-id <RUN_ID>] [--actor-id <ACTOR_ID>] [--role <ROLE>] [--session-id <SESSION_ID>] [--rev <REV>] [--artifact <PATH>]* [--report <FORMAT:PATH>]* [--report-case <NAME>]* [--max-artifact-mib <N>] [--override-reason <TEXT>] [--promote | --no-promote] [--input]
108
+ canon evidence audit <SCENARIO_ID> --ref <TEXT> --evaluator <ID> --evaluator-version <TEXT> --evaluator-digest <DIGEST> --audit-result <confirmed|refuted|indeterminate> [--project <PROJECT_ID>] [--summary <TEXT>] [--command-result <TEXT>] [--run <RUN_ID>] [--actor <ACTOR_ID>] [--role <ROLE>] [--session <SESSION_ID>] [--rev <REV>] [--artifact <PATH>]* [--report <FORMAT:PATH>]* [--report-case <NAME>]* [--max-artifact-mib <N>] [--override-reason <TEXT>] [--promote | --no-promote] [--input]
109
109
  ```
110
110
  ```bash
111
- canon evidence audit auth.login.01 --ref audit-report.json --evaluator-id eval-1 --evaluator-version 2.1 --evaluator-digest 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef --audit-result confirmed --role implementer
111
+ canon evidence audit auth.login.01 --ref audit-report.json --evaluator eval-1 --evaluator-version 2.1 --evaluator-digest 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef --audit-result confirmed --role implementer
112
112
  ```
113
113
  ```text
114
114
  # Create a fresh .feature file for a new area.surface
115
- canon feature new <SURFACE> --title <TEXT> [--actor-id <ACTOR_ID>] [--session-id <SESSION_ID>] [--project-id <PROJECT_ID>] [--input]
115
+ canon feature new <SURFACE> --title <TEXT> [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--project <PROJECT_ID>] [--input]
116
116
  ```
117
117
  ```bash
118
118
  canon feature new billing.invoice --title Invoices
119
119
  ```
120
120
  ```text
121
121
  # List a change's committed findings at their latest version
122
- canon finding list --change-id <CHANGE_ID> [--open] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
122
+ canon finding list --change <CHANGE_ID> [--open] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
123
123
  ```
124
124
  ```bash
125
- canon finding list --change-id add-login
125
+ canon finding list --change add-login
126
126
  ```
127
127
  ```text
128
128
  # Validate a spec/artifact corpus against canon's format
@@ -154,21 +154,21 @@ canon inventory sync
154
154
  ```
155
155
  ```text
156
156
  # Read stored records across every storage tier
157
- canon query --kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding> [--since <TIMESTAMP>] [--plugin-id <PLUGIN_ID> | --history] [--change-id <CHANGE_ID>] [--status <STATUS>] [--domain <NAME>] [--include-sensitive] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
157
+ canon query --kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding> [--since <TIMESTAMP>] [--plugin <PLUGIN_ID> | --history] [--change <CHANGE_ID>] [--status <STATUS>] [--domain <NAME>] [--include-sensitive] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
158
158
  ```
159
159
  ```bash
160
160
  canon query --kind evidence
161
161
  ```
162
162
  ```text
163
163
  # Fetch role-scoped strategy guidance
164
- canon retrieve --for-role <ROLE> [--regime <KEY>] [--domain <NAME>] [--subject-id <SUBJECT_ID>] [--limit <N>]
164
+ canon retrieve --for-role <ROLE> [--regime <KEY>] [--domain <NAME>] [--subject <SUBJECT_ID>] [--limit <N>]
165
165
  ```
166
166
  ```bash
167
167
  canon retrieve --for-role reviewer --domain dev --limit 20
168
168
  ```
169
169
  ```text
170
170
  # Append a tagged scenario stub to its .feature file (created if missing); many at once with `--input`
171
- canon scenario new <SCENARIO_ID> --title <TEXT> [--subject-id <SUBJECT_ID>] [--lane <NAME>] [--case <NAME>] [--flow <FLOW_ID>] [--change-id <CHANGE_ID> (with --flow)] [--actor-id <ACTOR_ID>] [--session-id <SESSION_ID>] [--feature <FILE>] [--project-id <PROJECT_ID>] [--input]
171
+ canon scenario new <SCENARIO_ID> --title <TEXT> [--subject <SUBJECT_ID>] [--lane <NAME>] [--case <NAME>] [--flow <FLOW_ID>] [--change <CHANGE_ID> (with --flow)] [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--feature <FILE>] [--project <PROJECT_ID>] [--input]
172
172
  ```
173
173
  ```bash
174
174
  canon scenario new auth.login.02 --title "Sign out" --feature .canon/specs/kind=feature/area=auth/login.feature
@@ -181,6 +181,13 @@ canon schema [<PATH>]* [--errors | --error <CODE>]
181
181
  canon schema evidence add
182
182
  ```
183
183
  ```text
184
+ # Search records, brief sections and scenario text, with each hit's neighbors in the record graph
185
+ canon search <TEXT> [--kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding|brief>]* [--expand <N>] [--limit <N>]
186
+ ```
187
+ ```bash
188
+ canon search timeout --kind finding
189
+ ```
190
+ ```text
184
191
  # Print a guide built into this binary (markdown on stdout); the installed SKILL.md is a stub that points here
185
192
  canon skills show <NAME> [--full]
186
193
  ```
@@ -201,6 +208,13 @@ canon task done <TASK_ID> [--input]
201
208
  ```bash
202
209
  canon task done add-login#1
203
210
  ```
211
+ ```text
212
+ # Follow a finding's review loop in time order: review, finding, fix, re-review, evidence
213
+ canon trace <ID>
214
+ ```
215
+ ```bash
216
+ canon trace add-login_1_1
217
+ ```
204
218
  <!-- canon:generated commands-implementer end -->
205
219
 
206
220
  After the first `status`, follow `meta.next` of each write; do not call
@@ -214,9 +228,9 @@ The forms you reach for most (the story's ids; swap in yours):
214
228
 
215
229
  ```bash
216
230
  canon evidence add --all-scenarios --report junit:a.xml --report junit:b.xml --role implementer
217
- canon evidence add --scenario-id auth.login.01 --report junit:red.xml
218
- canon evidence add --scenario-id auth.login.01 --verdict divergent --class test-run --ref "upstream limit, tracked in issue 118" --artifact limit.log
219
- canon finding add --change-id add-login --round 1 --seq 1 --severity should-fix --introduced-unknown --actor-id unit-1 --summary "Token is logged"
231
+ canon evidence add --scenario auth.login.01 --report junit:red.xml
232
+ canon evidence add --scenario auth.login.01 --verdict divergent --class test-run --ref "upstream limit, tracked in issue 118" --artifact limit.log
233
+ canon finding add --change add-login --round 1 --seq 1 --severity should-fix --introduced-unknown --actor unit-1 --summary "Token is logged"
220
234
  ```
221
235
 
222
236
  Batches are one `--input` document (the keys are option names in camelCase,
@@ -224,7 +238,7 @@ Batches are one `--input` document (the keys are option names in camelCase,
224
238
 
225
239
  ```text
226
240
  canon scenario new --input '[{"operands":["auth.login.01"],"title":"Logs in","case":"happy","flow":"F1"},{"operands":["auth.login.02"],"title":"Rejects a wrong password","case":"failure","flow":"F1"}]'
227
- canon evidence add --input '[{"scenarioId":"auth.login.01","class":"test-run","ref":"npm test","role":"implementer"},{"scenarioId":"auth.login.02","class":"test-run","ref":"npm test","role":"implementer"}]'
241
+ canon evidence add --input '[{"scenario":"auth.login.01","class":"test-run","ref":"npm test","role":"implementer"},{"scenario":"auth.login.02","class":"test-run","ref":"npm test","role":"implementer"}]'
228
242
  ```
229
243
 
230
244
  ## Steps
@@ -247,7 +261,7 @@ canon evidence add --input '[{"scenarioId":"auth.login.01","class":"test-run","r
247
261
  under a `specs.roots[]` root (default `.canon/specs`); `canon skills show
248
262
  canon-authoring` has the scaffold. When you fill in a scenario, keep its
249
263
  `# canon: {...}` provenance lines: dropping one aborts `inventory sync`
250
- on `missing-provenance`. `--project-id` is needed only when the repo
264
+ on `missing-provenance`. `--project` is needed only when the repo
251
265
  configures more than one spec root.
252
266
  2. **Units.** One unit is one flow step's complete path (sees, does,
253
267
  becomes) that can be verified on its own, sized to one session. Name the
@@ -262,7 +276,7 @@ canon evidence add --input '[{"scenarioId":"auth.login.01","class":"test-run","r
262
276
  with `finding add` the moment you find it, before review.
263
277
  **A fix fails first.** For a bug fix, write or extend the scenario's test
264
278
  and run it red on the unfixed code, then bind that failing run before you
265
- change the code (`evidence add --scenario-id <id> --report <fmt>:<path>`).
279
+ change the code (`evidence add --scenario <id> --report <fmt>:<path>`).
266
280
  A bound report decides the verdict: a failed case records `divergent`, a
267
281
  skipped case and none failed records `not-applicable`, otherwise
268
282
  `faithful`; an explicit `--verdict faithful` over a failed or skipped case
@@ -276,8 +290,8 @@ canon evidence add --input '[{"scenarioId":"auth.login.01","class":"test-run","r
276
290
  One test run that proves several scenarios is bound once with
277
291
  `--all-scenarios`: one record per indexed scenario owning a case, each
278
292
  with the verdict its own cases show; any refusal writes none. It needs
279
- `--project-id` only when the repo has several spec roots. For one scenario
280
- use `--scenario-id <id>` with `--report` or `--artifact`; for many
293
+ `--project` only when the repo has several spec roots. For one scenario
294
+ use `--scenario <id>` with `--report` or `--artifact`; for many
281
295
  records with different values, one `evidence add --input` with an array
282
296
  (validated before any write; a write that fails stops the batch, the
283
297
  earlier elements stay written and a rerun reports them `unchanged`).
@@ -299,7 +313,7 @@ canon evidence add --input '[{"scenarioId":"auth.login.01","class":"test-run","r
299
313
  with `--artifact <scenario-id>=<path>`; a bare `--artifact` in a batch is
300
314
  refused. An external evaluator's audit is
301
315
  `canon evidence audit`; canon never generates one. Evidence for a task of an
302
- imported plan (`--task-id <id>`) must bind the artifact or report that proves
316
+ imported plan (`--task <id>`) must bind the artifact or report that proves
303
317
  the task; a canon command is never that proof. When the behavior cannot
304
318
  match the scenario because of something outside this change, record the
305
319
  evidence `divergent` and say why in `--ref`; never record `faithful` to
@@ -328,7 +342,7 @@ canon evidence add --input '[{"scenarioId":"auth.login.01","class":"test-run","r
328
342
  is `docs/**` and `*.md`). A docs-only chore needs its change-level review
329
343
  alone. When code did change, the shipping refusal, `status` and
330
344
  `meta.next` lead with one command over every report, with the real paths
331
- (`--project-id <id>` is added only with several spec roots):
345
+ (`--project <id>` is added only with several spec roots):
332
346
  `canon evidence add --all-scenarios --report junit:a.xml --report junit:b.xml --role implementer`.
333
347
  Run the suite and bind it with that one command, not one scenario at a
334
348
  time. Reviews stay current while the verdicts and checks are unchanged; a
@@ -114,7 +114,7 @@ canon demo review
114
114
  ```
115
115
  ```text
116
116
  # Mint a Run manifest with retrieved guidance and context/policy lineage
117
- canon dispatch begin --regime <KEY> [--role <ROLE>] [--actor-id <ACTOR_ID>] [--session-id <SESSION_ID>] [--provider <NAME>] [--model <NAME>] [--skill-id <ID>] [--skill-digest <DIGEST>] [--manifest <FILE>] [--prompt-bundle <NAME@VERSION>] [--task-id <TASK_ID>] [--parent-run-id <RUN_ID>] [--input]
117
+ canon dispatch begin --regime <KEY> [--role <ROLE>] [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--provider <NAME>] [--model <NAME>] [--skill <ID>] [--skill-digest <DIGEST>] [--manifest <FILE>] [--prompt-bundle <NAME@VERSION>] [--task <TASK_ID>] [--parent-run <RUN_ID>] [--input]
118
118
  ```
119
119
  ```bash
120
120
  canon dispatch begin --regime implementer/my-repo/api/abcdef012345 --role implementer
@@ -142,10 +142,10 @@ canon divergence list --as-of 2030-01-01
142
142
  ```
143
143
  ```text
144
144
  # Emit exact bytes for external `ssh-keygen -Y sign -n canon-approval-v1`
145
- canon evidence approval-payload --approver <NAME> --approval-at <TIMESTAMP> [--task-id <TASK_ID>] [--project-id <PROJECT_ID>] [--scenario-id <SCENARIO_ID>] [--run-id <RUN_ID>] [--rev <REV>] [--surface-ref <PATH_OR_EFFECT>]*
145
+ canon evidence approval-payload --approver <NAME> --approval-at <TIMESTAMP> [--task <TASK_ID>] [--project <PROJECT_ID>] [--scenario <SCENARIO_ID>] [--run <RUN_ID>] [--rev <REV>] [--surface-ref <PATH_OR_EFFECT>]*
146
146
  ```
147
147
  ```bash
148
- canon evidence approval-payload --scenario-id auth.login.01 --project-id root --approver alice --approval-at 2030-01-01T00:00:00Z
148
+ canon evidence approval-payload --scenario auth.login.01 --project root --approver alice --approval-at 2030-01-01T00:00:00Z
149
149
  ```
150
150
  ```text
151
151
  # Export a redacted retention manifest without deleting records
@@ -156,10 +156,10 @@ canon export --kind evidence --output evidence.json
156
156
  ```
157
157
  ```text
158
158
  # List a change's committed findings at their latest version
159
- canon finding list --change-id <CHANGE_ID> [--open] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
159
+ canon finding list --change <CHANGE_ID> [--open] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
160
160
  ```
161
161
  ```bash
162
- canon finding list --change-id add-login
162
+ canon finding list --change add-login
163
163
  ```
164
164
  ```text
165
165
  # Validate a spec/artifact corpus against canon's format
@@ -191,7 +191,7 @@ canon ingest plans
191
191
  ```
192
192
  ```text
193
193
  # Import review/divergence/task/handoff records and derive verdicts
194
- canon ingest records [--watch] [--interval-secs <N>] [--dry-run] [--run-id <RUN_ID>] [--input]
194
+ canon ingest records [--watch] [--interval-secs <N>] [--dry-run] [--run <RUN_ID>] [--input]
195
195
  ```
196
196
  ```bash
197
197
  canon ingest records
@@ -271,7 +271,7 @@ canon purge --kind session --before 2020-01-01T00:00:00Z
271
271
  ```
272
272
  ```text
273
273
  # Read stored records across every storage tier
274
- canon query --kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding> [--since <TIMESTAMP>] [--plugin-id <PLUGIN_ID> | --history] [--change-id <CHANGE_ID>] [--status <STATUS>] [--domain <NAME>] [--include-sensitive] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
274
+ canon query --kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding> [--since <TIMESTAMP>] [--plugin <PLUGIN_ID> | --history] [--change <CHANGE_ID>] [--status <STATUS>] [--domain <NAME>] [--include-sensitive] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
275
275
  ```
276
276
  ```bash
277
277
  canon query --kind evidence
@@ -306,7 +306,7 @@ canon report snapshot snapshot-out
306
306
  ```
307
307
  ```text
308
308
  # Fetch role-scoped strategy guidance
309
- canon retrieve --for-role <ROLE> [--regime <KEY>] [--domain <NAME>] [--subject-id <SUBJECT_ID>] [--limit <N>]
309
+ canon retrieve --for-role <ROLE> [--regime <KEY>] [--domain <NAME>] [--subject <SUBJECT_ID>] [--limit <N>]
310
310
  ```
311
311
  ```bash
312
312
  canon retrieve --for-role reviewer --domain dev --limit 20
@@ -319,6 +319,13 @@ canon schema [<PATH>]* [--errors | --error <CODE>]
319
319
  canon schema evidence add
320
320
  ```
321
321
  ```text
322
+ # Search records, brief sections and scenario text, with each hit's neighbors in the record graph
323
+ canon search <TEXT> [--kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding|brief>]* [--expand <N>] [--limit <N>]
324
+ ```
325
+ ```bash
326
+ canon search timeout --kind finding
327
+ ```
328
+ ```text
322
329
  # Run canon's built-in fixture self-tests
323
330
  canon selftest [--suite <trust-spine-gate|tiered-storage|typed-authoring-vocabulary|policy-expressions|format-authority|session-ingest|canon-context|artifact-ingest|spec-ledger-selftest|plugin-overlays|plan-import>]
324
331
  ```
@@ -376,28 +383,28 @@ canon strategy promote 01ARZ3NDEKTSV4RRFFQ69G5FAV
376
383
  ```
377
384
  ```text
378
385
  # Disable an active strategy with durable rollback provenance
379
- canon strategy rollback <STRATEGY_ID> --reason <TEXT> --actor-id <ACTOR_ID> --signature-file <FILE> --approval-at <TIMESTAMP> [--contradicting-trajectory-id <ID>] [--input]
386
+ canon strategy rollback <STRATEGY_ID> --reason <TEXT> --actor <ACTOR_ID> --signature-file <FILE> --approval-at <TIMESTAMP> [--contradicting-trajectory <ID>] [--input]
380
387
  ```
381
388
  ```bash
382
- canon strategy rollback 01ARZ3NDEKTSV4RRFFQ69G5FAV --reason "regressed in production" --actor-id alice --signature-file approval.sig --approval-at 2030-01-01T00:00:00Z
389
+ canon strategy rollback 01ARZ3NDEKTSV4RRFFQ69G5FAV --reason "regressed in production" --actor alice --signature-file approval.sig --approval-at 2030-01-01T00:00:00Z
383
390
  ```
384
391
  ```text
385
392
  # Link an imported plan change to a subject (adopting it under another subject adds that subject; a change may belong to several)
386
- canon subject adopt <SUBJECT_ID> --change-id <CHANGE_ID> [--dry-run] [--input]
393
+ canon subject adopt <SUBJECT_ID> --change <CHANGE_ID> [--dry-run] [--input]
387
394
  ```
388
395
  ```bash
389
- canon subject adopt demo --change-id add-login
396
+ canon subject adopt demo --change add-login
390
397
  ```
391
398
  ```text
392
399
  # Move a subject to another lifecycle state (shipping is evidence-gated; with spec_coverage.require_review, entering its scope is review-gated; shipped → verifying reopens with --reason)
393
- canon subject move <SUBJECT_ID> --to <proposed|specced|building|verifying|shipped|retired> [--override-reason <TEXT>] [--reason <TEXT>] [--actor-id <ACTOR_ID>] [--session-id <SESSION_ID>] [--input]
400
+ canon subject move <SUBJECT_ID> --to <proposed|specced|building|verifying|shipped|retired> [--override-reason <TEXT>] [--reason <TEXT>] [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--input]
394
401
  ```
395
402
  ```bash
396
403
  canon subject move demo --to specced
397
404
  ```
398
405
  ```text
399
406
  # Author a new subject at status `proposed`
400
- canon subject new <SUBJECT_ID> --domain <NAME> --title <TEXT> [--summary <TEXT>] [--owner-role <ROLE>] [--actor-id <ACTOR_ID>] [--session-id <SESSION_ID>] [--input]
407
+ canon subject new <SUBJECT_ID> --domain <NAME> --title <TEXT> [--summary <TEXT>] [--owner-role <ROLE>] [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--input]
401
408
  ```
402
409
  ```bash
403
410
  canon subject new payments --domain dev --title Payments
@@ -411,10 +418,10 @@ canon subject show demo
411
418
  ```
412
419
  ```text
413
420
  # Take a change back out of a subject (the mirror of adopt; refused for a change whose brief is approved)
414
- canon subject unadopt <SUBJECT_ID> --change-id <CHANGE_ID> [--dry-run] [--input]
421
+ canon subject unadopt <SUBJECT_ID> --change <CHANGE_ID> [--dry-run] [--input]
415
422
  ```
416
423
  ```bash
417
- canon subject unadopt demo --change-id add-login
424
+ canon subject unadopt demo --change add-login
418
425
  ```
419
426
  ```text
420
427
  # Apply canon.yaml aging rules, moving old records to their destination tier
@@ -424,6 +431,13 @@ canon tier age [--commit --plan-digest <DIGEST>] [--input]
424
431
  ```bash
425
432
  canon tier age
426
433
  ```
434
+ ```text
435
+ # Follow a finding's review loop in time order: review, finding, fix, re-review, evidence
436
+ canon trace <ID>
437
+ ```
438
+ ```bash
439
+ canon trace add-login_1_1
440
+ ```
427
441
  <!-- canon:generated commands-orchestrator end -->
428
442
 
429
443
  ## Read the state
@@ -454,7 +468,7 @@ on every canon call (or run `export CANON_ROLE=<role>` first in its own
454
468
  shell).
455
469
 
456
470
  Order: planner, then (after the human's answer) implementer, then reviewer.
457
- Give each a unit: its own `--actor-id` and a session id.
471
+ Give each a unit: its own `--actor` and a session id.
458
472
 
459
473
  ### Spawn contract
460
474
 
@@ -463,7 +477,7 @@ one flow step or review it serves); the scope it owns (the scenarios or
463
477
  paths it may write); what it must not touch (the brief, the policy, other
464
478
  units' scenarios, anything outside its scope); the command that proves it is
465
479
  done (the unit's verify command, or `canon gate check` for the reviewer); and
466
- its own `--actor-id` and `--session-id`. Two agents never write the same
480
+ its own `--actor` and `--session`. Two agents never write the same
467
481
  paths: give parallel implementers disjoint scopes, and where the harness can
468
482
  isolate a child in its own worktree, use it. The child reports what it
469
483
  verified apart from what it only claims.
@@ -490,7 +504,7 @@ The reviewer is a separate process with its own session id, never your
490
504
  session or the implementer's under another label. Start it as a new process
491
505
  (a new `codex exec` run, or the harness's subagent), pass nothing of the
492
506
  implementer's context, and have it record its real session id as
493
- `--session-id` (#39). A reviewer that cannot run the tests says so and does
507
+ `--session` (#39). A reviewer that cannot run the tests says so and does
494
508
  not sign off.
495
509
 
496
510
  ## Relay the human stop
@@ -499,8 +513,9 @@ When `status` or `meta.next` shows a step with `actor: human` (the brief's
499
513
  approval), stop everything for that scope, report the brief to the human in
500
514
  its language, and wait. Tell the human they can approve the clean briefs in
501
515
  `canon dashboard` (the briefs page) or run, in their own shell, the exact call
502
- with the slug filled in: `canon brief approve <slug> --approver <their name>
503
- --note "<their own words>"`. You never click Approve, fill the form or run
516
+ with every slug filled in: `canon brief approve <slug> <slug> --approver <their name>
517
+ --note "<their own words>"` (several slugs take one answer; nothing is written if
518
+ one is refused). You never click Approve, fill the form or run
504
519
  `brief approve` yourself: it refuses you (`HUMAN_ONLY`), and removing or
505
520
  unsetting your declared role (`env -u CANON_ROLE`, dropping `--as`) to get past
506
521
  that is the same act under another label. Report the call and wait. Do not start the
@@ -37,10 +37,10 @@ canon brief show
37
37
  ```
38
38
  ```text
39
39
  # Write .canon/changes/<slug>/brief.md, import it, and adopt it into a subject
40
- canon change new <CHANGE_ID> --subject-id <SUBJECT_ID> --title <TEXT> [--change-kind <feature|chore>] [--input]
40
+ canon change new <CHANGE_ID> --subject <SUBJECT_ID> --title <TEXT> [--change-kind <feature|chore>] [--input]
41
41
  ```
42
42
  ```bash
43
- canon change new add-search --subject-id demo --title "Add search"
43
+ canon change new add-search --subject demo --title "Add search"
44
44
  ```
45
45
  ```text
46
46
  # Write the shell completion script for canon (bash, zsh or fish)
@@ -65,17 +65,17 @@ canon divergence list --as-of 2030-01-01
65
65
  ```
66
66
  ```text
67
67
  # Create a fresh .feature file for a new area.surface
68
- canon feature new <SURFACE> --title <TEXT> [--actor-id <ACTOR_ID>] [--session-id <SESSION_ID>] [--project-id <PROJECT_ID>] [--input]
68
+ canon feature new <SURFACE> --title <TEXT> [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--project <PROJECT_ID>] [--input]
69
69
  ```
70
70
  ```bash
71
71
  canon feature new billing.invoice --title Invoices
72
72
  ```
73
73
  ```text
74
74
  # List a change's committed findings at their latest version
75
- canon finding list --change-id <CHANGE_ID> [--open] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
75
+ canon finding list --change <CHANGE_ID> [--open] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
76
76
  ```
77
77
  ```bash
78
- canon finding list --change-id add-login
78
+ canon finding list --change add-login
79
79
  ```
80
80
  ```text
81
81
  # Validate a spec/artifact corpus against canon's format
@@ -93,21 +93,21 @@ canon gate check
93
93
  ```
94
94
  ```text
95
95
  # Read stored records across every storage tier
96
- canon query --kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding> [--since <TIMESTAMP>] [--plugin-id <PLUGIN_ID> | --history] [--change-id <CHANGE_ID>] [--status <STATUS>] [--domain <NAME>] [--include-sensitive] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
96
+ canon query --kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding> [--since <TIMESTAMP>] [--plugin <PLUGIN_ID> | --history] [--change <CHANGE_ID>] [--status <STATUS>] [--domain <NAME>] [--include-sensitive] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
97
97
  ```
98
98
  ```bash
99
99
  canon query --kind evidence
100
100
  ```
101
101
  ```text
102
102
  # Fetch role-scoped strategy guidance
103
- canon retrieve --for-role <ROLE> [--regime <KEY>] [--domain <NAME>] [--subject-id <SUBJECT_ID>] [--limit <N>]
103
+ canon retrieve --for-role <ROLE> [--regime <KEY>] [--domain <NAME>] [--subject <SUBJECT_ID>] [--limit <N>]
104
104
  ```
105
105
  ```bash
106
106
  canon retrieve --for-role reviewer --domain dev --limit 20
107
107
  ```
108
108
  ```text
109
109
  # Append a tagged scenario stub to its .feature file (created if missing); many at once with `--input`
110
- canon scenario new <SCENARIO_ID> --title <TEXT> [--subject-id <SUBJECT_ID>] [--lane <NAME>] [--case <NAME>] [--flow <FLOW_ID>] [--change-id <CHANGE_ID> (with --flow)] [--actor-id <ACTOR_ID>] [--session-id <SESSION_ID>] [--feature <FILE>] [--project-id <PROJECT_ID>] [--input]
110
+ canon scenario new <SCENARIO_ID> --title <TEXT> [--subject <SUBJECT_ID>] [--lane <NAME>] [--case <NAME>] [--flow <FLOW_ID>] [--change <CHANGE_ID> (with --flow)] [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--feature <FILE>] [--project <PROJECT_ID>] [--input]
111
111
  ```
112
112
  ```bash
113
113
  canon scenario new auth.login.02 --title "Sign out" --feature .canon/specs/kind=feature/area=auth/login.feature
@@ -120,6 +120,13 @@ canon schema [<PATH>]* [--errors | --error <CODE>]
120
120
  canon schema evidence add
121
121
  ```
122
122
  ```text
123
+ # Search records, brief sections and scenario text, with each hit's neighbors in the record graph
124
+ canon search <TEXT> [--kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding|brief>]* [--expand <N>] [--limit <N>]
125
+ ```
126
+ ```bash
127
+ canon search timeout --kind finding
128
+ ```
129
+ ```text
123
130
  # Print a guide built into this binary (markdown on stdout); the installed SKILL.md is a stub that points here
124
131
  canon skills show <NAME> [--full]
125
132
  ```
@@ -135,24 +142,31 @@ canon status
135
142
  ```
136
143
  ```text
137
144
  # Link an imported plan change to a subject (adopting it under another subject adds that subject; a change may belong to several)
138
- canon subject adopt <SUBJECT_ID> --change-id <CHANGE_ID> [--dry-run] [--input]
145
+ canon subject adopt <SUBJECT_ID> --change <CHANGE_ID> [--dry-run] [--input]
139
146
  ```
140
147
  ```bash
141
- canon subject adopt demo --change-id add-login
148
+ canon subject adopt demo --change add-login
142
149
  ```
143
150
  ```text
144
151
  # Author a new subject at status `proposed`
145
- canon subject new <SUBJECT_ID> --domain <NAME> --title <TEXT> [--summary <TEXT>] [--owner-role <ROLE>] [--actor-id <ACTOR_ID>] [--session-id <SESSION_ID>] [--input]
152
+ canon subject new <SUBJECT_ID> --domain <NAME> --title <TEXT> [--summary <TEXT>] [--owner-role <ROLE>] [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--input]
146
153
  ```
147
154
  ```bash
148
155
  canon subject new payments --domain dev --title Payments
149
156
  ```
150
157
  ```text
151
158
  # Take a change back out of a subject (the mirror of adopt; refused for a change whose brief is approved)
152
- canon subject unadopt <SUBJECT_ID> --change-id <CHANGE_ID> [--dry-run] [--input]
159
+ canon subject unadopt <SUBJECT_ID> --change <CHANGE_ID> [--dry-run] [--input]
160
+ ```
161
+ ```bash
162
+ canon subject unadopt demo --change add-login
163
+ ```
164
+ ```text
165
+ # Follow a finding's review loop in time order: review, finding, fix, re-review, evidence
166
+ canon trace <ID>
153
167
  ```
154
168
  ```bash
155
- canon subject unadopt demo --change-id add-login
169
+ canon trace add-login_1_1
156
170
  ```
157
171
  <!-- canon:generated commands-planner end -->
158
172
 
@@ -180,10 +194,11 @@ ids); the human step comes after it. A policy that no longer matches its approva
180
194
  `building`, `verifying` or `shipped` subject warns (stderr and JSON
181
195
  `meta.warnings`) until its brief is approved: evidence for its existing scenarios is not
182
196
  frozen and the subject can still be reopened and shipped for its approved
183
- scope while no scenario is tagged for the draft (a pending draft); once one
184
- is, the subject cannot ship before the approval.
185
- A scenario answers to the changes its `@flow:<change>.<F-id>`
186
- tags name (`canon scenario new --flow <F-id>` tags one for this change).
197
+ scope while no scenario is tagged for the draft and it was never approved
198
+ (a pending draft); once one is, the subject cannot ship before the approval.
199
+ A tagged scenario answers to the changes its `@flow:<change>.<F-id>`
200
+ tags name (`canon scenario new --flow <F-id>` tags one for this change);
201
+ an untagged one answers to every change with an `Approved:` line.
187
202
  To park a draft that should not gate a live subject, `subject unadopt`
188
203
  it and adopt it into a `proposed` subject. Inside an approved scope there is no new
189
204
  subject or change: a fix or follow-up stays in the existing change.