@journeykit/canon 0.29.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 +48 -22
  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 +49 -34
  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 +12 -8
  10. package/dist/skills/reference/canon-review.md +26 -25
  11. package/dist/skills/reference/canon-storage.md +20 -3
  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 +40 -24
  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 +23 -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 +25 -3
  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
@@ -51,17 +51,17 @@ canon context
51
51
  ```
52
52
  ```text
53
53
  # Add a divergence candidate, staged with no run_seq yet
54
- 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]
54
+ 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]
55
55
  ```
56
56
  ```bash
57
- canon divergence add auth.login.01 --actor-id alice --role reviewer
57
+ canon divergence add auth.login.01 --actor alice --role reviewer
58
58
  ```
59
59
  ```text
60
60
  # Directly record a deferred divergence (requires --reason/--expiry)
61
- 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]
61
+ 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]
62
62
  ```
63
63
  ```bash
64
- canon divergence defer auth.login.01 --actor-id alice --reason "waiting on the vendor" --expiry 2030-01-01T00:00:00Z --role reviewer
64
+ canon divergence defer auth.login.01 --actor alice --reason "waiting on the vendor" --expiry 2030-01-01T00:00:00Z --role reviewer
65
65
  ```
66
66
  ```text
67
67
  # List the current divergence burn-down state
@@ -72,31 +72,31 @@ canon divergence list --as-of 2030-01-01
72
72
  ```
73
73
  ```text
74
74
  # Directly record a resolved divergence
75
- 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]
75
+ canon divergence resolve <SCENARIO_ID> --actor <ACTOR_ID> [--project <PROJECT_ID>] [--rev <REV>] [--round <N>] [--session <SESSION_ID>] [--detail <TEXT>] [--role <ROLE>] [--input]
76
76
  ```
77
77
  ```bash
78
- canon divergence resolve auth.login.01 --actor-id alice --role reviewer
78
+ canon divergence resolve auth.login.01 --actor alice --role reviewer
79
79
  ```
80
80
  ```text
81
81
  # Record one code-review finding
82
- canon finding add --change-id <CHANGE_ID> --round <N> --seq <N> --severity <blocker|should-fix|note> --actor-id <ACTOR_ID> --summary <TEXT> [--disposition <open|fixed|rejected|deferred>] [--rev <REV>] [--resolution-rev <REV>] [--introduced-rev <REV>] [--file-ref <TEXT>] [--scenario-id <SCENARIO_ID>]* [--role <ROLE>] [--session-id <SESSION_ID>] [--promote | --no-promote] [--input]
82
+ canon finding add --change <CHANGE_ID> --round <N> --seq <N> --severity <blocker|should-fix|note> --actor <ACTOR_ID> --summary <TEXT> [--disposition <open|fixed|rejected|deferred>] [--rev <REV>] [--resolution-rev <REV>] [--introduced-rev <REV>] [--introduced-unknown] [--review <REVIEW_ID>] [--file-ref <TEXT>] [--scenario <SCENARIO_ID>]* [--role <ROLE>] [--session <SESSION_ID>] [--promote | --no-promote] [--input]
83
83
  ```
84
84
  ```bash
85
- canon finding add --change-id add-login --round 1 --seq 2 --severity should-fix --actor-id alice --summary "Token is logged"
85
+ canon finding add --change add-login --round 1 --seq 2 --severity should-fix --introduced-unknown --actor alice --summary "Token is logged"
86
86
  ```
87
87
  ```text
88
88
  # Move an already-committed finding's disposition
89
- canon finding close <CHANGE_ID> --round <N> --seq <N> --disposition <open|fixed|rejected|deferred> [--resolution-rev <REV>] [--reason <TEXT>] [--actor-id <ACTOR_ID>] [--role <ROLE>] [--session-id <SESSION_ID>] [--promote | --no-promote] [--input]
89
+ canon finding close <CHANGE_ID> --round <N> --seq <N> --disposition <open|fixed|rejected|deferred> [--resolution-rev <REV>] [--reason <TEXT>] [--actor <ACTOR_ID>] [--role <ROLE>] [--session <SESSION_ID>] [--promote | --no-promote] [--input]
90
90
  ```
91
91
  ```bash
92
92
  canon finding close add-login --round 1 --seq 1 --disposition rejected --reason "works as designed"
93
93
  ```
94
94
  ```text
95
95
  # List a change's committed findings at their latest version
96
- canon finding list --change-id <CHANGE_ID> [--open] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
96
+ canon finding list --change <CHANGE_ID> [--open] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
97
97
  ```
98
98
  ```bash
99
- canon finding list --change-id add-login
99
+ canon finding list --change add-login
100
100
  ```
101
101
  ```text
102
102
  # Validate a spec/artifact corpus against canon's format
@@ -114,31 +114,31 @@ canon gate check
114
114
  ```
115
115
  ```text
116
116
  # Read stored records across every storage tier
117
- 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>]
117
+ 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>]
118
118
  ```
119
119
  ```bash
120
120
  canon query --kind evidence
121
121
  ```
122
122
  ```text
123
123
  # Fetch role-scoped strategy guidance
124
- canon retrieve --for-role <ROLE> [--regime <KEY>] [--domain <NAME>] [--subject-id <SUBJECT_ID>] [--limit <N>]
124
+ canon retrieve --for-role <ROLE> [--regime <KEY>] [--domain <NAME>] [--subject <SUBJECT_ID>] [--limit <N>]
125
125
  ```
126
126
  ```bash
127
127
  canon retrieve --for-role reviewer --domain dev --limit 20
128
128
  ```
129
129
  ```text
130
130
  # Write one attributed Review record for a chore change directly to the ledger (exactly one provenance ref required)
131
- canon review change <CHANGE_ID> --actor-id <ACTOR_ID> (--upstream-ref <TEXT> | --original-spec-ref <TEXT>) [--project-id <PROJECT_ID>] [--rev <REV>] [--role <ROLE>] [--session-id <SESSION_ID>] [--review-outcome <signed|indeterminate|unavailable>] [--reviewer-provider <NAME>] [--reviewer-model <NAME>] [--reviewer-harness <NAME>] [--artifact <PATH>]* [--max-artifact-mib <N>] [--input]
131
+ canon review change <CHANGE_ID> --actor <ACTOR_ID> (--upstream-ref <TEXT> | --original-spec-ref <TEXT>) [--project <PROJECT_ID>] [--rev <REV>] [--role <ROLE>] [--session <SESSION_ID>] [--review-outcome <signed|indeterminate|unavailable>] [--reviewer-provider <NAME>] [--reviewer-model <NAME>] [--reviewer-harness <NAME>] [--artifact <PATH>]* [--max-artifact-mib <N>] [--input]
132
132
  ```
133
133
  ```bash
134
- canon review change add-login --actor-id alice --role reviewer --original-spec-ref docs/prd.md
134
+ canon review change add-login --actor alice --role reviewer --original-spec-ref docs/prd.md
135
135
  ```
136
136
  ```text
137
137
  # Write one attributed Review record per scenario directly to the ledger, nothing to promote (exactly one provenance ref required)
138
- canon review scenario <SCENARIO_ID>+ --actor-id <ACTOR_ID> (--upstream-ref <TEXT> | --original-spec-ref <TEXT>) [--project-id <PROJECT_ID>] [--rev <REV>] [--role <ROLE>] [--session-id <SESSION_ID>] [--review-outcome <signed|indeterminate|unavailable>] [--reviewer-provider <NAME>] [--reviewer-model <NAME>] [--reviewer-harness <NAME>] [--artifact <PATH>]* [--max-artifact-mib <N>] [--input]
138
+ canon review scenario <SCENARIO_ID>+ --actor <ACTOR_ID> (--upstream-ref <TEXT> | --original-spec-ref <TEXT>) [--project <PROJECT_ID>] [--rev <REV>] [--role <ROLE>] [--session <SESSION_ID>] [--review-outcome <signed|indeterminate|unavailable>] [--reviewer-provider <NAME>] [--reviewer-model <NAME>] [--reviewer-harness <NAME>] [--artifact <PATH>]* [--max-artifact-mib <N>] [--input]
139
139
  ```
140
140
  ```bash
141
- canon review scenario auth.login.01 --actor-id alice --role reviewer --original-spec-ref docs/prd.md
141
+ canon review scenario auth.login.01 --actor alice --role reviewer --original-spec-ref docs/prd.md
142
142
  ```
143
143
  ```text
144
144
  # Describe canon's own commands
@@ -148,6 +148,13 @@ canon schema [<PATH>]* [--errors | --error <CODE>]
148
148
  canon schema evidence add
149
149
  ```
150
150
  ```text
151
+ # Search records, brief sections and scenario text, with each hit's neighbors in the record graph
152
+ canon search <TEXT> [--kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding|brief>]* [--expand <N>] [--limit <N>]
153
+ ```
154
+ ```bash
155
+ canon search timeout --kind finding
156
+ ```
157
+ ```text
151
158
  # Print a guide built into this binary (markdown on stdout); the installed SKILL.md is a stub that points here
152
159
  canon skills show <NAME> [--full]
153
160
  ```
@@ -161,6 +168,13 @@ canon status [--fields <FIELDS>]
161
168
  ```bash
162
169
  canon status
163
170
  ```
171
+ ```text
172
+ # Follow a finding's review loop in time order: review, finding, fix, re-review, evidence
173
+ canon trace <ID>
174
+ ```
175
+ ```bash
176
+ canon trace add-login_1_1
177
+ ```
164
178
  <!-- canon:generated commands-reviewer end -->
165
179
 
166
180
  `review scenario` needs exactly one of `--upstream-ref <ref>` or
@@ -174,20 +188,20 @@ found goes in `finding add --summary`.
174
188
  The forms you reach for most (the story's ids; swap in yours):
175
189
 
176
190
  ```bash
177
- canon review scenario auth.login.01 auth.login.02 --actor-id reviewer-1 --session-id session-7 --original-spec-ref docs/prd.md
178
- canon review scenario auth.login.01 --actor-id reviewer-1 --session-id session-7 --review-outcome indeterminate --original-spec-ref docs/prd.md
179
- canon review change add-login --actor-id reviewer-1 --session-id session-7 --original-spec-ref docs/prd.md
180
- canon finding add --change-id add-login --round 1 --seq 2 --severity blocker --actor-id reviewer-1 --session-id session-7 --summary "No rate limit" --scenario-id auth.login.01 --scenario-id auth.login.02 --introduced-rev HEAD~3
191
+ canon review scenario auth.login.01 auth.login.02 --actor reviewer-1 --session session-7 --original-spec-ref docs/prd.md
192
+ canon review scenario auth.login.01 --actor reviewer-1 --session session-7 --review-outcome indeterminate --original-spec-ref docs/prd.md
193
+ canon review change add-login --actor reviewer-1 --session session-7 --original-spec-ref docs/prd.md
194
+ canon finding add --change add-login --round 1 --seq 2 --severity blocker --actor reviewer-1 --session session-7 --summary "No rate limit" --scenario auth.login.01 --scenario auth.login.02 --introduced-rev HEAD~3
181
195
  canon finding close add-login --round 1 --seq 2 --disposition fixed --resolution-rev HEAD
182
196
  canon finding close add-login --round 1 --seq 3 --disposition rejected --reason "works as designed"
183
- canon finding list --change-id add-login --open
197
+ canon finding list --change add-login --open
184
198
  ```
185
199
 
186
200
  Several findings at once are one `--input` array (the keys are option names
187
201
  in camelCase):
188
202
 
189
203
  ```text
190
- canon finding add --input '[{"changeId":"add-login","round":1,"seq":3,"severity":"note","actorId":"reviewer-1","summary":"Token is logged"},{"changeId":"add-login","round":1,"seq":4,"severity":"should-fix","actorId":"reviewer-1","summary":"Error text leaks the user name"}]'
204
+ canon finding add --input '[{"change":"add-login","round":1,"seq":3,"severity":"note","actor":"reviewer-1","summary":"Token is logged"},{"change":"add-login","round":1,"seq":4,"severity":"should-fix","introducedUnknown":true,"actor":"reviewer-1","summary":"Error text leaks the user name"}]'
191
205
  ```
192
206
 
193
207
  A review pins what you saw: the scenario's digest plus the verdict
@@ -210,8 +224,8 @@ or `status` again.
210
224
  ## Separate session
211
225
 
212
226
  You run as a separate process with your own session id, never the session
213
- that wrote the code and evidence under another `--actor-id` or
214
- `--session-id` label. Pass your real session id as `--session-id` on
227
+ that wrote the code and evidence under another `--actor` or
228
+ `--session` label. Pass your real session id as `--session` on
215
229
  everything you record. A harness with no subagent tool starts you (a new
216
230
  `codex exec` run in this repo, say). Review happens on every change.
217
231
 
@@ -257,6 +271,10 @@ should make it fail and run it if it is cheap; if the test stays green, record
257
271
  the finding. For a fix, read `canon query --kind evidence --history --json`
258
272
  for that scenario's records: expect an earlier non-faithful version, or a
259
273
  named closest reproduction in `--ref`; record a finding when neither exists.
274
+ `canon trace <finding key>` lists the loop around a finding in time order (the
275
+ review that raised it, the fix, the re-review, the evidence at those commits);
276
+ `canon search "<text>"` finds earlier findings and the scenarios about the same
277
+ thing.
260
278
  Put one blast-radius fact in the finding or review `--summary`: what else the
261
279
  change touches that the checks do not exercise. Read the waivers too:
262
280
  `status` lists every `--override-reason` an implementer or the orchestrator
@@ -274,7 +292,7 @@ confirm the evidence really is divergent and the limit is outside this
274
292
  change, then report to the human the scenario ids, the reason, the
275
293
  tracking reference and an expiry when the limit should be gone by a date.
276
294
  Give the exact call, ids filled in: the human runs `canon divergence accept
277
- <ids> --actor-id <name> --reason "<why>" --tracking <ref>` themselves in their
295
+ <ids> --actor <name> --reason "<why>" --tracking <ref>` themselves in their
278
296
  own shell, from a session that did not attest the evidence
279
297
  (`DIVERGENCE_ACCEPT_REFUSED` otherwise); you never run it or unset your role to. Never suggest it to skip
280
298
  a fix the implementer can make in this change. The acceptance pins that
@@ -302,9 +320,9 @@ covered for the ship guard and stays listed as `accepted-divergence` in
302
320
  - Sign off in one batch with `review scenario <ids>`, all or nothing. It writes
303
321
  directly; nothing to promote. canon stores and re-checks attached bytes
304
322
  and never compares images.
305
- - Pass `--scenario-id` for each scenario a finding is about. A blocker you
323
+ - Pass `--scenario` for each scenario a finding is about. A blocker you
306
324
  close `fixed` then stays blocking until the implementer records evidence
307
- again for those scenarios alone (`evidence add --scenario-id <id>`); the
325
+ again for those scenarios alone (`evidence add --scenario <id>`); the
308
326
  close inherits the list. A blocker naming no scenario asks for the whole
309
327
  suite again (`evidence add --all-scenarios`), which on a big suite is
310
328
  a long e2e run for a one-scenario fix, so name them. Your pinned review
@@ -313,7 +331,7 @@ covered for the ship guard and stays listed as `accepted-divergence` in
313
331
  evidence changes a verdict or the checks and so stales your review, look
314
332
  again before you sign it again.
315
333
  A chore has no scenarios: review it with one change-level review, `canon
316
- review change <slug> --actor-id <me> --session-id <session>
334
+ review change <slug> --actor <me> --session <session>
317
335
  --upstream-ref <ref>` (or `--original-spec-ref <path>`). It signs the
318
336
  chore's invariants and checks against the diff and pins its brief, so
319
337
  editing the brief stales it. The chore also needs new evidence on every
@@ -322,7 +340,7 @@ covered for the ship guard and stays listed as `accepted-divergence` in
322
340
 
323
341
  **Done when:** `canon gate check` lists no `unreviewed-promotion` violation
324
342
  and no open blocker for the change (read `data.violations[]` in `canon gate
325
- check --json`; `canon finding list --change-id add-login --open` shows the
343
+ check --json`; `canon finding list --change add-login --open` shows the
326
344
  open findings), or each remaining one is a finding you recorded and the
327
345
  implementer owns. Your last write's `meta.next` names the next step.
328
346
 
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-adapter-authorize 1 "authorize 0.29.0"
3
+ .TH canon-adapter-authorize 1 "authorize 0.31.0"
4
4
  .SH NAME
5
5
  canon\-adapter\-authorize \- Authorize declared capabilities against repository policy (preflight only)
6
6
  .SH SYNOPSIS
@@ -41,4 +41,4 @@ Print help
41
41
  \fB\-V\fR, \fB\-\-version\fR
42
42
  Print version
43
43
  .SH VERSION
44
- v0.29.0
44
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-adapter-validate 1 "validate 0.29.0"
3
+ .TH canon-adapter-validate 1 "validate 0.31.0"
4
4
  .SH NAME
5
5
  canon\-adapter\-validate \- Read and validate one provider\-neutral response envelope
6
6
  .SH SYNOPSIS
@@ -41,4 +41,4 @@ Print help
41
41
  \fB\-V\fR, \fB\-\-version\fR
42
42
  Print version
43
43
  .SH VERSION
44
- v0.29.0
44
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-adapter 1 "adapter 0.29.0"
3
+ .TH canon-adapter 1 "adapter 0.31.0"
4
4
  .SH NAME
5
5
  canon\-adapter \- Validate a provider\-neutral adapter response without executing a provider
6
6
  .SH SYNOPSIS
@@ -43,4 +43,4 @@ Examples:
43
43
  canon adapter validate \-\-response response.json
44
44
  canon adapter validate \-\-response response.json \-\-repo . \-\-json
45
45
  .SH VERSION
46
- v0.29.0
46
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-artifacts-move 1 "move 0.29.0"
3
+ .TH canon-artifacts-move 1 "move 0.31.0"
4
4
  .SH NAME
5
5
  canon\-artifacts\-move \- Move the local artifact blobs to an object\-store tier, verify them, and remove the local copies
6
6
  .SH SYNOPSIS
@@ -60,4 +60,4 @@ The bare run previews: it lists every upload and removal and prints a planDigest
60
60
 
61
61
  Idempotent and resumable: a run stopped anywhere leaves a repo the gate still passes, and the next run finishes; a second run finds nothing to do. A blob whose bytes do not match its name is never moved. Moving back to local is refused; `\-\-tier local` on a local repo is a no\-op.
62
62
  .SH VERSION
63
- v0.29.0
63
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-artifacts-store 1 "store 0.29.0"
3
+ .TH canon-artifacts-store 1 "store 0.31.0"
4
4
  .SH NAME
5
5
  canon\-artifacts\-store \- Store the bound files of existing evidence records and current reviews in the artifact store (.canon/artifacts/sha256/)
6
6
  .SH SYNOPSIS
@@ -51,4 +51,4 @@ For records written before canon stored bound bytes (0.11\-0.13), and for any ev
51
51
 
52
52
  Exit 0 when the pass ran (the gate decides whether an unstored file matters), 2 when the ledger cannot be read or a write fails.
53
53
  .SH VERSION
54
- v0.29.0
54
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-artifacts-verify 1 "verify 0.29.0"
3
+ .TH canon-artifacts-verify 1 "verify 0.31.0"
4
4
  .SH NAME
5
5
  canon\-artifacts\-verify \- Check that the artifact store holds every file the latest evidence and current reviews bind (\-\-full re\-hashes the stored bytes)
6
6
  .SH SYNOPSIS
@@ -45,4 +45,4 @@ Asks the store canon.yaml\*(Aqs `artifacts:` block selects (default: local, .can
45
45
 
46
46
  Exit 0 when every file is stored, 1 when one is missing or altered (data.problems names each), 2 when the store cannot be used or reached: an unreachable store is a refusal, never a pass.
47
47
  .SH VERSION
48
- v0.29.0
48
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-artifacts 1 "artifacts 0.29.0"
3
+ .TH canon-artifacts 1 "artifacts 0.31.0"
4
4
  .SH NAME
5
5
  canon\-artifacts \- Check or move the evidence artifact store (local, or an object\-store tier)
6
6
  .SH SYNOPSIS
@@ -42,4 +42,4 @@ Store the bound files of existing evidence records and current reviews in the ar
42
42
  canon\-artifacts\-move(1)
43
43
  Move the local artifact blobs to an object\-store tier, verify them, and remove the local copies
44
44
  .SH VERSION
45
- v0.29.0
45
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-brief-approve 1 "approve 0.29.0"
3
+ .TH canon-brief-approve 1 "approve 0.31.0"
4
4
  .SH NAME
5
5
  canon\-brief\-approve \- Record the human\*(Aqs approval of the brief, bound to its text; refused while `brief check` has blockers
6
6
  .SH SYNOPSIS
@@ -48,15 +48,18 @@ Print help
48
48
  Print version
49
49
  .TP
50
50
  [\fICHANGE_ID\fR]
51
- The change to read (default: the repo\*(Aqs only live change)
51
+ The changes to approve, one answer for all, none written unless every one is approvable (default: the repo\*(Aqs only live change)
52
52
  .SH EXTRA
53
53
  Examples:
54
54
  canon brief approve add\-login \-\-approver Ana \-\-note \*(AqGo. Ship the failure flow too.\*(Aq
55
+ canon brief approve add\-login add\-search fix\-sync \-\-approver Ana \-\-note \*(AqAll three, go.\*(Aq
55
56
 
56
- Writes `Approved: <who> <when> — "<words>" (brief sha256:<digest>)` into the
57
+ Several ids take one name, one answer and one timestamp. Every id is checked
58
+ first; one refused id refuses the call (BRIEF_APPROVE_REFUSED) and nothing is
59
+ written. Writes `Approved: <who> <when> — "<words>" (brief sha256:<digest>)` into the
57
60
  brief (the digest covers the brief without its `Approved:` lines) and records
58
61
  `canon policy approve` in the same call. Edit the brief afterwards and it reads as
59
62
  not approved (BRIEF_CHANGED_SINCE_APPROVAL) until a human answers again and this
60
63
  runs again. Run it only from the human\*(Aqs answer, with their words as \-\-note.
61
64
  .SH VERSION
62
- v0.29.0
65
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-brief-check 1 "check 0.29.0"
3
+ .TH canon-brief-check 1 "check 0.31.0"
4
4
  .SH NAME
5
5
  canon\-brief\-check \- Read the brief against the rules: blocker and advisory findings (exit 0 clean, 1 blockers, 2 refused)
6
6
  .SH SYNOPSIS
@@ -41,4 +41,4 @@ Print version
41
41
  [\fICHANGE_ID\fR]
42
42
  The change to read (default: the repo\*(Aqs only live change)
43
43
  .SH VERSION
44
- v0.29.0
44
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-brief-show 1 "show 0.29.0"
3
+ .TH canon-brief-show 1 "show 0.31.0"
4
4
  .SH NAME
5
5
  canon\-brief\-show \- Show where the change stands and the next one to three steps; never edits
6
6
  .SH SYNOPSIS
@@ -47,4 +47,4 @@ Examples:
47
47
 
48
48
  The operand names the change; without it the repo\*(Aqs only live change is read.
49
49
  .SH VERSION
50
- v0.29.0
50
+ v0.31.0
package/man/canon-brief.1 CHANGED
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-brief 1 "brief 0.29.0"
3
+ .TH canon-brief 1 "brief 0.31.0"
4
4
  .SH NAME
5
5
  canon\-brief \- Check a change\*(Aqs brief (PRD format) and see the next steps; never edits
6
6
  .SH SYNOPSIS
@@ -48,16 +48,17 @@ Examples:
48
48
  canon brief check add\-login \-\-json
49
49
 
50
50
  The brief is the PRD `canon change new` writes: sections are found by their
51
- `<!\-\- canon:section <key> role=… \-\->` marker, never by heading text. Blockers
51
+ English `##` heading (Intent, Desired outcome, …), never by a comment. Blockers
52
52
  (structure) are a missing or out\-of\-order section, a duplicate flow id, step
53
53
  detail that does not match the flow ids, leftover placeholders, and, once the
54
54
  subject is building, a flow step with no scenario or no failure scenario.
55
55
  Advisories (prose) apply to normative sections, Intent and Questions, in the
56
56
  language each is written in (`language:` in canon.yaml overrides); only en and
57
57
  ko have rule lists.
58
- Waive one rule in one section with
59
- <!\-\- canon:waive <rule\-id> <section\-key> "<reason>" \-\->
60
- A brief without markers (written before 0.19) checks as `brief.legacy`, an
61
- advisory. Without \-\-change\-id, the repo\*(Aqs only live change is checked.
58
+ Waive one rule in one section with an entry of the frontmatter `waive` list
59
+ (`rule`, `section`, `reason`, optional `match`). A brief in the 0.30 format
60
+ gets one blocker, `brief.old\-format`: `canon migrate` rewrites it. A brief
61
+ with fewer than two known headings (written before 0.19) checks as `brief.legacy`, an
62
+ advisory. Without \-\-change, the repo\*(Aqs only live change is checked.
62
63
  .SH VERSION
63
- v0.29.0
64
+ v0.31.0
@@ -1,10 +1,10 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-change-new 1 "new 0.29.0"
3
+ .TH canon-change-new 1 "new 0.31.0"
4
4
  .SH NAME
5
5
  canon\-change\-new \- Write .canon/changes/<slug>/brief.md, import it, and adopt it into a subject
6
6
  .SH SYNOPSIS
7
- \fBcanon change new\fR [\fB\-\-as\fR] <\fB\-\-subject\-id\fR> [\fB\-\-change\-kind\fR] <\fB\-\-title\fR> [\fB\-\-repo\fR] [\fB\-\-json\fR] [\fB\-\-input\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] <\fICHANGE_ID\fR>
7
+ \fBcanon change new\fR [\fB\-\-as\fR] <\fB\-\-subject\fR> [\fB\-\-change\-kind\fR] <\fB\-\-title\fR> [\fB\-\-repo\fR] [\fB\-\-json\fR] [\fB\-\-input\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] <\fICHANGE_ID\fR>
8
8
  .SH DESCRIPTION
9
9
  Write .canon/changes/<slug>/brief.md, import it, and adopt it into a subject
10
10
  .SH OPTIONS
@@ -26,7 +26,7 @@ reviewer
26
26
  orchestrator
27
27
  .RE
28
28
  .TP
29
- \fB\-\-subject\-id\fR \fI<SUBJECT_ID>\fR
29
+ \fB\-\-subject\fR \fI<SUBJECT_ID>\fR
30
30
  The existing subject to adopt the change under
31
31
  .TP
32
32
  \fB\-\-change\-kind\fR \fI<CHANGE_KIND>\fR [default: feature]
@@ -63,4 +63,4 @@ Print version
63
63
  <\fICHANGE_ID\fR>
64
64
  The change\*(Aqs slug (its change_id)
65
65
  .SH VERSION
66
- v0.29.0
66
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-change 1 "change 0.29.0"
3
+ .TH canon-change 1 "change 0.31.0"
4
4
  .SH NAME
5
5
  canon\-change \- Write a plan change (.canon/changes/<slug>/brief.md) and adopt it into a subject
6
6
  .SH SYNOPSIS
@@ -37,6 +37,6 @@ canon\-change\-new(1)
37
37
  Write .canon/changes/<slug>/brief.md, import it, and adopt it into a subject
38
38
  .SH EXTRA
39
39
  Examples:
40
- canon change new add\-login \-\-subject\-id auth \-\-title \*(AqAdd login\*(Aq
40
+ canon change new add\-login \-\-subject auth \-\-title \*(AqAdd login\*(Aq
41
41
  .SH VERSION
42
- v0.29.0
42
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-completion 1 "completion 0.29.0"
3
+ .TH canon-completion 1 "completion 0.31.0"
4
4
  .SH NAME
5
5
  canon\-completion \- Write the shell completion script for canon (bash, zsh or fish)
6
6
  .SH SYNOPSIS
@@ -57,4 +57,4 @@ Examples:
57
57
 
58
58
  The script is generated from the command tree, so it completes exactly what the parser accepts. It needs no repo and no network.
59
59
  .SH VERSION
60
- v0.29.0
60
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-context-pack-add 1 "add 0.29.0"
3
+ .TH canon-context-pack-add 1 "add 0.31.0"
4
4
  .SH NAME
5
5
  canon\-context\-pack\-add \- Create an immutable context pack from a repository\-local JSON manifest
6
6
  .SH SYNOPSIS
@@ -44,4 +44,4 @@ Print help
44
44
  \fB\-V\fR, \fB\-\-version\fR
45
45
  Print version
46
46
  .SH VERSION
47
- v0.29.0
47
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-context-pack-show 1 "show 0.29.0"
3
+ .TH canon-context-pack-show 1 "show 0.31.0"
4
4
  .SH NAME
5
5
  canon\-context\-pack\-show \- Show a context pack after verifying its manifest and content objects
6
6
  .SH SYNOPSIS
@@ -41,4 +41,4 @@ Print version
41
41
  <\fIPACK_ID\fR>
42
42
  Context pack id (sha256:<64 hex digits>)
43
43
  .SH VERSION
44
- v0.29.0
44
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-context-pack-verify 1 "verify 0.29.0"
3
+ .TH canon-context-pack-verify 1 "verify 0.31.0"
4
4
  .SH NAME
5
5
  canon\-context\-pack\-verify \- Verify a context pack\*(Aqs manifest and immutable content objects
6
6
  .SH SYNOPSIS
@@ -41,4 +41,4 @@ Print version
41
41
  <\fIPACK_ID\fR>
42
42
  Context pack id (sha256:<64 hex digits>)
43
43
  .SH VERSION
44
- v0.29.0
44
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-context-pack 1 "context-pack 0.29.0"
3
+ .TH canon-context-pack 1 "context-pack 0.31.0"
4
4
  .SH NAME
5
5
  canon\-context\-pack \- Create, inspect, and verify reproducible context packs
6
6
  .SH SYNOPSIS
@@ -47,4 +47,4 @@ Examples:
47
47
  canon context\-pack show sha256:<pack\-digest> \-\-repo . \-\-json
48
48
  canon context\-pack verify sha256:<pack\-digest>
49
49
  .SH VERSION
50
- v0.29.0
50
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-context 1 "context 0.29.0"
3
+ .TH canon-context 1 "context 0.31.0"
4
4
  .SH NAME
5
5
  canon\-context \- Show what you can author here: record kinds, fields, enums, policies
6
6
  .SH SYNOPSIS
@@ -41,4 +41,4 @@ Print help
41
41
  \fB\-V\fR, \fB\-\-version\fR
42
42
  Print version
43
43
  .SH VERSION
44
- v0.29.0
44
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-dashboard 1 "dashboard 0.29.0"
3
+ .TH canon-dashboard 1 "dashboard 0.31.0"
4
4
  .SH NAME
5
5
  canon\-dashboard \- Serve the local status dashboard
6
6
  .SH SYNOPSIS
@@ -47,4 +47,4 @@ Print help
47
47
  \fB\-V\fR, \fB\-\-version\fR
48
48
  Print version
49
49
  .SH VERSION
50
- v0.29.0
50
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-demo-init 1 "init 0.29.0"
3
+ .TH canon-demo-init 1 "init 0.31.0"
4
4
  .SH NAME
5
5
  canon\-demo\-init \- Scaffold the demo repo (gate starts RED)
6
6
  .SH SYNOPSIS
@@ -41,4 +41,4 @@ Print help
41
41
  \fB\-V\fR, \fB\-\-version\fR
42
42
  Print version
43
43
  .SH VERSION
44
- v0.29.0
44
+ v0.31.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-demo-review 1 "review 0.29.0"
3
+ .TH canon-demo-review 1 "review 0.31.0"
4
4
  .SH NAME
5
5
  canon\-demo\-review \- Record the missing reviewer evidence (gate turns GREEN)
6
6
  .SH SYNOPSIS
@@ -41,4 +41,4 @@ Print help
41
41
  \fB\-V\fR, \fB\-\-version\fR
42
42
  Print version
43
43
  .SH VERSION
44
- v0.29.0
44
+ v0.31.0
package/man/canon-demo.1 CHANGED
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-demo 1 "demo 0.29.0"
3
+ .TH canon-demo 1 "demo 0.31.0"
4
4
  .SH NAME
5
5
  canon\-demo \- Try the evidence loop end\-to\-end in a throwaway demo repo
6
6
  .SH SYNOPSIS
@@ -44,4 +44,4 @@ Examples:
44
44
  canon gate check # RED
45
45
  canon demo review && canon gate check # GREEN
46
46
  .SH VERSION
47
- v0.29.0
47
+ v0.31.0