@sabaiway/agent-workflow-engine 1.7.0 → 1.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.
- package/CHANGELOG.md +34 -0
- package/SKILL.md +1 -1
- package/bin/install.mjs +16 -6
- package/capability.json +1 -1
- package/package.json +1 -1
- package/references/orchestration.md +12 -1
- package/references/planning.md +3 -1
- package/references/procedures.md +11 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,40 @@ 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 `1.3.0`).
|
|
6
6
|
|
|
7
|
+
## 1.9.0 — Honest installer messaging: the verb states what was observed, the note states facts
|
|
8
|
+
|
|
9
|
+
A **feature** release (installer output contract only; the canon text is unchanged). `bin/install.mjs`
|
|
10
|
+
no longer claims "updated the canon to vX" on every run and no longer accuses the npx cache on a
|
|
11
|
+
same-version re-run:
|
|
12
|
+
|
|
13
|
+
- **The final verb is keyed on the OBSERVED version comparison**, never on mere presence: fresh or
|
|
14
|
+
legacy/unstamped → `installed` (no transition claim when the prior version is unknowable); older →
|
|
15
|
+
`updated the canon to vX`; same → `refreshed the already-current canon`; newer → `downgraded the
|
|
16
|
+
canon to vX` (reachable only under the explicit `--allow-downgrade`).
|
|
17
|
+
- **The same-version note states observable facts only** — the copy still ran (a re-run repairs
|
|
18
|
+
locally modified or deleted files) — plus a CONDITIONAL hint: *if you expected a newer version*,
|
|
19
|
+
invoke the `@latest` tag explicitly. The "npx likely served a cached build" accusation is gone
|
|
20
|
+
(not observable without a network check).
|
|
21
|
+
- The never-downgrade gate, its refusal wording, and the read-before-write ordering are untouched.
|
|
22
|
+
|
|
23
|
+
## 1.8.0 — Mechanize the §9 review-loop discipline (round cap · crossover · finding-origin)
|
|
24
|
+
|
|
25
|
+
A **feature** release. The methodology canon institutionalizes the review-loop economics so the round
|
|
26
|
+
cap, the crossover stop, and the finding-origin discipline stop being deletable prose:
|
|
27
|
+
|
|
28
|
+
- **`planning.md` §9** gains a *Fold minimally — a prose plan has no checker* bullet (a self-consistency
|
|
29
|
+
read; fold minimally in ONE place), and the *Heavy review at the diff* bullet now names
|
|
30
|
+
**backend divergence** as the crossover and routes an all-mechanics/CI or prose-only artifact to a
|
|
31
|
+
**thin plan + diff-review**.
|
|
32
|
+
- **`orchestration.md` §4/§5** adds the **backend-divergence stop-signal**, reconciled with recipe
|
|
33
|
+
fidelity: divergence bounds the *rounds*, never drops a ready backend within one.
|
|
34
|
+
- **`procedures.md`** requires a per-round emission **{round N · finding-origin tally · per-backend
|
|
35
|
+
verdict}** at the loop point of *both* activities.
|
|
36
|
+
|
|
37
|
+
Guarded non-vacuously: `planning-`/`procedures-`/`orchestration-canon` gain region-scoped tokens; the
|
|
38
|
+
kit's `lens-mirror` registers the five review-loop tokens (Set-1) + the M6 `finding-origin` token (Set-2).
|
|
39
|
+
Deployment-lineage head stays `1.3.0` (no `docs/ai` migration).
|
|
40
|
+
|
|
7
41
|
## 1.7.0 — Harden the planning canon: process-fidelity + regression-free editing
|
|
8
42
|
|
|
9
43
|
A **feature** release. The methodology canon gains **seven invariants** that close recurring
|
package/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: agent-workflow-engine
|
|
|
3
3
|
description: Canonical home of the agent-workflow planning methodology — the Plan→Phase→Step→Substep vocabulary, plan lifecycle, queue.md series index, mandatory Cleanup phase, 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: '1.
|
|
6
|
+
version: '1.9.0'
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# agent-workflow-engine
|
package/bin/install.mjs
CHANGED
|
@@ -241,15 +241,25 @@ const main = async () => {
|
|
|
241
241
|
await Promise.all(
|
|
242
242
|
PAYLOAD.map((entry) => copyRecursive(resolve(PKG_ROOT, entry), resolve(target, entry), target)),
|
|
243
243
|
);
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
);
|
|
244
|
+
// Verb keyed on the OBSERVED version relation (cmp), never on mere presence: null (fresh install,
|
|
245
|
+
// or a legacy/unstamped one whose prior version is unknowable) → "installed"; -1 → a real update;
|
|
246
|
+
// 0 → already current (the copy still ran — see the note below); 1 is reachable only under
|
|
247
|
+
// --allow-downgrade (the gate above refused otherwise) and says so plainly.
|
|
248
|
+
const verb =
|
|
249
|
+
cmp === 0 ? 'refreshed the already-current canon'
|
|
250
|
+
: cmp === 1 ? 'downgraded the canon to'
|
|
251
|
+
: cmp === -1 ? 'updated the canon to'
|
|
252
|
+
: 'installed';
|
|
253
|
+
console.log(`[agent-workflow-engine] ${verb} v${version} -> ${tildify(target)}`);
|
|
247
254
|
|
|
248
|
-
//
|
|
255
|
+
// Same-version re-run: state observable facts only. The copy DID run (repair-on-rerun is a feature —
|
|
256
|
+
// it restores locally modified/deleted files), and whether npx served a cached build is NOT
|
|
257
|
+
// observable here (no network), so the note never claims it; the @latest hint is conditional.
|
|
249
258
|
if (cmp === 0) {
|
|
250
259
|
console.log(
|
|
251
|
-
`[agent-workflow-engine] note:
|
|
252
|
-
`
|
|
260
|
+
`[agent-workflow-engine] note: the canon was already v${version} — the copy still ran, restoring ` +
|
|
261
|
+
`any locally modified or deleted canon file to this version's packaged contents. If you ` +
|
|
262
|
+
`expected a NEWER version, invoke the @latest tag explicitly:\n` +
|
|
253
263
|
` npx @sabaiway/agent-workflow-engine@latest init`,
|
|
254
264
|
);
|
|
255
265
|
}
|
package/capability.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sabaiway/agent-workflow-engine",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "Canonical home of the agent-workflow planning methodology — the Plan→Phase→Step vocabulary, 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",
|
|
@@ -79,6 +79,15 @@ that names ≥2 backends. Folding a finding and re-reviewing (the convergence ba
|
|
|
79
79
|
§9) re-runs **every named backend each round** — convergence is reached only when one round comes back
|
|
80
80
|
clean from all of them.
|
|
81
81
|
|
|
82
|
+
**Backend divergence is the crossover stop — it bounds the ROUNDS, never the backends.** Running every
|
|
83
|
+
named backend every round CONVERGES when one round returns **0 blockers + 0 majors** from all of them.
|
|
84
|
+
But when the backends **diverge** — one grounded-**ships** while another keeps line-by-line **revising**
|
|
85
|
+
mechanics round after round — that **backend divergence** IS the crossover the loop must stop at: resolve
|
|
86
|
+
at **altitude** (raise the surviving major to an explicit acceptance invariant Execute must meet, or hand
|
|
87
|
+
the mechanics to the diff), NOT by exhausting the strictest line-by-line backend. This is the exact
|
|
88
|
+
converse of the fidelity rule above: divergence bounds how many ROUNDS the loop runs, and never licenses
|
|
89
|
+
dropping a ready backend within a round — both still run every round.
|
|
90
|
+
|
|
82
91
|
## 5. Quota & health guard (advisory)
|
|
83
92
|
|
|
84
93
|
Backends are **subscription** services with **finite** quota. The orchestrator should: prefer the
|
|
@@ -88,7 +97,9 @@ cheapest model that fits the task; not reach for a top-tier model by reflex; and
|
|
|
88
97
|
This guides *which recipe to choose up front* and *which model to run within a backend* — it is
|
|
89
98
|
**never a licence to drop a ready backend mid-Council** (that is the §4 fidelity breach, not a quota
|
|
90
99
|
saving). Once `council` is the resolved recipe and both backends are `ready`, the two-backend cost is
|
|
91
|
-
already accepted: run both, every round, until a round comes back clean
|
|
100
|
+
already accepted: run both, every round, until a round comes back clean — or until **backend divergence**
|
|
101
|
+
marks the crossover (§4), resolved at altitude rather than by exhausting the strictest backend. Spending
|
|
102
|
+
quota to line-by-line re-review mechanics past that crossover is the over-run the divergence stop prevents.
|
|
92
103
|
|
|
93
104
|
A **standing health advisory** applies to `agy`: the Antigravity service can **stall on substantive
|
|
94
105
|
prompts** (a long hang that returns nothing — an external service issue, not a setup problem;
|
package/references/planning.md
CHANGED
|
@@ -123,7 +123,9 @@ These disciplines keep a plan converging instead of churning, and keep a fold or
|
|
|
123
123
|
|
|
124
124
|
**Characterize-first.** Before editing UNCOVERED code, first write a test pinning its current behavior (green), then edit — any unintended change goes red. Never edit what has no checker; first give it one. Keep edits atomic/reversible (one logical change = one gated commit), and prefer SUBTRACTIVE folds.
|
|
125
125
|
|
|
126
|
-
**
|
|
126
|
+
**Fold minimally — a prose plan has no checker.** An ephemeral, gitignored plan is PROSE with no executable checker, so a single fold that silently drifts one of several prose spots seeds the next churn round (this is what turns a 2-round review into a 6-round one). Fold **minimally, in ONE place**, run a **self-consistency** read across the whole plan before every re-review, and keep the plan SHORT. The only runtime firing an ephemeral plan can carry is the point-of-use advisor's printed review-loop checkpoint — there is no other checker.
|
|
127
|
+
|
|
128
|
+
**Heavy review at the diff, not the plan.** Plan-review settles architecture only (≤2 rounds, stop at the pre-existing→fold-induced crossover); the exhaustive per-Step review runs against real compiling code + the full suite, where a regression fails a gate immediately. **Backend divergence** — one backend grounded-ships while another keeps revising line-by-line mechanics — IS that crossover: resolve at altitude (raise the surviving major to an acceptance invariant, or hand the mechanics to Execute), do not exhaust the strictest backend. Route an all-mechanics/CI or prose-only artifact to a **thin plan + diff-review**, where the runner and gates settle it, not another prose round. The plan is the wrong place for an exhaustive line-by-line review.
|
|
127
129
|
|
|
128
130
|
**Convergence bar.** A review loop is CLEAN only when one round returns **0 blockers + 0 majors** from EVERY named backend the recipe runs (nits / non-blocking + a ship verdict is the stop). FOLDING a finding is NOT convergence — re-review after folding. This §9 governs the ALTITUDE at which you reach clean (fix the major, or raise it to an explicit acceptance invariant Execute must meet) — it NEVER lowers the bar to "majors folded".
|
|
129
131
|
|
package/references/procedures.md
CHANGED
|
@@ -60,7 +60,14 @@ Produce a self-contained, cold-readable plan, reviewed to the configured depth b
|
|
|
60
60
|
add **no code-mechanics** to the plan — a Step still carries its own exact paths + commands, but a
|
|
61
61
|
fold needing a mechanic is the trigger to name the test instead. Council runs every named backend
|
|
62
62
|
**every round** (recipe fidelity,
|
|
63
|
-
[`orchestration.md`](orchestration.md) §4) — never quietly drop a ready backend.
|
|
63
|
+
[`orchestration.md`](orchestration.md) §4) — never quietly drop a ready backend. Cap architecture
|
|
64
|
+
plan-review at **≤2 rounds**, stopping at the **crossover** where **backend divergence** (one backend
|
|
65
|
+
grounded-ships while another keeps revising mechanics) IS the stop — the bar is still met by RESOLVING
|
|
66
|
+
the surviving major at altitude (raise it to an acceptance invariant, or hand it to Execute), never by
|
|
67
|
+
exhausting the strictest backend. Run a **self-consistency** read before every re-review and route an
|
|
68
|
+
all-mechanics/CI or prose-only artifact to a **thin plan + diff-review** ([`planning.md`](planning.md)
|
|
69
|
+
§9). Each round MUST emit **{round N · finding-origin tally (first-draft / fold-induced / mechanics) ·
|
|
70
|
+
per-backend verdict}** so the crossover is a computed signal, not a remembered rule.
|
|
64
71
|
6. **Present for approval** — surface the finished plan to the user; do not begin execution here. A
|
|
65
72
|
harness "approved — start coding" prompt (**ExitPlanMode**) authorizes the PLAN only
|
|
66
73
|
([`planning.md`](planning.md) §6); continuing into `plan-execution` is a deliberate transition taken
|
|
@@ -95,7 +102,9 @@ Execute an approved plan Step by Step; each Step is one logical commit.
|
|
|
95
102
|
exactly as in plan-authoring. This is the **heavy review at the diff** — real compiling code + the
|
|
96
103
|
full suite, where a regression fails a gate immediately ([`planning.md`](planning.md) §9). Council
|
|
97
104
|
runs every named backend **every round** (recipe fidelity, [`orchestration.md`](orchestration.md) §4);
|
|
98
|
-
loop to **0 blockers + 0 majors** from every backend before the gate.
|
|
105
|
+
loop to **0 blockers + 0 majors** from every backend before the gate. Each round MUST emit
|
|
106
|
+
**{round N · finding-origin tally · per-backend verdict}**; when backends diverge, that is the
|
|
107
|
+
crossover — resolve at altitude, not by exhausting the strictest backend.
|
|
99
108
|
6. **Gates** — run the project's verification gate (tests + checks) to green before committing.
|
|
100
109
|
7. **Commit boundary** — the orchestrator makes the single commit for the Step; a backend never
|
|
101
110
|
commits. The project's commit-approval policy (e.g. ask first) lives in the project's own rules.
|