@journeykit/canon 0.8.0 → 0.9.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.
@@ -216,10 +216,12 @@ computes it; nothing here is derived a second time.
216
216
  Per-domain subject rollup: status × scenario coverage.
217
217
  One row per `subject` record, folded to its latest version, so a subject
218
218
  that walked proposed → shipped is still one row. `scenario_count` is how
219
- many `scenario_ids` the subject links; `covered_scenarios` is how many of
220
- those carry a latest NON-divergent evidence verdict (`faithful` or
221
- `not_applicable`), the same last-wins fold the `verifying -> shipped` gate
222
- uses. Read-only reporting; never a `canon gate` input. See `canon-subject`.
219
+ many scenarios the subject owns — those whose latest synced `Scenario`
220
+ generation carries `@subject:<id>` (run `canon inventory sync` after
221
+ tagging); `covered_scenarios` is how many of those carry a latest
222
+ NON-divergent evidence verdict (`faithful` or `not_applicable`), the same
223
+ join and last-wins fold the `verifying -> shipped` gate uses. Read-only
224
+ reporting; never a `canon gate` input. See `canon-subject`.
223
225
 
224
226
  - **Review rounds** (`mart_review_rounds`) — one row per `(change_id, round)`
225
227
  over `Finding` records (`canon finding add`, then `canon finding close` to
@@ -14,8 +14,17 @@ domain agent follows.
14
14
  A Subject is the product unit; its `.feature` files are its behavior
15
15
  specs. Never the same word.
16
16
 
17
- A Subject links, but does not contain, its work: `change_ids` (adopted
18
- plan units) and `scenario_ids` (behavior specs) are join links.
17
+ A Subject links, but does not contain, its work. Two joins, each
18
+ authored in one place:
19
+
20
+ - **Changes**: `change_ids` on the Subject, appended by `canon subject
21
+ adopt`.
22
+ - **Scenarios**: the `@subject:<id>` tag on each Gherkin scenario,
23
+ indexed onto `Scenario.subject_id` by `canon inventory sync`. The
24
+ Subject record carries no scenario list — the spec corpus is the only
25
+ source, and the Subjects report panel, `spec_coverage.scope`, and the
26
+ shipped gate all read it from there. To link a scenario, tag it and
27
+ re-sync; there is no subject-side command for it.
19
28
 
20
29
  ## The 4-step loop
21
30
 
@@ -52,8 +61,8 @@ canon subject new subject-domain-loop \
52
61
  `canon context` to see the set in force.
53
62
  - `--summary` is optional; `--owner-role` defaults to `implementer`;
54
63
  `--actor-id` defaults to `canon`. A freshly-authored Subject with no
55
- `change_ids`/`scenario_ids` is a valid minimal record and starts at
56
- status `proposed`. `--json` prints the written record.
64
+ adopted changes and no tagged scenarios is a valid minimal record and
65
+ starts at status `proposed`. `--json` prints the written record.
57
66
 
58
67
  ### 2. Retrieve subject-scoped strategy memory BEFORE working
59
68
 
@@ -120,12 +129,14 @@ blocking to subjects in named statuses, and `@subject:<id>` tagging is
120
129
  what brings a scenario into that scope. See `canon-gate`.
121
130
 
122
131
  **The `verifying → shipped` evidence gate:** shipping additionally
123
- requires that EVERY linked `scenario_ids` entry carries a latest,
124
- non-`Divergent` verdict in the ledger (the same last-wins rule `canon
125
- gate check` uses). If any linked scenario is uncovered or its latest
126
- verdict is `Divergent`, the transition prints the violating scenarios by
127
- failure class, exits 1, and the status stays `verifying`. `retired` is
128
- not gated.
132
+ requires that the Subject OWNS at least one scenario (one whose latest
133
+ synced generation carries `@subject:<id>`), and that EVERY owned
134
+ scenario carries a latest, non-`Divergent` verdict in the ledger (the
135
+ same last-wins rule `canon gate check` uses). A Subject with no tagged
136
+ scenario is refused rather than shipped on an empty set; so is one whose
137
+ `scenario` records route away from the gate's rung. Each refusal prints
138
+ by failure class (`uncovered-cell`), exits 1, and the status stays
139
+ `verifying`. `retired` is not gated.
129
140
 
130
141
  ## Adopt flow
131
142
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@journeykit/canon",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "canon — harness knowledge substrate. JS launcher: platform detection + native binary resolution.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -29,9 +29,9 @@
29
29
  },
30
30
  "dependencies": {},
31
31
  "optionalDependencies": {
32
- "@journeykit/canon-core-darwin-arm64": "0.8.0",
33
- "@journeykit/canon-core-linux-x64": "0.8.0",
34
- "@journeykit/canon-core-win32-x64": "0.8.0"
32
+ "@journeykit/canon-core-darwin-arm64": "0.9.0",
33
+ "@journeykit/canon-core-linux-x64": "0.9.0",
34
+ "@journeykit/canon-core-win32-x64": "0.9.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/node": "^20.0.0",