@journeykit/canon 0.34.0 → 0.36.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 (126) hide show
  1. package/dist/skills/SKILL.src.md +47 -30
  2. package/dist/skills/reference/canon-artifact-ingest.md +6 -3
  3. package/dist/skills/reference/canon-authoring.md +9 -5
  4. package/dist/skills/reference/canon-context.md +6 -3
  5. package/dist/skills/reference/canon-fmt.md +2 -1
  6. package/dist/skills/reference/canon-gate.md +29 -21
  7. package/dist/skills/reference/canon-inventory.md +16 -11
  8. package/dist/skills/reference/canon-plan-import.md +6 -3
  9. package/dist/skills/reference/canon-plugins.md +12 -6
  10. package/dist/skills/reference/canon-policy.md +3 -3
  11. package/dist/skills/reference/canon-report-dashboard.md +11 -8
  12. package/dist/skills/reference/canon-review.md +8 -7
  13. package/dist/skills/reference/canon-session-ingest.md +12 -6
  14. package/dist/skills/reference/canon-storage.md +47 -17
  15. package/dist/skills/reference/canon-subject.md +45 -35
  16. package/dist/skills/reference/role-implementer.md +33 -33
  17. package/dist/skills/reference/role-orchestrator.md +83 -77
  18. package/dist/skills/reference/role-planner.md +28 -28
  19. package/dist/skills/reference/role-reviewer.md +29 -29
  20. package/man/canon-adapter-authorize.1 +2 -2
  21. package/man/canon-adapter-validate.1 +2 -2
  22. package/man/canon-adapter.1 +2 -2
  23. package/man/canon-artifacts-move.1 +6 -6
  24. package/man/canon-artifacts-store.1 +2 -2
  25. package/man/canon-artifacts-verify.1 +2 -2
  26. package/man/canon-artifacts.1 +2 -2
  27. package/man/canon-brief-approve.1 +5 -4
  28. package/man/canon-brief-check.1 +2 -2
  29. package/man/canon-brief-show.1 +2 -2
  30. package/man/canon-brief.1 +2 -2
  31. package/man/canon-change-new.1 +2 -2
  32. package/man/canon-change.1 +2 -2
  33. package/man/canon-completion.1 +2 -2
  34. package/man/canon-context-pack-add.1 +2 -2
  35. package/man/canon-context-pack-show.1 +2 -2
  36. package/man/canon-context-pack-verify.1 +2 -2
  37. package/man/canon-context-pack.1 +2 -2
  38. package/man/canon-context.1 +2 -2
  39. package/man/canon-dashboard.1 +2 -2
  40. package/man/canon-demo-init.1 +2 -2
  41. package/man/canon-demo-review.1 +2 -2
  42. package/man/canon-demo.1 +2 -2
  43. package/man/canon-dispatch-begin.1 +2 -2
  44. package/man/canon-dispatch-diff.1 +2 -2
  45. package/man/canon-dispatch-end.1 +2 -2
  46. package/man/canon-dispatch.1 +2 -2
  47. package/man/canon-divergence-accept.1 +2 -2
  48. package/man/canon-divergence-add.1 +3 -3
  49. package/man/canon-divergence-defer.1 +3 -3
  50. package/man/canon-divergence-list.1 +2 -2
  51. package/man/canon-divergence-resolve.1 +3 -3
  52. package/man/canon-divergence.1 +2 -2
  53. package/man/canon-evidence-add.1 +5 -5
  54. package/man/canon-evidence-approval-payload.1 +3 -3
  55. package/man/canon-evidence-audit.1 +4 -4
  56. package/man/canon-evidence.1 +2 -2
  57. package/man/canon-export.1 +2 -2
  58. package/man/canon-feature-new.1 +2 -2
  59. package/man/canon-feature.1 +2 -2
  60. package/man/canon-finding-add.1 +3 -3
  61. package/man/canon-finding-close.1 +2 -2
  62. package/man/canon-finding-list.1 +2 -2
  63. package/man/canon-finding.1 +2 -2
  64. package/man/canon-format.1 +2 -2
  65. package/man/canon-gate-check.1 +2 -2
  66. package/man/canon-gate-install-hooks.1 +2 -2
  67. package/man/canon-gate-promote.1 +2 -2
  68. package/man/canon-gate.1 +2 -2
  69. package/man/canon-ingest-plans.1 +2 -2
  70. package/man/canon-ingest-records.1 +2 -2
  71. package/man/canon-ingest-sessions.1 +2 -2
  72. package/man/canon-ingest.1 +2 -2
  73. package/man/canon-init.1 +7 -7
  74. package/man/canon-inventory-sync.1 +2 -2
  75. package/man/canon-inventory.1 +2 -2
  76. package/man/canon-ledger-compact.1 +5 -5
  77. package/man/canon-ledger.1 +3 -3
  78. package/man/canon-migrate.1 +8 -8
  79. package/man/canon-plugin-sync.1 +2 -2
  80. package/man/canon-plugin.1 +2 -2
  81. package/man/canon-policy-approve.1 +2 -2
  82. package/man/canon-policy-show.1 +2 -2
  83. package/man/canon-policy.1 +2 -2
  84. package/man/canon-prompt-add.1 +2 -2
  85. package/man/canon-prompt-show.1 +2 -2
  86. package/man/canon-prompt.1 +2 -2
  87. package/man/canon-purge.1 +7 -7
  88. package/man/canon-query.1 +2 -2
  89. package/man/canon-regime-show.1 +2 -2
  90. package/man/canon-regime.1 +2 -2
  91. package/man/canon-report-build.1 +2 -2
  92. package/man/canon-report-check.1 +2 -2
  93. package/man/canon-report-snapshot.1 +2 -2
  94. package/man/canon-report.1 +2 -2
  95. package/man/canon-retrieve.1 +2 -2
  96. package/man/canon-review-change.1 +3 -3
  97. package/man/canon-review-scenario.1 +3 -3
  98. package/man/canon-review.1 +2 -2
  99. package/man/canon-scenario-new.1 +2 -2
  100. package/man/canon-scenario.1 +2 -2
  101. package/man/canon-schema.1 +10 -4
  102. package/man/canon-search.1 +2 -2
  103. package/man/canon-selftest.1 +2 -2
  104. package/man/canon-skills-check.1 +2 -2
  105. package/man/canon-skills-doctor.1 +2 -2
  106. package/man/canon-skills-install.1 +2 -2
  107. package/man/canon-skills-show.1 +5 -5
  108. package/man/canon-skills.1 +2 -2
  109. package/man/canon-status.1 +2 -2
  110. package/man/canon-strategy-approval-payload.1 +2 -2
  111. package/man/canon-strategy-promote.1 +2 -2
  112. package/man/canon-strategy-rollback.1 +2 -2
  113. package/man/canon-strategy.1 +2 -2
  114. package/man/canon-subject-adopt.1 +2 -2
  115. package/man/canon-subject-move.1 +2 -2
  116. package/man/canon-subject-new.1 +2 -2
  117. package/man/canon-subject-show.1 +2 -2
  118. package/man/canon-subject-unadopt.1 +3 -3
  119. package/man/canon-subject.1 +2 -2
  120. package/man/canon-task-done.1 +2 -2
  121. package/man/canon-task.1 +2 -2
  122. package/man/canon-tier-age.1 +5 -5
  123. package/man/canon-tier.1 +2 -2
  124. package/man/canon-trace.1 +2 -2
  125. package/man/canon.1 +3 -3
  126. package/package.json +4 -4
@@ -4,7 +4,7 @@ You run the loop across agents and move the subject. You write no brief,
4
4
  code or review yourself. Declare the role with `CANON_ROLE=orchestrator` (or
5
5
  `--as orchestrator`); your `canon status` also lists the human's steps. The
6
6
  human's acts (`brief approve`, `policy approve`, `divergence accept`) refuse
7
- every agent role, you included (`HUMAN_ONLY`), unless you record the answer the
7
+ every agent role, you included (`ACTOR_DENIED`), unless you record the answer the
8
8
  human gave you in the conversation with `--relayed-via <tool>` (below). You never
9
9
  run them without that answer, and never remove or unset your role (`env -u CANON_ROLE`,
10
10
  dropping `--as`) to get past the refusal.
@@ -18,423 +18,423 @@ in your ids. Use only the options on a line; never guess one. Ask `canon schema
18
18
  <command> --json` only for a leaf this block does not list, or after a `USAGE` refusal.
19
19
 
20
20
  <!-- canon:generated commands-orchestrator begin -->
21
- Every leaf takes `--as <ROLE>` and `--json`; `--repo <DIR>` too, except `completion`, `regime show`, `schema`, `selftest`, `skills show`. `--input <JSON|FILE|->` runs a leaf from one JSON document (an array is a batch) and is only on the lines ending `[--input]`. Its document keys are the option names in camelCase, singular even when the option repeats (the value is then an array), and `operands` holds the operands. `--fields <FIELDS>` is a comma list of the paths `canon schema <COMMAND> --json` declares under `outputs[].fields.paths`; a path is the record's own key, spelled as the answer spells it.
22
- In a syntax line `<X>` is a value, `[x]` optional, `a | b` a choice, `(a | b)` exactly one is required, `[--x <V>]*` may repeat, `<X>+` is one or more, `[--a --b <V>]` go together. An option that is not on the line does not exist: it is refused (`USAGE`).
21
+ Every leaf takes `--as <ROLE>` and `--json`; `--repo <DIR>` too, except `completion`, `regime show`, `schema`, `selftest`, `skills show`. `--input <JSON|FILE|->` runs a leaf from one JSON document (an array is a batch) and is only on the lines ending `[--input]`. Its document keys are the option names in camelCase, singular even when the option repeats (the value is then an array; none is the key left out, `[]` is refused), and `operands` holds the operands. `--fields <FIELDS>` is a comma list of the paths `canon schema <COMMAND> --json` declares under `outputs[].fields.paths`; a path is the record's own key, spelled as the answer spells it.
22
+ A `usage:` line shows the syntax and is not itself a command to run (the runnable example under it is): `<X>` is a value, `[x]` optional, `a | b` a choice, `(a | b)` exactly one is required, `[--x <V>]*` may repeat, `<X>+` is one or more, `[--a --b <V>]` go together. An option that is not on the line does not exist: it is refused (`USAGE`).
23
23
 
24
24
  ```text
25
25
  # Authorize declared capabilities against repository policy (preflight only)
26
- canon adapter authorize --response <FILE>
26
+ usage: canon adapter authorize --response <FILE>
27
27
  ```
28
28
  ```bash
29
29
  canon adapter authorize --response adapter-response.json --repo . --json
30
30
  ```
31
31
  ```text
32
32
  # Read and validate one provider-neutral response envelope
33
- canon adapter validate --response <FILE>
33
+ usage: canon adapter validate --response <FILE>
34
34
  ```
35
35
  ```bash
36
36
  canon adapter validate --response adapter-response.json --json
37
37
  ```
38
38
  ```text
39
39
  # Move the local artifact blobs to an object-store tier, verify them, and remove the local copies
40
- canon artifacts move --tier <TIER> [--commit --plan-digest <DIGEST>] [--input]
41
- # a bare run previews and prints planDigest; `--commit --plan-digest <DIGEST>` with that digest acts
40
+ usage: canon artifacts move --tier <TIER> [--commit --plan-digest <PLAN_DIGEST>] [--input]
41
+ # a bare run previews and prints planDigest; `--commit --plan-digest <PLAN_DIGEST>` with that digest acts
42
42
  ```
43
43
  ```bash
44
44
  canon artifacts move --tier cold --json
45
45
  ```
46
46
  ```text
47
47
  # Store the bound files of existing evidence records and current reviews in the artifact store (.canon/artifacts/sha256/)
48
- canon artifacts store [--max-artifact-mib <N>] [--dry-run] [--input]
48
+ usage: canon artifacts store [--max-artifact-mib <N>] [--dry-run] [--input]
49
49
  ```
50
50
  ```bash
51
51
  canon artifacts store --json
52
52
  ```
53
53
  ```text
54
54
  # Check that the artifact store holds every file the latest evidence and current reviews bind (--full re-hashes the stored bytes)
55
- canon artifacts verify [--full]
55
+ usage: canon artifacts verify [--full]
56
56
  ```
57
57
  ```bash
58
58
  canon artifacts verify --json
59
59
  ```
60
60
  ```text
61
61
  # Write the shell completion script for canon (bash, zsh or fish)
62
- canon completion <SHELL>
62
+ usage: canon completion <SHELL>
63
63
  ```
64
64
  ```bash
65
65
  canon completion zsh --json
66
66
  ```
67
67
  ```text
68
68
  # Show what you can author here: record kinds, fields, enums, policies
69
- canon context [--fields <FIELDS>]
69
+ usage: canon context [--fields <FIELDS>]
70
70
  ```
71
71
  ```bash
72
72
  canon context --json
73
73
  ```
74
74
  ```text
75
75
  # Create an immutable context pack from a repository-local JSON manifest
76
- canon context-pack add --manifest <FILE> [--input]
76
+ usage: canon context-pack add --manifest <FILE> [--input]
77
77
  ```
78
78
  ```bash
79
79
  canon context-pack add --manifest .canon/context-manifest.json --json
80
80
  ```
81
81
  ```text
82
82
  # Show a context pack after verifying its manifest and content objects
83
- canon context-pack show <PACK_ID>
83
+ usage: canon context-pack show <PACK_ID>
84
84
  ```
85
85
  ```bash
86
86
  canon context-pack show sha256:0000000000000000000000000000000000000000000000000000000000000000 --json
87
87
  ```
88
88
  ```text
89
89
  # Verify a context pack's manifest and immutable content objects
90
- canon context-pack verify <PACK_ID>
90
+ usage: canon context-pack verify <PACK_ID>
91
91
  ```
92
92
  ```bash
93
93
  canon context-pack verify sha256:0000000000000000000000000000000000000000000000000000000000000000 --json
94
94
  ```
95
95
  ```text
96
96
  # Serve the local status dashboard
97
- canon dashboard [--snapshot <DIR>] [--port <N>] [--input]
97
+ usage: canon dashboard [--snapshot <DIR>] [--port <N>] [--input]
98
98
  ```
99
99
  ```bash
100
100
  canon dashboard --json
101
101
  ```
102
102
  ```text
103
103
  # Scaffold the demo repo (gate starts RED)
104
- canon demo init [--input]
104
+ usage: canon demo init [--input]
105
105
  ```
106
106
  ```bash
107
107
  canon demo init --repo canon-demo --json
108
108
  ```
109
109
  ```text
110
110
  # Record the missing reviewer evidence (gate turns GREEN)
111
- canon demo review [--input]
111
+ usage: canon demo review [--input]
112
112
  ```
113
113
  ```bash
114
114
  canon demo review --json
115
115
  ```
116
116
  ```text
117
117
  # Mint a Run manifest with retrieved guidance and context/policy lineage
118
- canon dispatch begin --regime <KEY> [--role <ROLE>] [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--provider <NAME>] [--model <NAME>] [--skill <ID>] [--skill-digest <DIGEST> (with --skill)] [--manifest <FILE>] [--prompt-bundle <NAME@VERSION>] [--task <TASK_ID>] [--parent-run <RUN_ID>] [--input]
118
+ usage: canon dispatch begin --regime <KEY> [--role <ROLE>] [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--provider <NAME>] [--model <NAME>] [--skill <ID>] [--skill-digest <DIGEST> (with --skill)] [--manifest <FILE>] [--prompt-bundle <NAME@VERSION>] [--task <TASK_ID>] [--parent-run <RUN_ID>] [--input]
119
119
  ```
120
120
  ```bash
121
121
  canon dispatch begin --regime implementer/my-repo/api/abcdef012345 --role implementer --json
122
122
  ```
123
123
  ```text
124
124
  # Diff the declared plan DAG against the observed execution graph
125
- canon dispatch diff
125
+ usage: canon dispatch diff
126
126
  ```
127
127
  ```bash
128
128
  canon dispatch diff --json
129
129
  ```
130
130
  ```text
131
131
  # Close a dispatched run with a terminal status and an ended_at
132
- canon dispatch end <RUN_ID> --run-outcome <succeeded|failed> [--input]
132
+ usage: canon dispatch end <RUN_ID> --run-outcome <succeeded|failed> [--input]
133
133
  ```
134
134
  ```bash
135
135
  canon dispatch end 01ARZ3NDEKTSV4RRFFQ69G5FAV --run-outcome succeeded --json
136
136
  ```
137
137
  ```text
138
138
  # List the current divergence burn-down state
139
- canon divergence list [--as-of <TIMESTAMP>] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
139
+ usage: canon divergence list [--as-of <TIMESTAMP>] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
140
140
  ```
141
141
  ```bash
142
142
  canon divergence list --as-of 2030-01-01 --json
143
143
  ```
144
144
  ```text
145
145
  # Emit exact bytes for external `ssh-keygen -Y sign -n canon-approval-v1`
146
- 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
+ usage: 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>]*
147
147
  ```
148
148
  ```bash
149
149
  canon evidence approval-payload --scenario auth.login.01 --project root --approver alice --approval-at 2030-01-01T00:00:00Z --json
150
150
  ```
151
151
  ```text
152
152
  # Export a redacted retention manifest without deleting records
153
- canon export --kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding> [--before <TIMESTAMP>] [--after <TIMESTAMP>] [--output <FILE>] [--include-sensitive] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>] [--dry-run] [--input]
153
+ usage: canon export --kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding> [--before <TIMESTAMP>] [--after <TIMESTAMP>] [--output <FILE>] [--include-sensitive] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>] [--dry-run] [--input]
154
154
  ```
155
155
  ```bash
156
156
  canon export --kind evidence --output evidence.json --json
157
157
  ```
158
158
  ```text
159
159
  # List a change's committed findings at their latest version
160
- canon finding list --change <CHANGE_ID> [--open] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
160
+ usage: canon finding list --change <CHANGE_ID> [--open] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
161
161
  ```
162
162
  ```bash
163
163
  canon finding list --change add-login --json
164
164
  ```
165
165
  ```text
166
166
  # Validate a spec/artifact corpus against canon's format
167
- canon format [<DIR>]
167
+ usage: canon format [<DIR>]
168
168
  ```
169
169
  ```bash
170
170
  canon format .canon/specs --json
171
171
  ```
172
172
  ```text
173
173
  # Run the coverage/ledger/staleness/trust checks (0 clean, 1 red, 2 usage)
174
- canon gate check [--release]
174
+ usage: canon gate check [--release]
175
175
  ```
176
176
  ```bash
177
177
  canon gate check --json
178
178
  ```
179
179
  ```text
180
180
  # Install the gate hook into .claude/settings.json / .codex/hooks.json
181
- canon gate install-hooks [--event <NAME>] [--matcher <TEXT>] [--command <TEXT>] [--timeout <N>] [--dry-run] [--input]
181
+ usage: canon gate install-hooks [--event <NAME>] [--matcher <TEXT>] [--command <TEXT>] [--timeout <N>] [--dry-run] [--input]
182
182
  ```
183
183
  ```bash
184
184
  canon gate install-hooks --json
185
185
  ```
186
186
  ```text
187
187
  # Import plans as Change/Task records
188
- canon ingest plans [--dialect <NAME> --plan-source <DIR>] [--dry-run] [--input]
188
+ usage: canon ingest plans [--dialect <NAME> --plan-source <DIR>] [--dry-run] [--input]
189
189
  ```
190
190
  ```bash
191
191
  canon ingest plans --json
192
192
  ```
193
193
  ```text
194
194
  # Import review/divergence/task/handoff records and derive verdicts
195
- canon ingest records [--watch] [--interval-secs <N>] [--dry-run] [--run <RUN_ID>] [--input]
195
+ usage: canon ingest records [--watch] [--interval-secs <N>] [--dry-run] [--run <RUN_ID>] [--input]
196
196
  ```
197
197
  ```bash
198
198
  canon ingest records --json
199
199
  ```
200
200
  ```text
201
201
  # Import agent CLI session transcripts (omp/pi, Claude Code, Codex, Hermes)
202
- canon ingest sessions [--watch] [--interval-secs <N>] [--home <DIR>] [--full] [--all-workspaces] [--dry-run] [--input]
202
+ usage: canon ingest sessions [--watch] [--interval-secs <N>] [--home <DIR>] [--full] [--all-workspaces] [--dry-run] [--input]
203
203
  ```
204
204
  ```bash
205
205
  canon ingest sessions --json
206
206
  ```
207
207
  ```text
208
208
  # Set up canon in a repo (canon.yaml, a starter policy, the AGENTS.md block, a plans home)
209
- canon init [--check] [--no-agents-md | --check] [--policy <light|standard|strict> | --check | --no-policy] [--providers <LIST> | --check] [--language <TAG> | --check] [--dry-run | --check] [--input]
209
+ usage: canon init [--check] [--no-agents-md | --check] [--policy <light|standard|strict> | --check | --no-policy] [--providers <LIST> | --check] [--language <TAG> | --check] [--dry-run | --check] [--input]
210
210
  ```
211
211
  ```bash
212
212
  canon init --json
213
213
  ```
214
214
  ```text
215
215
  # Validate each spec root, then materialize scenario index records
216
- canon inventory sync [--spec-root <DIR>] [--dry-run] [--input]
216
+ usage: canon inventory sync [--spec-root <DIR>] [--dry-run] [--input]
217
217
  ```
218
218
  ```bash
219
219
  canon inventory sync --json
220
220
  ```
221
221
  ```text
222
222
  # Move superseded versions of every record out of the ledger into the archive
223
- canon ledger compact [--commit --plan-digest <DIGEST>] [--input]
224
- # a bare run previews and prints planDigest; `--commit --plan-digest <DIGEST>` with that digest acts
223
+ usage: canon ledger compact [--commit --plan-digest <PLAN_DIGEST>] [--input]
224
+ # a bare run previews and prints planDigest; `--commit --plan-digest <PLAN_DIGEST>` with that digest acts
225
225
  ```
226
226
  ```bash
227
227
  canon ledger compact --json
228
228
  ```
229
229
  ```text
230
230
  # Bring a repo from an earlier canon up to date
231
- canon migrate [--commit --plan-digest <DIGEST>] [--revert | --relayed-via <NAME>] [--backup <DIR> (with --revert)] [--actor <ACTOR_ID> (with --relayed-via)] [--approver <NAME> (with --relayed-via)] [--note <TEXT> (with --relayed-via)] [--input]
232
- # a bare run previews and prints planDigest; `--commit --plan-digest <DIGEST>` with that digest acts
231
+ usage: canon migrate [--commit --plan-digest <PLAN_DIGEST>] [--revert | --relayed-via <NAME>] [--backup <DIR> (with --revert)] [--actor <ACTOR_ID> (with --relayed-via)] [--approver <NAME> (with --relayed-via)] [--note <TEXT> (with --relayed-via)] [--input]
232
+ # a bare run previews and prints planDigest; `--commit --plan-digest <PLAN_DIGEST>` with that digest acts
233
233
  ```
234
234
  ```bash
235
235
  canon migrate --json
236
236
  ```
237
237
  ```text
238
238
  # Validate and write a plugin's overlay records
239
- canon plugin sync <PLUGIN_ID> [--spec-root <DIR>] [--dry-run] [--input]
239
+ usage: canon plugin sync <PLUGIN_ID> [--spec-root <DIR>] [--dry-run] [--input]
240
240
  ```
241
241
  ```bash
242
242
  canon plugin sync my-plugin --json
243
243
  ```
244
244
  ```text
245
245
  # Show the policy's digest and its approval (who, when, which bytes)
246
- canon policy show
246
+ usage: canon policy show
247
247
  ```
248
248
  ```bash
249
249
  canon policy show --json
250
250
  ```
251
251
  ```text
252
252
  # Add a prompt bundle from a repository-local JSON manifest
253
- canon prompt add <NAME@VERSION> --manifest <FILE> [--input]
253
+ usage: canon prompt add <NAME@VERSION> --manifest <FILE> [--input]
254
254
  ```
255
255
  ```bash
256
256
  canon prompt add reviewer@v1 --manifest .canon/prompt-manifest.json --json
257
257
  ```
258
258
  ```text
259
259
  # Select a registered prompt bundle version
260
- canon prompt show <NAME@VERSION>
260
+ usage: canon prompt show <NAME@VERSION>
261
261
  ```
262
262
  ```bash
263
263
  canon prompt show reviewer@v1 --json
264
264
  ```
265
265
  ```text
266
266
  # Remove allowlisted records older than a cutoff
267
- canon purge --kind <session|run|event|trajectory> --before <TIMESTAMP> [--commit --plan-digest <DIGEST>] [--input]
268
- # a bare run previews and prints planDigest; `--commit --plan-digest <DIGEST>` with that digest acts
267
+ usage: canon purge --kind <session|run|event|trajectory> --before <TIMESTAMP> [--commit --plan-digest <PLAN_DIGEST>] [--input]
268
+ # a bare run previews and prints planDigest; `--commit --plan-digest <PLAN_DIGEST>` with that digest acts
269
269
  ```
270
270
  ```bash
271
271
  canon purge --kind session --before 2020-01-01T00:00:00Z --json
272
272
  ```
273
273
  ```text
274
274
  # Read stored records across every storage tier
275
- 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
+ usage: 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>]
276
276
  ```
277
277
  ```bash
278
278
  canon query --kind evidence --json
279
279
  ```
280
280
  ```text
281
281
  # Build a canonical regime key for hook scripts
282
- canon regime show --role-segment <NAME> --repo-name <NAME> --area <NAME> --hash <HASH>
282
+ usage: canon regime show --role-segment <NAME> --repo-name <NAME> --area <NAME> --hash <HASH>
283
283
  ```
284
284
  ```bash
285
285
  canon regime show --role-segment reviewer --repo-name my-repo --area api --hash abcdef012345 --json
286
286
  ```
287
287
  ```text
288
288
  # Write the status report (.canon/REPORT.md)
289
- canon report build [--input]
289
+ usage: canon report build [--input]
290
290
  ```
291
291
  ```bash
292
292
  canon report build --json
293
293
  ```
294
294
  ```text
295
295
  # Byte-diff .canon/REPORT.md against a fresh build (0 fresh, 1 missing or drifted); writes nothing
296
- canon report check
296
+ usage: canon report check
297
297
  ```
298
298
  ```bash
299
299
  canon report check --json
300
300
  ```
301
301
  ```text
302
302
  # Export the panel marts to <DIR>/*.parquet plus manifest.json
303
- canon report snapshot <DIR> [--input]
303
+ usage: canon report snapshot <DIR> [--input]
304
304
  ```
305
305
  ```bash
306
306
  canon report snapshot snapshot-out --json
307
307
  ```
308
308
  ```text
309
309
  # Fetch role-scoped strategy guidance
310
- canon retrieve --for-role <ROLE> (--regime <KEY> | --domain <NAME>) [--subject <SUBJECT_ID> (with --domain)] [--limit <N>]
310
+ usage: canon retrieve --for-role <ROLE> (--regime <KEY> | --domain <NAME>) [--subject <SUBJECT_ID> (with --domain)] [--limit <N>]
311
311
  ```
312
312
  ```bash
313
313
  canon retrieve --for-role reviewer --domain dev --limit 20 --json
314
314
  ```
315
315
  ```text
316
316
  # Describe canon's own commands
317
- canon schema [<PATH>]* [--errors | --error <CODE> | --warning <CODE> | --warnings]
317
+ usage: canon schema [<PATH>]* [--schemas | --error <CODE> | --errors | --warning <CODE> | --warnings]
318
318
  ```
319
319
  ```bash
320
320
  canon schema evidence add --json
321
321
  ```
322
322
  ```text
323
323
  # Search records, brief sections and scenario text, with each hit's neighbors in the record graph
324
- 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
+ usage: canon search <TEXT> [--kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding|brief>]* [--expand <N>] [--limit <N>]
325
325
  ```
326
326
  ```bash
327
327
  canon search timeout --kind finding --json
328
328
  ```
329
329
  ```text
330
330
  # Run canon's built-in fixture self-tests
331
- 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>]
331
+ usage: 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>]
332
332
  ```
333
333
  ```bash
334
334
  canon selftest --suite trust-spine-gate --json
335
335
  ```
336
336
  ```text
337
337
  # Check canonical projections without writing; exit 1 on drift, a legacy remnant, or a lock another canon version wrote
338
- canon skills check [--skills-source <DIR>] [--providers <LIST>]
338
+ usage: canon skills check [--skills-source <DIR>] [--providers <LIST>]
339
339
  ```
340
340
  ```bash
341
341
  canon skills check --json
342
342
  ```
343
343
  ```text
344
344
  # Print diagnostics for canonical projections, the install lock's canon version, legacy remnants, canon projections for a provider that is not selected, and other skills whose description claims build work; reports only, never edits
345
- canon skills doctor [--skills-source <DIR>] [--providers <LIST>]
345
+ usage: canon skills doctor [--skills-source <DIR>] [--providers <LIST>]
346
346
  ```
347
347
  ```bash
348
348
  canon skills doctor --json
349
349
  ```
350
350
  ```text
351
351
  # Install the canonical `canon` bundle or legacy developer skills
352
- canon skills install [--skills-source <DIR>] [--providers <LIST>] [--dry-run] [--input]
352
+ usage: canon skills install [--skills-source <DIR>] [--providers <LIST>] [--dry-run] [--input]
353
353
  ```
354
354
  ```bash
355
355
  canon skills install --json
356
356
  ```
357
357
  ```text
358
358
  # Print a guide built into this binary (markdown on stdout); the installed SKILL.md is a stub that points here
359
- canon skills show <NAME> [--full]
359
+ usage: canon skills show [<NAME>] [--full]
360
360
  ```
361
361
  ```bash
362
362
  canon skills show canon --full --json
363
363
  ```
364
364
  ```text
365
365
  # Show where this repo stands: subjects by status, their gaps, and the next commands
366
- canon status [--fields <FIELDS>]
366
+ usage: canon status [--fields <FIELDS>]
367
367
  ```
368
368
  ```bash
369
369
  canon status --json
370
370
  ```
371
371
  ```text
372
372
  # The unsigned approval payload bytes an external signer signs
373
- canon strategy approval-payload <STRATEGY_ID> --evaluation <FILE> --approver <NAME> --approval-at <TIMESTAMP>
373
+ usage: canon strategy approval-payload <STRATEGY_ID> --evaluation <FILE> --approver <NAME> --approval-at <TIMESTAMP>
374
374
  ```
375
375
  ```bash
376
376
  canon strategy approval-payload 01ARZ3NDEKTSV4RRFFQ69G5FAV --evaluation evaluation.json --approver alice --approval-at 2030-01-01T00:00:00Z --json
377
377
  ```
378
378
  ```text
379
379
  # Promote a strategy after paired evaluation and signed approval
380
- canon strategy promote <STRATEGY_ID> [--evaluation <FILE> --approval <FILE>] [--signature-file <FILE> (with --approval)] [--dry-run] [--input]
380
+ usage: canon strategy promote <STRATEGY_ID> [--evaluation <FILE> --approval <FILE>] [--signature-file <FILE> (with --approval)] [--dry-run] [--input]
381
381
  ```
382
382
  ```bash
383
383
  canon strategy promote 01ARZ3NDEKTSV4RRFFQ69G5FAV --json
384
384
  ```
385
385
  ```text
386
386
  # Disable an active strategy with durable rollback provenance
387
- canon strategy rollback <STRATEGY_ID> --reason <TEXT> --actor <ACTOR_ID> --signature-file <FILE> --approval-at <TIMESTAMP> [--contradicting-trajectory <ID>] [--input]
387
+ usage: canon strategy rollback <STRATEGY_ID> --reason <TEXT> --actor <ACTOR_ID> --signature-file <FILE> --approval-at <TIMESTAMP> [--contradicting-trajectory <ID>] [--input]
388
388
  ```
389
389
  ```bash
390
390
  canon strategy rollback 01ARZ3NDEKTSV4RRFFQ69G5FAV --reason "regressed in production" --actor alice --signature-file approval.sig --approval-at 2030-01-01T00:00:00Z --json
391
391
  ```
392
392
  ```text
393
393
  # Link an imported plan change to a subject (adopting it under another subject adds that subject; a change may belong to several)
394
- canon subject adopt <SUBJECT_ID> --change <CHANGE_ID> [--dry-run] [--input]
394
+ usage: canon subject adopt <SUBJECT_ID> --change <CHANGE_ID> [--dry-run] [--input]
395
395
  ```
396
396
  ```bash
397
397
  canon subject adopt demo --change add-login --json
398
398
  ```
399
399
  ```text
400
400
  # 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)
401
- canon subject move <SUBJECT_ID> --to <proposed|specced|building|verifying|shipped|retired> [--override-reason <TEXT>] [--reason <TEXT>] [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--input]
401
+ usage: canon subject move <SUBJECT_ID> --to <proposed|specced|building|verifying|shipped|retired> [--override-reason <TEXT>] [--reason <TEXT>] [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--input]
402
402
  ```
403
403
  ```bash
404
404
  canon subject move demo --to specced --json
405
405
  ```
406
406
  ```text
407
407
  # Author a new subject at status `proposed`
408
- canon subject new <SUBJECT_ID> --domain <NAME> --title <TEXT> [--summary <TEXT>] [--owner-role <ROLE>] [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--input]
408
+ usage: canon subject new <SUBJECT_ID> --domain <NAME> --title <TEXT> [--summary <TEXT>] [--owner-role <ROLE>] [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--input]
409
409
  ```
410
410
  ```bash
411
411
  canon subject new payments --domain dev --title Payments --json
412
412
  ```
413
413
  ```text
414
414
  # Show a subject (read-only)
415
- canon subject show <SUBJECT_ID>
415
+ usage: canon subject show <SUBJECT_ID>
416
416
  ```
417
417
  ```bash
418
418
  canon subject show demo --json
419
419
  ```
420
420
  ```text
421
421
  # Take a change back out of a subject (the mirror of adopt; refused for a change whose brief is approved)
422
- canon subject unadopt <SUBJECT_ID> --change <CHANGE_ID> [--dry-run] [--input]
422
+ usage: canon subject unadopt <SUBJECT_ID> --change <CHANGE_ID> [--dry-run] [--input]
423
423
  ```
424
424
  ```bash
425
425
  canon subject unadopt demo --change add-login --json
426
426
  ```
427
427
  ```text
428
428
  # Apply canon.yaml aging rules, moving old records to their destination tier
429
- canon tier age [--commit --plan-digest <DIGEST>] [--input]
430
- # a bare run previews and prints planDigest; `--commit --plan-digest <DIGEST>` with that digest acts
429
+ usage: canon tier age [--commit --plan-digest <PLAN_DIGEST>] [--input]
430
+ # a bare run previews and prints planDigest; `--commit --plan-digest <PLAN_DIGEST>` with that digest acts
431
431
  ```
432
432
  ```bash
433
433
  canon tier age --json
434
434
  ```
435
435
  ```text
436
436
  # Follow a finding's review loop in time order: review, finding, fix, re-review, evidence
437
- canon trace <ID>
437
+ usage: canon trace <ID>
438
438
  ```
439
439
  ```bash
440
440
  canon trace add-login_1_1 --json
@@ -527,16 +527,16 @@ Approve or fill the form. On their approval record it: `canon brief approve
527
527
  <ask|AskUserQuestion|chat> --actor <your actor id> --digest <slug>=<the digest
528
528
  shown>` (several slugs take one answer, each with its own `--digest`; nothing is written
529
529
  if one is refused). The record says you recorded it, with your role, actor and
530
- tool. `RELAY_DIGEST_MISMATCH` means the brief changed after they saw it: show it
530
+ tool. `RELAY_DIGEST_STALE` means the brief changed after they saw it: show it
531
531
  again. When `canon.yaml` has `approval: { relay: deny }` the call is refused
532
- (`HUMAN_ONLY`, naming the key): report the human's own call and wait for them to
532
+ (`ACTOR_DENIED`, naming the key): report the human's own call and wait for them to
533
533
  run it. Removing or unsetting your declared role (`env -u CANON_ROLE`,
534
534
  dropping `--as`) to get past a refusal is the same act under another label.
535
535
  `canon skills show role-planner` has the full procedure. Do not start the
536
536
  implementer before `canon brief show <slug>` reports `state: approved`.
537
537
  Never approve it yourself and never edit the policy to pass the gate. A
538
538
  policy that no longer matches the approval fails closed
539
- (`POLICY_CHANGED_SINCE_APPROVAL`, or `POLICY_APPROVAL_UNREADABLE`): the ship
539
+ (`POLICY_APPROVAL_STALE`, or `POLICY_APPROVAL_CORRUPT`): the ship
540
540
  guard and the reopen refuse, and `--override-reason` does not waive it. Run
541
541
  `canon policy show`, then show the policy to the human, ask them to re-approve
542
542
  and record their explicit answer (`canon policy approve --approver <their name>
@@ -576,7 +576,7 @@ its preview, never from an old digest.
576
576
 
577
577
  | The thought | The reality |
578
578
  |---|---|
579
- | "Edit the policy so the gate passes." | A changed policy fails closed (`POLICY_CHANGED_SINCE_APPROVAL`); ask the human to re-approve or restore it from git. |
579
+ | "Edit the policy so the gate passes." | A changed policy fails closed (`POLICY_APPROVAL_STALE`); ask the human to re-approve or restore it from git. |
580
580
  | "The reviewer can be me under another label." | The reviewer is a separate process with its own real session id (#39). |
581
581
  | "Approve the brief; the human said they are busy." | An answer they did not give is not recorded. Show the brief, ask, and record only an explicit approval with `--relayed-via`. |
582
582
  | "Override the refusal to ship." | Fix the gap the refusal names; `--override-reason` waives only the `require_review` gaps and the brief gap, is recorded on the subject, and is for the human's call, not a shortcut. |
@@ -591,7 +591,8 @@ directly (a transition is a state change, not a destructive act) and is not
591
591
  repeatable: a move to the state the subject is already in is refused
592
592
  (exit 2), so after a lost response read `subject show` before you retry.
593
593
  It refuses a move the policy does not allow (missing evidence or reviews,
594
- open blockers, an unapproved brief) with `SUBJECT_GATE_VIOLATION` and exit 1,
594
+ open blockers, an unapproved brief) with exit 2 and the code of the condition
595
+ (`SUBJECT_APPROVAL_REQUIRED` for a missing review, evidence or approval, `EVIDENCE_STALE`, `SUBJECT_INVALID` for the rest; several causes are `error.details[]`),
595
596
  the record unchanged; fix the gap rather than overriding. Move to `shipped`
596
597
  yourself once its guard passes, unless the brief says the human ships. A
597
598
  follow-up on a shipped subject goes back to `verifying` with `--reason`,
@@ -614,7 +615,7 @@ red. A bad `--to` fails with `error.field` `--to` and `error.expected`
614
615
  listing the states.
615
616
 
616
617
  **Done when:** `canon subject show demo` (the subject's id) reports the
617
- state you moved it to and `canon gate check` is clean; when the move exits 1,
618
+ state you moved it to and `canon gate check` is clean; when the move exits 2,
618
619
  read the refusal in `error` of `canon subject move demo --to shipped --json`.
619
620
 
620
621
  ## Destructive commands preview first
@@ -624,9 +625,14 @@ move` and `canon migrate` delete or rewrite existing data. A bare run only
624
625
  previews: exit 0, nothing written, a report with `planDigest` and
625
626
  `effects[]`. Read the effects, then act with `--commit --plan-digest
626
627
  <planDigest>`; it refuses (`PLAN_STALE`, exit 2) when the plan recomputed
627
- now differs from the one you previewed. A document passed with `--input`
628
- never carries `--commit` or `--plan-digest`, and these five leaves take one
629
- object only (`INPUT_INVALID`).
628
+ now differs from the one you previewed. The digest is `sha256:` and 64 hex
629
+ digits, over the effects and what the plan read, so a file or record the plan
630
+ read that changed since is `PLAN_STALE` too, and `meta.next[0]` is the preview
631
+ to run again. A commit holds the repository write lock for its whole run:
632
+ another command that writes waits for it, and one that waited 30 seconds
633
+ answers `REPO_LOCK_UNAVAILABLE` (exit 2, retryable): run it again. A document passed
634
+ with `--input` never carries `--commit` or `--plan-digest`, and these five
635
+ leaves take one object only (`INPUT_INVALID`).
630
636
 
631
637
  ```bash
632
638
  canon purge --kind session --before 2026-01-01
@@ -670,7 +676,7 @@ canon skills install
670
676
  moves: commit first. In CI run it with full history (`fetch-depth: 0`).
671
677
  3. `canon skills install` refreshes the stub and the scripts for the selected
672
678
  harnesses; `canon skills check` reports a skill written by another canon
673
- version (exit 1, `SKILLS_DRIFT`), `canon skills doctor` explains it.
679
+ version (exit 1, `SKILLS_CHECK_FAILED`), `canon skills doctor` explains it.
674
680
 
675
681
  Commit what it changes, except the backup: `.canon/migrate-backup/` is local and
676
682
  git-ignored, and `canon migrate --revert` needs it (keep it until you are sure).