@journeykit/canon 0.33.0 → 0.34.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 (118) hide show
  1. package/dist/skills/SKILL.src.md +24 -10
  2. package/dist/skills/reference/canon-authoring.md +2 -2
  3. package/dist/skills/reference/canon-context.md +2 -2
  4. package/dist/skills/reference/canon-gate.md +1 -1
  5. package/dist/skills/reference/canon-review.md +1 -1
  6. package/dist/skills/reference/canon-storage.md +5 -3
  7. package/dist/skills/reference/canon-subject.md +1 -1
  8. package/dist/skills/reference/role-implementer.md +33 -33
  9. package/dist/skills/reference/role-orchestrator.md +63 -63
  10. package/dist/skills/reference/role-planner.md +24 -24
  11. package/dist/skills/reference/role-reviewer.md +26 -26
  12. package/man/canon-adapter-authorize.1 +3 -3
  13. package/man/canon-adapter-validate.1 +3 -3
  14. package/man/canon-adapter.1 +3 -3
  15. package/man/canon-artifacts-move.1 +3 -3
  16. package/man/canon-artifacts-store.1 +3 -3
  17. package/man/canon-artifacts-verify.1 +3 -3
  18. package/man/canon-artifacts.1 +3 -3
  19. package/man/canon-brief-approve.1 +3 -3
  20. package/man/canon-brief-check.1 +3 -3
  21. package/man/canon-brief-show.1 +3 -3
  22. package/man/canon-brief.1 +3 -3
  23. package/man/canon-change-new.1 +3 -3
  24. package/man/canon-change.1 +3 -3
  25. package/man/canon-completion.1 +3 -3
  26. package/man/canon-context-pack-add.1 +3 -3
  27. package/man/canon-context-pack-show.1 +3 -3
  28. package/man/canon-context-pack-verify.1 +3 -3
  29. package/man/canon-context-pack.1 +3 -3
  30. package/man/canon-context.1 +4 -4
  31. package/man/canon-dashboard.1 +3 -3
  32. package/man/canon-demo-init.1 +3 -3
  33. package/man/canon-demo-review.1 +3 -3
  34. package/man/canon-demo.1 +3 -3
  35. package/man/canon-dispatch-begin.1 +3 -3
  36. package/man/canon-dispatch-diff.1 +3 -3
  37. package/man/canon-dispatch-end.1 +3 -3
  38. package/man/canon-dispatch.1 +3 -3
  39. package/man/canon-divergence-accept.1 +3 -3
  40. package/man/canon-divergence-add.1 +3 -3
  41. package/man/canon-divergence-defer.1 +3 -3
  42. package/man/canon-divergence-list.1 +6 -6
  43. package/man/canon-divergence-resolve.1 +3 -3
  44. package/man/canon-divergence.1 +3 -3
  45. package/man/canon-evidence-add.1 +3 -3
  46. package/man/canon-evidence-approval-payload.1 +3 -3
  47. package/man/canon-evidence-audit.1 +3 -3
  48. package/man/canon-evidence.1 +3 -3
  49. package/man/canon-export.1 +6 -6
  50. package/man/canon-feature-new.1 +3 -3
  51. package/man/canon-feature.1 +3 -3
  52. package/man/canon-finding-add.1 +4 -4
  53. package/man/canon-finding-close.1 +3 -3
  54. package/man/canon-finding-list.1 +6 -6
  55. package/man/canon-finding.1 +3 -3
  56. package/man/canon-format.1 +3 -3
  57. package/man/canon-gate-check.1 +3 -3
  58. package/man/canon-gate-install-hooks.1 +3 -3
  59. package/man/canon-gate-promote.1 +3 -3
  60. package/man/canon-gate.1 +3 -3
  61. package/man/canon-ingest-plans.1 +3 -3
  62. package/man/canon-ingest-records.1 +3 -3
  63. package/man/canon-ingest-sessions.1 +3 -3
  64. package/man/canon-ingest.1 +3 -3
  65. package/man/canon-init.1 +4 -4
  66. package/man/canon-inventory-sync.1 +3 -3
  67. package/man/canon-inventory.1 +3 -3
  68. package/man/canon-ledger-compact.1 +3 -3
  69. package/man/canon-ledger.1 +3 -3
  70. package/man/canon-migrate.1 +3 -3
  71. package/man/canon-plugin-sync.1 +3 -3
  72. package/man/canon-plugin.1 +3 -3
  73. package/man/canon-policy-approve.1 +3 -3
  74. package/man/canon-policy-show.1 +3 -3
  75. package/man/canon-policy.1 +3 -3
  76. package/man/canon-prompt-add.1 +3 -3
  77. package/man/canon-prompt-show.1 +3 -3
  78. package/man/canon-prompt.1 +3 -3
  79. package/man/canon-purge.1 +3 -3
  80. package/man/canon-query.1 +6 -6
  81. package/man/canon-regime-show.1 +3 -3
  82. package/man/canon-regime.1 +3 -3
  83. package/man/canon-report-build.1 +3 -3
  84. package/man/canon-report-check.1 +3 -3
  85. package/man/canon-report-snapshot.1 +3 -3
  86. package/man/canon-report.1 +3 -3
  87. package/man/canon-retrieve.1 +4 -4
  88. package/man/canon-review-change.1 +3 -3
  89. package/man/canon-review-scenario.1 +3 -3
  90. package/man/canon-review.1 +3 -3
  91. package/man/canon-scenario-new.1 +3 -3
  92. package/man/canon-scenario.1 +3 -3
  93. package/man/canon-schema.1 +14 -6
  94. package/man/canon-search.1 +3 -3
  95. package/man/canon-selftest.1 +3 -3
  96. package/man/canon-skills-check.1 +3 -3
  97. package/man/canon-skills-doctor.1 +3 -3
  98. package/man/canon-skills-install.1 +3 -3
  99. package/man/canon-skills-show.1 +3 -3
  100. package/man/canon-skills.1 +3 -3
  101. package/man/canon-status.1 +4 -4
  102. package/man/canon-strategy-approval-payload.1 +3 -3
  103. package/man/canon-strategy-promote.1 +3 -3
  104. package/man/canon-strategy-rollback.1 +3 -3
  105. package/man/canon-strategy.1 +3 -3
  106. package/man/canon-subject-adopt.1 +3 -3
  107. package/man/canon-subject-move.1 +3 -3
  108. package/man/canon-subject-new.1 +4 -4
  109. package/man/canon-subject-show.1 +3 -3
  110. package/man/canon-subject-unadopt.1 +3 -3
  111. package/man/canon-subject.1 +3 -3
  112. package/man/canon-task-done.1 +3 -3
  113. package/man/canon-task.1 +3 -3
  114. package/man/canon-tier-age.1 +3 -3
  115. package/man/canon-tier.1 +3 -3
  116. package/man/canon-trace.1 +3 -3
  117. package/man/canon.1 +3 -3
  118. package/package.json +4 -4
@@ -210,22 +210,36 @@ A role is guidance, not enforcement: `--role` on `evidence add` and
210
210
  - Your role guide's **Commands** block (`canon skills show role-<role>`) is
211
211
  your complete command set, every option of every leaf included. Run `canon schema <command> --json` only for a
212
212
  command it does not list, or after a `USAGE` refusal (read `error.field`
213
- and `error.expected` first). `canon schema` alone lists every command.
213
+ and `error.expected` first). `canon schema --json` is the tree of every group and command
214
+ with its `effect` and `x-canon.roles` (`--as <role>` lists one role's, and `x-canon.as` names it); `canon schema <group> --json` lists a group's
215
+ commands; `canon schema <command> --json` is one command in full: `options` (each with
216
+ `valueType`, a typed `default`, `possibleValues`, `env`, `flagOnly`), `errors`, `outputs`
217
+ with the JSON Schema of each report in `schemas`, `input` (the schema of one `--input`
218
+ document and a complete `example`) and `examples`. The first line of every `--help`
219
+ points at it.
214
220
  - Pass `--json` and read stdout as one document, nothing on stderr. Success is
215
221
  `{"ok":true,"data":…,"meta":…}`; failure is
216
222
  `{"ok":false,"error":{…},"meta":…}` (a check that fails keeps its report in
217
- `data`). `meta` carries `tool`, `toolVersion`, `contract` (`atip/1`), `schemaVersion`,
223
+ `data`). `meta` carries `tool`, `toolVersion`, `contract` (`atip/1`),
224
+ `contractVersion` (`1.1`), `schemaVersion`,
218
225
  `command`, and when present `next`, `warnings` (`[{code, message}]`) and
219
226
  `page`; a repeated write that changed nothing reports `data.unchanged: true`.
220
- Absent members are omitted, never `null` or `[]`. A paged list puts
227
+ Absent members are omitted, never `null` or `[]` (a value you sent empty comes back as `received: ""`).
228
+ Read the members you know and ignore the ones you do not: a later canon
229
+ adds members, and a value of a closed set you have not seen (a `severity`, an
230
+ `outcome`, a `reason`) is one item to leave out, never a reason to reject the document. A paged list puts
221
231
  `meta.page.nextCursor` on the call's `meta.next` as `--cursor <nextCursor>`;
222
232
  no `nextCursor` means no more.
223
- On failure branch on `error.code`, fix the option `error.field` names
233
+ On failure branch on `error.code`, and on `error.reason` where the code has
234
+ reasons (`INPUT_INVALID` says `NOT_JSON`, `UNKNOWN_KEY`, `STDIN_TTY`, … so you
235
+ know whether to fix the JSON or the shell); fix the option `error.field` names
224
236
  using the `error.expected` values (`field` is an option name, or a JSON
225
237
  pointer such as `/items/2/scenario` into an `--input` document), and
226
- follow `error.hint`: every refusal carries a working invocation. The codes
227
- are stable; `canon schema --errors --json` lists them and
228
- `canon schema --error <CODE>` explains one.
238
+ follow `error.hint`: it is one runnable command line that starts with `canon`, the
239
+ same with `<PLACEHOLDER>`s you fill in, or one sentence. The codes
240
+ are stable; `canon schema --errors --json` lists them with their reasons and
241
+ `canon schema --error <CODE>` explains one. A warning code (`meta.warnings`) is in
242
+ `canon schema --warnings --json`; `canon schema --warning <CODE>` explains one.
229
243
  - **Exit codes:** only 0, 1 and 2 exist: 0 ok; 1 the command ran and its answer
230
244
  is negative or incomplete (a failed check, a violation, `unverifiable` when
231
245
  nothing was examined, a partly failed batch); 2 refused to run (usage,
@@ -244,8 +258,8 @@ A role is guidance, not enforcement: `--role` on `evidence add` and
244
258
  has blockers; the approval step appears only when the brief is clean and
245
259
  unapproved.
246
260
  - Page long lists with `--limit <n>` and `--cursor <nextCursor>` (`--all`
247
- for everything), and project fields with `--fields a,b` (`status`, `export`,
248
- `query`, `finding list`, `divergence list`, `context`).
261
+ for everything); a cursor holds only for the call that issued it, so change nothing but `--limit`, `--all` and `--fields` (`CURSOR_INVALID` with `error.reason` `ARGUMENTS_CHANGED` otherwise). Project fields with `--fields a,b`
262
+ (`status`, `export`, `query`, `finding list`, `divergence list`, `context`): the paths `canon schema <command> --json` lists under `outputs[].fields`, spelled as the answer spells them; `meta.fields` lists what was kept.
249
263
  - `--override-reason <text>` is the only way to proceed past a waivable
250
264
  refusal; it is recorded, echoed in `data.overrides[]` and listed by `status`
251
265
  for the human. There is no `--force`. `brief approve`, `policy approve`,
@@ -267,7 +281,7 @@ before anything is written: an invalid element writes nothing and exits 2,
267
281
  `error.field` pointing at `/items/<i>/<key>`; a write that fails stops there
268
282
  (exit 1, `BATCH_INCOMPLETE`) and re-running the same batch reports the finished elements
269
283
  `unchanged`. A typo in a key is refused (`INPUT_INVALID`, `field` naming the key), never dropped.
270
- `canon schema <command> --json` shows the leaf's input schema and an example.
284
+ `canon schema <command> --json` shows the leaf's `input`: the schema of one document and a complete `example`.
271
285
 
272
286
  ```text
273
287
  canon scenario new --input '[{"operands":["auth.login.01"],"title":"Logs in","case":"happy"},{"operands":["auth.login.02"],"title":"Wrong password","case":"failure"}]'
@@ -111,8 +111,8 @@ Fix it and the next command indexes the files (see `canon-inventory`).
111
111
  Many scenarios at once: `--input` takes inline JSON, a file or `-`. An
112
112
  array (or NDJSON) is a batch, validated whole before anything is written;
113
113
  each element holds `operands` (the scenario tag) and the other options as
114
- camelCase keys. `canon schema scenario new --json` shows the input schema
115
- and an example. There is no `--from`.
114
+ camelCase keys. `canon schema scenario new --json` shows `input`: the schema of one document
115
+ and a complete `example`. There is no `--from`.
116
116
 
117
117
  ```text
118
118
  canon scenario new --input '[{"operands":["checkout.cart.01"],"title":"Adding an item raises the count","subject":"checkout-core","lane":"behavior","case":"happy"},{"operands":["checkout.cart.04"],"title":"Adding an out-of-stock item is refused","subject":"checkout-core","lane":"behavior","case":"failure"}]'
@@ -34,8 +34,8 @@ authored; `canon status` (see `canon-subject`) says where the repo stands
34
34
  and what to run next. `--json` prints the `{ok, data, meta}` envelope: the
35
35
  header adds no field, and `policy.spec_coverage`/`policy.diagnostics`
36
36
  already carry the same fact. `--fields <list>` keeps only the named
37
- top-level fields (`kinds`, `enums`, `policy`, `review`, …); an unknown name is
38
- `USAGE` (exit 2; `field` is `--fields`, `expected` lists the selectable fields).
37
+ top-level fields (`kinds`, `enums`, `policy`, `review`, …), spelled as the report spells them; an unknown name is
38
+ `USAGE` (exit 2; `field` is `--fields`, `expected` lists the selectable fields), and `meta.fields` lists the kept ones.
39
39
 
40
40
  On a repository that still holds 0.27 canon state, `canon context` warns
41
41
  and puts `canon migrate --json` first in `meta.next`: run `canon migrate`
@@ -534,7 +534,7 @@ or `-`; an array (or NDJSON) is a batch, validated element by element before
534
534
  the first write (a refusal writes nothing, exit 2). Keys are the option
535
535
  names in camelCase plus `operands`: one object per scenario, with
536
536
  `scenario`, `class`, `ref` and `role`. `canon schema evidence add --json`
537
- shows the input schema and an example. Each element reports `written`,
537
+ shows `input`: the schema of one document and a complete `example`. Each element reports `written`,
538
538
  `unchanged` or `failed` in `data.items[]`.
539
539
 
540
540
  `--rev <rev>` names the commit the evidence ran against (default `HEAD`).
@@ -121,7 +121,7 @@ Outside git, or in a repository with no commit, the write is refused with
121
121
  Many findings at once: `--input` takes inline JSON, a file or `-`; an array
122
122
  (or NDJSON) is a batch validated before any write. Keys are the option
123
123
  names in camelCase (`change`, `actor`, `resolutionRev`); `canon schema
124
- finding add --json` shows the input schema and an example. An identical
124
+ finding add --json` shows `input`: the schema of one document and a complete `example`. An identical
125
125
  repeat is `unchanged` (`data.unchanged`) and writes nothing; a different
126
126
  finding under an occupied key is `FINDING_SEQ_OCCUPIED`.
127
127
 
@@ -104,10 +104,12 @@ canon query --kind handoff --since 2026-06-01T00:00:00Z
104
104
  canon query --kind trajectory --json
105
105
 
106
106
  # Page a long result and keep only the fields you need; `meta` carries
107
- # `page` = {returned, total, nextCursor}; a present `nextCursor` means more, and
108
- # `meta.next` repeats the call with `--cursor <nextCursor>` (`--all` returns everything).
107
+ # `page` = {returned, total, nextCursor} and `fields` = the paths kept; a present `nextCursor` means more, and
108
+ # `meta.next` repeats the call with `--cursor <nextCursor>` (`--all` returns everything). A cursor is bound to the
109
+ # call that issued it: change only `--limit`, `--all` or `--fields`; any other change is `CURSOR_INVALID`
110
+ # (`error.reason` `ARGUMENTS_CHANGED`). A field path is the record's own key, written as it is.
109
111
  canon query --kind trajectory --json --limit 50 --fields at,kind
110
- canon query --kind trajectory --json --limit 50 --cursor <nextCursor>
112
+ canon query --kind trajectory --json --limit 50 --fields at,kind --cursor <nextCursor>
111
113
  ```
112
114
 
113
115
  ## The ledger is latest-only; the archive holds history
@@ -70,7 +70,7 @@ canon subject new subject-domain-loop \
70
70
  subjects at once: `--input` takes inline JSON, a file or `-`; an array (or
71
71
  NDJSON) is a batch validated before any write, with `operands` holding the
72
72
  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
73
+ new --json` shows `input`: the schema of one document and a complete `example`). Writing an identical subject
74
74
  again is a no-op reported `unchanged` (`data.unchanged`).
75
75
 
76
76
  ### 2. Retrieve subject-scoped strategy memory BEFORE working
@@ -25,7 +25,7 @@ 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.
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
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`).
30
30
 
31
31
  ```text
@@ -33,189 +33,189 @@ In a syntax line `<X>` is a value, `[x]` optional, `a | b` a choice, `(a | b)` e
33
33
  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
40
  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
47
  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
54
  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
61
  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
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]
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
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]
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
82
  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
89
  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
+ 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
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>]*
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
+ 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
117
  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
124
  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
131
  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
138
  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
145
  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
152
  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
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>]
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
+ 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
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]
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
+ 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
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>]
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
194
  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
201
  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
208
  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
215
  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
 
@@ -253,7 +253,7 @@ canon evidence add --input '[{"scenario":"auth.login.01","class":"test-run","ref
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
255
  writes nothing and `error.field` names it (`/items/1/case`).
256
- `canon schema scenario new --json` shows the input schema and an example.
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