@sabaiway/agent-workflow-memory 1.5.0 → 1.7.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 +26 -0
- package/SKILL.md +45 -8
- package/capability.json +1 -1
- package/package.json +1 -1
- package/references/templates/agent_rules.md +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,32 @@ All notable changes to the memory substrate. Versions are this **package's** npm
|
|
|
4
4
|
they are distinct from the **deployment-lineage** stamp written into a project's
|
|
5
5
|
`docs/ai/.memory-version` (which tracks the shared `agent-workflow` lineage, head `1.3.0`).
|
|
6
6
|
|
|
7
|
+
## 1.7.0 — Humanize the deploy/version report (memory)
|
|
8
|
+
|
|
9
|
+
A **feature** release (report-prose only — the atomic stamp-WRITE mechanics and the *Stamp = lineage
|
|
10
|
+
head, not package version* gotcha are unchanged; deployment-lineage head stays `1.3.0`, no migration).
|
|
11
|
+
|
|
12
|
+
The substrate's upgrade report no longer surfaces the internal `docs/ai` **structure version**
|
|
13
|
+
(`.memory-version`) on the happy path:
|
|
14
|
+
|
|
15
|
+
- A zero-diff equal-head upgrade says **settings already current — no update needed**; a writeful
|
|
16
|
+
reconcile (a footprint move / config seed) instead reports **what changed** and asks before commit.
|
|
17
|
+
A fresh bootstrap keeps its deploy-success framing. Neither shows the structure number.
|
|
18
|
+
- The number surfaces only at the never-downgrade **STOP** gate and on an **explicit user ask** (a
|
|
19
|
+
read-only answer that writes nothing) — named "the `docs/ai` structure version", never "lineage
|
|
20
|
+
head", with a plain two-axes note (*Version disclosure*). Memory adds **no status mode** (the one
|
|
21
|
+
intended kit↔memory asymmetry).
|
|
22
|
+
- Pinned by a new static contract test (`scripts/skill-report-contract.test.mjs`).
|
|
23
|
+
|
|
24
|
+
## 1.6.0 — §2.6 carries the review-loop economics disciplines (memory)
|
|
25
|
+
|
|
26
|
+
A **feature** release. The `agent_rules.md` substrate **§2.6** lens gains the review-loop economics
|
|
27
|
+
disciplines — *Fold minimally* (a self-consistency read), the extended *Heavy review at the diff*
|
|
28
|
+
(**backend divergence** = the crossover; **thin plan + diff-review**), and a *Per-round emission*
|
|
29
|
+
**{round N · finding-origin · per-backend verdict}** — kept **byte-identical** to the kit's §2.5 block and
|
|
30
|
+
guarded by the kit's cross-package `lens-mirror` two-set drift test. Substrate/docs only; deployment-lineage
|
|
31
|
+
head stays `1.3.0` (no migration).
|
|
32
|
+
|
|
7
33
|
## 1.5.0 — §2.6 carries the planning/review/process-fidelity invariants (memory)
|
|
8
34
|
|
|
9
35
|
A **feature** release. The `agent_rules.md` substrate **§2.6** is generalized from *Right-altitude &
|
package/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: agent-workflow-memory
|
|
|
3
3
|
description: Deploy or upgrade a portable AI-agent memory substrate in any project — an entry-point `AGENTS.md` (+ `CLAUDE.md` alias) and a structured `docs/ai/` context store with cap/archive/index enforcement. Use when the user wants to bootstrap `docs/ai/`, set up the Memory Map and session protocols, install the docs-rotation pre-commit hook, or run `/agent-workflow-memory` / `/agent-workflow-memory upgrade`. Triggers on "set up the memory system", "deploy the AI memory here", "bootstrap docs/ai", "upgrade the memory substrate". This is the substrate only — the workflow methodology (plan→execute→review, queue, Cleanup) is owned elsewhere and injected into AGENTS.md by the family composition root.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
metadata:
|
|
6
|
-
version: '1.
|
|
6
|
+
version: '1.7.0'
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# agent-workflow-memory
|
|
@@ -116,7 +116,8 @@ bootstrapping over a live system, but the user makes the final call.
|
|
|
116
116
|
lineage, a **separate axis** from this package's npm version (the two may even coincide by
|
|
117
117
|
accident; see *Stamp = lineage head, not package version*). Use the atomic writer in
|
|
118
118
|
`scripts/stamp-takeover.mjs` (write-temp + rename).
|
|
119
|
-
11. **Report & ask.** Show `tree docs/ai/`, 2–3 lines on filled-vs-TODO
|
|
119
|
+
11. **Report & ask.** Show `tree docs/ai/`, 2–3 lines on filled-vs-TODO — its normal deploy-success
|
|
120
|
+
framing, with **no `docs/ai` structure number** (see *Version disclosure*) — then **ask before
|
|
120
121
|
committing** — never auto-commit. **Exception — delegated mode (below): skip this gate.**
|
|
121
122
|
|
|
122
123
|
> **Delegated mode (invoked by the composition root) — applies to BOTH bootstrap and upgrade.**
|
|
@@ -150,7 +151,10 @@ Fill strategy:
|
|
|
150
151
|
2. **Never-downgrade gate FIRST, then the stamp-independent hidden-mode reconcile (D14).** Compare the
|
|
151
152
|
stamp to the **deployment-lineage head** (`LINEAGE_HEAD`, `1.3.0`). **Greater than the head, or
|
|
152
153
|
unparseable → STOP and report immediately, before ANY write** (never downgrade or guess, and never
|
|
153
|
-
touch `.git/info/exclude`).
|
|
154
|
+
touch `.git/info/exclude`). This STOP is one of the only two places the number is shown (see
|
|
155
|
+
*Version disclosure* below): tell the user **the `docs/ai` structure version** their deployment
|
|
156
|
+
carries versus the one this substrate expects, plus the plain one-line two-axes note — naming it the
|
|
157
|
+
structure version, **never** "lineage head". Otherwise (stamp **≤ head**) reconcile the hidden-mode footprint — but
|
|
154
158
|
first **infer this deployment's OWN visibility from its git state** (NOT from whether the machine-global
|
|
155
159
|
excludes list these paths — another repo on the host may have added them): if `AGENTS.md` (or
|
|
156
160
|
`docs/ai/`) is **tracked / committed** → **VISIBLE** → do nothing (never write `.git/info/exclude`);
|
|
@@ -170,8 +174,13 @@ Fill strategy:
|
|
|
170
174
|
its own reconcile — this substrate is standalone and only seeds-or-preserves; it owns no cross-package
|
|
171
175
|
refresh helper.) This is why an equal-head (`1.3.0`) deployment still gains the config seed **without a
|
|
172
176
|
lineage-head bump or a migration file** (the stamp-independent-reconcile precedent — like the pointer
|
|
173
|
-
slots + the hidden-mode footprint). **Then**, if the stamp **equals** the head →
|
|
174
|
-
(
|
|
177
|
+
slots + the hidden-mode footprint). **Then**, if the stamp **equals** the head → the substrate is
|
|
178
|
+
current (no structure migration is due), and stop after reporting. Report **in the user's
|
|
179
|
+
conversational language**: if step 2's reconcile just **changed something** (a footprint move /
|
|
180
|
+
config seed), say **what changed** in plain terms and ask before committing; if **nothing changed at
|
|
181
|
+
all**, say their **settings are already current — no update is required**. Either way, show **no**
|
|
182
|
+
structure number, stamp filename, or internal versioning vocabulary on this happy-path exit — the
|
|
183
|
+
number is inert here and belongs to *Version disclosure* (below).
|
|
175
184
|
3. Show the relevant `${CLAUDE_SKILL_DIR}/CHANGELOG.md` context (entries newer than the stamp).
|
|
176
185
|
4. Apply `${CLAUDE_SKILL_DIR}/migrations/<version>-<slug>.md` in **semver order**, only those
|
|
177
186
|
newer than the stamp. Migrations are **idempotent**.
|
|
@@ -186,9 +195,37 @@ Fill strategy:
|
|
|
186
195
|
gracefully **no-op** on that slot (adding a slot to already-deployed files is the composition
|
|
187
196
|
root's reconcile, not this substrate's job). On any malformed marker state (single, reversed,
|
|
188
197
|
nested, or duplicate pair), **no-op with an error** — never edit.
|
|
189
|
-
7. **Re-stamp** `docs/ai/.memory-version` to the lineage head (atomic write).
|
|
190
|
-
|
|
191
|
-
|
|
198
|
+
7. **Re-stamp** `docs/ai/.memory-version` to the lineage head (atomic write — mechanics unchanged).
|
|
199
|
+
Report changes **in plain human terms** (which parts of the deployment are now different);
|
|
200
|
+
**omit the raw structure number**, and do not recite the two-axes note here (it belongs to
|
|
201
|
+
*Version disclosure*). **Ask before committing** — **except in delegated mode** (see the *Delegated
|
|
202
|
+
mode* note above), where the composition root owns the single gate and this step raises none.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Version disclosure — the `docs/ai` structure version, on demand only
|
|
207
|
+
|
|
208
|
+
The deployment carries an internal **`docs/ai` structure version** in `.memory-version` (the
|
|
209
|
+
`LINEAGE_HEAD` — the number `upgrade` compares the stamp against to decide whether a migration is due).
|
|
210
|
+
It is un-actionable in the happy path and reads as smaller than this package's npm version, so the
|
|
211
|
+
happy path **hides** it. This substrate has **no status mode** (unlike the family composition root), so
|
|
212
|
+
the number surfaces in exactly **two** places, and nowhere else:
|
|
213
|
+
1. the **never-downgrade STOP** (*Mode: upgrade* step 2) — the stamp is ahead of what this substrate
|
|
214
|
+
knows, so the number IS the message;
|
|
215
|
+
2. when the **user explicitly asks** about versions — a **read-only** answer: read `.memory-version`
|
|
216
|
+
and state it plainly (with the two-axes note). This adds **no mode** and **writes nothing**.
|
|
217
|
+
|
|
218
|
+
When you show it, **name what it versions — "the `docs/ai` structure version"** (render that meaning in
|
|
219
|
+
the user's conversational language) — **never** "lineage head" or any raw internal token. Pair it with
|
|
220
|
+
**one plain-language line** telling the two axes apart, on demand only:
|
|
221
|
+
|
|
222
|
+
> the number your project carries versions its `docs/ai` **structure**; the (usually larger) number on
|
|
223
|
+
> npm is this package's **own version** — the two advance independently, so a bigger package number is
|
|
224
|
+
> **not** a newer deployment.
|
|
225
|
+
|
|
226
|
+
**Never** print this two-axes line on a successful equal-head exit — only at the STOP or on an explicit
|
|
227
|
+
ask. (This is the one intended kit↔memory asymmetry: the kit hosts the number in its `status` mode; the
|
|
228
|
+
memory substrate has none, so it relies on the STOP + the explicit ask — never invent a status mode.)
|
|
192
229
|
|
|
193
230
|
---
|
|
194
231
|
|
package/capability.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sabaiway/agent-workflow-memory",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "Portable, cross-agent memory substrate for AI coding agents — an AGENTS.md entry point + docs/ai context with cap/archive/index enforcement, deployable standalone or as part of the agent-workflow family. The memory layer of the agent-workflow family.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agents",
|
|
@@ -77,8 +77,10 @@ Apply these when authoring a plan, reviewing, folding a finding, or editing code
|
|
|
77
77
|
- **No code-mechanics in the plan.** A Step still carries its exact paths + commands (the plan-structure / self-review canon); the ceiling is on *fold-bred* detail — a review fold must not push fine code-mechanics (`cd`, an env default, a flag) into prose. A fold that needs a mechanic is the trigger to write the test instead.
|
|
78
78
|
- **Test-as-spec.** Fold a code-touching finding into a red→green TEST, not a prose paragraph — the gate is the only deterministic checker; a paragraph cannot self-check.
|
|
79
79
|
- **Characterize-first.** Before editing UNCOVERED code, pin its current behavior in a green test, then edit — any unintended change goes red. Never edit what has no checker; first give it one. Keep edits atomic/reversible; prefer SUBTRACTIVE folds.
|
|
80
|
-
- **
|
|
80
|
+
- **Fold minimally — prose has no checker.** An ephemeral, gitignored plan is prose with no executable checker; fold **minimally, in ONE place** and run a **self-consistency** read across the plan before every re-review — a fold that drifts several prose spots is what turns a 2-round review into churn.
|
|
81
|
+
- **Heavy review at the diff.** 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 mechanics) IS that crossover — resolve at altitude, don't exhaust the strictest backend; route an all-mechanics/CI or prose-only artifact to a **thin plan + diff-review**.
|
|
81
82
|
- **Convergence bar.** A review loop is CLEAN only when one round returns **0 blockers + 0 majors** from EVERY backend the recipe names (nits + a ship verdict is the stop). Folding ≠ convergence — re-review after folding.
|
|
83
|
+
- **Per-round emission.** Every review round emits **{round N · finding-origin tally · per-backend verdict}** so the crossover is a computed, visible signal, not a remembered rule.
|
|
82
84
|
- **Recipe fidelity.** Council runs every backend the recipe names, **every round**; silently dropping a ready backend for quota/convenience is a forbidden downgrade — an unavailable backend is a LOUD, stated degrade, never a quiet drop.
|
|
83
85
|
- **ExitPlanMode ≠ execute.** A harness "approved — start coding" prompt authorizes the PLAN only; this methodology overrides it. Continue into execution only as a DELIBERATE transition after the plan + cold-start prompt exist, never an implicit slide.
|
|
84
86
|
|