@journeykit/canon 0.29.0 → 0.31.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 (123) hide show
  1. package/dist/skills/SKILL.src.md +48 -22
  2. package/dist/skills/reference/brief-polish.md +4 -4
  3. package/dist/skills/reference/brief-shape.md +38 -7
  4. package/dist/skills/reference/canon-authoring.md +6 -6
  5. package/dist/skills/reference/canon-gate.md +49 -34
  6. package/dist/skills/reference/canon-learn.md +2 -2
  7. package/dist/skills/reference/canon-plan-import.md +2 -2
  8. package/dist/skills/reference/canon-plugins.md +6 -6
  9. package/dist/skills/reference/canon-report-dashboard.md +12 -8
  10. package/dist/skills/reference/canon-review.md +26 -25
  11. package/dist/skills/reference/canon-storage.md +20 -3
  12. package/dist/skills/reference/canon-subject.md +132 -98
  13. package/dist/skills/reference/role-implementer.md +42 -28
  14. package/dist/skills/reference/role-orchestrator.md +40 -24
  15. package/dist/skills/reference/role-planner.md +32 -17
  16. package/dist/skills/reference/role-reviewer.md +48 -30
  17. package/man/canon-adapter-authorize.1 +2 -2
  18. package/man/canon-adapter-validate.1 +2 -2
  19. package/man/canon-adapter.1 +2 -2
  20. package/man/canon-artifacts-move.1 +2 -2
  21. package/man/canon-artifacts-store.1 +2 -2
  22. package/man/canon-artifacts-verify.1 +2 -2
  23. package/man/canon-artifacts.1 +2 -2
  24. package/man/canon-brief-approve.1 +7 -4
  25. package/man/canon-brief-check.1 +2 -2
  26. package/man/canon-brief-show.1 +2 -2
  27. package/man/canon-brief.1 +8 -7
  28. package/man/canon-change-new.1 +4 -4
  29. package/man/canon-change.1 +3 -3
  30. package/man/canon-completion.1 +2 -2
  31. package/man/canon-context-pack-add.1 +2 -2
  32. package/man/canon-context-pack-show.1 +2 -2
  33. package/man/canon-context-pack-verify.1 +2 -2
  34. package/man/canon-context-pack.1 +2 -2
  35. package/man/canon-context.1 +2 -2
  36. package/man/canon-dashboard.1 +2 -2
  37. package/man/canon-demo-init.1 +2 -2
  38. package/man/canon-demo-review.1 +2 -2
  39. package/man/canon-demo.1 +2 -2
  40. package/man/canon-dispatch-begin.1 +10 -10
  41. package/man/canon-dispatch-diff.1 +2 -2
  42. package/man/canon-dispatch-end.1 +2 -2
  43. package/man/canon-dispatch.1 +2 -2
  44. package/man/canon-divergence-accept.1 +6 -6
  45. package/man/canon-divergence-add.1 +6 -6
  46. package/man/canon-divergence-defer.1 +6 -6
  47. package/man/canon-divergence-list.1 +2 -2
  48. package/man/canon-divergence-resolve.1 +6 -6
  49. package/man/canon-divergence.1 +2 -2
  50. package/man/canon-evidence-add.1 +16 -16
  51. package/man/canon-evidence-approval-payload.1 +10 -10
  52. package/man/canon-evidence-audit.1 +10 -10
  53. package/man/canon-evidence.1 +3 -3
  54. package/man/canon-export.1 +2 -2
  55. package/man/canon-feature-new.1 +6 -6
  56. package/man/canon-feature.1 +2 -2
  57. package/man/canon-finding-add.1 +23 -11
  58. package/man/canon-finding-close.1 +8 -8
  59. package/man/canon-finding-list.1 +4 -4
  60. package/man/canon-finding.1 +4 -4
  61. package/man/canon-format.1 +2 -2
  62. package/man/canon-gate-check.1 +2 -2
  63. package/man/canon-gate-install-hooks.1 +2 -2
  64. package/man/canon-gate-promote.1 +2 -2
  65. package/man/canon-gate.1 +2 -2
  66. package/man/canon-ingest-plans.1 +2 -2
  67. package/man/canon-ingest-records.1 +4 -4
  68. package/man/canon-ingest-sessions.1 +2 -2
  69. package/man/canon-ingest.1 +2 -2
  70. package/man/canon-init.1 +2 -2
  71. package/man/canon-inventory-sync.1 +2 -2
  72. package/man/canon-inventory.1 +2 -2
  73. package/man/canon-ledger-compact.1 +2 -2
  74. package/man/canon-ledger.1 +2 -2
  75. package/man/canon-migrate.1 +25 -3
  76. package/man/canon-plugin-sync.1 +2 -2
  77. package/man/canon-plugin.1 +2 -2
  78. package/man/canon-policy-approve.1 +2 -2
  79. package/man/canon-policy-show.1 +2 -2
  80. package/man/canon-policy.1 +2 -2
  81. package/man/canon-prompt-add.1 +2 -2
  82. package/man/canon-prompt-show.1 +2 -2
  83. package/man/canon-prompt.1 +2 -2
  84. package/man/canon-purge.1 +2 -2
  85. package/man/canon-query.1 +5 -5
  86. package/man/canon-regime-show.1 +2 -2
  87. package/man/canon-regime.1 +2 -2
  88. package/man/canon-report-build.1 +2 -2
  89. package/man/canon-report-check.1 +2 -2
  90. package/man/canon-report-snapshot.1 +2 -2
  91. package/man/canon-report.1 +2 -2
  92. package/man/canon-retrieve.1 +5 -5
  93. package/man/canon-review-change.1 +6 -6
  94. package/man/canon-review-scenario.1 +6 -6
  95. package/man/canon-review.1 +2 -2
  96. package/man/canon-scenario-new.1 +10 -10
  97. package/man/canon-scenario.1 +2 -2
  98. package/man/canon-schema.1 +2 -2
  99. package/man/canon-search.1 +104 -0
  100. package/man/canon-selftest.1 +2 -2
  101. package/man/canon-skills-check.1 +2 -2
  102. package/man/canon-skills-doctor.1 +2 -2
  103. package/man/canon-skills-install.1 +2 -2
  104. package/man/canon-skills-show.1 +2 -2
  105. package/man/canon-skills.1 +2 -2
  106. package/man/canon-status.1 +7 -2
  107. package/man/canon-strategy-approval-payload.1 +2 -2
  108. package/man/canon-strategy-promote.1 +2 -2
  109. package/man/canon-strategy-rollback.1 +5 -5
  110. package/man/canon-strategy.1 +2 -2
  111. package/man/canon-subject-adopt.1 +4 -4
  112. package/man/canon-subject-move.1 +5 -5
  113. package/man/canon-subject-new.1 +5 -5
  114. package/man/canon-subject-show.1 +2 -2
  115. package/man/canon-subject-unadopt.1 +5 -5
  116. package/man/canon-subject.1 +2 -2
  117. package/man/canon-task-done.1 +2 -2
  118. package/man/canon-task.1 +2 -2
  119. package/man/canon-tier-age.1 +2 -2
  120. package/man/canon-tier.1 +2 -2
  121. package/man/canon-trace.1 +56 -0
  122. package/man/canon.1 +8 -2
  123. package/package.json +4 -4
@@ -17,7 +17,7 @@ state they are in.
17
17
  The order an agent follows to claim a subject done:
18
18
 
19
19
  1. **Test-run evidence** per owned scenario (`canon evidence add
20
- --scenario-id <id> --project-id <root-id> --session-id <session>` and the
20
+ --scenario <id> --project <root-id> --session <session>` and the
21
21
  rest of its options;
22
22
  final when it returns under `write: { promote: auto }`, which
23
23
  `canon init` writes, and followed by `canon gate promote` only under
@@ -26,9 +26,9 @@ The order an agent follows to claim a subject done:
26
26
  each issue the reviewer raises as a Finding, fix it, then close it:
27
27
 
28
28
  ```bash
29
- canon finding add --change-id c-demo --round 1 --seq 1 \
30
- --severity blocker --disposition open --actor-id reviewer-2 \
31
- --summary "unbounded subprocess wait" --session-id review-session-1
29
+ canon finding add --change c-demo --round 1 --seq 1 \
30
+ --severity blocker --introduced-unknown --disposition open --actor reviewer-2 \
31
+ --summary "unbounded subprocess wait" --session review-session-1
32
32
  # ... fix, commit ...
33
33
  canon finding close c-demo --round 1 --seq 1 \
34
34
  --disposition fixed --resolution-rev HEAD
@@ -42,9 +42,9 @@ The order an agent follows to claim a subject done:
42
42
  the evidence is in (the review pins what it saw):
43
43
 
44
44
  ```bash
45
- canon review scenario world.demo.01 --project-id root \
46
- --actor-id reviewer-2 --role reviewer \
47
- --session-id review-session-1 \
45
+ canon review scenario world.demo.01 --project root \
46
+ --actor reviewer-2 --role reviewer \
47
+ --session review-session-1 \
48
48
  --rev HEAD --upstream-ref "pr#41"
49
49
  ```
50
50
 
@@ -72,12 +72,12 @@ key, because two different findings under one key are two reviewers'
72
72
  work collapsed into one identity.
73
73
 
74
74
  ```text
75
- canon finding add --change-id <c> --round <n> --seq <n> \
75
+ canon finding add --change <c> --round <n> --seq <n> \
76
76
  --severity blocker|should-fix|note --disposition open \
77
- --actor-id <who> --summary "<one line>" \
78
- [--rev <rev>] [--resolution-rev <rev>] [--introduced-rev <rev>] [--file-ref path/to/file.rs:120-134] [--scenario-id <id>] [--session-id <id>]
77
+ --actor <who> --summary "<one line>" \
78
+ [--rev <rev>] [--resolution-rev <rev>] [--introduced-rev <rev> | --introduced-unknown] [--file-ref path/to/file.rs:120-134] [--scenario <id>] [--session <id>]
79
79
  canon finding close <c> --round <n> --seq <n> \
80
- --disposition fixed --resolution-rev <rev> [--actor-id <id>] [--session-id <id>] # or rejected / deferred / open
80
+ --disposition fixed --resolution-rev <rev> [--actor <id>] [--session <id>] # or rejected / deferred / open
81
81
  canon finding close <c> --round <n> --seq <n> \
82
82
  --disposition rejected|deferred --reason "<why, one line>"
83
83
  ```
@@ -88,7 +88,7 @@ on the closing version, shown by `finding list` as `[reason: …]` and carried
88
88
  in the JSON. Give the reason when you reject or defer: it is the only record
89
89
  of why the finding was not fixed.
90
90
 
91
- `--scenario-id` (repeatable, each a scenario the index knows; refused with
91
+ `--scenario` (repeatable, each a scenario the index knows; refused with
92
92
  `FINDING_UNKNOWN_SCENARIO` otherwise) names the scenarios the finding is
93
93
  about. After a `fixed` close, fresh evidence for those scenarios alone
94
94
  re-verifies the fix; a finding naming none asks every evidenced scenario of
@@ -103,7 +103,7 @@ run; nothing to promote``); under `write.promote: manual`
103
103
  changes only the disposition (and `resolution_sha` with it); severity,
104
104
  reviewer, summary, and refs are copied from the committed record. It
105
105
  appends a second version at the same natural key — the first stays. Its
106
- `--actor-id` and `--session-id` name who authored the transition; the
106
+ `--actor` and `--session` name who authored the transition; the
107
107
  raiser's stay on the first version.
108
108
 
109
109
  Every commit option (`--rev`, `--resolution-rev`, `--introduced-rev`)
@@ -111,7 +111,8 @@ takes any git revision (`HEAD~1`, a branch, a tag, a full or short sha),
111
111
  resolved with `git rev-parse --verify <rev>^{commit}`; the record stores
112
112
  the full sha. `--rev` (the commit the round reviewed) defaults to `HEAD`,
113
113
  and so does `--resolution-rev` on a `fixed` close; `--introduced-rev` has
114
- no default and is only sourced, never guessed. A revision that names no
114
+ no default and is only sourced, never guessed. A new `blocker` or `should-fix`
115
+ needs it or `--introduced-unknown` (never both). A revision that names no
115
116
  commit is refused (exit `2`). A finding recorded against uncommitted code
116
117
  is allowed: the record carries the `codeTree` it saw and `worktreeDirty`.
117
118
  Outside git, or in a repository with no commit, the write is refused with
@@ -119,7 +120,7 @@ Outside git, or in a repository with no commit, the write is refused with
119
120
 
120
121
  Many findings at once: `--input` takes inline JSON, a file or `-`; an array
121
122
  (or NDJSON) is a batch validated before any write. Keys are the option
122
- names in camelCase (`changeId`, `actorId`, `resolutionRev`); `canon schema
123
+ names in camelCase (`change`, `actor`, `resolutionRev`); `canon schema
123
124
  finding add --json` shows the input schema and an example. An identical
124
125
  repeat is `unchanged` (`meta.unchanged`) and writes nothing; a different
125
126
  finding under an occupied key is `FINDING_SEQ_OCCUPIED`.
@@ -127,13 +128,13 @@ finding under an occupied key is `FINDING_SEQ_OCCUPIED`.
127
128
  ### A defect the author found in its own work
128
129
 
129
130
  Record it like any other finding, at the moment you find it and before
130
- review, with `--actor-id` set to your own id; never ask
131
+ review, with `--actor` set to your own id; never ask
131
132
  the reviewer to record it later under theirs. Nothing refuses a finding
132
133
  whose reviewer is also the implementer, and an open `blocker` the author
133
134
  raised blocks under `block_on_findings` exactly like a reviewer's.
134
135
  `--introduced-rev` names the commit that introduced the defect, not who
135
136
  found it: `--introduced-rev self` is a usage error (exit 2) that points at
136
- `--actor-id`.
137
+ `--actor`.
137
138
 
138
139
  ### Severities
139
140
 
@@ -168,20 +169,20 @@ fixed finding reopened with `--disposition open` counts as open again.
168
169
  ## `canon review scenario`
169
170
 
170
171
  ```text
171
- canon review scenario <scenario-id> [<scenario-id>] --project-id <root-id> \
172
- --actor-id <who> [--rev <rev>] --role <role> \
173
- (--upstream-ref <ref> | --original-spec-ref <ref>) [--session-id <id>] \
172
+ canon review scenario <scenario-id> [<scenario-id>] --project <root-id> \
173
+ --actor <who> [--rev <rev>] --role <role> \
174
+ (--upstream-ref <ref> | --original-spec-ref <ref>) [--session <id>] \
174
175
  [--review-outcome signed|indeterminate|unavailable] \
175
176
  [--reviewer-provider <p>] [--reviewer-model <m>] [--reviewer-harness <h>] \
176
177
  [--artifact <path>] [--artifact <path>] [--max-artifact-mib <MiB>]
177
- canon review change <slug> --project-id <root> --actor-id <who> [--rev <rev>] \
178
+ canon review change <slug> --project <root> --actor <who> [--rev <rev>] \
178
179
  --role reviewer (--upstream-ref <ref> | --original-spec-ref <ref>) # a chore, below
179
180
  ```
180
181
 
181
182
  One attributed Review record per scenario, joined on
182
183
  `(project_id, scenario_id)` — both are required because two spec roots
183
184
  may carry the same scenario id. Exactly one provenance ref is required.
184
- `--actor-id` is the reviewer and is required; `--session-id` fills `actor.session_id`.
185
+ `--actor` is the reviewer and is required; `--session` fills `actor.session_id`.
185
186
  A Review carries no verdict about the behavior; the `verifying → shipped`
186
187
  ship gate still refuses missing or `Divergent` evidence verdicts on its
187
188
  own (a `Divergent` one passes only while a human's `canon divergence
@@ -320,7 +321,7 @@ sign-off or a rejection, and `review scenario` says so. `--reviewer-provider`,
320
321
  `--reviewer-model` and `--reviewer-harness` record the runtime that
321
322
  produced the review, as given. An empty or padded label is a usage error.
322
323
 
323
- `--session-id` (on `evidence add`, `review scenario`, `finding add` and
324
+ `--session` (on `evidence add`, `review scenario`, `finding add` and
324
325
  `finding close`) takes one opaque token: non-empty, no surrounding
325
326
  whitespace, no control characters. Anything else is a usage error
326
327
  (exit 2) and nothing is written.
@@ -345,7 +346,7 @@ spec_coverage:
345
346
  `spec_coverage.scope`. `spec_coverage.exclude_lanes` also exempts
346
347
  scenarios from review.
347
348
  - **`distinct_actor`** — a review only counts when both its `reviewer`
348
- and its actor (`--actor-id`) differ from every actor on that
349
+ and its actor (`--actor`) differ from every actor on that
349
350
  scenario's evidence records, and, when the review carries a session,
350
351
  that session differs from every session on those evidence records. An
351
352
  agent cannot review its own attested work, under another id or from
@@ -483,7 +484,7 @@ routing. The new Subject record lists exactly the violations it let
483
484
  through:
484
485
  `status_override: {to, reason, waived: [{class, subject}], actor: {agent_id}}`
485
486
  (`subject` is the scenario id, or `<change_id>#<round>.<seq>` for a
486
- blocker; actor from `--actor-id`, default `canon`). The command prints
487
+ blocker; actor from `--actor`, default `canon`). The command prints
487
488
  the `waived ...` lines and `override recorded by `lead` for the N
488
489
  violation(s) above: <reason>`. A blank or multi-line reason exits 2. The
489
490
  waiver covers only what it recorded, and clears on the subject's next
@@ -48,7 +48,7 @@ canon.yaml TierPolicy: `git` is a BACKEND name, not a rung — canon.yaml's
48
48
  ## Routing a record kind
49
49
 
50
50
  `routing:` is the only place a kind's rung is decided. Keys are the
51
- stable snake_case kind wire strings (`change`, `evidence_record`,
51
+ stable snake_case kind wire strings (`change`, `evidence`,
52
52
  `strategy_item`, …) — the same string the record's own `kind` field
53
53
  serializes to. Values are `local`/`hot`/`cold`.
54
54
 
@@ -132,6 +132,23 @@ has no archive and keeps every version.
132
132
  **Done when:** after `canon ledger compact --commit --plan-digest <digest
133
133
  from the preview>`, a bare `canon ledger compact` previews no effect.
134
134
 
135
+ ## How a record is named
136
+
137
+ Every store names a record the same way: `kind=<kind>/<key>_…_<digest8>.json`.
138
+ One directory level (no `area=`), the kind's key components joined by `_`
139
+ (a record with a `project_id` starts with it, `-` when absent; alternative
140
+ keys carry a tag: `scenario`, `change`, `task`, `run`), and the first 8 hex
141
+ digits of the content's SHA-256 last. Example:
142
+ `kind=review/canon_scenario_gate.check.104_e7f52dd1.json`. A review's pin is
143
+ in its body, not its name, so two reviews of one scenario share a key prefix
144
+ and differ by digest. Free-text ids escape bytes outside `[a-z0-9.-]` as `+`
145
+ and two hex digits. The same key with different content is refused in every
146
+ store. Readers take the digest from the record body, never the name. Evidence
147
+ is `evidence` everywhere (the 0.29 spelling `evidence_record` is gone). A
148
+ 0.29 repo warns on read and refuses writes until `canon migrate` (preview),
149
+ then `canon migrate --commit --plan-digest <digest>`, moves it. Full rule:
150
+ `docs/design/ledger-layout.md`.
151
+
135
152
  ## Where artifact bytes live (`artifact_store:`)
136
153
 
137
154
  ```yaml
@@ -248,8 +265,8 @@ write:
248
265
  `--promote` / `--no-promote` decide for one write and win over the config
249
266
  without reading it; both at once is a usage error (exit `2`). If the
250
267
  promotion refuses the command's own record, the record stays staged, the
251
- line ends ``— run `canon gate promote` to commit it`` (`canon divergence
252
- promote` for a divergence), and the command exits `1`. With neither flag,
268
+ line ends ``— run `canon gate promote` to commit it`` (`canon gate promote
269
+ --kind divergence` for a divergence), and the command exits `1`. With neither flag,
253
270
  a malformed `write:` section (anything but `promote: auto | manual`)
254
271
  refuses the write, exit `2`, before anything is staged. `canon init
255
272
  --check` reports `[PASS] write (promote: auto)`, `[not configured]