@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.
Files changed (125) hide show
  1. package/dist/skills/SKILL.src.md +44 -23
  2. package/dist/skills/reference/canon-artifact-ingest.md +6 -3
  3. package/dist/skills/reference/canon-authoring.md +8 -5
  4. package/dist/skills/reference/canon-context.md +8 -5
  5. package/dist/skills/reference/canon-fmt.md +2 -1
  6. package/dist/skills/reference/canon-gate.md +12 -8
  7. package/dist/skills/reference/canon-inventory.md +13 -10
  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-report-dashboard.md +6 -3
  11. package/dist/skills/reference/canon-review.md +2 -2
  12. package/dist/skills/reference/canon-session-ingest.md +12 -6
  13. package/dist/skills/reference/canon-storage.md +48 -16
  14. package/dist/skills/reference/canon-subject.md +27 -18
  15. package/dist/skills/reference/role-implementer.md +58 -58
  16. package/dist/skills/reference/role-orchestrator.md +128 -123
  17. package/dist/skills/reference/role-planner.md +44 -44
  18. package/dist/skills/reference/role-reviewer.md +46 -46
  19. package/man/canon-adapter-authorize.1 +3 -3
  20. package/man/canon-adapter-validate.1 +3 -3
  21. package/man/canon-adapter.1 +3 -3
  22. package/man/canon-artifacts-move.1 +3 -3
  23. package/man/canon-artifacts-store.1 +3 -3
  24. package/man/canon-artifacts-verify.1 +3 -3
  25. package/man/canon-artifacts.1 +3 -3
  26. package/man/canon-brief-approve.1 +3 -3
  27. package/man/canon-brief-check.1 +3 -3
  28. package/man/canon-brief-show.1 +3 -3
  29. package/man/canon-brief.1 +3 -3
  30. package/man/canon-change-new.1 +3 -3
  31. package/man/canon-change.1 +3 -3
  32. package/man/canon-completion.1 +3 -3
  33. package/man/canon-context-pack-add.1 +3 -3
  34. package/man/canon-context-pack-show.1 +3 -3
  35. package/man/canon-context-pack-verify.1 +3 -3
  36. package/man/canon-context-pack.1 +3 -3
  37. package/man/canon-context.1 +4 -4
  38. package/man/canon-dashboard.1 +3 -3
  39. package/man/canon-demo-init.1 +3 -3
  40. package/man/canon-demo-review.1 +3 -3
  41. package/man/canon-demo.1 +3 -3
  42. package/man/canon-dispatch-begin.1 +3 -3
  43. package/man/canon-dispatch-diff.1 +3 -3
  44. package/man/canon-dispatch-end.1 +3 -3
  45. package/man/canon-dispatch.1 +3 -3
  46. package/man/canon-divergence-accept.1 +3 -3
  47. package/man/canon-divergence-add.1 +3 -3
  48. package/man/canon-divergence-defer.1 +3 -3
  49. package/man/canon-divergence-list.1 +6 -6
  50. package/man/canon-divergence-resolve.1 +3 -3
  51. package/man/canon-divergence.1 +3 -3
  52. package/man/canon-evidence-add.1 +3 -3
  53. package/man/canon-evidence-approval-payload.1 +3 -3
  54. package/man/canon-evidence-audit.1 +3 -3
  55. package/man/canon-evidence.1 +3 -3
  56. package/man/canon-export.1 +6 -6
  57. package/man/canon-feature-new.1 +3 -3
  58. package/man/canon-feature.1 +3 -3
  59. package/man/canon-finding-add.1 +4 -4
  60. package/man/canon-finding-close.1 +3 -3
  61. package/man/canon-finding-list.1 +6 -6
  62. package/man/canon-finding.1 +3 -3
  63. package/man/canon-format.1 +3 -3
  64. package/man/canon-gate-check.1 +3 -3
  65. package/man/canon-gate-install-hooks.1 +3 -3
  66. package/man/canon-gate-promote.1 +3 -3
  67. package/man/canon-gate.1 +3 -3
  68. package/man/canon-ingest-plans.1 +3 -3
  69. package/man/canon-ingest-records.1 +3 -3
  70. package/man/canon-ingest-sessions.1 +3 -3
  71. package/man/canon-ingest.1 +3 -3
  72. package/man/canon-init.1 +9 -9
  73. package/man/canon-inventory-sync.1 +3 -3
  74. package/man/canon-inventory.1 +3 -3
  75. package/man/canon-ledger-compact.1 +3 -3
  76. package/man/canon-ledger.1 +3 -3
  77. package/man/canon-migrate.1 +3 -3
  78. package/man/canon-plugin-sync.1 +3 -3
  79. package/man/canon-plugin.1 +3 -3
  80. package/man/canon-policy-approve.1 +3 -3
  81. package/man/canon-policy-show.1 +3 -3
  82. package/man/canon-policy.1 +3 -3
  83. package/man/canon-prompt-add.1 +3 -3
  84. package/man/canon-prompt-show.1 +3 -3
  85. package/man/canon-prompt.1 +3 -3
  86. package/man/canon-purge.1 +3 -3
  87. package/man/canon-query.1 +6 -6
  88. package/man/canon-regime-show.1 +3 -3
  89. package/man/canon-regime.1 +3 -3
  90. package/man/canon-report-build.1 +3 -3
  91. package/man/canon-report-check.1 +3 -3
  92. package/man/canon-report-snapshot.1 +3 -3
  93. package/man/canon-report.1 +3 -3
  94. package/man/canon-retrieve.1 +4 -4
  95. package/man/canon-review-change.1 +3 -3
  96. package/man/canon-review-scenario.1 +3 -3
  97. package/man/canon-review.1 +3 -3
  98. package/man/canon-scenario-new.1 +3 -3
  99. package/man/canon-scenario.1 +3 -3
  100. package/man/canon-schema.1 +14 -6
  101. package/man/canon-search.1 +3 -3
  102. package/man/canon-selftest.1 +3 -3
  103. package/man/canon-skills-check.1 +3 -3
  104. package/man/canon-skills-doctor.1 +3 -3
  105. package/man/canon-skills-install.1 +3 -3
  106. package/man/canon-skills-show.1 +6 -6
  107. package/man/canon-skills.1 +3 -3
  108. package/man/canon-status.1 +4 -4
  109. package/man/canon-strategy-approval-payload.1 +3 -3
  110. package/man/canon-strategy-promote.1 +3 -3
  111. package/man/canon-strategy-rollback.1 +3 -3
  112. package/man/canon-strategy.1 +3 -3
  113. package/man/canon-subject-adopt.1 +3 -3
  114. package/man/canon-subject-move.1 +3 -3
  115. package/man/canon-subject-new.1 +4 -4
  116. package/man/canon-subject-show.1 +3 -3
  117. package/man/canon-subject-unadopt.1 +3 -3
  118. package/man/canon-subject.1 +3 -3
  119. package/man/canon-task-done.1 +3 -3
  120. package/man/canon-task.1 +3 -3
  121. package/man/canon-tier-age.1 +3 -3
  122. package/man/canon-tier.1 +3 -3
  123. package/man/canon-trace.1 +3 -3
  124. package/man/canon.1 +3 -3
  125. 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
- canon context --repo . # record kinds, enum domains, policy requirements
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 an example). Writing an identical subject
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
- canon subject move subject-domain-loop --to shipped # gated — see below
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
- canon ingest plans --repo . # import → change/task rows
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 # link change → subject
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
- canon brief show [<slug>] # state and the next one to three steps; never edits
497
- canon brief check [<slug>] [--json] # findings; exit 0 clean, 2 blockers, 1 error
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
- canon status # subjects by status, their gaps, next commands
571
- canon status --json # the same report, stable shape
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
- canon report build --repo . # renders the "Subjects" panel
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; camelCase and snake_case both match.
29
- 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`).
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>]* [--all-scenarios] [--max-artifact-mib <N>] [--override-reason <TEXT>] [--promote | --no-promote] [--input]
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> [--regime <KEY>] [--domain <NAME>] [--subject <SUBJECT_ID>] [--limit <N>]
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 (`/items/1/case`).
256
- `canon schema scenario new --json` shows the input schema and an example.
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