@journeykit/canon 0.35.0 → 0.37.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 (121) hide show
  1. package/dist/skills/SKILL.src.md +41 -20
  2. package/dist/skills/reference/canon-authoring.md +3 -2
  3. package/dist/skills/reference/canon-gate.md +29 -14
  4. package/dist/skills/reference/canon-inventory.md +3 -1
  5. package/dist/skills/reference/canon-learn.md +7 -2
  6. package/dist/skills/reference/canon-policy.md +3 -3
  7. package/dist/skills/reference/canon-report-dashboard.md +5 -5
  8. package/dist/skills/reference/canon-review.md +12 -9
  9. package/dist/skills/reference/canon-storage.md +4 -4
  10. package/dist/skills/reference/canon-subject.md +25 -23
  11. package/dist/skills/reference/role-implementer.md +8 -6
  12. package/dist/skills/reference/role-orchestrator.md +22 -21
  13. package/dist/skills/reference/role-planner.md +7 -7
  14. package/dist/skills/reference/role-reviewer.md +8 -8
  15. package/man/canon-adapter-authorize.1 +2 -2
  16. package/man/canon-adapter-validate.1 +2 -2
  17. package/man/canon-adapter.1 +2 -2
  18. package/man/canon-artifacts-move.1 +6 -6
  19. package/man/canon-artifacts-store.1 +2 -2
  20. package/man/canon-artifacts-verify.1 +2 -2
  21. package/man/canon-artifacts.1 +2 -2
  22. package/man/canon-brief-approve.1 +9 -6
  23. package/man/canon-brief-check.1 +2 -2
  24. package/man/canon-brief-show.1 +2 -2
  25. package/man/canon-brief.1 +2 -2
  26. package/man/canon-change-new.1 +2 -2
  27. package/man/canon-change.1 +2 -2
  28. package/man/canon-completion.1 +2 -2
  29. package/man/canon-context-pack-add.1 +2 -2
  30. package/man/canon-context-pack-show.1 +2 -2
  31. package/man/canon-context-pack-verify.1 +2 -2
  32. package/man/canon-context-pack.1 +2 -2
  33. package/man/canon-context.1 +2 -2
  34. package/man/canon-dashboard.1 +2 -2
  35. package/man/canon-demo-init.1 +2 -2
  36. package/man/canon-demo-review.1 +2 -2
  37. package/man/canon-demo.1 +2 -2
  38. package/man/canon-dispatch-begin.1 +2 -2
  39. package/man/canon-dispatch-diff.1 +2 -2
  40. package/man/canon-dispatch-end.1 +2 -2
  41. package/man/canon-dispatch.1 +2 -2
  42. package/man/canon-divergence-accept.1 +3 -3
  43. package/man/canon-divergence-add.1 +4 -4
  44. package/man/canon-divergence-defer.1 +4 -4
  45. package/man/canon-divergence-list.1 +3 -3
  46. package/man/canon-divergence-resolve.1 +3 -3
  47. package/man/canon-divergence.1 +2 -2
  48. package/man/canon-evidence-add.1 +9 -9
  49. package/man/canon-evidence-approval-payload.1 +4 -4
  50. package/man/canon-evidence-audit.1 +7 -7
  51. package/man/canon-evidence.1 +2 -2
  52. package/man/canon-export.1 +4 -4
  53. package/man/canon-feature-new.1 +2 -2
  54. package/man/canon-feature.1 +2 -2
  55. package/man/canon-finding-add.1 +5 -5
  56. package/man/canon-finding-close.1 +4 -6
  57. package/man/canon-finding-list.1 +2 -2
  58. package/man/canon-finding.1 +2 -2
  59. package/man/canon-format.1 +2 -2
  60. package/man/canon-gate-check.1 +2 -2
  61. package/man/canon-gate-install-hooks.1 +2 -2
  62. package/man/canon-gate-promote.1 +2 -2
  63. package/man/canon-gate.1 +2 -2
  64. package/man/canon-ingest-plans.1 +2 -2
  65. package/man/canon-ingest-records.1 +2 -2
  66. package/man/canon-ingest-sessions.1 +2 -2
  67. package/man/canon-ingest.1 +2 -2
  68. package/man/canon-init.1 +5 -4
  69. package/man/canon-inventory-sync.1 +2 -2
  70. package/man/canon-inventory.1 +2 -2
  71. package/man/canon-ledger-compact.1 +5 -5
  72. package/man/canon-ledger.1 +3 -3
  73. package/man/canon-migrate.1 +8 -8
  74. package/man/canon-plugin-sync.1 +2 -2
  75. package/man/canon-plugin.1 +2 -2
  76. package/man/canon-policy-approve.1 +2 -2
  77. package/man/canon-policy-show.1 +2 -2
  78. package/man/canon-policy.1 +2 -2
  79. package/man/canon-prompt-add.1 +2 -2
  80. package/man/canon-prompt-show.1 +2 -2
  81. package/man/canon-prompt.1 +2 -2
  82. package/man/canon-purge.1 +8 -8
  83. package/man/canon-query.1 +3 -3
  84. package/man/canon-regime-show.1 +2 -2
  85. package/man/canon-regime.1 +2 -2
  86. package/man/canon-report-build.1 +2 -2
  87. package/man/canon-report-check.1 +2 -2
  88. package/man/canon-report-snapshot.1 +2 -2
  89. package/man/canon-report.1 +2 -2
  90. package/man/canon-retrieve.1 +2 -2
  91. package/man/canon-review-change.1 +4 -4
  92. package/man/canon-review-scenario.1 +4 -4
  93. package/man/canon-review.1 +2 -2
  94. package/man/canon-scenario-new.1 +2 -2
  95. package/man/canon-scenario.1 +2 -2
  96. package/man/canon-schema.1 +10 -4
  97. package/man/canon-search.1 +2 -2
  98. package/man/canon-selftest.1 +2 -2
  99. package/man/canon-skills-check.1 +3 -3
  100. package/man/canon-skills-doctor.1 +3 -3
  101. package/man/canon-skills-install.1 +3 -3
  102. package/man/canon-skills-show.1 +2 -2
  103. package/man/canon-skills.1 +2 -2
  104. package/man/canon-status.1 +2 -2
  105. package/man/canon-strategy-approval-payload.1 +3 -3
  106. package/man/canon-strategy-promote.1 +2 -2
  107. package/man/canon-strategy-rollback.1 +3 -3
  108. package/man/canon-strategy.1 +2 -2
  109. package/man/canon-subject-adopt.1 +2 -2
  110. package/man/canon-subject-move.1 +2 -2
  111. package/man/canon-subject-new.1 +2 -2
  112. package/man/canon-subject-show.1 +2 -2
  113. package/man/canon-subject-unadopt.1 +3 -3
  114. package/man/canon-subject.1 +2 -2
  115. package/man/canon-task-done.1 +2 -2
  116. package/man/canon-task.1 +2 -2
  117. package/man/canon-tier-age.1 +5 -5
  118. package/man/canon-tier.1 +2 -2
  119. package/man/canon-trace.1 +2 -2
  120. package/man/canon.1 +3 -3
  121. package/package.json +4 -4
@@ -71,7 +71,8 @@ canon subject new subject-domain-loop \
71
71
  subjects at once: `--input` takes inline JSON, a file or `-`; an array (or
72
72
  NDJSON) is a batch validated before any write, with `operands` holding the
73
73
  id and the other keys the option names in camelCase (`canon schema subject
74
- new --json` shows `input`: the schema of one document and a complete `example`). Writing an identical subject
74
+ new --json` shows `input`, its limits and a complete `example`; `canon schema subject new --schemas --json`
75
+ gives `Input`, the schema of one document). Writing an identical subject
75
76
  again is a no-op reported `unchanged` (`data.unchanged`).
76
77
 
77
78
  ### 2. Retrieve subject-scoped strategy memory BEFORE working
@@ -137,7 +138,7 @@ canon subject move subject-domain-loop --to shipped
137
138
 
138
139
  On success the status updates in place; `--json` prints the updated
139
140
  record. On a gate block it prints violations by failure class to stderr,
140
- exits 1, and the record is unchanged.
141
+ exits 2 (the code names the condition: `SUBJECT_APPROVAL_REQUIRED`, `EVIDENCE_STALE`, `LAYOUT_MIGRATION_REQUIRED` or `SUBJECT_INVALID`; several causes are `error.details[]`), and the record is unchanged.
141
142
 
142
143
  **Corpus-wide, the same join:** `canon gate check` with
143
144
  `.canon/policy.yaml`'s opt-in `spec_coverage` section generalizes this
@@ -166,7 +167,7 @@ from shipping, until every evidenced scenario has evidence recorded after
166
167
  the close or the approval; the refusal names the scenarios and the
167
168
  `canon evidence add --all-scenarios` command. Each refusal prints by
168
169
  failure class (`uncovered-cell`), carries a `hint`,
169
- exits 1, and the status stays `verifying`. `retired` is not gated.
170
+ exits 2, and the status stays `verifying`. `retired` is not gated.
170
171
 
171
172
  **The brief (0.16, 0.17, 0.19):** `verifying → shipped` also refuses where a brief
172
173
  exists and is not approved, read exactly as `canon status` reads it (one
@@ -174,7 +175,7 @@ shared check, so status says `ship` only when this passes): the subject's
174
175
  scope (every change the subject answers for, see below) has a canon `.canon/changes/<change>/brief.md`
175
176
  with no `Approved:` line outside HTML comments and code fences, whose
176
177
  `Approved:` line carries a digest the brief's text no longer matches
177
- (`BRIEF_CHANGED_SINCE_APPROVAL`; the brief was edited after the human
178
+ (`BRIEF_APPROVAL_STALE`; the brief was edited after the human
178
179
  answered), or has no canon `brief.md` yet but comes from an external
179
180
  openspec plan with a `proposal.md` under the plan sources. It also
180
181
  refuses while `canon brief check` has blocker findings for that change,
@@ -184,7 +185,7 @@ a policy. The refusal is an `unreviewed-promotion` naming the subject, and
184
185
  says what to do:
185
186
 
186
187
  ```output
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: SUBJECT_INVALID — 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
189
  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
189
190
  ```
190
191
 
@@ -211,7 +212,7 @@ This refusal is a backstop, and so is the evidence one: shipping is not
211
212
  the first thing an unapproved brief stops. The agent writes the brief,
212
213
  runs `canon brief check` until it has no blockers, then shows it to the
213
214
  human and asks, and nothing is built or attested for the subject until the human
214
- answers. `canon evidence add` refuses (exit 1, nothing staged) a
215
+ answers. `canon evidence add` refuses (exit 2, nothing staged) a
215
216
  scenario whose `@subject` owner, or a task whose change
216
217
  an adopting subject, has an enforced, unapproved brief, through the same
217
218
  check; see `canon-gate`.
@@ -223,7 +224,7 @@ check; see `canon-gate`.
223
224
  edited since, and even if the tags were removed; or (3) a *chore*, which has
224
225
  no scenario to tag and so governs from the moment it is adopted. They pass
225
226
  only when every one of them reads as approved now; an unapproved one and one
226
- edited after its approval (`BRIEF_CHANGED_SINCE_APPROVAL`) are named for
227
+ edited after its approval (`BRIEF_APPROVAL_STALE`) are named for
227
228
  different reasons, and the answer does not depend on the order the changes
228
229
  were adopted or approved. The ship guard's brief-structure check runs over
229
230
  all of them. When several block, the hint is one
@@ -245,7 +246,7 @@ answers only to the changes its tags name (counting only changes the subject
245
246
  adopted); another change's edit after its approval never blocks it. An untagged
246
247
  scenario (one whose tags were removed reads the same) answers to every adopted
247
248
  change with an `Approved:` line, a chore included, so an approved change edited
248
- since refuses it (`BRIEF_CHANGED_SINCE_APPROVAL`); an unapproved chore blocks
249
+ since refuses it (`BRIEF_APPROVAL_STALE`); an unapproved chore blocks
249
250
  reopen and ship, never evidence. When no adopted change has an approved line,
250
251
  a scenario with evidence recorded before the subject first adopted a change
251
252
  (and without a brief override) needs no brief, and one without answers to the
@@ -270,7 +271,7 @@ A target outside `require_review.scope` prints `skipped
270
271
  unreviewed-promotion — `specced` is not in require_review.scope`. A
271
272
  transition INTO an in-scope status with gaps — an owned scenario with no
272
273
  qualifying review (`unreviewed-promotion`), or an open blocker finding
273
- on an adopted change (`open-blocker`) — prints the violations, exits 1,
274
+ on an adopted change (`open-blocker`) — prints the violations, exits 2,
274
275
  leaves the record unchanged, and names `--override-reason`. `shipped`
275
276
  also refuses a `false-success` (a scenario whose latest audit is
276
277
  `refuted`) and, when `require_audit.scope` covers `shipped`, an owed
@@ -332,14 +333,14 @@ output: canon subject move: demo-subject → verifying — written directly; not
332
333
  - Inside the approved scope it needs no human: every change the subject
333
334
  answers for (tagged, approved or chore) has an approved brief, or there
334
335
  is no brief to answer.
335
- Otherwise it refuses, exit 1, naming the brief to approve, and
336
+ Otherwise it refuses, exit 2, naming the brief to approve, and
336
337
  `--override-reason` does not waive it:
337
338
  ``unreviewed-promotion demo-subject — shipped → verifying: reopening needs the approved scope, and the brief is not approved — .canon/changes/c-next/brief.md has no `Approved:` line; …``.
338
339
  - The review guard does not run on a reopen (it prints `skipped … — a
339
340
  reopen moves the subject back to fix its gaps; shipping again runs
340
341
  it`). `verifying → shipped` afterwards runs every guard above again.
341
- - A policy that fails closed (`POLICY_CHANGED_SINCE_APPROVAL`,
342
- `POLICY_APPROVAL_UNREADABLE`: see `canon-policy`) refuses the reopen and
342
+ - A policy that fails closed (`POLICY_APPROVAL_STALE`,
343
+ `POLICY_APPROVAL_CORRUPT`, `POLICY_APPROVAL_DENIED`: see `canon-policy`) refuses the reopen and
343
344
  the ship, and `--override-reason` does not waive it.
344
345
  - `canon change new` on a shipped subject prints the reopen command
345
346
  (`canon subject move <id> --to verifying --reason "<why it reopens>"`)
@@ -422,7 +423,7 @@ canon subject unadopt <S> --change <change> --json
422
423
 
423
424
  Removes the link on both records and keeps the change and its brief, so the
424
425
  draft can be adopted elsewhere (a `proposed` holding subject, say) while the
425
- live subject keeps shipping. It is refused with `SUBJECT_UNADOPT_REFUSED`
426
+ live subject keeps shipping. It is refused with `SUBJECT_CONFLICT` (reason `APPROVED_BRIEF` or `FLOW_TAGGED`)
426
427
  for a change whose brief carries an `Approved:` line, and while a scenario
427
428
  the subject owns carries a `@flow:<change>.*` tag (it would fall back to an
428
429
  older approval; remove or retag those scenarios first, the hint names them);
@@ -509,12 +510,12 @@ same answer and one timestamp on every brief and on the policy approval
509
510
  (0.31). Every slug is checked before anything is written (a brief that
510
511
  exists and reads, no blocker, a one-line name and answer, a body that does not
511
512
  end inside an open code fence); one refused slug refuses the call, exit 2
512
- `BRIEF_APPROVE_REFUSED` naming each refused slug with its own code, and
513
- nothing is written. A repeated slug counts once. With one slug the output is as
513
+ with the first refused slug's own code (`BRIEF_INVALID`, `BRIEF_NOT_FOUND`) and an
514
+ `error.details` entry for each refused slug, and nothing is written. A repeated slug counts once. With one slug the output is as
514
515
  before; with several, `--json` carries one entry per slug (`written`,
515
516
  `unchanged`, `failed`, `skipped`). A disk error while writing exits 1 and
516
517
  leaves the slugs already written approved. The call is human-only for every
517
- slug; the `HUMAN_ONLY` hint gives the human one line with all the slugs.
518
+ slug; the `ACTOR_DENIED` hint gives the human one line with all the slugs.
518
519
 
519
520
  Without the change operand, the repo's only live change is read. The brief is the
520
521
  PRD `canon change new` writes; sections are found by their English `##`
@@ -524,7 +525,7 @@ before. A brief with `<!-- canon:… -->` comments or Korean headings is in the
524
525
  0.30 format: `brief check` gives it one blocker (`brief.old-format`) and
525
526
  `canon migrate` rewrites it; `status`, `gate check`, `context` and `brief show`
526
527
  warn, and a command that writes and judges it is refused
527
- (`OLD_BRIEF_FORMAT`).
528
+ (`BRIEF_MIGRATION_REQUIRED`).
528
529
 
529
530
  - **Blockers (structure, `brief.*`)**: a missing, duplicated or
530
531
  out-of-order section; a flow with no steps or a duplicate step id;
@@ -546,10 +547,11 @@ warn, and a command that writes and judges it is refused
546
547
  `reason`), one rule in one section, reason required; add `match` to waive
547
548
  only the findings whose matched text contains it. Listed in the output.
548
549
  - **`approve`** records the human's answer: it writes
549
- `Approved: <who> <when> — "<words>" (brief sha256:<digest>)` into the
550
- brief and records the policy approval in the same call. It refuses
550
+ `Approved: <who> <when> — "<words>" (code tree <id>) (brief sha256:<digest>)`
551
+ into the brief (the code tree, 0.37, is the work tree's as it is now and is
552
+ left out outside git or with no commit) and records the policy approval in the same call. It refuses
551
553
  (exit 2) while the check has structure blockers. Edit the brief
552
- afterwards and every reader says `BRIEF_CHANGED_SINCE_APPROVAL` until a
554
+ afterwards and every reader says `BRIEF_APPROVAL_STALE` until a
553
555
  human answers again and `approve` runs again. Run it only from the
554
556
  human's answer, with their words as `--note`.
555
557
 
@@ -616,10 +618,10 @@ uses, so status and the gate cannot disagree about a gap:
616
618
  something after it, and sits outside HTML comments (`<!-- … -->`,
617
619
  multi-line included) and fenced code blocks (```` ``` ```` or `~~~`).
618
620
  `canon brief approve` writes it from the human's answer, as
619
- `Approved: <who> <when> — "<the human's words>" (brief sha256:<digest>)`,
620
- the digest covering the brief without its `Approved:` lines. A brief
621
+ `Approved: <who> <when> — "<the human's words>" (code tree <id>) (brief sha256:<digest>)`,
622
+ the digest covering the brief without its `Approved:` lines (the tree marker is outside it; a line without one is read as before). A brief
621
623
  edited after that reads `brief: not approved (<brief> changed after its
622
- approval (BRIEF_CHANGED_SINCE_APPROVAL))` and names the re-approval
624
+ approval (BRIEF_APPROVAL_STALE))` and names the re-approval
623
625
  command: the changed brief needs a new human answer. A line with no
624
626
  digest (written before 0.19) stays approved, with an `advisory:` to
625
627
  re-approve so it binds to the text. Fixes and follow-ups
@@ -10,7 +10,7 @@ build nothing meanwhile. The only waiver is `--override-reason
10
10
  the human's answer: canon records it on the evidence, echoes it in
11
11
  `data.overrides[]` and lists it in `status` for the human. Never use it to
12
12
  skip the wait yourself. `brief approve`, `policy approve` and `divergence
13
- accept` are the human's; they refuse you (`HUMAN_ONLY`) unless they record an
13
+ accept` are the human's; they refuse you (`ACTOR_DENIED`) unless they record an
14
14
  answer the human gave in the conversation (`--relayed-via`, the planner's
15
15
  procedure: `canon skills show role-planner`). You never run them without that
16
16
  answer, and never remove or unset your role (`env -u CANON_ROLE`, dropping
@@ -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 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.
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; none is the key left out, `[]` is refused), and `operands` holds the operands. `--fields <FIELDS>` is a comma list of the paths `canon schema <COMMAND> --json` declares under `outputs[].fields.paths`; a path is the record's own key, spelled as the answer spells it.
29
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
@@ -177,7 +177,7 @@ canon scenario new auth.login.02 --title "Sign out" --feature .canon/specs/kind=
177
177
  ```
178
178
  ```text
179
179
  # Describe canon's own commands
180
- usage: canon schema [<PATH>]* [--errors | --error <CODE> | --warning <CODE> | --warnings]
180
+ usage: canon schema [<PATH>]* [--schemas | --error <CODE> | --errors | --warning <CODE> | --warnings]
181
181
  ```
182
182
  ```bash
183
183
  canon schema evidence add --json
@@ -224,7 +224,7 @@ After the first `status`, follow `meta.next` of each write; do not call
224
224
  the commit it is about from `--rev` (default `HEAD`, any git revision). You
225
225
  need not commit first: code that is not committed yet is recorded with its
226
226
  `codeTree` and `worktreeDirty: true`, never refused. Outside git, or in a
227
- repo with no commits, a write that needs a commit refuses `NO_COMMIT`.
227
+ repo with no commits, a write that needs a commit refuses `COMMIT_REQUIRED`.
228
228
 
229
229
  The forms you reach for most (the story's ids; swap in yours):
230
230
 
@@ -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 (`/1/case`).
256
- `canon schema scenario new --json` shows `input`: the schema of one document and a complete `example`.
256
+ `canon schema scenario new --json` shows `input` (its limits and a complete `example`); `canon schema scenario new --schemas --json` gives `Input`, the schema of one document.
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
@@ -342,7 +342,9 @@ canon evidence add --input '[{"scenario":"auth.login.01","class":"test-run","ref
342
342
  latest evidence was recorded on a different `codeTree` than the current
343
343
  code (`code.exclude` in `canon.yaml` decides what is not code; the default
344
344
  is `docs/**` and `*.md`). A docs-only chore needs its change-level review
345
- alone. When code did change, the shipping refusal, `status` and
345
+ alone, and so does a chore whose approval recorded the code tree that is
346
+ still the current one (`(code tree <id>)` in its `Approved:` line; `status`
347
+ says so): it asks for no evidence at all. When code did change, the shipping refusal, `status` and
346
348
  `meta.next` lead with one command over every report, with the real paths
347
349
  (`--project <id>` is added only with several spec roots):
348
350
  `canon evidence add --all-scenarios --report junit:a.xml --report junit:b.xml --role implementer`.
@@ -4,7 +4,7 @@ You run the loop across agents and move the subject. You write no brief,
4
4
  code or review yourself. Declare the role with `CANON_ROLE=orchestrator` (or
5
5
  `--as orchestrator`); your `canon status` also lists the human's steps. The
6
6
  human's acts (`brief approve`, `policy approve`, `divergence accept`) refuse
7
- every agent role, you included (`HUMAN_ONLY`), unless you record the answer the
7
+ every agent role, you included (`ACTOR_DENIED`), unless you record the answer the
8
8
  human gave you in the conversation with `--relayed-via <tool>` (below). You never
9
9
  run them without that answer, and never remove or unset your role (`env -u CANON_ROLE`,
10
10
  dropping `--as`) to get past the refusal.
@@ -18,7 +18,7 @@ in your ids. Use only the options on a line; never guess one. Ask `canon schema
18
18
  <command> --json` only for a leaf this block does not list, or after a `USAGE` refusal.
19
19
 
20
20
  <!-- canon:generated commands-orchestrator begin -->
21
- Every leaf takes `--as <ROLE>` and `--json`; `--repo <DIR>` too, except `completion`, `regime show`, `schema`, `selftest`, `skills show`. `--input <JSON|FILE|->` runs a leaf from one JSON document (an array is a batch) and is only on the lines ending `[--input]`. Its document keys are the option names in camelCase, singular even when the option repeats (the value is then an array), and `operands` holds the operands. `--fields <FIELDS>` is a comma list of the paths `canon schema <COMMAND> --json` declares under `outputs[].fields.paths`; a path is the record's own key, spelled as the answer spells it.
21
+ Every leaf takes `--as <ROLE>` and `--json`; `--repo <DIR>` too, except `completion`, `regime show`, `schema`, `selftest`, `skills show`. `--input <JSON|FILE|->` runs a leaf from one JSON document (an array is a batch) and is only on the lines ending `[--input]`. Its document keys are the option names in camelCase, singular even when the option repeats (the value is then an array; none is the key left out, `[]` is refused), and `operands` holds the operands. `--fields <FIELDS>` is a comma list of the paths `canon schema <COMMAND> --json` declares under `outputs[].fields.paths`; a path is the record's own key, spelled as the answer spells it.
22
22
  A `usage:` line shows the syntax and is not itself a command to run (the runnable example under it is): `<X>` is a value, `[x]` optional, `a | b` a choice, `(a | b)` exactly one is required, `[--x <V>]*` may repeat, `<X>+` is one or more, `[--a --b <V>]` go together. An option that is not on the line does not exist: it is refused (`USAGE`).
23
23
 
24
24
  ```text
@@ -37,8 +37,8 @@ canon adapter validate --response adapter-response.json --json
37
37
  ```
38
38
  ```text
39
39
  # Move the local artifact blobs to an object-store tier, verify them, and remove the local copies
40
- usage: canon artifacts move --tier <TIER> [--commit --plan-digest <DIGEST>] [--input]
41
- # a bare run previews and prints planDigest; `--commit --plan-digest <DIGEST>` with that digest acts
40
+ usage: canon artifacts move --tier <TIER> [--commit --plan-digest <PLAN_DIGEST>] [--input]
41
+ # a bare run previews and prints planDigest; `--commit --plan-digest <PLAN_DIGEST>` with that digest acts
42
42
  ```
43
43
  ```bash
44
44
  canon artifacts move --tier cold --json
@@ -220,16 +220,16 @@ canon inventory sync --json
220
220
  ```
221
221
  ```text
222
222
  # Move superseded versions of every record out of the ledger into the archive
223
- usage: canon ledger compact [--commit --plan-digest <DIGEST>] [--input]
224
- # a bare run previews and prints planDigest; `--commit --plan-digest <DIGEST>` with that digest acts
223
+ usage: canon ledger compact [--commit --plan-digest <PLAN_DIGEST>] [--input]
224
+ # a bare run previews and prints planDigest; `--commit --plan-digest <PLAN_DIGEST>` with that digest acts
225
225
  ```
226
226
  ```bash
227
227
  canon ledger compact --json
228
228
  ```
229
229
  ```text
230
230
  # Bring a repo from an earlier canon up to date
231
- usage: canon migrate [--commit --plan-digest <DIGEST>] [--revert | --relayed-via <NAME>] [--backup <DIR> (with --revert)] [--actor <ACTOR_ID> (with --relayed-via)] [--approver <NAME> (with --relayed-via)] [--note <TEXT> (with --relayed-via)] [--input]
232
- # a bare run previews and prints planDigest; `--commit --plan-digest <DIGEST>` with that digest acts
231
+ usage: canon migrate [--commit --plan-digest <PLAN_DIGEST>] [--revert | --relayed-via <NAME>] [--backup <DIR> (with --revert)] [--actor <ACTOR_ID> (with --relayed-via)] [--approver <NAME> (with --relayed-via)] [--note <TEXT> (with --relayed-via)] [--input]
232
+ # a bare run previews and prints planDigest; `--commit --plan-digest <PLAN_DIGEST>` with that digest acts
233
233
  ```
234
234
  ```bash
235
235
  canon migrate --json
@@ -264,8 +264,8 @@ canon prompt show reviewer@v1 --json
264
264
  ```
265
265
  ```text
266
266
  # Remove allowlisted records older than a cutoff
267
- usage: canon purge --kind <session|run|event|trajectory> --before <TIMESTAMP> [--commit --plan-digest <DIGEST>] [--input]
268
- # a bare run previews and prints planDigest; `--commit --plan-digest <DIGEST>` with that digest acts
267
+ usage: canon purge --kind <session|run|event|trajectory> --before <TIMESTAMP> [--commit --plan-digest <PLAN_DIGEST>] [--input]
268
+ # a bare run previews and prints planDigest; `--commit --plan-digest <PLAN_DIGEST>` with that digest acts
269
269
  ```
270
270
  ```bash
271
271
  canon purge --kind session --before 2020-01-01T00:00:00Z --json
@@ -314,7 +314,7 @@ canon retrieve --for-role reviewer --domain dev --limit 20 --json
314
314
  ```
315
315
  ```text
316
316
  # Describe canon's own commands
317
- usage: canon schema [<PATH>]* [--errors | --error <CODE> | --warning <CODE> | --warnings]
317
+ usage: canon schema [<PATH>]* [--schemas | --error <CODE> | --errors | --warning <CODE> | --warnings]
318
318
  ```
319
319
  ```bash
320
320
  canon schema evidence add --json
@@ -426,8 +426,8 @@ canon subject unadopt demo --change add-login --json
426
426
  ```
427
427
  ```text
428
428
  # Apply canon.yaml aging rules, moving old records to their destination tier
429
- usage: canon tier age [--commit --plan-digest <DIGEST>] [--input]
430
- # a bare run previews and prints planDigest; `--commit --plan-digest <DIGEST>` with that digest acts
429
+ usage: canon tier age [--commit --plan-digest <PLAN_DIGEST>] [--input]
430
+ # a bare run previews and prints planDigest; `--commit --plan-digest <PLAN_DIGEST>` with that digest acts
431
431
  ```
432
432
  ```bash
433
433
  canon tier age --json
@@ -527,16 +527,16 @@ Approve or fill the form. On their approval record it: `canon brief approve
527
527
  <ask|AskUserQuestion|chat> --actor <your actor id> --digest <slug>=<the digest
528
528
  shown>` (several slugs take one answer, each with its own `--digest`; nothing is written
529
529
  if one is refused). The record says you recorded it, with your role, actor and
530
- tool. `RELAY_DIGEST_MISMATCH` means the brief changed after they saw it: show it
530
+ tool. `RELAY_DIGEST_STALE` means the brief changed after they saw it: show it
531
531
  again. When `canon.yaml` has `approval: { relay: deny }` the call is refused
532
- (`HUMAN_ONLY`, naming the key): report the human's own call and wait for them to
532
+ (`ACTOR_DENIED`, naming the key): report the human's own call and wait for them to
533
533
  run it. Removing or unsetting your declared role (`env -u CANON_ROLE`,
534
534
  dropping `--as`) to get past a refusal is the same act under another label.
535
535
  `canon skills show role-planner` has the full procedure. Do not start the
536
536
  implementer before `canon brief show <slug>` reports `state: approved`.
537
537
  Never approve it yourself and never edit the policy to pass the gate. A
538
538
  policy that no longer matches the approval fails closed
539
- (`POLICY_CHANGED_SINCE_APPROVAL`, or `POLICY_APPROVAL_UNREADABLE`): the ship
539
+ (`POLICY_APPROVAL_STALE`, or `POLICY_APPROVAL_CORRUPT`): the ship
540
540
  guard and the reopen refuse, and `--override-reason` does not waive it. Run
541
541
  `canon policy show`, then show the policy to the human, ask them to re-approve
542
542
  and record their explicit answer (`canon policy approve --approver <their name>
@@ -576,7 +576,7 @@ its preview, never from an old digest.
576
576
 
577
577
  | The thought | The reality |
578
578
  |---|---|
579
- | "Edit the policy so the gate passes." | A changed policy fails closed (`POLICY_CHANGED_SINCE_APPROVAL`); ask the human to re-approve or restore it from git. |
579
+ | "Edit the policy so the gate passes." | A changed policy fails closed (`POLICY_APPROVAL_STALE`); ask the human to re-approve or restore it from git. |
580
580
  | "The reviewer can be me under another label." | The reviewer is a separate process with its own real session id (#39). |
581
581
  | "Approve the brief; the human said they are busy." | An answer they did not give is not recorded. Show the brief, ask, and record only an explicit approval with `--relayed-via`. |
582
582
  | "Override the refusal to ship." | Fix the gap the refusal names; `--override-reason` waives only the `require_review` gaps and the brief gap, is recorded on the subject, and is for the human's call, not a shortcut. |
@@ -591,7 +591,8 @@ directly (a transition is a state change, not a destructive act) and is not
591
591
  repeatable: a move to the state the subject is already in is refused
592
592
  (exit 2), so after a lost response read `subject show` before you retry.
593
593
  It refuses a move the policy does not allow (missing evidence or reviews,
594
- open blockers, an unapproved brief) with `SUBJECT_GATE_VIOLATION` and exit 1,
594
+ open blockers, an unapproved brief) with exit 2 and the code of the condition
595
+ (`SUBJECT_APPROVAL_REQUIRED` for a missing review, evidence or approval, `EVIDENCE_STALE`, `SUBJECT_INVALID` for the rest; several causes are `error.details[]`),
595
596
  the record unchanged; fix the gap rather than overriding. Move to `shipped`
596
597
  yourself once its guard passes, unless the brief says the human ships. A
597
598
  follow-up on a shipped subject goes back to `verifying` with `--reason`,
@@ -614,7 +615,7 @@ red. A bad `--to` fails with `error.field` `--to` and `error.expected`
614
615
  listing the states.
615
616
 
616
617
  **Done when:** `canon subject show demo` (the subject's id) reports the
617
- state you moved it to and `canon gate check` is clean; when the move exits 1,
618
+ state you moved it to and `canon gate check` is clean; when the move exits 2,
618
619
  read the refusal in `error` of `canon subject move demo --to shipped --json`.
619
620
 
620
621
  ## Destructive commands preview first
@@ -629,7 +630,7 @@ digits, over the effects and what the plan read, so a file or record the plan
629
630
  read that changed since is `PLAN_STALE` too, and `meta.next[0]` is the preview
630
631
  to run again. A commit holds the repository write lock for its whole run:
631
632
  another command that writes waits for it, and one that waited 30 seconds
632
- answers `REPO_WRITE_BUSY` (exit 2, retryable): run it again. A document passed
633
+ answers `REPO_LOCK_UNAVAILABLE` (exit 2, retryable): run it again. A document passed
633
634
  with `--input` never carries `--commit` or `--plan-digest`, and these five
634
635
  leaves take one object only (`INPUT_INVALID`).
635
636
 
@@ -675,7 +676,7 @@ canon skills install
675
676
  moves: commit first. In CI run it with full history (`fetch-depth: 0`).
676
677
  3. `canon skills install` refreshes the stub and the scripts for the selected
677
678
  harnesses; `canon skills check` reports a skill written by another canon
678
- version (exit 1, `SKILLS_DRIFT`), `canon skills doctor` explains it.
679
+ version (exit 1, `SKILLS_CHECK_FAILED`), `canon skills doctor` explains it.
679
680
 
680
681
  Commit what it changes, except the backup: `.canon/migrate-backup/` is local and
681
682
  git-ignored, and `canon migrate --revert` needs it (keep it until you are sure).
@@ -6,7 +6,7 @@ brief the human answers once. You build nothing. Declare the role with
6
6
  then show your steps and count the rest under `waitingOn`. The approvals are
7
7
  the human's: `brief approve`, `policy approve`, `divergence accept` and the
8
8
  `migrate --commit` that re-binds `Approved:` lines refuse every agent role
9
- (`HUMAN_ONLY`, `retryable: false`) unless you record the answer the human gave
9
+ (`ACTOR_DENIED`, `retryable: false`) unless you record the answer the human gave
10
10
  you in the conversation, with `--relayed-via <tool>` (step 4). Without a human's
11
11
  explicit answer you never run them, and you never remove or unset your role
12
12
  (`env -u CANON_ROLE`, dropping `--as`) to get past the refusal.
@@ -20,7 +20,7 @@ in your ids. Use only the options on a line; never guess one. Ask `canon schema
20
20
  <command> --json` only for a leaf this block does not list, or after a `USAGE` refusal.
21
21
 
22
22
  <!-- canon:generated commands-planner begin -->
23
- 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.
23
+ 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; none is the key left out, `[]` is refused), and `operands` holds the operands. `--fields <FIELDS>` is a comma list of the paths `canon schema <COMMAND> --json` declares under `outputs[].fields.paths`; a path is the record's own key, spelled as the answer spells it.
24
24
  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`).
25
25
 
26
26
  ```text
@@ -116,7 +116,7 @@ canon scenario new auth.login.02 --title "Sign out" --feature .canon/specs/kind=
116
116
  ```
117
117
  ```text
118
118
  # Describe canon's own commands
119
- usage: canon schema [<PATH>]* [--errors | --error <CODE> | --warning <CODE> | --warnings]
119
+ usage: canon schema [<PATH>]* [--schemas | --error <CODE> | --errors | --warning <CODE> | --warnings]
120
120
  ```
121
121
  ```bash
122
122
  canon schema evidence add --json
@@ -183,7 +183,7 @@ lists N blockers`); then, while prose advisories remain, to the polish pass
183
183
  (`polish the brief in <path> (canon skills show brief-polish), then run canon
184
184
  brief check <slug>`, with the advisory count and the top rule
185
185
  ids); the human step comes after it. A policy that no longer matches its approval fails closed
186
- (`POLICY_CHANGED_SINCE_APPROVAL`): never edit it; the human re-approves.
186
+ (`POLICY_APPROVAL_STALE`): never edit it; the human re-approves.
187
187
 
188
188
  ## Steps
189
189
 
@@ -286,9 +286,9 @@ ids); the human step comes after it. A policy that no longer matches its approva
286
286
  show` and the dashboard name it. Never approve in their name without their
287
287
  answer, never write the answer for them, and never edit the policy to make
288
288
  the gate pass. A digest that differs from the brief now
289
- (`RELAY_DIGEST_MISMATCH`) means the brief changed after they saw it: show
289
+ (`RELAY_DIGEST_STALE`) means the brief changed after they saw it: show
290
290
  it again and ask again; nothing was written. Without `--relayed-via` the call is
291
- `HUMAN_ONLY`; with it and no role declared, `USAGE`. When `canon.yaml`
291
+ `ACTOR_DENIED`; with it and no role declared, `USAGE`. When `canon.yaml`
292
292
  turns relaying off (`approval: { relay: deny }`), the refusal names that key:
293
293
  report the human's call (`canon brief approve add-login --approver <their
294
294
  name> --note "<their own words>"`) and wait for them to run it. Never
@@ -300,7 +300,7 @@ ids); the human step comes after it. A policy that no longer matches its approva
300
300
  evidence with its reason and tracking reference, the migrate plan), ask,
301
301
  count only an explicit approval, then record with the relay option.
302
302
  `canon brief show <slug>` then reports `state: approved`. A brief edited
303
- after its approval is not approved (`BRIEF_CHANGED_SINCE_APPROVAL`): it
303
+ after its approval is not approved (`BRIEF_APPROVAL_STALE`): it
304
304
  needs a new answer, shown and asked again, and a new `brief approve`. A follow-up that
305
305
  adds or changes a step of the brief is a scope change and needs a new
306
306
  answer.
@@ -3,7 +3,7 @@
3
3
  You are the independent second look. Declare the role with
4
4
  `CANON_ROLE=reviewer` (or `--as reviewer`); `--role` on `review scenario`,
5
5
  `review change` and `finding add` then defaults to `reviewer`. The human's
6
- acts refuse you (`HUMAN_ONLY`): `brief approve`, `policy approve` and
6
+ acts refuse you (`ACTOR_DENIED`): `brief approve`, `policy approve` and
7
7
  `divergence accept`, unless you record the answer the human gave you in the
8
8
  conversation with `--relayed-via <tool>` (the divergence acceptance below).
9
9
  Name what the human has to decide; never look for another flag that grants it.
@@ -19,7 +19,7 @@ in your ids. Use only the options on a line; never guess one. Ask `canon schema
19
19
  <command> --json` only for a leaf this block does not list, or after a `USAGE` refusal.
20
20
 
21
21
  <!-- canon:generated commands-reviewer begin -->
22
- 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.
22
+ 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; none is the key left out, `[]` is refused), and `operands` holds the operands. `--fields <FIELDS>` is a comma list of the paths `canon schema <COMMAND> --json` declares under `outputs[].fields.paths`; a path is the record's own key, spelled as the answer spells it.
23
23
  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`).
24
24
 
25
25
  ```text
@@ -87,7 +87,7 @@ canon finding add --change add-login --round 1 --seq 2 --severity should-fix --i
87
87
  ```
88
88
  ```text
89
89
  # Move an already-committed finding's disposition
90
- usage: canon finding close <CHANGE_ID> --round <N> --seq <N> --disposition <open|fixed|rejected|deferred> [--resolution-rev <REV>] [--reason <TEXT>] [--actor <ACTOR_ID>] [--role <ROLE>] [--session <SESSION_ID>] [--promote | --no-promote] [--input]
90
+ usage: canon finding close <CHANGE_ID> --round <N> --seq <N> --disposition <fixed|rejected|deferred> [--resolution-rev <REV>] [--reason <TEXT>] [--actor <ACTOR_ID>] [--role <ROLE>] [--session <SESSION_ID>] [--promote | --no-promote] [--input]
91
91
  ```
92
92
  ```bash
93
93
  canon finding close add-login --round 1 --seq 1 --disposition rejected --reason "works as designed" --json
@@ -143,7 +143,7 @@ canon review scenario auth.login.01 --actor alice --role reviewer --original-spe
143
143
  ```
144
144
  ```text
145
145
  # Describe canon's own commands
146
- usage: canon schema [<PATH>]* [--errors | --error <CODE> | --warning <CODE> | --warnings]
146
+ usage: canon schema [<PATH>]* [--schemas | --error <CODE> | --errors | --warning <CODE> | --warnings]
147
147
  ```
148
148
  ```bash
149
149
  canon schema evidence add --json
@@ -288,7 +288,7 @@ sign.
288
288
  `divergence accept` is for a scenario whose honest evidence is `divergent`
289
289
  and whose gap is limited by something outside this change (an upstream
290
290
  limit, a platform bug) and is tracked there. It records a human's decision,
291
- so it refuses every agent role (`HUMAN_ONLY`), you included, unless it records
291
+ so it refuses every agent role (`ACTOR_DENIED`), you included, unless it records
292
292
  the answer the human gave you. What you do: confirm the evidence really is
293
293
  divergent and the limit is outside this change, then put to the human the
294
294
  scenario ids, the reason, the tracking reference and an expiry when the limit
@@ -297,11 +297,11 @@ Ask with the harness question tool (`ask` in omp, `AskUserQuestion` in Claude
297
297
  Code, otherwise in the chat): accept the gap, or not. Only an explicit
298
298
  approval counts; a question or a condition is not one, and no answer records
299
299
  nothing. Then record it from a session that did not attest the evidence
300
- (`DIVERGENCE_ACCEPT_REFUSED` otherwise): `canon divergence accept <ids> --actor
300
+ (`DIVERGENCE_DENIED` otherwise): `canon divergence accept <ids> --actor
301
301
  <your actor id> --reason "<why>" --tracking <ref> --approver <their name> --note
302
302
  "<their answer>" --relayed-via <tool>`; the record carries the relay, the
303
303
  approver and their answer. When `canon.yaml` has `approval: { relay: deny }` the
304
- call is refused (`HUMAN_ONLY`, naming the key) and the human runs it themselves.
304
+ call is refused (`ACTOR_DENIED`, naming the key) and the human runs it themselves.
305
305
  You never unset your role to run it. Never suggest it to skip
306
306
  a fix the implementer can make in this change. The acceptance pins that
307
307
  evidence: new evidence for the scenario, or its expiry, ends it, and the
@@ -358,7 +358,7 @@ implementer owns. Your last write's `meta.next` names the next step.
358
358
  identical repeat is reported `unchanged` (`data.unchanged: true`, or the
359
359
  element's `status` in a batch), so after a timeout run the same command
360
360
  again. A different finding under an occupied round and seq is refused
361
- (`FINDING_SEQ_OCCUPIED`): take the next seq. `finding close` with the same
361
+ (`FINDING_EXISTS`): take the next seq. `finding close` with the same
362
362
  disposition is a no-op too.
363
363
 
364
364
  ## Excuses that fail
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-adapter-authorize 1 "authorize 0.35.0"
3
+ .TH canon-adapter-authorize 1 "authorize 0.37.0"
4
4
  .SH NAME
5
5
  canon\-adapter\-authorize \- Authorize declared capabilities against repository policy (preflight only)
6
6
  .SH SYNOPSIS
@@ -41,4 +41,4 @@ Print help
41
41
  \fB\-V\fR, \fB\-\-version\fR
42
42
  Print version
43
43
  .SH VERSION
44
- v0.35.0
44
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-adapter-validate 1 "validate 0.35.0"
3
+ .TH canon-adapter-validate 1 "validate 0.37.0"
4
4
  .SH NAME
5
5
  canon\-adapter\-validate \- Read and validate one provider\-neutral response envelope
6
6
  .SH SYNOPSIS
@@ -41,4 +41,4 @@ Print help
41
41
  \fB\-V\fR, \fB\-\-version\fR
42
42
  Print version
43
43
  .SH VERSION
44
- v0.35.0
44
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-adapter 1 "adapter 0.35.0"
3
+ .TH canon-adapter 1 "adapter 0.37.0"
4
4
  .SH NAME
5
5
  canon\-adapter \- Validate a provider\-neutral adapter response without executing a provider
6
6
  .SH SYNOPSIS
@@ -43,4 +43,4 @@ Examples:
43
43
  canon adapter validate \-\-response response.json
44
44
  canon adapter validate \-\-response response.json \-\-repo . \-\-json
45
45
  .SH VERSION
46
- v0.35.0
46
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-artifacts-move 1 "move 0.35.0"
3
+ .TH canon-artifacts-move 1 "move 0.37.0"
4
4
  .SH NAME
5
5
  canon\-artifacts\-move \- Move the local artifact blobs to an object\-store tier, verify them, and remove the local copies
6
6
  .SH SYNOPSIS
@@ -30,10 +30,10 @@ orchestrator
30
30
  The tier to move to: the name of an `s3` tier in canon.yaml (for example `cold`)
31
31
  .TP
32
32
  \fB\-\-commit\fR
33
- Act on the previewed plan; needs \-\-plan\-digest
33
+ Make the change; without it the command only previews.
34
34
  .TP
35
- \fB\-\-plan\-digest\fR \fI<DIGEST>\fR
36
- The `planDigest` the preview printed; the run acts only if the plan recomputed now has this digest
35
+ \fB\-\-plan\-digest\fR \fI<PLAN_DIGEST>\fR
36
+ The digest of the preview this commit carries out.
37
37
  .TP
38
38
  \fB\-\-repo\fR \fI<DIR>\fR
39
39
  The repo to act on (default: the nearest ancestor directory holding a canon.yaml)
@@ -52,7 +52,7 @@ Print version
52
52
  .SH EXTRA
53
53
  Examples:
54
54
  canon artifacts move \-\-tier cold
55
- canon artifacts move \-\-tier cold \-\-commit \-\-plan\-digest <DIGEST>
55
+ canon artifacts move \-\-tier cold \-\-commit \-\-plan\-digest <PLAN_DIGEST>
56
56
 
57
57
  The bare run previews: it lists every upload and removal and prints a planDigest, and writes nothing. \-\-commit \-\-plan\-digest acts on exactly that plan (PLAN_STALE, exit 2, when it changed since).
58
58
 
@@ -60,4 +60,4 @@ The bare run previews: it lists every upload and removal and prints a planDigest
60
60
 
61
61
  Idempotent and resumable: a run stopped anywhere leaves a repo the gate still passes, and the next run finishes; a second run finds nothing to do. A blob whose bytes do not match its name is never moved. Moving back to local is refused; `\-\-tier local` on a local repo is a no\-op.
62
62
  .SH VERSION
63
- v0.35.0
63
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-artifacts-store 1 "store 0.35.0"
3
+ .TH canon-artifacts-store 1 "store 0.37.0"
4
4
  .SH NAME
5
5
  canon\-artifacts\-store \- Store the bound files of existing evidence records and current reviews in the artifact store (.canon/artifacts/sha256/)
6
6
  .SH SYNOPSIS
@@ -51,4 +51,4 @@ For records written before canon stored bound bytes (0.11\-0.13), and for any ev
51
51
 
52
52
  Exit 0 when the pass ran (the gate decides whether an unstored file matters), 2 when the ledger cannot be read or a write fails.
53
53
  .SH VERSION
54
- v0.35.0
54
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-artifacts-verify 1 "verify 0.35.0"
3
+ .TH canon-artifacts-verify 1 "verify 0.37.0"
4
4
  .SH NAME
5
5
  canon\-artifacts\-verify \- Check that the artifact store holds every file the latest evidence and current reviews bind (\-\-full re\-hashes the stored bytes)
6
6
  .SH SYNOPSIS
@@ -45,4 +45,4 @@ Asks the store canon.yaml\*(Aqs `artifacts:` block selects (default: local, .can
45
45
 
46
46
  Exit 0 when every file is stored, 1 when one is missing or altered (data.problems names each), 2 when the store cannot be used or reached: an unreachable store is a refusal, never a pass.
47
47
  .SH VERSION
48
- v0.35.0
48
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-artifacts 1 "artifacts 0.35.0"
3
+ .TH canon-artifacts 1 "artifacts 0.37.0"
4
4
  .SH NAME
5
5
  canon\-artifacts \- Check or move the evidence artifact store (local, or an object\-store tier)
6
6
  .SH SYNOPSIS
@@ -42,4 +42,4 @@ Store the bound files of existing evidence records and current reviews in the ar
42
42
  canon\-artifacts\-move(1)
43
43
  Move the local artifact blobs to an object\-store tier, verify them, and remove the local copies
44
44
  .SH VERSION
45
- v0.35.0
45
+ v0.37.0