@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 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.7.0'
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
- console.log(
245
- `[agent-workflow-engine] ${wasPresent ? 'updated the canon to' : 'installed'} v${version} -> ${tildify(target)}`,
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
- // No-op re-run (same version) almost always npx served a cached build; say so + point at @latest.
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: no version change — the canon was already v${version}. If you ` +
252
- `expected an update, npx likely served a cached build; re-run bypassing the cache:\n` +
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
@@ -3,7 +3,7 @@
3
3
  "schema": 1,
4
4
  "name": "agent-workflow-engine",
5
5
  "kind": "methodology-engine",
6
- "version": "1.7.0",
6
+ "version": "1.9.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": "1.7.0",
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;
@@ -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
- **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. The plan is the wrong place for an exhaustive line-by-line review.
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
 
@@ -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.