@journeykit/canon 0.33.0 → 0.35.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 +44 -23
- package/dist/skills/reference/canon-artifact-ingest.md +6 -3
- package/dist/skills/reference/canon-authoring.md +8 -5
- package/dist/skills/reference/canon-context.md +8 -5
- package/dist/skills/reference/canon-fmt.md +2 -1
- package/dist/skills/reference/canon-gate.md +12 -8
- package/dist/skills/reference/canon-inventory.md +13 -10
- package/dist/skills/reference/canon-plan-import.md +6 -3
- package/dist/skills/reference/canon-plugins.md +12 -6
- package/dist/skills/reference/canon-report-dashboard.md +6 -3
- package/dist/skills/reference/canon-review.md +2 -2
- package/dist/skills/reference/canon-session-ingest.md +12 -6
- package/dist/skills/reference/canon-storage.md +48 -16
- package/dist/skills/reference/canon-subject.md +27 -18
- package/dist/skills/reference/role-implementer.md +58 -58
- package/dist/skills/reference/role-orchestrator.md +128 -123
- package/dist/skills/reference/role-planner.md +44 -44
- package/dist/skills/reference/role-reviewer.md +46 -46
- package/man/canon-adapter-authorize.1 +3 -3
- package/man/canon-adapter-validate.1 +3 -3
- package/man/canon-adapter.1 +3 -3
- package/man/canon-artifacts-move.1 +3 -3
- package/man/canon-artifacts-store.1 +3 -3
- package/man/canon-artifacts-verify.1 +3 -3
- package/man/canon-artifacts.1 +3 -3
- package/man/canon-brief-approve.1 +3 -3
- package/man/canon-brief-check.1 +3 -3
- package/man/canon-brief-show.1 +3 -3
- package/man/canon-brief.1 +3 -3
- package/man/canon-change-new.1 +3 -3
- package/man/canon-change.1 +3 -3
- package/man/canon-completion.1 +3 -3
- package/man/canon-context-pack-add.1 +3 -3
- package/man/canon-context-pack-show.1 +3 -3
- package/man/canon-context-pack-verify.1 +3 -3
- package/man/canon-context-pack.1 +3 -3
- package/man/canon-context.1 +4 -4
- package/man/canon-dashboard.1 +3 -3
- package/man/canon-demo-init.1 +3 -3
- package/man/canon-demo-review.1 +3 -3
- package/man/canon-demo.1 +3 -3
- package/man/canon-dispatch-begin.1 +3 -3
- package/man/canon-dispatch-diff.1 +3 -3
- package/man/canon-dispatch-end.1 +3 -3
- package/man/canon-dispatch.1 +3 -3
- package/man/canon-divergence-accept.1 +3 -3
- package/man/canon-divergence-add.1 +3 -3
- package/man/canon-divergence-defer.1 +3 -3
- package/man/canon-divergence-list.1 +6 -6
- package/man/canon-divergence-resolve.1 +3 -3
- package/man/canon-divergence.1 +3 -3
- package/man/canon-evidence-add.1 +3 -3
- package/man/canon-evidence-approval-payload.1 +3 -3
- package/man/canon-evidence-audit.1 +3 -3
- package/man/canon-evidence.1 +3 -3
- package/man/canon-export.1 +6 -6
- package/man/canon-feature-new.1 +3 -3
- package/man/canon-feature.1 +3 -3
- package/man/canon-finding-add.1 +4 -4
- package/man/canon-finding-close.1 +3 -3
- package/man/canon-finding-list.1 +6 -6
- package/man/canon-finding.1 +3 -3
- package/man/canon-format.1 +3 -3
- package/man/canon-gate-check.1 +3 -3
- package/man/canon-gate-install-hooks.1 +3 -3
- package/man/canon-gate-promote.1 +3 -3
- package/man/canon-gate.1 +3 -3
- package/man/canon-ingest-plans.1 +3 -3
- package/man/canon-ingest-records.1 +3 -3
- package/man/canon-ingest-sessions.1 +3 -3
- package/man/canon-ingest.1 +3 -3
- package/man/canon-init.1 +9 -9
- package/man/canon-inventory-sync.1 +3 -3
- package/man/canon-inventory.1 +3 -3
- package/man/canon-ledger-compact.1 +3 -3
- package/man/canon-ledger.1 +3 -3
- package/man/canon-migrate.1 +3 -3
- package/man/canon-plugin-sync.1 +3 -3
- package/man/canon-plugin.1 +3 -3
- package/man/canon-policy-approve.1 +3 -3
- package/man/canon-policy-show.1 +3 -3
- package/man/canon-policy.1 +3 -3
- package/man/canon-prompt-add.1 +3 -3
- package/man/canon-prompt-show.1 +3 -3
- package/man/canon-prompt.1 +3 -3
- package/man/canon-purge.1 +3 -3
- package/man/canon-query.1 +6 -6
- package/man/canon-regime-show.1 +3 -3
- package/man/canon-regime.1 +3 -3
- package/man/canon-report-build.1 +3 -3
- package/man/canon-report-check.1 +3 -3
- package/man/canon-report-snapshot.1 +3 -3
- package/man/canon-report.1 +3 -3
- package/man/canon-retrieve.1 +4 -4
- package/man/canon-review-change.1 +3 -3
- package/man/canon-review-scenario.1 +3 -3
- package/man/canon-review.1 +3 -3
- package/man/canon-scenario-new.1 +3 -3
- package/man/canon-scenario.1 +3 -3
- package/man/canon-schema.1 +14 -6
- package/man/canon-search.1 +3 -3
- package/man/canon-selftest.1 +3 -3
- package/man/canon-skills-check.1 +3 -3
- package/man/canon-skills-doctor.1 +3 -3
- package/man/canon-skills-install.1 +3 -3
- package/man/canon-skills-show.1 +6 -6
- package/man/canon-skills.1 +3 -3
- package/man/canon-status.1 +4 -4
- package/man/canon-strategy-approval-payload.1 +3 -3
- package/man/canon-strategy-promote.1 +3 -3
- package/man/canon-strategy-rollback.1 +3 -3
- package/man/canon-strategy.1 +3 -3
- package/man/canon-subject-adopt.1 +3 -3
- package/man/canon-subject-move.1 +3 -3
- package/man/canon-subject-new.1 +4 -4
- package/man/canon-subject-show.1 +3 -3
- package/man/canon-subject-unadopt.1 +3 -3
- package/man/canon-subject.1 +3 -3
- package/man/canon-task-done.1 +3 -3
- package/man/canon-task.1 +3 -3
- package/man/canon-tier-age.1 +3 -3
- package/man/canon-tier.1 +3 -3
- package/man/canon-trace.1 +3 -3
- package/man/canon.1 +3 -3
- package/package.json +4 -4
|
@@ -40,7 +40,8 @@ Write (or update) the Subject before touching anything else, so every
|
|
|
40
40
|
downstream artifact has a `subject_id` to pin to.
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
|
-
|
|
43
|
+
# record kinds, enum domains, policy requirements
|
|
44
|
+
canon context --repo .
|
|
44
45
|
canon subject new subject-domain-loop \
|
|
45
46
|
--domain dev --title "Subject domain loop" \
|
|
46
47
|
--summary "The durable product unit + its per-domain loop" \
|
|
@@ -70,7 +71,7 @@ canon subject new subject-domain-loop \
|
|
|
70
71
|
subjects at once: `--input` takes inline JSON, a file or `-`; an array (or
|
|
71
72
|
NDJSON) is a batch validated before any write, with `operands` holding the
|
|
72
73
|
id and the other keys the option names in camelCase (`canon schema subject
|
|
73
|
-
new --json` shows the schema and
|
|
74
|
+
new --json` shows `input`: the schema of one document and a complete `example`). Writing an identical subject
|
|
74
75
|
again is a no-op reported `unchanged` (`data.unchanged`).
|
|
75
76
|
|
|
76
77
|
### 2. Retrieve subject-scoped strategy memory BEFORE working
|
|
@@ -130,7 +131,8 @@ from anywhere). Any other transition is rejected by failure class, exits
|
|
|
130
131
|
canon subject move subject-domain-loop --to specced
|
|
131
132
|
canon subject move subject-domain-loop --to building
|
|
132
133
|
canon subject move subject-domain-loop --to verifying
|
|
133
|
-
|
|
134
|
+
# gated — see below
|
|
135
|
+
canon subject move subject-domain-loop --to shipped
|
|
134
136
|
```
|
|
135
137
|
|
|
136
138
|
On success the status updates in place; `--json` prints the updated
|
|
@@ -182,8 +184,8 @@ a policy. The refusal is an `unreviewed-promotion` naming the subject, and
|
|
|
182
184
|
says what to do:
|
|
183
185
|
|
|
184
186
|
```output
|
|
185
|
-
canon subject move: SUBJECT_GATE_VIOLATION — unreviewed-promotion demo-subject — verifying → shipped: brief not approved — .canon/changes/c-demo/brief.md has no `Approved:` line; a human must answer the brief, and only from that answer the agent will record their words with `canon brief approve c-demo --approver <the human> --note "<their words>"`
|
|
186
|
-
canon subject move: refused — get the human's answer to the brief and record it with `canon brief approve`, or pass --override-reason <text> to move anyway; the waiver is recorded on the subject
|
|
187
|
+
output: canon subject move: SUBJECT_GATE_VIOLATION — unreviewed-promotion demo-subject — verifying → shipped: brief not approved — .canon/changes/c-demo/brief.md has no `Approved:` line; a human must answer the brief, and only from that answer the agent will record their words with `canon brief approve c-demo --approver <the human> --note "<their words>"`
|
|
188
|
+
output: canon subject move: refused — get the human's answer to the brief and record it with `canon brief approve`, or pass --override-reason <text> to move anyway; the waiver is recorded on the subject
|
|
187
189
|
```
|
|
188
190
|
|
|
189
191
|
For an external change with no canon brief yet, the reason reads
|
|
@@ -259,7 +261,7 @@ When `.canon/policy.yaml` sets `spec_coverage.require_review` (see
|
|
|
259
261
|
prints on stderr which it ran or skipped:
|
|
260
262
|
|
|
261
263
|
```output
|
|
262
|
-
canon subject move: review guard for building → verifying (spec_coverage.require_review, scope: verifying, shipped)
|
|
264
|
+
output: canon subject move: review guard for building → verifying (spec_coverage.require_review, scope: verifying, shipped)
|
|
263
265
|
ran unreviewed-promotion — every owned scenario needs a review by an actor, and from a session, other than its evidence's
|
|
264
266
|
ran open-blocker — 1 adopted change(s) checked for open blocker findings
|
|
265
267
|
```
|
|
@@ -316,8 +318,8 @@ canon subject move demo-subject --to verifying \
|
|
|
316
318
|
```
|
|
317
319
|
|
|
318
320
|
```output
|
|
319
|
-
canon subject move: reopened `demo-subject` from shipped, recorded by `impl`: follow-up: the retry path leaks a file handle; keep the follow-up in its approved change `c-demo`, then scenario, evidence and review; shipping again runs every guard
|
|
320
|
-
canon subject move: demo-subject → verifying — written directly; nothing to promote
|
|
321
|
+
output: canon subject move: reopened `demo-subject` from shipped, recorded by `impl`: follow-up: the retry path leaks a file handle; keep the follow-up in its approved change `c-demo`, then scenario, evidence and review; shipping again runs every guard
|
|
322
|
+
output: canon subject move: demo-subject → verifying — written directly; nothing to promote
|
|
321
323
|
```
|
|
322
324
|
|
|
323
325
|
- `--reason "<one line>"` is required for `shipped → verifying` (exit 2
|
|
@@ -353,9 +355,11 @@ Planning docs written outside canon become change/task records via
|
|
|
353
355
|
`canon subject adopt` lifts an imported change into a managed Subject:
|
|
354
356
|
|
|
355
357
|
```bash
|
|
356
|
-
|
|
358
|
+
# import → change/task rows
|
|
359
|
+
canon ingest plans --repo .
|
|
360
|
+
# link change → subject
|
|
357
361
|
canon subject adopt subject-domain-loop \
|
|
358
|
-
--change subject-domain-loop-plan
|
|
362
|
+
--change subject-domain-loop-plan
|
|
359
363
|
```
|
|
360
364
|
|
|
361
365
|
A change made with `canon change new` (below) is recorded and adopted
|
|
@@ -377,7 +381,7 @@ second subject adds that subject, never re-points the change, and says
|
|
|
377
381
|
so:
|
|
378
382
|
|
|
379
383
|
```output
|
|
380
|
-
canon subject adopt: linked change `refactor-core` to subject `editing` as well; the change now belongs to `perception` and `editing` — written directly; nothing to promote
|
|
384
|
+
output: canon subject adopt: linked change `refactor-core` to subject `editing` as well; the change now belongs to `perception` and `editing` — written directly; nothing to promote
|
|
381
385
|
```
|
|
382
386
|
|
|
383
387
|
Every reader joins a subject to its changes from both sides (the
|
|
@@ -434,8 +438,8 @@ canon change new add-login --subject auth --title "Add login"
|
|
|
434
438
|
```
|
|
435
439
|
|
|
436
440
|
```output
|
|
437
|
-
canon change new: wrote .canon/changes/add-login/brief.md
|
|
438
|
-
canon change new: recorded change `add-login` adopted into subject `auth` — written directly; nothing to promote
|
|
441
|
+
output: canon change new: wrote .canon/changes/add-login/brief.md
|
|
442
|
+
output: canon change new: recorded change `add-login` adopted into subject `auth` — written directly; nothing to promote
|
|
439
443
|
```
|
|
440
444
|
|
|
441
445
|
- **Writes** canon's own change dir, `.canon/changes/<slug>/`, holding
|
|
@@ -493,8 +497,10 @@ brief (`data.next`, `meta.next`).
|
|
|
493
497
|
### The brief: `canon brief show`, `canon brief check`, `canon brief approve`
|
|
494
498
|
|
|
495
499
|
```text
|
|
496
|
-
|
|
497
|
-
canon brief
|
|
500
|
+
# state and the next one to three steps; never edits
|
|
501
|
+
canon brief show [<slug>]
|
|
502
|
+
# findings; exit 0 clean, 2 blockers, 1 error
|
|
503
|
+
canon brief check [<slug>] [--json]
|
|
498
504
|
canon brief approve <slug> <slug> --approver <the human> --note "<their words>"
|
|
499
505
|
```
|
|
500
506
|
|
|
@@ -567,8 +573,10 @@ step that writes it.
|
|
|
567
573
|
## Where are we: `canon status`
|
|
568
574
|
|
|
569
575
|
```bash
|
|
570
|
-
|
|
571
|
-
canon status
|
|
576
|
+
# subjects by status, their gaps, next commands
|
|
577
|
+
canon status
|
|
578
|
+
# the same report, stable shape
|
|
579
|
+
canon status --json
|
|
572
580
|
canon status --repo ../other
|
|
573
581
|
```
|
|
574
582
|
|
|
@@ -818,7 +826,8 @@ and `canon gate check` exits `0`; read `data.subjects[]` for the counts and
|
|
|
818
826
|
|
|
819
827
|
```bash
|
|
820
828
|
canon query --kind subject --domain dev --status building
|
|
821
|
-
|
|
829
|
+
# renders the "Subjects" panel
|
|
830
|
+
canon report build --repo .
|
|
822
831
|
```
|
|
823
832
|
|
|
824
833
|
- `canon query --kind subject [--domain <d>] [--status <s>]` — the
|
|
@@ -25,197 +25,197 @@ in your ids. Use only the options on a line; never guess one. Ask `canon schema
|
|
|
25
25
|
<command> --json` only for a leaf this block does not list, or after a `USAGE` refusal.
|
|
26
26
|
|
|
27
27
|
<!-- canon:generated commands-implementer begin -->
|
|
28
|
-
Every leaf takes `--as <ROLE>` and `--json`; `--repo <DIR>` too, except `completion`, `schema`, `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
|
|
29
|
-
|
|
28
|
+
Every leaf takes `--as <ROLE>` and `--json`; `--repo <DIR>` too, except `completion`, `schema`, `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.
|
|
29
|
+
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`).
|
|
30
30
|
|
|
31
31
|
```text
|
|
32
32
|
# Write the shell completion script for canon (bash, zsh or fish)
|
|
33
|
-
canon completion <SHELL>
|
|
33
|
+
usage: canon completion <SHELL>
|
|
34
34
|
```
|
|
35
35
|
```bash
|
|
36
|
-
canon completion zsh
|
|
36
|
+
canon completion zsh --json
|
|
37
37
|
```
|
|
38
38
|
```text
|
|
39
39
|
# Show what you can author here: record kinds, fields, enums, policies
|
|
40
|
-
canon context [--fields <FIELDS>]
|
|
40
|
+
usage: canon context [--fields <FIELDS>]
|
|
41
41
|
```
|
|
42
42
|
```bash
|
|
43
|
-
canon context
|
|
43
|
+
canon context --json
|
|
44
44
|
```
|
|
45
45
|
```text
|
|
46
46
|
# Create an immutable context pack from a repository-local JSON manifest
|
|
47
|
-
canon context-pack add --manifest <FILE> [--input]
|
|
47
|
+
usage: canon context-pack add --manifest <FILE> [--input]
|
|
48
48
|
```
|
|
49
49
|
```bash
|
|
50
|
-
canon context-pack add --manifest .canon/context-manifest.json
|
|
50
|
+
canon context-pack add --manifest .canon/context-manifest.json --json
|
|
51
51
|
```
|
|
52
52
|
```text
|
|
53
53
|
# Show a context pack after verifying its manifest and content objects
|
|
54
|
-
canon context-pack show <PACK_ID>
|
|
54
|
+
usage: canon context-pack show <PACK_ID>
|
|
55
55
|
```
|
|
56
56
|
```bash
|
|
57
|
-
canon context-pack show sha256:0000000000000000000000000000000000000000000000000000000000000000
|
|
57
|
+
canon context-pack show sha256:0000000000000000000000000000000000000000000000000000000000000000 --json
|
|
58
58
|
```
|
|
59
59
|
```text
|
|
60
60
|
# Verify a context pack's manifest and immutable content objects
|
|
61
|
-
canon context-pack verify <PACK_ID>
|
|
61
|
+
usage: canon context-pack verify <PACK_ID>
|
|
62
62
|
```
|
|
63
63
|
```bash
|
|
64
|
-
canon context-pack verify sha256:0000000000000000000000000000000000000000000000000000000000000000
|
|
64
|
+
canon context-pack verify sha256:0000000000000000000000000000000000000000000000000000000000000000 --json
|
|
65
65
|
```
|
|
66
66
|
```text
|
|
67
67
|
# Add a divergence candidate, staged with no run_seq yet
|
|
68
|
-
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]
|
|
68
|
+
usage: 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]
|
|
69
69
|
```
|
|
70
70
|
```bash
|
|
71
|
-
canon divergence add auth.login.01 --actor alice --role reviewer
|
|
71
|
+
canon divergence add auth.login.01 --actor alice --role reviewer --json
|
|
72
72
|
```
|
|
73
73
|
```text
|
|
74
74
|
# Directly record a deferred divergence (requires --reason/--expiry)
|
|
75
|
-
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]
|
|
75
|
+
usage: 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]
|
|
76
76
|
```
|
|
77
77
|
```bash
|
|
78
|
-
canon divergence defer auth.login.01 --actor alice --reason "waiting on the vendor" --expiry 2030-01-01T00:00:00Z --role reviewer
|
|
78
|
+
canon divergence defer auth.login.01 --actor alice --reason "waiting on the vendor" --expiry 2030-01-01T00:00:00Z --role reviewer --json
|
|
79
79
|
```
|
|
80
80
|
```text
|
|
81
81
|
# List the current divergence burn-down state
|
|
82
|
-
canon divergence list [--as-of <TIMESTAMP>] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
|
|
82
|
+
usage: canon divergence list [--as-of <TIMESTAMP>] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
|
|
83
83
|
```
|
|
84
84
|
```bash
|
|
85
|
-
canon divergence list --as-of 2030-01-01
|
|
85
|
+
canon divergence list --as-of 2030-01-01 --json
|
|
86
86
|
```
|
|
87
87
|
```text
|
|
88
88
|
# Directly record a resolved divergence
|
|
89
|
-
canon divergence resolve <SCENARIO_ID> --actor <ACTOR_ID> [--project <PROJECT_ID>] [--rev <REV>] [--round <N>] [--session <SESSION_ID>] [--detail <TEXT>] [--role <ROLE>] [--input]
|
|
89
|
+
usage: canon divergence resolve <SCENARIO_ID> --actor <ACTOR_ID> [--project <PROJECT_ID>] [--rev <REV>] [--round <N>] [--session <SESSION_ID>] [--detail <TEXT>] [--role <ROLE>] [--input]
|
|
90
90
|
```
|
|
91
91
|
```bash
|
|
92
|
-
canon divergence resolve auth.login.01 --actor alice --role reviewer
|
|
92
|
+
canon divergence resolve auth.login.01 --actor alice --role reviewer --json
|
|
93
93
|
```
|
|
94
94
|
```text
|
|
95
95
|
# Record one attributed EvidenceRecord for a task or scenario
|
|
96
|
-
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>
|
|
96
|
+
usage: canon evidence add [--task <TASK_ID> | --all-scenarios] [--project <PROJECT_ID>] [--class <CLASS>] [--ref <TEXT>] [--verdict <faithful|not-applicable|divergent>] [--summary <TEXT>] [--command-result <TEXT> (with --summary)] [--scenario <SCENARIO_ID> | --all-scenarios] [--run <RUN_ID>] [--surface-ref <PATH_OR_EFFECT>]* [--actor <ACTOR_ID>] [--role <ROLE>] [--session <SESSION_ID>] [--approver <NAME> | --all-scenarios] [--approval-role <human> | --all-scenarios] [--signature-file <FILE> | --all-scenarios] [--approval-at <TIMESTAMP> | --all-scenarios] [--rev <REV>] [--artifact <PATH>]* [--report <FORMAT:PATH>]* [--report-case <NAME> | --all-scenarios]* [--max-artifact-mib <N>] [--override-reason <TEXT>] [--promote | --no-promote] [--input]
|
|
97
97
|
```
|
|
98
98
|
```bash
|
|
99
|
-
canon evidence add --scenario auth.login.01 --class test-run --ref "npm test" --role implementer
|
|
99
|
+
canon evidence add --scenario auth.login.01 --class test-run --ref "npm test" --role implementer --json
|
|
100
100
|
```
|
|
101
101
|
```text
|
|
102
102
|
# Emit exact bytes for external `ssh-keygen -Y sign -n canon-approval-v1`
|
|
103
|
-
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>]*
|
|
103
|
+
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>]*
|
|
104
104
|
```
|
|
105
105
|
```bash
|
|
106
|
-
canon evidence approval-payload --scenario auth.login.01 --project root --approver alice --approval-at 2030-01-01T00:00:00Z
|
|
106
|
+
canon evidence approval-payload --scenario auth.login.01 --project root --approver alice --approval-at 2030-01-01T00:00:00Z --json
|
|
107
107
|
```
|
|
108
108
|
```text
|
|
109
109
|
# Record an external evaluator's re-audit of one scenario (class `audit`; the verdict follows --audit-result; canon never runs the evaluator)
|
|
110
|
-
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]
|
|
110
|
+
usage: 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> (with --summary)] [--run <RUN_ID>] [--actor <ACTOR_ID>] [--role <ROLE>] [--session <SESSION_ID>] [--rev <REV>] [--artifact <PATH>]* [--report <FORMAT:PATH>]* [--report-case <NAME> (with --report)]* [--max-artifact-mib <N>] [--override-reason <TEXT>] [--promote | --no-promote] [--input]
|
|
111
111
|
```
|
|
112
112
|
```bash
|
|
113
|
-
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
|
|
113
|
+
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 --json
|
|
114
114
|
```
|
|
115
115
|
```text
|
|
116
116
|
# Create a fresh .feature file for a new area.surface
|
|
117
|
-
canon feature new <SURFACE> --title <TEXT> [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--project <PROJECT_ID>] [--input]
|
|
117
|
+
usage: canon feature new <SURFACE> --title <TEXT> [--actor <ACTOR_ID>] [--session <SESSION_ID>] [--project <PROJECT_ID>] [--input]
|
|
118
118
|
```
|
|
119
119
|
```bash
|
|
120
|
-
canon feature new billing.invoice --title Invoices
|
|
120
|
+
canon feature new billing.invoice --title Invoices --json
|
|
121
121
|
```
|
|
122
122
|
```text
|
|
123
123
|
# List a change's committed findings at their latest version
|
|
124
|
-
canon finding list --change <CHANGE_ID> [--open] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
|
|
124
|
+
usage: canon finding list --change <CHANGE_ID> [--open] [--limit <N> | --all] [--cursor <CURSOR>] [--fields <FIELDS>]
|
|
125
125
|
```
|
|
126
126
|
```bash
|
|
127
|
-
canon finding list --change add-login
|
|
127
|
+
canon finding list --change add-login --json
|
|
128
128
|
```
|
|
129
129
|
```text
|
|
130
130
|
# Validate a spec/artifact corpus against canon's format
|
|
131
|
-
canon format [<DIR>]
|
|
131
|
+
usage: canon format [<DIR>]
|
|
132
132
|
```
|
|
133
133
|
```bash
|
|
134
|
-
canon format .canon/specs
|
|
134
|
+
canon format .canon/specs --json
|
|
135
135
|
```
|
|
136
136
|
```text
|
|
137
137
|
# Run the coverage/ledger/staleness/trust checks (0 clean, 1 red, 2 usage)
|
|
138
|
-
canon gate check [--release]
|
|
138
|
+
usage: canon gate check [--release]
|
|
139
139
|
```
|
|
140
140
|
```bash
|
|
141
|
-
canon gate check
|
|
141
|
+
canon gate check --json
|
|
142
142
|
```
|
|
143
143
|
```text
|
|
144
144
|
# Promote staged records (evidence, findings, divergences) to the committed ledger
|
|
145
|
-
canon gate promote [--kind <evidence|finding|divergence>] [--dry-run] [--input]
|
|
145
|
+
usage: canon gate promote [--kind <evidence|finding|divergence>] [--dry-run] [--input]
|
|
146
146
|
```
|
|
147
147
|
```bash
|
|
148
|
-
canon gate promote --kind evidence
|
|
148
|
+
canon gate promote --kind evidence --json
|
|
149
149
|
```
|
|
150
150
|
```text
|
|
151
151
|
# Validate each spec root, then materialize scenario index records
|
|
152
|
-
canon inventory sync [--spec-root <DIR>] [--dry-run] [--input]
|
|
152
|
+
usage: canon inventory sync [--spec-root <DIR>] [--dry-run] [--input]
|
|
153
153
|
```
|
|
154
154
|
```bash
|
|
155
|
-
canon inventory sync
|
|
155
|
+
canon inventory sync --json
|
|
156
156
|
```
|
|
157
157
|
```text
|
|
158
158
|
# Read stored records across every storage tier
|
|
159
|
-
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>]
|
|
159
|
+
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>]
|
|
160
160
|
```
|
|
161
161
|
```bash
|
|
162
|
-
canon query --kind evidence
|
|
162
|
+
canon query --kind evidence --json
|
|
163
163
|
```
|
|
164
164
|
```text
|
|
165
165
|
# Fetch role-scoped strategy guidance
|
|
166
|
-
canon retrieve --for-role <ROLE>
|
|
166
|
+
usage: canon retrieve --for-role <ROLE> (--regime <KEY> | --domain <NAME>) [--subject <SUBJECT_ID> (with --domain)] [--limit <N>]
|
|
167
167
|
```
|
|
168
168
|
```bash
|
|
169
|
-
canon retrieve --for-role reviewer --domain dev --limit 20
|
|
169
|
+
canon retrieve --for-role reviewer --domain dev --limit 20 --json
|
|
170
170
|
```
|
|
171
171
|
```text
|
|
172
172
|
# Append a tagged scenario stub to its .feature file (created if missing); many at once with `--input`
|
|
173
|
-
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]
|
|
173
|
+
usage: 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]
|
|
174
174
|
```
|
|
175
175
|
```bash
|
|
176
|
-
canon scenario new auth.login.02 --title "Sign out" --feature .canon/specs/kind=feature/area=auth/login.feature
|
|
176
|
+
canon scenario new auth.login.02 --title "Sign out" --feature .canon/specs/kind=feature/area=auth/login.feature --json
|
|
177
177
|
```
|
|
178
178
|
```text
|
|
179
179
|
# Describe canon's own commands
|
|
180
|
-
canon schema [<PATH>]* [--errors | --error <CODE>]
|
|
180
|
+
usage: canon schema [<PATH>]* [--errors | --error <CODE> | --warning <CODE> | --warnings]
|
|
181
181
|
```
|
|
182
182
|
```bash
|
|
183
|
-
canon schema evidence add
|
|
183
|
+
canon schema evidence add --json
|
|
184
184
|
```
|
|
185
185
|
```text
|
|
186
186
|
# Search records, brief sections and scenario text, with each hit's neighbors in the record graph
|
|
187
|
-
canon search <TEXT> [--kind <change|task|scenario|session|run|event|handoff|review|divergence|trajectory|strategy_item|evidence|subject|finding|brief>]* [--expand <N>] [--limit <N>]
|
|
187
|
+
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>]
|
|
188
188
|
```
|
|
189
189
|
```bash
|
|
190
|
-
canon search timeout --kind finding
|
|
190
|
+
canon search timeout --kind finding --json
|
|
191
191
|
```
|
|
192
192
|
```text
|
|
193
193
|
# Print a guide built into this binary (markdown on stdout); the installed SKILL.md is a stub that points here
|
|
194
|
-
canon skills show <NAME> [--full]
|
|
194
|
+
usage: canon skills show [<NAME>] [--full]
|
|
195
195
|
```
|
|
196
196
|
```bash
|
|
197
|
-
canon skills show canon --full
|
|
197
|
+
canon skills show canon --full --json
|
|
198
198
|
```
|
|
199
199
|
```text
|
|
200
200
|
# Show where this repo stands: subjects by status, their gaps, and the next commands
|
|
201
|
-
canon status [--fields <FIELDS>]
|
|
201
|
+
usage: canon status [--fields <FIELDS>]
|
|
202
202
|
```
|
|
203
203
|
```bash
|
|
204
|
-
canon status
|
|
204
|
+
canon status --json
|
|
205
205
|
```
|
|
206
206
|
```text
|
|
207
207
|
# Flip one task checkbox, gated on real evidence (fails closed)
|
|
208
|
-
canon task done <TASK_ID> [--input]
|
|
208
|
+
usage: canon task done <TASK_ID> [--input]
|
|
209
209
|
```
|
|
210
210
|
```bash
|
|
211
|
-
canon task done add-login#1
|
|
211
|
+
canon task done add-login#1 --json
|
|
212
212
|
```
|
|
213
213
|
```text
|
|
214
214
|
# Follow a finding's review loop in time order: review, finding, fix, re-review, evidence
|
|
215
|
-
canon trace <ID>
|
|
215
|
+
usage: canon trace <ID>
|
|
216
216
|
```
|
|
217
217
|
```bash
|
|
218
|
-
canon trace add-login_1_1
|
|
218
|
+
canon trace add-login_1_1 --json
|
|
219
219
|
```
|
|
220
220
|
<!-- canon:generated commands-implementer end -->
|
|
221
221
|
|
|
@@ -252,8 +252,8 @@ canon evidence add --input '[{"scenario":"auth.login.01","class":"test-run","ref
|
|
|
252
252
|
JSON array: inline, a file or `-` for stdin, one object per scenario whose
|
|
253
253
|
keys are the option names in camelCase plus `operands` (the scenario id);
|
|
254
254
|
every element is validated before the first write, so a bad element
|
|
255
|
-
writes nothing and `error.field` names it (`/
|
|
256
|
-
`canon schema scenario new --json` shows the
|
|
255
|
+
writes nothing and `error.field` names it (`/1/case`).
|
|
256
|
+
`canon schema scenario new --json` shows `input`: the schema of one document and a complete `example`.
|
|
257
257
|
(`scenario new --from` is gone.) When the gate asks for a missing case
|
|
258
258
|
(`require_cases`), add a new scenario; never retag an existing one. Every
|
|
259
259
|
bug fix adds or extends a scenario. Canon indexes added, edited or deleted
|