@sabaiway/agent-workflow-engine 3.3.0 → 4.0.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/CHANGELOG.md CHANGED
@@ -4,6 +4,41 @@ All notable changes to the methodology engine. Versions are this **package's** n
4
4
  they are distinct from the **deployment-lineage** stamp written into a project's `docs/ai/`
5
5
  (which tracks the shared `agent-workflow` lineage, head `3.0.0`).
6
6
 
7
+ ## 4.0.0 — the scenario floor, and five answers the canon now states at its own points of use (AD-117)
8
+
9
+ Slice 4 wrote the layer's first real specs and came back with six questions the canon had left for
10
+ the next reader to rediscover. Five are answered here, IN `references/specs.md`, each at the point
11
+ where it is needed — and four of the five answers are a refusal to add a mechanism.
12
+
13
+ > ### ⚠ BREAKING — a spec written to the 3.3.0 canon can be invalid under this one
14
+ >
15
+ > `## Scenarios` gains a floor: at least one scenario line, with no empty-marker escape. A document
16
+ > the 3.3.0 canon and its reader both accepted now refuses as `scenarios-empty`. Same class as
17
+ > **3.0.0**, where deleting a vocabulary from the canon was already called MAJOR. The remedy is one
18
+ > line per scenario — `- S<N> <name> :: unbound` while no test pins it.
19
+
20
+ - **(1) No empty-marker escape on `## Scenarios`.** `*(empty)*` written there refuses as
21
+ `scenario-line`; `unbound` already covers a scenario no test pins yet. An empty exclusion list is a
22
+ claim, an empty scenario list is an absence. The refusal table gains the matching `scenarios-empty`
23
+ row, in the reader's own order.
24
+ - **(2) A binding marker is an ORDINARY source line.** It counts toward the source-size practice like
25
+ any other line, and a pinning file already at its cap raises its recorded ratchet to host one. No
26
+ carve-out: the size judge counts bytes and must not learn spec vocabulary.
27
+ - **(3) There is NO sidecar binding form.** Retroactive coverage of a PUBLISHED package rides a
28
+ release train, because the marker moves that package's subtree — a cost the family already pays
29
+ deliberately, against a second place a binding could live.
30
+ - **(4) No `root` op verb.** The store root is the navigator, never an op target; it is judged as the
31
+ listing parent of its declared child. The canon says so where containment is defined.
32
+ - **(5) The promoting event of a RETROACTIVE draft is PLAN APPROVAL.** `live` lands in the SAME slice
33
+ that authors the draft, once every scenario is bound — otherwise a slice whose whole deliverable IS
34
+ the specs has no later landing row, and the store's first contracts stay permanently provisional by
35
+ the canon's own wording.
36
+ - `test/specs-canon.test.mjs` pins all five as prose assertions at their point of use, absorbs the
37
+ new rule in the rules-table deep-equal, and gains two refuse fixtures — the empty section and the
38
+ empty marker — each yielding exactly its one rule. The arm was red-proofed against the unchanged
39
+ canon.
40
+
41
+
7
42
  ## 3.3.0 — the feature-spec canon: `references/specs.md`, the `Spec-first` lens bullet, specs as plan rows (AD-112)
8
43
 
9
44
  - **`references/specs.md`** (NEW) — the canon of the feature-spec layer in the family's own
package/SKILL.md CHANGED
@@ -3,7 +3,7 @@ name: agent-workflow-engine
3
3
  description: Canonical home of the agent-workflow planning methodology — the capped plan shape (goal and boundary, module ledger, verification), plan lifecycle, queue.md series index, mandatory Cleanup phase, the feature-spec canon (the durable per-feature contract layer with its frozen schema and Out-of-scope discipline), the bounded methodology slot fragment, the orchestration-recipe vocabulary (Solo / Reviewed / Council / Delegated), and the activity-procedures canon (plan-authoring / plan-execution, with typed recipe slots). A published, installable npm package (available:true) that *provides* the methodology text; it mutates nothing. The composition root (agent-workflow-kit) reads this canon LIVE from the installed engine and injects the bounded slots from it — one source of truth, no bundled mirror; `npx @sabaiway/agent-workflow-kit@latest init` installs the engine.
4
4
  disable-model-invocation: true
5
5
  metadata:
6
- version: '3.3.0'
6
+ version: '4.0.0'
7
7
  ---
8
8
 
9
9
  # agent-workflow-engine
package/capability.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "schema": 1,
4
4
  "name": "agent-workflow-engine",
5
5
  "kind": "methodology-engine",
6
- "version": "3.3.0",
6
+ "version": "4.0.0",
7
7
  "available": true,
8
8
  "provides": ["plan"],
9
9
  "roles": {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sabaiway/agent-workflow-engine",
3
- "version": "3.3.0",
3
+ "version": "4.0.0",
4
4
  "description": "Canonical home of the agent-workflow planning methodology — the capped plan shape (goal and boundary, module ledger, verification), plan lifecycle, queue.md series index, and mandatory Cleanup phase, consumed by the kit (composition root). The methodology engine of the agent-workflow family.",
5
5
  "keywords": [
6
6
  "ai-agents",
@@ -46,6 +46,9 @@ against it.
46
46
  `^[a-z0-9]+(-[a-z0-9]+)*$`. Every path segment under the store is a slug.
47
47
  - **Scenario line** — `- S<N> <name> :: <repo-relative test path> :: spec:<slug>/S<N>` or
48
48
  `- S<N> <name> :: unbound`; N runs contiguously from 1; the marker equals the line's own id.
49
+ - **`## Scenarios`** — at least one scenario line; `*(empty)*` is NOT an escape here (it refuses as
50
+ `scenario-line`), because an `unbound` line already covers a scenario no test pins yet. A contract
51
+ that pins nothing is the one shape the layer exists to refuse.
49
52
  - **`## Module`** — bullets of repo-relative paths: ONE `dir/` root OR a literal file list. `..`,
50
53
  an absolute path, a backslash, a glob, and a dir + file mix each REFUSE. A retired spec may carry
51
54
  `*(empty)*`.
@@ -99,6 +102,7 @@ refuse case per rule and an accept case per kind; a refuse fixture yields exactl
99
102
  | `scenario-number` | scenario ids not contiguous from 1 |
100
103
  | `scenario-marker` | a marker whose slug or id differs from its own line |
101
104
  | `scenario-path` | a binding's test path that is not a repo-relative file |
105
+ | `scenarios-empty` | a `## Scenarios` section carrying no scenario line |
102
106
  | `out-of-scope` | no non-blank bullet and not exactly `*(empty)*` |
103
107
  | `module-line` | a `## Module` line that is not a `- <path>` bullet |
104
108
  | `module-empty` | no module path and not exactly `*(empty)*` (a retired spec may carry the marker instead of a path) |
@@ -129,12 +133,17 @@ refuse case per rule and an accept case per kind; a refuse fixture yields exactl
129
133
  scenario on a live spec is individually `unbound` until its test lands within the same plan — the
130
134
  spec's status never regresses for an extension. The binding is literal and language-agnostic: the
131
135
  marker `spec:<slug>/S<N>` must occur exactly once in the named file. The honest claim is an
132
- advisory structural pin; runnability and greenness stay the test suite's own gate.
136
+ advisory structural pin; runnability and greenness stay the test suite's own gate. A marker is an
137
+ ORDINARY source line — it counts toward the source-size practice like any other, and a pinning file
138
+ already at its cap raises the recorded ratchet to host one. There is NO sidecar binding form:
139
+ retroactive coverage of a PUBLISHED package rides a release train, because the marker moves that
140
+ package's subtree.
133
141
  - **Containment** is lexical AND realpath on every path-bearing field (bindings, child links, module
134
142
  roots). The reader judges the lexical half; realpath and symlink escapes are the structural
135
143
  checker's duty (`spec-check`, a later slice), together with marker existence and uniqueness, link
136
144
  resolution and the global invariants (slug uniqueness, module-root overlap, tree acyclicity) that
137
- only a full-tree sweep can prove.
145
+ only a full-tree sweep can prove. The store ROOT is never an op target and needs no `root` verb: it
146
+ is the navigator, judged as the listing parent of its declared child.
138
147
 
139
148
  ## Precedence — feature spec and page spec
140
149
 
@@ -176,8 +185,11 @@ that changes a contract triggers a spec revision.
176
185
 
177
186
  The onboarding path for an existing feature: read the code, author a `draft` spec from it (the
178
187
  contract it actually keeps, the scenarios its tests already pin, the Out of scope its boundaries
179
- imply), then human review promotes it to `live` through a plan. Used to dogfood the family's own
180
- subsystems; a legacy module binds through a declared file set, never a refactor ride-along.
188
+ imply), then human review promotes it to `live` through a plan. The promoting event of a retroactive
189
+ draft is PLAN APPROVAL `live` lands in the SAME slice that authors the draft, once every scenario
190
+ is bound; a slice whose whole deliverable is the specs needs no later plan to leave them provisional.
191
+ Used to dogfood the family's own subsystems; a legacy module binds through a declared file set, never
192
+ a refactor ride-along.
181
193
 
182
194
  ## Scale
183
195