@journeykit/canon 0.12.0 → 0.13.1

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.
@@ -11,17 +11,19 @@ Use this single skill when working with Canon in a consumer repository. Canon's
11
11
 
12
12
  ```bash
13
13
  canon init
14
- canon skills install # detects .claude/.codex/.omp/.pi; if none exists, installs Claude+Codex
14
+ canon skills install # detects .claude/.agents|.codex/.omp/.pi; if none exists, installs Claude+Codex
15
15
  canon skills install --providers=claude,codex,omp,pi
16
16
  canon skills check # read-only drift check
17
17
  canon skills doctor # diagnostics; never deletes user files
18
18
  ```
19
19
 
20
20
  The canonical bundle is read-only. Claude receives
21
- `.claude/skills/canon/SKILL.md`; Codex receives the flattened
22
- `.codex/skills/canon.md`; OMP receives `.omp/skills/canon/SKILL.md`; and Pi
23
- receives `.pi/skills/canon/SKILL.md`. Every selected provider receives matching
24
- `reference/**` and `scripts/**` sidecars under its `canon` bundle. OMP and Pi
21
+ `.claude/skills/canon/SKILL.md`; Codex receives
22
+ `.agents/skills/canon/SKILL.md`; OMP receives `.omp/skills/canon/SKILL.md`; and
23
+ Pi receives `.pi/skills/canon/SKILL.md`. Every selected provider receives
24
+ matching `reference/**` and `scripts/**` sidecars under its `canon` bundle. A
25
+ legacy `.codex/skills/canon*` projection from canon 0.13.0 or earlier is
26
+ migrated by `canon skills install` and reported by `check`/`doctor`. OMP and Pi
25
27
  projections are project-local passive skill bundles: the
26
28
  `scripts/canon-retrieve-pre-dispatch.sh` file is available as a sidecar, not
27
29
  installed as a native hook. Load only the reference needed for the current
@@ -100,7 +100,27 @@ output form includes captured prompt bytes.
100
100
  - **`joinKeys`** — the join-spine grammar string per key (`regime_key`,
101
101
  `session_id`, `task_id`, …).
102
102
  - **`policy`** — the resolved `policy.yaml`-derived evidence/trust
103
- requirements per kind.
103
+ requirements per kind, plus `clean` and the policy `diagnostics`
104
+ (an unknown top-level key is one). In `--json`, `spec_coverage` and
105
+ `evidence_binding` are objects keyed like `policy.yaml`, with booleans
106
+ as booleans and lists as arrays (an empty `scope`/`case`/`lane` means
107
+ unfiltered):
108
+
109
+ ```json
110
+ "spec_coverage": {"require_evidence": true, "scope": ["building", "verifying"],
111
+ "exclude_lanes": ["process"], "require_cases": ["failure"],
112
+ "require_review": {"scope": ["verifying", "shipped"], "distinct_actor": true, "block_on_findings": true}},
113
+ "evidence_binding": {"mode": "warn", "strength": "report", "case": ["failure"], "lane": [], "scope": []}
114
+ ```
115
+
116
+ `spec_coverage` is `null` when absent, `require_review` is `null` when
117
+ its sub-section is absent, and `evidence_binding` is omitted when absent.
118
+ A present but unusable section is `{"invalid": "<detail>"}`. The text
119
+ outline keeps its one-line summaries (`spec_coverage: INVALID — …`).
120
+ - **`review`** — finding severities and dispositions, the Review fields,
121
+ and `requireReview`: `{"scope": [...], "distinctActor": true,
122
+ "blockOnFindings": true}`, or `null` when review is not required
123
+ (absent, or `spec_coverage` is absent or invalid).
104
124
  - **`vocab`** — the typed authoring vocabulary (directive/enum/evidence-
105
125
  kind index) + its content-hash version.
106
126
  - **`cel`** — the per-kind CEL binding surface: the bindable
@@ -6,6 +6,23 @@ mapping guards, retrieval filters, and a template's `applies_when:`
6
6
  section. Wherever a `policy.yaml` predicate or an `applies_when:` string
7
7
  appears, it is a CEL expression evaluated against the target record.
8
8
 
9
+ ## Top-level keys
10
+
11
+ `.canon/policy.yaml` accepts exactly these top-level keys:
12
+ `adapter_capabilities`, `allowed_signers`, `approval`, `experimental`,
13
+ `query`, `risk_approvals`, `risk_routing`, `risk_tiers`, `schema`,
14
+ `spec_coverage`, `staleness`, `trust_required`, `trust_sample`
15
+ (`risk_approvals` and a top-level `allowed_signers` are compatibility
16
+ aliases for `approval.allowed_signers`). Any other key, usually a typo,
17
+ is a policy diagnostic, and `canon gate check` fails on it:
18
+
19
+ ```
20
+ uncovered-cell spec_coverag — `spec_coverag` is not a known top-level policy.yaml key (known keys: adapter_capabilities, allowed_signers, approval, experimental, query, risk_approvals, risk_routing, risk_tiers, schema, spec_coverage, staleness, trust_required, trust_sample); fix it or remove it — an unknown key is never silently ignored
21
+ ```
22
+
23
+ The known keys still resolve normally, and `canon context` lists the
24
+ diagnostic and reports `clean: false`.
25
+
9
26
  ## The closed CEL profile
10
27
 
11
28
  Every expression is evaluated against exactly one variable, `record` (the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@journeykit/canon",
3
- "version": "0.12.0",
3
+ "version": "0.13.1",
4
4
  "description": "canon — harness knowledge substrate. JS launcher: platform detection + native binary resolution.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -30,9 +30,9 @@
30
30
  },
31
31
  "dependencies": {},
32
32
  "optionalDependencies": {
33
- "@journeykit/canon-core-darwin-arm64": "0.12.0",
34
- "@journeykit/canon-core-linux-x64": "0.12.0",
35
- "@journeykit/canon-core-win32-x64": "0.12.0"
33
+ "@journeykit/canon-core-darwin-arm64": "0.13.1",
34
+ "@journeykit/canon-core-linux-x64": "0.13.1",
35
+ "@journeykit/canon-core-win32-x64": "0.13.1"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/node": "^20.0.0",