@sabaiway/agent-workflow-engine 3.3.0 → 4.1.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 +51 -0
- package/SKILL.md +1 -1
- package/capability.json +1 -1
- package/package.json +1 -1
- package/references/planning.md +14 -0
- package/references/procedures.md +1 -1
- package/references/specs.md +16 -4
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,57 @@ 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.1.0 — the queue is a named surface with a checker, not a prose promise
|
|
8
|
+
|
|
9
|
+
`references/planning.md` gains **`## The queue`**: `docs/plans/queue.md` NAMES work and never holds
|
|
10
|
+
the analysis of it — a row is one plain sentence saying what the work is and for whom, then its id,
|
|
11
|
+
then a short body, while measurements and `file:line` citations belong to an ADR or the record the
|
|
12
|
+
row points at. A row that goes terminal is DELETED in the same change that mints its closing
|
|
13
|
+
artifact, and where the queue is gitignored the deleted text is first written to a purge archive,
|
|
14
|
+
because there git history is no tombstone. Frozen work with a stated resume condition is not
|
|
15
|
+
terminal and stays, in its own bucket; order inside a bucket IS priority.
|
|
16
|
+
|
|
17
|
+
The canon names its own rung and the command that runs it, because a prose promise to trim later was
|
|
18
|
+
measured failing — 62 dead rows had accumulated by the time anybody counted.
|
|
19
|
+
|
|
20
|
+
`references/procedures.md` points at the new section by named anchor and stays the terse pointer it
|
|
21
|
+
is meant to be (its own test asserts it stays smaller than the canon it binds to).
|
|
22
|
+
|
|
23
|
+
## 4.0.0 — the scenario floor, and five answers the canon now states at its own points of use (AD-117)
|
|
24
|
+
|
|
25
|
+
Slice 4 wrote the layer's first real specs and came back with six questions the canon had left for
|
|
26
|
+
the next reader to rediscover. Five are answered here, IN `references/specs.md`, each at the point
|
|
27
|
+
where it is needed — and four of the five answers are a refusal to add a mechanism.
|
|
28
|
+
|
|
29
|
+
> ### ⚠ BREAKING — a spec written to the 3.3.0 canon can be invalid under this one
|
|
30
|
+
>
|
|
31
|
+
> `## Scenarios` gains a floor: at least one scenario line, with no empty-marker escape. A document
|
|
32
|
+
> the 3.3.0 canon and its reader both accepted now refuses as `scenarios-empty`. Same class as
|
|
33
|
+
> **3.0.0**, where deleting a vocabulary from the canon was already called MAJOR. The remedy is one
|
|
34
|
+
> line per scenario — `- S<N> <name> :: unbound` while no test pins it.
|
|
35
|
+
|
|
36
|
+
- **(1) No empty-marker escape on `## Scenarios`.** `*(empty)*` written there refuses as
|
|
37
|
+
`scenario-line`; `unbound` already covers a scenario no test pins yet. An empty exclusion list is a
|
|
38
|
+
claim, an empty scenario list is an absence. The refusal table gains the matching `scenarios-empty`
|
|
39
|
+
row, in the reader's own order.
|
|
40
|
+
- **(2) A binding marker is an ORDINARY source line.** It counts toward the source-size practice like
|
|
41
|
+
any other line, and a pinning file already at its cap raises its recorded ratchet to host one. No
|
|
42
|
+
carve-out: the size judge counts bytes and must not learn spec vocabulary.
|
|
43
|
+
- **(3) There is NO sidecar binding form.** Retroactive coverage of a PUBLISHED package rides a
|
|
44
|
+
release train, because the marker moves that package's subtree — a cost the family already pays
|
|
45
|
+
deliberately, against a second place a binding could live.
|
|
46
|
+
- **(4) No `root` op verb.** The store root is the navigator, never an op target; it is judged as the
|
|
47
|
+
listing parent of its declared child. The canon says so where containment is defined.
|
|
48
|
+
- **(5) The promoting event of a RETROACTIVE draft is PLAN APPROVAL.** `live` lands in the SAME slice
|
|
49
|
+
that authors the draft, once every scenario is bound — otherwise a slice whose whole deliverable IS
|
|
50
|
+
the specs has no later landing row, and the store's first contracts stay permanently provisional by
|
|
51
|
+
the canon's own wording.
|
|
52
|
+
- `test/specs-canon.test.mjs` pins all five as prose assertions at their point of use, absorbs the
|
|
53
|
+
new rule in the rules-table deep-equal, and gains two refuse fixtures — the empty section and the
|
|
54
|
+
empty marker — each yielding exactly its one rule. The arm was red-proofed against the unchanged
|
|
55
|
+
canon.
|
|
56
|
+
|
|
57
|
+
|
|
7
58
|
## 3.3.0 — the feature-spec canon: `references/specs.md`, the `Spec-first` lens bullet, specs as plan rows (AD-112)
|
|
8
59
|
|
|
9
60
|
- **`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: '
|
|
6
|
+
version: '4.1.0'
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# agent-workflow-engine
|
package/capability.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sabaiway/agent-workflow-engine",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.1.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",
|
package/references/planning.md
CHANGED
|
@@ -118,6 +118,20 @@ plan file, and plan paths inside committed docs, are forbidden.
|
|
|
118
118
|
and the docs cap-validator is green. An aborted plan still runs Cleanup — partial outputs land in
|
|
119
119
|
`known_issues.md`.
|
|
120
120
|
|
|
121
|
+
## The queue
|
|
122
|
+
|
|
123
|
+
`docs/plans/queue.md` NAMES work; it never holds the analysis of it. A row is one plain sentence
|
|
124
|
+
saying what the work is and for whom, then its id, then a short body — measurements, `file:line`
|
|
125
|
+
citations and fix direction belong to an ADR or the record the row points at. A row that goes
|
|
126
|
+
terminal is DELETED in the same change that mints its closing artifact — and where the queue is
|
|
127
|
+
gitignored, the deleted text is first written to a purge archive beside the history docs, because
|
|
128
|
+
there git history is no tombstone. In a hidden deployment that archive is machine-local like the rest
|
|
129
|
+
of the substrate: its guarantee is the working copy, not git. Frozen work with a stated resume
|
|
130
|
+
condition is not terminal and stays, in its own bucket. Order inside a bucket IS priority.
|
|
131
|
+
A prose promise to trim later has been measured failing: a checker over the file is the rung, and it
|
|
132
|
+
is runnable — `node <kit>/tools/queue-audit-cli.mjs --check docs/plans/queue.md --section '<bucket
|
|
133
|
+
heading>' --max-rows <n> --max-row-lines <n>`, declared as a project gate once the queue has migrated.
|
|
134
|
+
|
|
121
135
|
## The plan must read cold
|
|
122
136
|
|
|
123
137
|
The executing session sees the plan file and the repository, never the authoring conversation.
|
package/references/procedures.md
CHANGED
|
@@ -38,7 +38,7 @@ Slots: review
|
|
|
38
38
|
a `create` row and a revision of a governed contract a `modify` row, both written here so they
|
|
39
39
|
exist AT review.
|
|
40
40
|
3. **Self-review** — apply *What gets cut*; fold by code (read and cite the `file:line`); update
|
|
41
|
-
`queue.md` for a series.
|
|
41
|
+
`queue.md` for a series, to the shape *The queue* fixes.
|
|
42
42
|
4. **review {recipe}** — Solo (self-review only) / Reviewed (one backend) / Council (both; you
|
|
43
43
|
synthesize), as the resolved `review` recipe selects.
|
|
44
44
|
5. **Fold + loop** — fold every finding and re-review; CLEAN is **0 blockers + 0 majors** from every
|
package/references/specs.md
CHANGED
|
@@ -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.
|
|
180
|
-
|
|
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
|
|