@journeykit/canon 0.36.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 (115) hide show
  1. package/dist/skills/SKILL.src.md +13 -2
  2. package/dist/skills/reference/canon-gate.md +11 -0
  3. package/dist/skills/reference/canon-learn.md +7 -2
  4. package/dist/skills/reference/canon-review.md +5 -3
  5. package/dist/skills/reference/canon-storage.md +2 -2
  6. package/dist/skills/reference/canon-subject.md +5 -4
  7. package/dist/skills/reference/role-implementer.md +3 -1
  8. package/dist/skills/reference/role-reviewer.md +1 -1
  9. package/man/canon-adapter-authorize.1 +2 -2
  10. package/man/canon-adapter-validate.1 +2 -2
  11. package/man/canon-adapter.1 +2 -2
  12. package/man/canon-artifacts-move.1 +2 -2
  13. package/man/canon-artifacts-store.1 +2 -2
  14. package/man/canon-artifacts-verify.1 +2 -2
  15. package/man/canon-artifacts.1 +2 -2
  16. package/man/canon-brief-approve.1 +6 -4
  17. package/man/canon-brief-check.1 +2 -2
  18. package/man/canon-brief-show.1 +2 -2
  19. package/man/canon-brief.1 +2 -2
  20. package/man/canon-change-new.1 +2 -2
  21. package/man/canon-change.1 +2 -2
  22. package/man/canon-completion.1 +2 -2
  23. package/man/canon-context-pack-add.1 +2 -2
  24. package/man/canon-context-pack-show.1 +2 -2
  25. package/man/canon-context-pack-verify.1 +2 -2
  26. package/man/canon-context-pack.1 +2 -2
  27. package/man/canon-context.1 +2 -2
  28. package/man/canon-dashboard.1 +2 -2
  29. package/man/canon-demo-init.1 +2 -2
  30. package/man/canon-demo-review.1 +2 -2
  31. package/man/canon-demo.1 +2 -2
  32. package/man/canon-dispatch-begin.1 +2 -2
  33. package/man/canon-dispatch-diff.1 +2 -2
  34. package/man/canon-dispatch-end.1 +2 -2
  35. package/man/canon-dispatch.1 +2 -2
  36. package/man/canon-divergence-accept.1 +3 -3
  37. package/man/canon-divergence-add.1 +3 -3
  38. package/man/canon-divergence-defer.1 +3 -3
  39. package/man/canon-divergence-list.1 +3 -3
  40. package/man/canon-divergence-resolve.1 +2 -2
  41. package/man/canon-divergence.1 +2 -2
  42. package/man/canon-evidence-add.1 +6 -6
  43. package/man/canon-evidence-approval-payload.1 +3 -3
  44. package/man/canon-evidence-audit.1 +5 -5
  45. package/man/canon-evidence.1 +2 -2
  46. package/man/canon-export.1 +4 -4
  47. package/man/canon-feature-new.1 +2 -2
  48. package/man/canon-feature.1 +2 -2
  49. package/man/canon-finding-add.1 +4 -4
  50. package/man/canon-finding-close.1 +4 -6
  51. package/man/canon-finding-list.1 +2 -2
  52. package/man/canon-finding.1 +2 -2
  53. package/man/canon-format.1 +2 -2
  54. package/man/canon-gate-check.1 +2 -2
  55. package/man/canon-gate-install-hooks.1 +2 -2
  56. package/man/canon-gate-promote.1 +2 -2
  57. package/man/canon-gate.1 +2 -2
  58. package/man/canon-ingest-plans.1 +2 -2
  59. package/man/canon-ingest-records.1 +2 -2
  60. package/man/canon-ingest-sessions.1 +2 -2
  61. package/man/canon-ingest.1 +2 -2
  62. package/man/canon-init.1 +5 -4
  63. package/man/canon-inventory-sync.1 +2 -2
  64. package/man/canon-inventory.1 +2 -2
  65. package/man/canon-ledger-compact.1 +2 -2
  66. package/man/canon-ledger.1 +2 -2
  67. package/man/canon-migrate.1 +2 -2
  68. package/man/canon-plugin-sync.1 +2 -2
  69. package/man/canon-plugin.1 +2 -2
  70. package/man/canon-policy-approve.1 +2 -2
  71. package/man/canon-policy-show.1 +2 -2
  72. package/man/canon-policy.1 +2 -2
  73. package/man/canon-prompt-add.1 +2 -2
  74. package/man/canon-prompt-show.1 +2 -2
  75. package/man/canon-prompt.1 +2 -2
  76. package/man/canon-purge.1 +3 -3
  77. package/man/canon-query.1 +3 -3
  78. package/man/canon-regime-show.1 +2 -2
  79. package/man/canon-regime.1 +2 -2
  80. package/man/canon-report-build.1 +2 -2
  81. package/man/canon-report-check.1 +2 -2
  82. package/man/canon-report-snapshot.1 +2 -2
  83. package/man/canon-report.1 +2 -2
  84. package/man/canon-retrieve.1 +2 -2
  85. package/man/canon-review-change.1 +3 -3
  86. package/man/canon-review-scenario.1 +3 -3
  87. package/man/canon-review.1 +2 -2
  88. package/man/canon-scenario-new.1 +2 -2
  89. package/man/canon-scenario.1 +2 -2
  90. package/man/canon-schema.1 +2 -2
  91. package/man/canon-search.1 +2 -2
  92. package/man/canon-selftest.1 +2 -2
  93. package/man/canon-skills-check.1 +3 -3
  94. package/man/canon-skills-doctor.1 +3 -3
  95. package/man/canon-skills-install.1 +3 -3
  96. package/man/canon-skills-show.1 +2 -2
  97. package/man/canon-skills.1 +2 -2
  98. package/man/canon-status.1 +2 -2
  99. package/man/canon-strategy-approval-payload.1 +3 -3
  100. package/man/canon-strategy-promote.1 +2 -2
  101. package/man/canon-strategy-rollback.1 +3 -3
  102. package/man/canon-strategy.1 +2 -2
  103. package/man/canon-subject-adopt.1 +2 -2
  104. package/man/canon-subject-move.1 +2 -2
  105. package/man/canon-subject-new.1 +2 -2
  106. package/man/canon-subject-show.1 +2 -2
  107. package/man/canon-subject-unadopt.1 +2 -2
  108. package/man/canon-subject.1 +2 -2
  109. package/man/canon-task-done.1 +2 -2
  110. package/man/canon-task.1 +2 -2
  111. package/man/canon-tier-age.1 +2 -2
  112. package/man/canon-tier.1 +2 -2
  113. package/man/canon-trace.1 +2 -2
  114. package/man/canon.1 +2 -2
  115. package/package.json +4 -4
@@ -127,7 +127,11 @@ tree, or in a repo with no commits, a command that needs a commit refuses
127
127
  After a chore approval or a reopen, a scenario whose latest evidence was
128
128
  recorded on the current `codeTree` needs nothing new: a docs-only chore then
129
129
  needs its change-level review alone. What counts as code is `code.exclude` in
130
- `canon.yaml` (globs, default `docs/**` and `*.md`). When code did change,
130
+ `canon.yaml` (globs, default `docs/**` and `*.md`). A chore approved over the
131
+ code as it still is (the `(code tree <id>)` of its `Approved:` line is the
132
+ current tree) asks for no evidence at all, whatever tree the evidence is on, and
133
+ `status` says so; an approval with no recorded tree follows the rule above.
134
+ When code did change,
131
135
  `canon status`, `meta.next` and the refusal hint lead with one batch over
132
136
  every report, for example
133
137
  `canon evidence add --all-scenarios --report junit:a.xml --report junit:b.xml --role implementer`
@@ -227,11 +231,18 @@ A role is guidance, not enforcement: `--role` on `evidence add` and
227
231
  gives the JSON Schema of each report in `schemas`, `Input` (the schema of one `--input`
228
232
  document) and `rejects` (what each validator refuses, in order); `#/schemas/<Name>` in
229
233
  the command document resolves there. The first line of every `--help` points at it.
234
+ - An option of the same name takes the same value in every command that has it, and `canon schema` declares it once. An id
235
+ (`--project`, `--role`, `--domain`) is a kebab slug: lowercase letters and digits, single hyphens between them. A name
236
+ (`--actor`, `--approver`, `--relayed-via`) and a sentence (`--reason`, `--summary`, `--override-reason`) are one line of text:
237
+ the white space around it is trimmed (what is recorded, and what a signature is made of, is the trimmed text), and a value
238
+ that is empty once trimmed, or has a control character (a tab, an escape) or a line break inside it, is refused with the
239
+ command's own argument code. `--round` and `--limit` start at 1, and `--regime` is the four-part key `retrieve` and
240
+ `dispatch begin` both take. `finding close` takes `fixed`, `rejected` or `deferred`, never `open`.
230
241
  - Pass `--json` and read stdout as one document, nothing on stderr. Success is
231
242
  `{"ok":true,"data":…,"meta":…}`; failure is
232
243
  `{"ok":false,"error":{…},"meta":…}` (a check that fails keeps its report in
233
244
  `data`). `meta` carries `tool`, `toolVersion`, `contract` (`atip/1`),
234
- `contractVersion` (`1.4`), `schemaVersion`,
245
+ `contractVersion` (`1.5`), `schemaVersion`,
235
246
  `command`, and when present `next`, `warnings` (`[{code, message}]`) and
236
247
  `page`; a repeated write that changed nothing reports `data.unchanged: true`.
237
248
  Absent members are omitted, never `null` or `[]` (a value you sent empty comes back as `received: ""`).
@@ -255,6 +255,17 @@ review of the chore itself (`canon review change <slug>`) before
255
255
  `--to shipped`; a changed verdict or case set stales that scenario's
256
256
  review as before (and a new `divergence accept`, where the gap remains).
257
257
 
258
+ A chore's approval records the code tree of the work tree at that moment, as
259
+ `(code tree <id>)` in its `Approved:` line (outside the brief digest; none
260
+ outside git or with no commit). While that tree is the current code tree the
261
+ chore changed no code since it was approved, so it asks for no evidence at
262
+ all, whatever tree each scenario's latest evidence is on, and `status` says so
263
+ on its line; its change-level review is still asked, and it must be a review of
264
+ this code (the review records the code tree it saw): a brief edited after the
265
+ approval needs a new review, and so does a review of other code, as when the
266
+ same brief is approved again over code that came after the review. An approval
267
+ with no recorded tree (written before 0.37) follows the rule above.
268
+
258
269
  ### Audit records (`canon evidence audit`)
259
270
 
260
271
  canon never generates or runs an audit. An external evaluator does, and
@@ -52,7 +52,11 @@ The production activation path is a signed, paired-evaluation workflow:
52
52
  `meta.next` names the human signing step. The `data` contains the evaluation digest, RFC3339 `approved_at`,
53
53
  subject `strategy:<strategy_id>`, namespace
54
54
  `canon-learning-approval-v1`, and `payload_hex`. `approval-payload` never
55
- reads a private key and never sets `verified`.
55
+ reads a private key and never sets `verified`. `--approval-at` is an RFC 3339
56
+ date-time (`2026-10-02T12:00:00Z`; a date alone, white space around it and a
57
+ one-digit month are refused): canon never stamps it, so fix it once and give
58
+ the same value to the signature and to the record. The bytes hold the instant
59
+ as UTC to the nanosecond, so one instant written `Z` or `+09:00` is one payload.
56
60
  6. Decode `payload_hex` to the exact canonical JSON bytes. The signed object
57
61
  is:
58
62
 
@@ -190,7 +194,8 @@ canon strategy rollback <strategy_id> --reason "<reason>" --actor alice \
190
194
 
191
195
  `--signature-file` is an armored SSH detached signature over the
192
196
  `canon-learning-approval-v1` payload bound to
193
- `strategy:<id>:rollback:<sha256(reason)>`, actor, and `--approval-at`.
197
+ `strategy:<id>:rollback:<sha256(reason)>`, actor, and `--approval-at` (the same
198
+ RFC 3339 date-time that was signed; another instant fails the signature).
194
199
  `actor` MUST be listed in policy-pinned `approval.allowed_signers`; verification
195
200
  uses that file and `ssh-keygen -Y verify`. Successful rollback writes durable
196
201
  provenance, sets lifecycle `rolled_back`, and records the optional contradicting
@@ -155,7 +155,7 @@ text in the summary, not a field.
155
155
 
156
156
  | Disposition | Meaning |
157
157
  |---|---|
158
- | `open` | Raised and not yet dealt with. The default on `finding add`; `finding close --disposition open` reopens. |
158
+ | `open` | Raised and not yet dealt with. The default on `finding add`; `finding close` refuses it (a defect that came back is a new finding). |
159
159
  | `fixed` | Fixed by a commit. Carries `--resolution-rev <rev>` (default `HEAD`) naming a commit this repo holds; only `fixed` may carry one. |
160
160
  | `rejected` | The reviewer's point was considered and declined. Needs `--reason`. |
161
161
  | `deferred` | Accepted, but postponed to later work. Needs `--reason`. |
@@ -164,8 +164,10 @@ text in the summary, not a field.
164
164
 
165
165
  Every reader takes the **latest version per natural key**
166
166
  `(change_id, round, seq)` — the same fold the report's finding panel
167
- uses. A blocker raised `open` and later closed `fixed` counts as fixed; a
168
- fixed finding reopened with `--disposition open` counts as open again.
167
+ uses. A blocker raised `open` and later closed `fixed` counts as fixed.
168
+ A finding is not reopened: `finding close` takes `fixed`, `rejected` or
169
+ `deferred` and refuses `--disposition open`; a defect that came back is a new
170
+ `finding add` (the next `--seq`).
169
171
 
170
172
  ## `canon review scenario`
171
173
 
@@ -192,7 +192,7 @@ section listing them and emits a matching stderr `WARN`.
192
192
 
193
193
  ## Retention, export, and access audit
194
194
 
195
- `canon purge --kind <kind> --before <RFC3339> [--commit --plan-digest <planDigest>] [--repo <dir>] [--json]`
195
+ `canon purge --kind <kind> --before <RFC3339 date or date-time> [--commit --plan-digest <planDigest>] [--repo <dir>] [--json]`
196
196
  is the canonical data-lifecycle boundary: the bare run previews: it prints the removal set and
197
197
  its `planDigest` and deletes nothing; `--commit --plan-digest <planDigest>` deletes only if
198
198
  the plan recomputed now has the same digest (`PLAN_STALE`, exit 2, when the
@@ -220,7 +220,7 @@ human's review and `--commit --plan-digest`), and an export's page state (`total
220
220
  file and answers with `data: { output, kind, recordCount }`; `--dry-run`
221
221
  answers with what it would write and writes nothing.
222
222
 
223
- `canon export --kind <kind> [--before <RFC3339>] [--after <RFC3339>]
223
+ `canon export --kind <kind> [--before <RFC3339 date or date-time>] [--after <RFC3339 date or date-time>]
224
224
  [--output <file>] [--json] [--limit <n> | --all] [--cursor <c>]` emits a versioned manifest containing source scope,
225
225
  counts, digests, and redacted metadata. It does not authorize backend access;
226
226
  credentials remain an operator prerequisite. New output files are mode
@@ -547,8 +547,9 @@ warn, and a command that writes and judges it is refused
547
547
  `reason`), one rule in one section, reason required; add `match` to waive
548
548
  only the findings whose matched text contains it. Listed in the output.
549
549
  - **`approve`** records the human's answer: it writes
550
- `Approved: <who> <when> — "<words>" (brief sha256:<digest>)` into the
551
- 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
552
553
  (exit 2) while the check has structure blockers. Edit the brief
553
554
  afterwards and every reader says `BRIEF_APPROVAL_STALE` until a
554
555
  human answers again and `approve` runs again. Run it only from the
@@ -617,8 +618,8 @@ uses, so status and the gate cannot disagree about a gap:
617
618
  something after it, and sits outside HTML comments (`<!-- … -->`,
618
619
  multi-line included) and fenced code blocks (```` ``` ```` or `~~~`).
619
620
  `canon brief approve` writes it from the human's answer, as
620
- `Approved: <who> <when> — "<the human's words>" (brief sha256:<digest>)`,
621
- 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
622
623
  edited after that reads `brief: not approved (<brief> changed after its
623
624
  approval (BRIEF_APPROVAL_STALE))` and names the re-approval
624
625
  command: the changed brief needs a new human answer. A line with no
@@ -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`.
@@ -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
@@ -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.36.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.36.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.36.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.36.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.36.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.36.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.36.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
@@ -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.36.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.36.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.36.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.36.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.36.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.36.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.36.0
45
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-brief-approve 1 "approve 0.36.0"
3
+ .TH canon-brief-approve 1 "approve 0.37.0"
4
4
  .SH NAME
5
5
  canon\-brief\-approve \- Record the human\*(Aqs approval of the brief, bound to its text; refused while `brief check` has blockers
6
6
  .SH SYNOPSIS
@@ -66,10 +66,12 @@ Examples:
66
66
  Several ids take one name, one answer and one timestamp. Every id is checked
67
67
  first; one refused id refuses the call (the first refused id\*(Aqs code, with a
68
68
  detail for each) and nothing is
69
- written. Writes `Approved: <who> <when> — "<words>" (brief sha256:<digest>)` into the
70
- brief (the digest covers the brief without its `Approved:` lines) and records
69
+ written. Writes `Approved: <who> <when> — "<words>" (code tree <id>) (brief sha256:<digest>)` into the
70
+ brief (the digest covers the brief without its `Approved:` lines; the code tree is the work
71
+ tree\*(Aqs as it is now, uncommitted code included, and is left out outside git or with no commit: a
72
+ chore whose approval saw the code tree that is still the current one asks for no evidence) and records
71
73
  `canon policy approve` in the same call. Edit the brief afterwards and it reads as
72
74
  not approved (BRIEF_APPROVAL_STALE) until a human answers again and this
73
75
  runs again. Run it only from the human\*(Aqs answer, with their words as \-\-note.
74
76
  .SH VERSION
75
- v0.36.0
77
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-brief-check 1 "check 0.36.0"
3
+ .TH canon-brief-check 1 "check 0.37.0"
4
4
  .SH NAME
5
5
  canon\-brief\-check \- Read the brief against the rules: blocker and advisory findings (exit 0 clean, 1 blockers, 2 refused)
6
6
  .SH SYNOPSIS
@@ -41,4 +41,4 @@ Print version
41
41
  [\fICHANGE_ID\fR]
42
42
  The change to read (default: the repo\*(Aqs only live change)
43
43
  .SH VERSION
44
- v0.36.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-brief-show 1 "show 0.36.0"
3
+ .TH canon-brief-show 1 "show 0.37.0"
4
4
  .SH NAME
5
5
  canon\-brief\-show \- Show where the change stands and the next one to three steps; never edits
6
6
  .SH SYNOPSIS
@@ -50,4 +50,4 @@ Examples:
50
50
 
51
51
  The operand names the change; without it the repo\*(Aqs only live change is read.
52
52
  .SH VERSION
53
- v0.36.0
53
+ v0.37.0
package/man/canon-brief.1 CHANGED
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-brief 1 "brief 0.36.0"
3
+ .TH canon-brief 1 "brief 0.37.0"
4
4
  .SH NAME
5
5
  canon\-brief \- Check a change\*(Aqs brief (PRD format) and see the next steps; never edits
6
6
  .SH SYNOPSIS
@@ -61,4 +61,4 @@ gets one blocker, `brief.old\-format`: `canon migrate` rewrites it. A brief
61
61
  with fewer than two known headings (written before 0.19) checks as `brief.legacy`, an
62
62
  advisory. Without \-\-change, the repo\*(Aqs only live change is checked.
63
63
  .SH VERSION
64
- v0.36.0
64
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-change-new 1 "new 0.36.0"
3
+ .TH canon-change-new 1 "new 0.37.0"
4
4
  .SH NAME
5
5
  canon\-change\-new \- Write .canon/changes/<slug>/brief.md, import it, and adopt it into a subject
6
6
  .SH SYNOPSIS
@@ -63,4 +63,4 @@ Print version
63
63
  <\fICHANGE_ID\fR>
64
64
  The change\*(Aqs slug (its change_id)
65
65
  .SH VERSION
66
- v0.36.0
66
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-change 1 "change 0.36.0"
3
+ .TH canon-change 1 "change 0.37.0"
4
4
  .SH NAME
5
5
  canon\-change \- Write a plan change (.canon/changes/<slug>/brief.md) and adopt it into a subject
6
6
  .SH SYNOPSIS
@@ -39,4 +39,4 @@ Write .canon/changes/<slug>/brief.md, import it, and adopt it into a subject
39
39
  Examples:
40
40
  canon change new add\-login \-\-subject auth \-\-title \*(AqAdd login\*(Aq
41
41
  .SH VERSION
42
- v0.36.0
42
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-completion 1 "completion 0.36.0"
3
+ .TH canon-completion 1 "completion 0.37.0"
4
4
  .SH NAME
5
5
  canon\-completion \- Write the shell completion script for canon (bash, zsh or fish)
6
6
  .SH SYNOPSIS
@@ -57,4 +57,4 @@ Examples:
57
57
 
58
58
  The script is generated from the command tree, so it completes exactly what the parser accepts. It needs no repo and no network.
59
59
  .SH VERSION
60
- v0.36.0
60
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-context-pack-add 1 "add 0.36.0"
3
+ .TH canon-context-pack-add 1 "add 0.37.0"
4
4
  .SH NAME
5
5
  canon\-context\-pack\-add \- Create an immutable context pack from a repository\-local JSON manifest
6
6
  .SH SYNOPSIS
@@ -44,4 +44,4 @@ Print help
44
44
  \fB\-V\fR, \fB\-\-version\fR
45
45
  Print version
46
46
  .SH VERSION
47
- v0.36.0
47
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-context-pack-show 1 "show 0.36.0"
3
+ .TH canon-context-pack-show 1 "show 0.37.0"
4
4
  .SH NAME
5
5
  canon\-context\-pack\-show \- Show a context pack after verifying its manifest and content objects
6
6
  .SH SYNOPSIS
@@ -41,4 +41,4 @@ Print version
41
41
  <\fIPACK_ID\fR>
42
42
  Context pack id (sha256:<64 hex digits>)
43
43
  .SH VERSION
44
- v0.36.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-context-pack-verify 1 "verify 0.36.0"
3
+ .TH canon-context-pack-verify 1 "verify 0.37.0"
4
4
  .SH NAME
5
5
  canon\-context\-pack\-verify \- Verify a context pack\*(Aqs manifest and immutable content objects
6
6
  .SH SYNOPSIS
@@ -41,4 +41,4 @@ Print version
41
41
  <\fIPACK_ID\fR>
42
42
  Context pack id (sha256:<64 hex digits>)
43
43
  .SH VERSION
44
- v0.36.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-context-pack 1 "context-pack 0.36.0"
3
+ .TH canon-context-pack 1 "context-pack 0.37.0"
4
4
  .SH NAME
5
5
  canon\-context\-pack \- Create, inspect, and verify reproducible context packs
6
6
  .SH SYNOPSIS
@@ -47,4 +47,4 @@ Examples:
47
47
  canon context\-pack show sha256:<pack\-digest> \-\-repo . \-\-json
48
48
  canon context\-pack verify sha256:<pack\-digest>
49
49
  .SH VERSION
50
- v0.36.0
50
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-context 1 "context 0.36.0"
3
+ .TH canon-context 1 "context 0.37.0"
4
4
  .SH NAME
5
5
  canon\-context \- Show what you can author here: record kinds, fields, enums, policies
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.36.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-dashboard 1 "dashboard 0.36.0"
3
+ .TH canon-dashboard 1 "dashboard 0.37.0"
4
4
  .SH NAME
5
5
  canon\-dashboard \- Serve the local status dashboard
6
6
  .SH SYNOPSIS
@@ -47,4 +47,4 @@ Print help
47
47
  \fB\-V\fR, \fB\-\-version\fR
48
48
  Print version
49
49
  .SH VERSION
50
- v0.36.0
50
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-demo-init 1 "init 0.36.0"
3
+ .TH canon-demo-init 1 "init 0.37.0"
4
4
  .SH NAME
5
5
  canon\-demo\-init \- Scaffold the demo repo (gate starts RED)
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.36.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-demo-review 1 "review 0.36.0"
3
+ .TH canon-demo-review 1 "review 0.37.0"
4
4
  .SH NAME
5
5
  canon\-demo\-review \- Record the missing reviewer evidence (gate turns GREEN)
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.36.0
44
+ v0.37.0
package/man/canon-demo.1 CHANGED
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-demo 1 "demo 0.36.0"
3
+ .TH canon-demo 1 "demo 0.37.0"
4
4
  .SH NAME
5
5
  canon\-demo \- Try the evidence loop end\-to\-end in a throwaway demo repo
6
6
  .SH SYNOPSIS
@@ -44,4 +44,4 @@ Examples:
44
44
  canon gate check # RED
45
45
  canon demo review && canon gate check # GREEN
46
46
  .SH VERSION
47
- v0.36.0
47
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-dispatch-begin 1 "begin 0.36.0"
3
+ .TH canon-dispatch-begin 1 "begin 0.37.0"
4
4
  .SH NAME
5
5
  canon\-dispatch\-begin \- Mint a Run manifest with retrieved guidance and context/policy lineage
6
6
  .SH SYNOPSIS
@@ -77,4 +77,4 @@ Print help
77
77
  \fB\-V\fR, \fB\-\-version\fR
78
78
  Print version
79
79
  .SH VERSION
80
- v0.36.0
80
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-dispatch-diff 1 "diff 0.36.0"
3
+ .TH canon-dispatch-diff 1 "diff 0.37.0"
4
4
  .SH NAME
5
5
  canon\-dispatch\-diff \- Diff the declared plan DAG against the observed execution graph
6
6
  .SH SYNOPSIS
@@ -38,4 +38,4 @@ Print help
38
38
  \fB\-V\fR, \fB\-\-version\fR
39
39
  Print version
40
40
  .SH VERSION
41
- v0.36.0
41
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-dispatch-end 1 "end 0.36.0"
3
+ .TH canon-dispatch-end 1 "end 0.37.0"
4
4
  .SH NAME
5
5
  canon\-dispatch\-end \- Close a dispatched run with a terminal status and an ended_at
6
6
  .SH SYNOPSIS
@@ -57,4 +57,4 @@ Print version
57
57
  <\fIRUN_ID\fR>
58
58
  The RunId (ULID) minted by `canon dispatch begin`
59
59
  .SH VERSION
60
- v0.36.0
60
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-dispatch 1 "dispatch 0.36.0"
3
+ .TH canon-dispatch 1 "dispatch 0.37.0"
4
4
  .SH NAME
5
5
  canon\-dispatch \- Begin an agent run with retrieved guidance recorded
6
6
  .SH SYNOPSIS
@@ -42,4 +42,4 @@ Close a dispatched run with a terminal status and an ended_at
42
42
  canon\-dispatch\-diff(1)
43
43
  Diff the declared plan DAG against the observed execution graph
44
44
  .SH VERSION
45
- v0.36.0
45
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-divergence-accept 1 "accept 0.36.0"
3
+ .TH canon-divergence-accept 1 "accept 0.37.0"
4
4
  .SH NAME
5
5
  canon\-divergence\-accept \- Accept a divergent scenario as a tracked known gap (a reviewer step): its latest evidence must be divergent and not the accepting actor\*(Aqs or session\*(Aqs. The acceptance pins that evidence, so new evidence ends it, and lapses at \-\-expiry; until then the ship guard counts the cell as covered while `status` and `gate check` list it as `accepted\-divergence`
6
6
  .SH SYNOPSIS
@@ -36,7 +36,7 @@ Why the gap is accepted
36
36
  Where the gap is tracked: an issue URL or reference
37
37
  .TP
38
38
  \fB\-\-expiry\fR \fI<TIMESTAMP>\fR
39
- The date (YYYY\-MM\-DD, UTC) the acceptance stops holding; none means it holds until new evidence
39
+ When the acceptance stops holding: an RFC 3339 date (`2030\-01\-01`, UTC midnight) or date\-time (`2030\-01\-01T10:00:00Z`); none means it holds until new evidence
40
40
  .TP
41
41
  \fB\-\-actor\fR \fI<ACTOR_ID>\fR
42
42
  The reviewer recording this (recorded as the divergence\*(Aqs reviewer and actor)
@@ -74,4 +74,4 @@ Print version
74
74
  <\fISCENARIO_ID\fR>
75
75
  The accepted scenarios (`<area>.<surface>.<nn>`), one acceptance each, all or nothing
76
76
  .SH VERSION
77
- v0.36.0
77
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-divergence-add 1 "add 0.36.0"
3
+ .TH canon-divergence-add 1 "add 0.37.0"
4
4
  .SH NAME
5
5
  canon\-divergence\-add \- Add a divergence candidate, staged with no run_seq yet (commit it with `canon gate promote \-\-kind divergence`, or in the same run with \-\-promote / `write: { promote: auto }`)
6
6
  .SH SYNOPSIS
@@ -53,7 +53,7 @@ deferred
53
53
  Why the divergence is recorded; required with `\-\-state deferred`
54
54
  .TP
55
55
  \fB\-\-expiry\fR \fI<TIMESTAMP>\fR
56
- When a deferral lapses (RFC3339 or YYYY\-MM\-DD, UTC); required with `\-\-state deferred`
56
+ When a deferral lapses: an RFC 3339 date (`2030\-01\-01`, UTC midnight) or date\-time (`2030\-01\-01T10:00:00Z`); required with `\-\-state deferred`
57
57
  .TP
58
58
  \fB\-\-round\fR \fI<N>\fR [default: 1]
59
59
  The review round this version belongs to (1\-based)
@@ -94,4 +94,4 @@ Print version
94
94
  <\fISCENARIO_ID\fR>
95
95
  The scenario (`<area>.<surface>.<nn>`)
96
96
  .SH VERSION
97
- v0.36.0
97
+ v0.37.0
@@ -1,6 +1,6 @@
1
1
  .ie \n(.g .ds Aq \(aq
2
2
  .el .ds Aq '
3
- .TH canon-divergence-defer 1 "defer 0.36.0"
3
+ .TH canon-divergence-defer 1 "defer 0.37.0"
4
4
  .SH NAME
5
5
  canon\-divergence\-defer \- Directly record a deferred divergence (requires \-\-reason/\-\-expiry)
6
6
  .SH SYNOPSIS
@@ -45,7 +45,7 @@ The acting session (recorded as actor.session_id); optional
45
45
  Why the divergence is deferred
46
46
  .TP
47
47
  \fB\-\-expiry\fR \fI<TIMESTAMP>\fR
48
- When the deferral lapses (RFC3339 or YYYY\-MM\-DD, UTC)
48
+ When the deferral lapses: an RFC 3339 date (`2030\-01\-01`, UTC midnight) or date\-time (`2030\-01\-01T10:00:00Z`)
49
49
  .TP
50
50
  \fB\-\-role\fR \fI<ROLE>\fR
51
51
  The role this record is attributed to (default: the role declared with \-\-as / CANON_ROLE)
@@ -68,4 +68,4 @@ Print version
68
68
  <\fISCENARIO_ID\fR>
69
69
  The scenario (`<area>.<surface>.<nn>`)
70
70
  .SH VERSION
71
- v0.36.0
71
+ v0.37.0