@sabaiway/agent-workflow-memory 7.0.0 → 7.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 +14 -0
- package/SKILL.md +7 -4
- package/capability.json +1 -1
- package/package.json +1 -1
- package/references/templates/agent_rules.md +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,20 @@ 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 `3.0.0`).
|
|
6
6
|
|
|
7
|
+
## 7.1.0 — the rules template names the adoption state a zero relies on, and the upgrade skips only on no Node evidence (AD-123)
|
|
8
|
+
|
|
9
|
+
`references/templates/agent_rules.md`: §1.2 no longer says "zero is legal during adoption" — a zero
|
|
10
|
+
names the adoption state it relies on (not adopted, adopting, or nothing spec-covered touched); §2.5
|
|
11
|
+
Communication gains its last bullet — a tool-composed `skipped-*` line whose stated reason the observed
|
|
12
|
+
tree disproves is raised as a FINDING, never pasted as neutral, and a tool may not emit a skip it could
|
|
13
|
+
itself disprove; §2.6 is the re-rendered engine 4.2.0 lens (the Spec-first bullet with the state
|
|
14
|
+
clause). The kit's template twin moves byte-identically.
|
|
15
|
+
|
|
16
|
+
`SKILL.md` upgrade step 2: the ADR enforcement pair and the spec layer skip ONLY when no Node evidence
|
|
17
|
+
exists — no regular `package.json` at the root and none of the kit-seeded `scripts/*.mjs` present; a
|
|
18
|
+
probe that cannot be read is a stated failure, never a skip. A deployment the kit itself made is
|
|
19
|
+
therefore always recognized, whatever its stack.
|
|
20
|
+
|
|
7
21
|
## 7.0.0 — a symlinked docs file gets named instead of skipped (AD-119)
|
|
8
22
|
|
|
9
23
|
The docs cap-validator discovered files through `readdir(dir, { withFileTypes: true })` and kept an
|
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: '7.
|
|
6
|
+
version: '7.1.0'
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# agent-workflow-memory
|
|
@@ -211,7 +211,9 @@ Fill strategy:
|
|
|
211
211
|
**Same gate, also stamp-independent: ensure the ADR-store enforcement pair** — copy
|
|
212
212
|
`archive-decisions.mjs` + `archive-decisions.test.mjs` from
|
|
213
213
|
`${CLAUDE_SKILL_DIR}/references/scripts/` into the project's `scripts/` **if missing**
|
|
214
|
-
(preserve an existing file byte-for-byte; skip
|
|
214
|
+
(preserve an existing file byte-for-byte; skip ONLY when no Node evidence exists — no
|
|
215
|
+
regular `package.json` at the root and none of the kit-seeded `scripts/*.mjs` present; a
|
|
216
|
+
probe that cannot be read is a stated failure, never a skip). **Legacy-monolith
|
|
215
217
|
gate:** if a retired `docs/ai/history/decisions-archive*.md` monolith is still on disk, do
|
|
216
218
|
**NOT** copy the pair as a silent ensure — the new-scheme rotator must **never sit beside
|
|
217
219
|
un-migrated monoliths** (its default/`--check` runs refuse such a tree). Instead ASK the
|
|
@@ -225,8 +227,9 @@ Fill strategy:
|
|
|
225
227
|
hook gains its `archive-decisions.mjs --check` line only when the hook is next refreshed via
|
|
226
228
|
`node scripts/install-git-hooks.mjs`; an old hook without the line stays consistent-safe (the
|
|
227
229
|
decisions gate is simply not enforced yet — never a broken hook). **Same gate, also
|
|
228
|
-
stamp-independent — ensure the SPEC LAYER (
|
|
229
|
-
pair above):** copy `spec-schema.mjs` +
|
|
230
|
+
stamp-independent — ensure the SPEC LAYER (skip only on the same absence of Node evidence as
|
|
231
|
+
the pair above — a deployed kit script is evidence enough):** copy `spec-schema.mjs` +
|
|
232
|
+
`spec-schema.test.mjs` from
|
|
230
233
|
`${CLAUDE_SKILL_DIR}/references/scripts/` into the project's `scripts/` **if missing** (preserve
|
|
231
234
|
an existing file byte-for-byte). Then seed `docs/ai/specs/index.md` **if missing** from
|
|
232
235
|
`${CLAUDE_SKILL_DIR}/references/templates/specs/` (date filled; an existing root is preserved
|
package/capability.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sabaiway/agent-workflow-memory",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.1.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",
|
|
@@ -23,7 +23,7 @@ Read in order, then confirm before starting:
|
|
|
23
23
|
4. Confirm with the user: *"I'm taking task X. Confirm?"*
|
|
24
24
|
|
|
25
25
|
### 1.2. During Work
|
|
26
|
-
**Before any feature:** name its governing spec(s) — the feature spec under `docs/ai/specs/` for every touched spec-covered slice (zero
|
|
26
|
+
**Before any feature:** name its governing spec(s) — the feature spec under `docs/ai/specs/` for every touched spec-covered slice (a zero names the adoption state it relies on — not adopted, adopting, or nothing spec-covered touched; each cited spec's Out of scope bounds that slice's work). Where only a page spec (`docs/ai/pages/<page>.md`) exists it governs as an ADOPTION SHIM: state Out of scope + Revision inline in the plan. If the contract changes, the spec revision is authored WITH the plan (visible at review) and lands with the code, so docs and code never diverge.
|
|
27
27
|
|
|
28
28
|
**For every code change:**
|
|
29
29
|
1. Grep for similar implementations — reuse existing patterns.
|
|
@@ -74,13 +74,14 @@ Apply this as part of §2 before any user-facing summary:
|
|
|
74
74
|
- **Large artifact (≈>100 lines):** deliver a real summary or the key excerpt inline **and** link the file — never flood the reader with a 2000-line paste, never hide the answer behind a bare pointer.
|
|
75
75
|
- **Live host/session facts are tool-composed only.** Any claim about the current host or session state (prompts fired, sandbox scope, whether a bypass was needed, network reachability, approval counts) must trace to **live tool output** from **this session**; a memory/handover snapshot is **context, never report facts**, and a claim with no live signal is **omitted or explicitly marked unverified** — never asserted from recollection.
|
|
76
76
|
- **The closing state block answers three DIFFERENT questions.** Close a user-facing message with three labelled slots — *now* · *what I need from you* · *what's next*. The slot LABELS stay ENGLISH — an English label is what lets a state-block checker FIND the block and its slots at all; everything written INTO a slot is in the project's dialogue language; when that language is not English, the checker's English phrase sets do not judge those values. **Now** = the state at this instant: what is RUNNING, or what the work is stopped on. It is **never a report of finished work** — what you completed goes in the message BODY, above the block. **From you** = the real unblocker, named; a turn that is ENDING always has one. **Next** = what follows. A *now* slot that opens with what was completed buries the one fact the reader opened the message for, and the three slots collapse into one restatement.
|
|
77
|
+
- **A skip that contradicts the tree is a finding.** A tool-composed `skipped-*` line whose stated reason the observed tree disproves (a "no Node" skip beside deployed Node scripts) is raised as a FINDING in the report, never pasted as a neutral outcome — and a tool may not emit a skip whose reason it could itself disprove.
|
|
77
78
|
|
|
78
79
|
### 2.6. Planning, review & process-fidelity invariants
|
|
79
80
|
Apply these when authoring a plan, reviewing, folding a finding, or editing code — the layer read **before any code change**. (Full canon: the project's planning / workflow-methodology + orchestration canon. This section is rendered from that canon and refreshed on upgrade; a custom edit is preserved verbatim, but flagged.)
|
|
80
81
|
- **Fold by code, not prose.** Before folding a code-touching finding into a plan or change, read the cited `file:line` and cite it — a prose fold drifts from the code and seeds the next bug.
|
|
81
82
|
- **Finding scope (plan-execution) — name the invariant BEFORE the edit.** During EXECUTION only — a plan under authoring has no shipped behaviour to call a live defect in, so plan-review carries none of this. Every finding names the invariant its fix would enforce, and where that invariant already lives decides the disposition: already an acceptance criterion of the phase → **fold here**; it would have to be ADDED → ship the **narrow fix** for the found site (red first, then green) and queue ONLY the generalization — a deferral row carries the invariant, the origin `file:line`, the narrow fix, its proof and a residual exposure declared NOT live; no correct narrow fix → **blocking**: the phase does not close, and it is **never queued**. Two bars declared before each round: a finding counts only if it changes a **WRITE/REMOVE decision** or is a false statement in shipped text; a repeat finding in one subarea **routes to SUBTRACTION**, not a fourth patch.
|
|
82
83
|
- **Right altitude.** Pin intent + invariants + acceptance criteria (named tests); leave fine code-mechanics to Execute, where prose cannot diverge from reality.
|
|
83
|
-
- **Spec-first.** A plan names its GOVERNING spec(s) — zero, one or many, one per touched spec-covered slice (the feature spec under `docs/ai/specs/`; page-only coverage governs as an ADOPTION SHIM, with Out of scope + Revision stated inline in the plan). Each cited spec's Out of scope bounds that slice's work and the plan's non-goals restate it per slice — no global union; a cross-spec conflict is resolved by a spec revision BEFORE approval, never by silent precedence. A NEW feature's draft spec exists AT plan review (a `create` row); a change to a governed contract rides the plan as its proposed revision (a `modify` row); approval confirms plan and contract atomically, and the revision lands with the code. Scenario bindings are per scenario: a new scenario is `unbound` until its test lands in the same plan, and a status never regresses for an extension.
|
|
84
|
+
- **Spec-first.** A plan names its GOVERNING spec(s) — zero, one or many, one per touched spec-covered slice (the feature spec under `docs/ai/specs/`; page-only coverage governs as an ADOPTION SHIM, with Out of scope + Revision stated inline in the plan). A ZERO names the adoption state it relies on — `not adopted` (no store) or `adopting` (a store with no live contract), either with a recorded decline, or `nothing spec-covered touched` (a store with live contracts) — a bare zero is never a licence; the store's own state is what `status` and the upgrade advisor report. Each cited spec's Out of scope bounds that slice's work and the plan's non-goals restate it per slice — no global union; a cross-spec conflict is resolved by a spec revision BEFORE approval, never by silent precedence. A NEW feature's draft spec exists AT plan review (a `create` row); a change to a governed contract rides the plan as its proposed revision (a `modify` row); approval confirms plan and contract atomically, and the revision lands with the code. Scenario bindings are per scenario: a new scenario is `unbound` until its test lands in the same plan, and a status never regresses for an extension.
|
|
84
85
|
- **No code-mechanics in the plan.** A ledger row carries its path and anchor, and Verification carries the exact commands (the plan-shape canon) — checked syntax: the plan's own Verification runs them against an explicit expected outcome or gate; the only other syntax a plan may carry is a literal fixture/schema fragment a named test copies or validates. Un-run, logic-bearing syntax — control-flow, a regex, a glob, a grammar, an algorithm body, a mini-DSL — never lives in plan prose, however plausible or shell-verified it looks: a fold or draft that wants one is the trigger to write the test instead.
|
|
85
86
|
- **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.
|
|
86
87
|
- **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.
|