@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.
- package/dist/skills/SKILL.src.md +48 -22
- package/dist/skills/reference/brief-polish.md +4 -4
- package/dist/skills/reference/brief-shape.md +38 -7
- package/dist/skills/reference/canon-authoring.md +6 -6
- package/dist/skills/reference/canon-gate.md +49 -34
- package/dist/skills/reference/canon-learn.md +2 -2
- package/dist/skills/reference/canon-plan-import.md +2 -2
- package/dist/skills/reference/canon-plugins.md +6 -6
- package/dist/skills/reference/canon-report-dashboard.md +12 -8
- package/dist/skills/reference/canon-review.md +26 -25
- package/dist/skills/reference/canon-storage.md +20 -3
- package/dist/skills/reference/canon-subject.md +132 -98
- package/dist/skills/reference/role-implementer.md +42 -28
- package/dist/skills/reference/role-orchestrator.md +40 -24
- package/dist/skills/reference/role-planner.md +32 -17
- package/dist/skills/reference/role-reviewer.md +48 -30
- package/man/canon-adapter-authorize.1 +2 -2
- package/man/canon-adapter-validate.1 +2 -2
- package/man/canon-adapter.1 +2 -2
- package/man/canon-artifacts-move.1 +2 -2
- package/man/canon-artifacts-store.1 +2 -2
- package/man/canon-artifacts-verify.1 +2 -2
- package/man/canon-artifacts.1 +2 -2
- package/man/canon-brief-approve.1 +7 -4
- package/man/canon-brief-check.1 +2 -2
- package/man/canon-brief-show.1 +2 -2
- package/man/canon-brief.1 +8 -7
- package/man/canon-change-new.1 +4 -4
- package/man/canon-change.1 +3 -3
- package/man/canon-completion.1 +2 -2
- package/man/canon-context-pack-add.1 +2 -2
- package/man/canon-context-pack-show.1 +2 -2
- package/man/canon-context-pack-verify.1 +2 -2
- package/man/canon-context-pack.1 +2 -2
- package/man/canon-context.1 +2 -2
- package/man/canon-dashboard.1 +2 -2
- package/man/canon-demo-init.1 +2 -2
- package/man/canon-demo-review.1 +2 -2
- package/man/canon-demo.1 +2 -2
- package/man/canon-dispatch-begin.1 +10 -10
- package/man/canon-dispatch-diff.1 +2 -2
- package/man/canon-dispatch-end.1 +2 -2
- package/man/canon-dispatch.1 +2 -2
- package/man/canon-divergence-accept.1 +6 -6
- package/man/canon-divergence-add.1 +6 -6
- package/man/canon-divergence-defer.1 +6 -6
- package/man/canon-divergence-list.1 +2 -2
- package/man/canon-divergence-resolve.1 +6 -6
- package/man/canon-divergence.1 +2 -2
- package/man/canon-evidence-add.1 +16 -16
- package/man/canon-evidence-approval-payload.1 +10 -10
- package/man/canon-evidence-audit.1 +10 -10
- package/man/canon-evidence.1 +3 -3
- package/man/canon-export.1 +2 -2
- package/man/canon-feature-new.1 +6 -6
- package/man/canon-feature.1 +2 -2
- package/man/canon-finding-add.1 +23 -11
- package/man/canon-finding-close.1 +8 -8
- package/man/canon-finding-list.1 +4 -4
- package/man/canon-finding.1 +4 -4
- package/man/canon-format.1 +2 -2
- package/man/canon-gate-check.1 +2 -2
- package/man/canon-gate-install-hooks.1 +2 -2
- package/man/canon-gate-promote.1 +2 -2
- package/man/canon-gate.1 +2 -2
- package/man/canon-ingest-plans.1 +2 -2
- package/man/canon-ingest-records.1 +4 -4
- package/man/canon-ingest-sessions.1 +2 -2
- package/man/canon-ingest.1 +2 -2
- package/man/canon-init.1 +2 -2
- package/man/canon-inventory-sync.1 +2 -2
- package/man/canon-inventory.1 +2 -2
- package/man/canon-ledger-compact.1 +2 -2
- package/man/canon-ledger.1 +2 -2
- package/man/canon-migrate.1 +25 -3
- package/man/canon-plugin-sync.1 +2 -2
- package/man/canon-plugin.1 +2 -2
- package/man/canon-policy-approve.1 +2 -2
- package/man/canon-policy-show.1 +2 -2
- package/man/canon-policy.1 +2 -2
- package/man/canon-prompt-add.1 +2 -2
- package/man/canon-prompt-show.1 +2 -2
- package/man/canon-prompt.1 +2 -2
- package/man/canon-purge.1 +2 -2
- package/man/canon-query.1 +5 -5
- package/man/canon-regime-show.1 +2 -2
- package/man/canon-regime.1 +2 -2
- package/man/canon-report-build.1 +2 -2
- package/man/canon-report-check.1 +2 -2
- package/man/canon-report-snapshot.1 +2 -2
- package/man/canon-report.1 +2 -2
- package/man/canon-retrieve.1 +5 -5
- package/man/canon-review-change.1 +6 -6
- package/man/canon-review-scenario.1 +6 -6
- package/man/canon-review.1 +2 -2
- package/man/canon-scenario-new.1 +10 -10
- package/man/canon-scenario.1 +2 -2
- package/man/canon-schema.1 +2 -2
- package/man/canon-search.1 +104 -0
- package/man/canon-selftest.1 +2 -2
- package/man/canon-skills-check.1 +2 -2
- package/man/canon-skills-doctor.1 +2 -2
- package/man/canon-skills-install.1 +2 -2
- package/man/canon-skills-show.1 +2 -2
- package/man/canon-skills.1 +2 -2
- package/man/canon-status.1 +7 -2
- package/man/canon-strategy-approval-payload.1 +2 -2
- package/man/canon-strategy-promote.1 +2 -2
- package/man/canon-strategy-rollback.1 +5 -5
- package/man/canon-strategy.1 +2 -2
- package/man/canon-subject-adopt.1 +4 -4
- package/man/canon-subject-move.1 +5 -5
- package/man/canon-subject-new.1 +5 -5
- package/man/canon-subject-show.1 +2 -2
- package/man/canon-subject-unadopt.1 +5 -5
- package/man/canon-subject.1 +2 -2
- package/man/canon-task-done.1 +2 -2
- package/man/canon-task.1 +2 -2
- package/man/canon-tier-age.1 +2 -2
- package/man/canon-tier.1 +2 -2
- package/man/canon-trace.1 +56 -0
- package/man/canon.1 +8 -2
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
218
|
-
canon evidence add --scenario
|
|
219
|
-
canon finding add --change
|
|
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 '[{"
|
|
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
|
|
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
|
|
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
|
|
280
|
-
use `--scenario
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
194
|
+
canon ingest records [--watch] [--interval-secs <N>] [--dry-run] [--run <RUN_ID>] [--input]
|
|
195
195
|
```
|
|
196
196
|
```bash
|
|
197
197
|
canon ingest records
|
|
@@ -227,7 +227,7 @@ canon ledger compact
|
|
|
227
227
|
```
|
|
228
228
|
```text
|
|
229
229
|
# Bring a repo from an earlier canon up to date
|
|
230
|
-
canon migrate [--commit --plan-digest <DIGEST>] [--input]
|
|
230
|
+
canon migrate [--commit --plan-digest <DIGEST>] [--revert] [--backup <DIR> (with --revert)] [--input]
|
|
231
231
|
# a bare run previews and prints planDigest; `--commit --plan-digest <DIGEST>` with that digest acts
|
|
232
232
|
```
|
|
233
233
|
```bash
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
393
|
+
canon subject adopt <SUBJECT_ID> --change <CHANGE_ID> [--dry-run] [--input]
|
|
387
394
|
```
|
|
388
395
|
```bash
|
|
389
|
-
canon subject adopt demo --change
|
|
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
|
|
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
|
|
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
|
|
421
|
+
canon subject unadopt <SUBJECT_ID> --change <CHANGE_ID> [--dry-run] [--input]
|
|
415
422
|
```
|
|
416
423
|
```bash
|
|
417
|
-
canon subject unadopt demo --change
|
|
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
|
|
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
|
|
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
|
|
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
|
|
503
|
-
--note "<their own words>"
|
|
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
|
|
@@ -635,14 +650,15 @@ canon skills install
|
|
|
635
650
|
(which do not count until then; the gate, `status` and `subject move`
|
|
636
651
|
print one advisory naming it) and replaces an old full skill with the
|
|
637
652
|
stub. It backs up every file it rewrites under
|
|
638
|
-
`.canon/migrate-backup/<timestamp
|
|
653
|
+
`.canon/migrate-backup/<timestamp>/` (local, git-ignored; `--revert` restores from it), is safe to run again (a second run
|
|
639
654
|
finds nothing to move) and refuses uncommitted changes under a path it
|
|
640
655
|
moves: commit first. In CI run it with full history (`fetch-depth: 0`).
|
|
641
656
|
3. `canon skills install` refreshes the stub and the scripts for the selected
|
|
642
657
|
harnesses; `canon skills check` reports a skill written by another canon
|
|
643
658
|
version (exit 1, `SKILLS_DRIFT`), `canon skills doctor` explains it.
|
|
644
659
|
|
|
645
|
-
Commit what it changes
|
|
660
|
+
Commit what it changes, except the backup: `.canon/migrate-backup/` is local and
|
|
661
|
+
git-ignored, and `canon migrate --revert` needs it (keep it until you are sure).
|
|
646
662
|
|
|
647
663
|
**Done when:** `canon migrate` reports nothing left to move, `canon skills
|
|
648
664
|
check` exits 0, and `canon status` and `canon gate check` no longer warn
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
145
|
+
canon subject adopt <SUBJECT_ID> --change <CHANGE_ID> [--dry-run] [--input]
|
|
139
146
|
```
|
|
140
147
|
```bash
|
|
141
|
-
canon subject adopt demo --change
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|