@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.
- package/dist/skills/SKILL.src.md +48 -22
- package/dist/skills/reference/brief-polish.md +4 -4
- package/dist/skills/reference/brief-shape.md +38 -7
- package/dist/skills/reference/canon-authoring.md +6 -6
- package/dist/skills/reference/canon-gate.md +49 -34
- package/dist/skills/reference/canon-learn.md +2 -2
- package/dist/skills/reference/canon-plan-import.md +2 -2
- package/dist/skills/reference/canon-plugins.md +6 -6
- package/dist/skills/reference/canon-report-dashboard.md +12 -8
- package/dist/skills/reference/canon-review.md +26 -25
- package/dist/skills/reference/canon-storage.md +20 -3
- package/dist/skills/reference/canon-subject.md +132 -98
- package/dist/skills/reference/role-implementer.md +42 -28
- package/dist/skills/reference/role-orchestrator.md +40 -24
- package/dist/skills/reference/role-planner.md +32 -17
- package/dist/skills/reference/role-reviewer.md +48 -30
- package/man/canon-adapter-authorize.1 +2 -2
- package/man/canon-adapter-validate.1 +2 -2
- package/man/canon-adapter.1 +2 -2
- package/man/canon-artifacts-move.1 +2 -2
- package/man/canon-artifacts-store.1 +2 -2
- package/man/canon-artifacts-verify.1 +2 -2
- package/man/canon-artifacts.1 +2 -2
- package/man/canon-brief-approve.1 +7 -4
- package/man/canon-brief-check.1 +2 -2
- package/man/canon-brief-show.1 +2 -2
- package/man/canon-brief.1 +8 -7
- package/man/canon-change-new.1 +4 -4
- package/man/canon-change.1 +3 -3
- package/man/canon-completion.1 +2 -2
- package/man/canon-context-pack-add.1 +2 -2
- package/man/canon-context-pack-show.1 +2 -2
- package/man/canon-context-pack-verify.1 +2 -2
- package/man/canon-context-pack.1 +2 -2
- package/man/canon-context.1 +2 -2
- package/man/canon-dashboard.1 +2 -2
- package/man/canon-demo-init.1 +2 -2
- package/man/canon-demo-review.1 +2 -2
- package/man/canon-demo.1 +2 -2
- package/man/canon-dispatch-begin.1 +10 -10
- package/man/canon-dispatch-diff.1 +2 -2
- package/man/canon-dispatch-end.1 +2 -2
- package/man/canon-dispatch.1 +2 -2
- package/man/canon-divergence-accept.1 +6 -6
- package/man/canon-divergence-add.1 +6 -6
- package/man/canon-divergence-defer.1 +6 -6
- package/man/canon-divergence-list.1 +2 -2
- package/man/canon-divergence-resolve.1 +6 -6
- package/man/canon-divergence.1 +2 -2
- package/man/canon-evidence-add.1 +16 -16
- package/man/canon-evidence-approval-payload.1 +10 -10
- package/man/canon-evidence-audit.1 +10 -10
- package/man/canon-evidence.1 +3 -3
- package/man/canon-export.1 +2 -2
- package/man/canon-feature-new.1 +6 -6
- package/man/canon-feature.1 +2 -2
- package/man/canon-finding-add.1 +23 -11
- package/man/canon-finding-close.1 +8 -8
- package/man/canon-finding-list.1 +4 -4
- package/man/canon-finding.1 +4 -4
- package/man/canon-format.1 +2 -2
- package/man/canon-gate-check.1 +2 -2
- package/man/canon-gate-install-hooks.1 +2 -2
- package/man/canon-gate-promote.1 +2 -2
- package/man/canon-gate.1 +2 -2
- package/man/canon-ingest-plans.1 +2 -2
- package/man/canon-ingest-records.1 +4 -4
- package/man/canon-ingest-sessions.1 +2 -2
- package/man/canon-ingest.1 +2 -2
- package/man/canon-init.1 +2 -2
- package/man/canon-inventory-sync.1 +2 -2
- package/man/canon-inventory.1 +2 -2
- package/man/canon-ledger-compact.1 +2 -2
- package/man/canon-ledger.1 +2 -2
- package/man/canon-migrate.1 +25 -3
- package/man/canon-plugin-sync.1 +2 -2
- package/man/canon-plugin.1 +2 -2
- package/man/canon-policy-approve.1 +2 -2
- package/man/canon-policy-show.1 +2 -2
- package/man/canon-policy.1 +2 -2
- package/man/canon-prompt-add.1 +2 -2
- package/man/canon-prompt-show.1 +2 -2
- package/man/canon-prompt.1 +2 -2
- package/man/canon-purge.1 +2 -2
- package/man/canon-query.1 +5 -5
- package/man/canon-regime-show.1 +2 -2
- package/man/canon-regime.1 +2 -2
- package/man/canon-report-build.1 +2 -2
- package/man/canon-report-check.1 +2 -2
- package/man/canon-report-snapshot.1 +2 -2
- package/man/canon-report.1 +2 -2
- package/man/canon-retrieve.1 +5 -5
- package/man/canon-review-change.1 +6 -6
- package/man/canon-review-scenario.1 +6 -6
- package/man/canon-review.1 +2 -2
- package/man/canon-scenario-new.1 +10 -10
- package/man/canon-scenario.1 +2 -2
- package/man/canon-schema.1 +2 -2
- package/man/canon-search.1 +104 -0
- package/man/canon-selftest.1 +2 -2
- package/man/canon-skills-check.1 +2 -2
- package/man/canon-skills-doctor.1 +2 -2
- package/man/canon-skills-install.1 +2 -2
- package/man/canon-skills-show.1 +2 -2
- package/man/canon-skills.1 +2 -2
- package/man/canon-status.1 +7 -2
- package/man/canon-strategy-approval-payload.1 +2 -2
- package/man/canon-strategy-promote.1 +2 -2
- package/man/canon-strategy-rollback.1 +5 -5
- package/man/canon-strategy.1 +2 -2
- package/man/canon-subject-adopt.1 +4 -4
- package/man/canon-subject-move.1 +5 -5
- package/man/canon-subject-new.1 +5 -5
- package/man/canon-subject-show.1 +2 -2
- package/man/canon-subject-unadopt.1 +5 -5
- package/man/canon-subject.1 +2 -2
- package/man/canon-task-done.1 +2 -2
- package/man/canon-task.1 +2 -2
- package/man/canon-tier-age.1 +2 -2
- package/man/canon-tier.1 +2 -2
- package/man/canon-trace.1 +56 -0
- package/man/canon.1 +8 -2
- 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
|
|
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
|
|
30
|
-
--severity blocker --disposition open --actor
|
|
31
|
-
--summary "unbounded subprocess wait" --session
|
|
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
|
|
46
|
-
--actor
|
|
47
|
-
--session
|
|
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
|
|
75
|
+
canon finding add --change <c> --round <n> --seq <n> \
|
|
76
76
|
--severity blocker|should-fix|note --disposition open \
|
|
77
|
-
--actor
|
|
78
|
-
[--rev <rev>] [--resolution-rev <rev>] [--introduced-rev <rev>] [--file-ref path/to/file.rs:120-134] [--scenario
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 (`
|
|
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
|
|
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
|
|
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
|
|
172
|
-
--actor
|
|
173
|
-
(--upstream-ref <ref> | --original-spec-ref <ref>) [--session
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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`, `
|
|
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
|
|
252
|
-
|
|
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]
|