You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[BLOCKER]CLAUDE.md:67 — demo:dev comment claims the command builds the library first, but it does not
details
Drift:CLAUDE.md:67 annotates npm run demo:dev with # build library then run examples/product-demo via Vite. The actual script is cd examples/product-demo && npm run dev — it only starts the Vite dev server; no library build. A developer following only this table runs the demo against a stale or empty dist/ and gets import errors.
Evidence:grep -n 'demo:dev' CLAUDE.md → line 67: npm run demo:dev # build library then run examples/product-demo via Vite. jq '.scripts["demo:dev"]' package.json → "cd examples/product-demo && npm run dev". (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)
Fix:
-npm run demo:dev # build library then run examples/product-demo via Vite+npm run demo:dev # start examples/product-demo Vite dev server (run `npm run build` first)
Counter-argument to my own [BLOCKER]: The annotation could describe the workflow context ("having built the library, then run the demo") rather than the command's own action. CLAUDE.md:100 already says "Build the library first (npm run build) before running the demo," so an attentive reader knows the prerequisite. Counter doesn't hold: # description in a command-table entry universally means "what this command does." The phrase "build library then run" is an unambiguous false claim. Finding kept.
[MAJOR]CLAUDE.md:79-80 — architecture map places needs policies in src/cognition/; they live in src/needs/
details
Drift:CLAUDE.md:79-80 reads "src/cognition/ — UrgencyReasoner, DirectBehaviorRunner, needs policies (Expressive, Active, Composed)." The three policy files — ActiveNeedsPolicy.ts, ComposedNeedsPolicy.ts, ExpressiveNeedsPolicy.ts — live in src/needs/, not src/cognition/. src/cognition/ has no policy files.
Evidence:ls src/cognition/ → Intention.ts, IntentionCandidate.ts, adapters/, behavior/, learning/, personaBias.ts, reasoning/, tuning.ts — no policy files. ls src/needs/ | grep -i policy → ActiveNeedsPolicy.ts, ComposedNeedsPolicy.ts, ExpressiveNeedsPolicy.ts, NeedsPolicy.ts. (Carried from Docs review — 2026-05-11 (9b16676) #202; still open.)
[MAJOR].claude/skills/verify/SKILL.md:9,43 — skill body says "five stages" / "All 5 stages green"; the verify script has seven
details
Drift: SKILL.md line 9 says "The underlying npm script runs all five stages sequentially" and line 43 says "All 5 stages green — ready to PR." npm run verify runs seven stages: format:check && lint && lint:demo && typecheck && test && build && docs. CLAUDE.md:66 correctly lists all seven; the skill omits lint:demo (stage 3) and docs (stage 7) throughout.
Evidence:jq '.scripts.verify' package.json → "npm run format:check && npm run lint && npm run lint:demo && npm run typecheck && npm run test && npm run build && npm run docs". grep -n 'five\|5 stage' .claude/skills/verify/SKILL.md → lines 9, 43. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)
Fix: Replace every "five"/"5" count with "seven"/"7"; add npm run lint:demo as stage 3 and npm run docs as stage 7 to the stage list and isolation-commands block; update the pass-line to "All 7 stages green."
[MAJOR]examples/product-demo/README.md:150-157 — localStorage key table documents pre-refactor keys; demo now uses demo.v2.* and __agentonomous/* namespaces
details
Drift: The README table shows four keys: agentonomous/whiskers, agentonomous/__agentonomous/index__, agentonomous/whiskers/tfjs-network, agentonomous/speed. After the keyspace split: (1) snapshot data key is agentonomous/__agentonomous/data/whiskers (DATA_PREFIX = '__agentonomous/data/' in LocalStorageSnapshotStore.ts:16); (2) index key is agentonomous/__agentonomous/meta/index (META_INDEX_KEY at line 8); (3) speed key is demo.v2.session.speed (SpeedPicker.vue); old agentonomous/speed is explicitly purged by purgeLegacyDemoKeys() in app/main.ts.
Evidence:grep -n 'META_INDEX_KEY\|DATA_PREFIX' src/persistence/LocalStorageSnapshotStore.ts → lines 8, 16. grep -n 'SPEED_STORAGE_KEY' examples/product-demo/src/components/shell/SpeedPicker.vue → 'demo.v2.session.speed'. grep -n 'agentonomous/speed' examples/product-demo/src/app/main.ts → listed as legacy key to purge. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)
Fix:
-| `agentonomous/whiskers` | Agent snapshot (auto-save, every 5 s) |-| `agentonomous/__agentonomous/index__` | Snapshot store index |-| `agentonomous/whiskers/tfjs-network` | Trained Learning-mode snapshot (Train button) |-| `agentonomous/speed` | Speed-picker preference (not part of snapshot) |+| `agentonomous/__agentonomous/data/whiskers` | Agent snapshot (auto-save) |+| `agentonomous/__agentonomous/meta/index` | Snapshot store index |+| `agentonomous/whiskers/tfjs-network` | Trained Learning-mode snapshot |+| `demo.v2.session.speed` | Speed-picker preference |
[MAJOR]PUBLISHING.md:86-87 — npm run size described as checking 2 dist entries; package.json#size-limit has 5
details
Drift: Lines 86-87 say "npm run size runs the size-limit budget against the built dist/index.js and dist/integrations/excalibur/index.js (gzip)." package.json#size-limit has 5 entries: core, excalibur, and the three cognition adapters (mistreevous, js-son, tfjs).
-`npm run size` runs the `size-limit` budget against the built-`dist/index.js` and `dist/integrations/excalibur/index.js` (gzip). Budgets-live in the `size-limit` field of `package.json`.+`npm run size` runs the `size-limit` budget against all five entries in+`package.json#size-limit` (core, excalibur, and the three cognition adapters:+mistreevous, js-son, tfjs). Authoritative limits live in that field.
[MAJOR]README.md:316 and examples/llm-mock/README.md:4 — both reference LlmReasoner but no such class exists in src/
details
Drift:README.md:316 says "LlmReasoner → createAgent under SeededRng + ManualClock." examples/llm-mock/README.md:4 says "Wires a MockLlmProvider (deterministic, no network) into a tiny LlmReasoner." Neither the library nor the example defines a class named LlmReasoner. The example (examples/llm-mock/index.ts) implements an inline Reasoner directly.
Evidence:grep -rn 'LlmReasoner' src/ → no results. grep -rn 'class.*Reasoner\|LlmReasoner' examples/llm-mock/ → no class named LlmReasoner. (Carried from Docs review — 2026-05-11 (9b16676) #202; still open.)
Fix (README.md:316):
-A full end-to-end runnable example — `MockLlmProvider` →-`LlmReasoner` → `createAgent` under `SeededRng` + `ManualClock`,+A full end-to-end runnable example — `MockLlmProvider` →+inline `Reasoner` → `createAgent` under `SeededRng` + `ManualClock`,
Fix (examples/llm-mock/README.md:4):
-Wires a `MockLlmProvider` (deterministic, no-network) into a tiny `LlmReasoner` and runs a `createAgent`-built agent+Wires a `MockLlmProvider` (deterministic, no+network) into a tiny inline `Reasoner` and runs a `createAgent`-built agent
[MAJOR]docs/plans/2026-04-26-quality-codeql.md — all implementation steps [ ] but umbrella tracker marks this chunk shipped
details
Drift:docs/plans/2026-04-26-quality-automation-routines.md row 1 is [x] shipped for the CodeQL chunk. The chunk plan itself has every implementation step still [ ]. A reader of the chunk plan sees multiple open tasks for already-shipped work. Work product confirmed: .github/workflows/codeql.yml exists.
Fix: Flip all step checkboxes to [x], then git mv docs/plans/2026-04-26-quality-codeql.md docs/archive/plans/ per archive convention (add banner > **Archived YYYY-MM-DD.** Completed., no body edits).
[MAJOR]docs/plans/2026-04-26-quality-dep-triage-bot.md — all implementation steps [ ] but umbrella tracker marks this chunk shipped
details
Drift: Umbrella tracker row 2 is [x] shipped for dep-triage-bot. The chunk plan has 8 open [ ] steps. Work product confirmed: docs/dep-triage-bot/PROMPT.md and .github/dependabot.yml exist.
Drift: Umbrella tracker row 3 is [x] shipped via #142. The chunk plan has 6 open [ ] steps. Work product confirmed: docs/actions-bump-bot/PROMPT.md and scripts/bump-actions.mjs exist.
Evidence:grep -c '\- \[ \]' docs/plans/2026-04-26-quality-actions-bump-bot.md → 6. grep 'bump-bot' docs/plans/2026-04-26-quality-automation-routines.md → row 3 [x] shipped via #142. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)
Drift: Umbrella tracker row 4 is [x] shipped via #143. The chunk plan has 7 open [ ] steps. Work product confirmed: docs/plan-recon-bot/PROMPT.md exists.
Evidence:grep -c '\- \[ \]' docs/plans/2026-04-26-quality-plan-recon-bot.md → 7. grep 'recon' docs/plans/2026-04-26-quality-automation-routines.md → row 4 [x] shipped via #143. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)
Drift: Umbrella tracker row 5 is [x] shipped via #144. The chunk plan has 11 open [ ] steps. Work product confirmed: .github/workflows/bundle-size-trend.yml and scripts/append-size-snapshot.mjs exist.
Evidence:grep -c '\- \[ \]' docs/plans/2026-04-26-quality-bundle-trend.md → 11. grep 'bundle-trend' docs/plans/2026-04-26-quality-automation-routines.md → row 5 [x] shipped via #144. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)
Add banner > **Archived YYYY-MM-DD.** All slices shipped via #140 / #146 / #150 / #153 / #158. per docs/archive/README.md convention. Update the link in docs/product/2026-04-26-pre-v1-demo-evolution-plan.md accordingly.
[MINOR] Four docs/plans/2026-04-27-review-bot-*.md plans still in docs/plans/ despite all underlying code fixes shipping
details
Drift: The four plan files for findings d9b4b85.1–d9b4b85.4 remain in docs/plans/ without archive banners. All four code fixes are confirmed merged on develop: d9b4b85.1 — PlayView.vue now calls readPersistedSeed(DEFAULT_SCENARIO_ID) (import confirmed at line 5); d9b4b85.2 — cognitionSwitcher.ts refactored to build learner before wiring (commit comment at line 443 explains the fix); d9b4b85.3 — attachResetHandler moved after import in tests/examples/learningMode.train.test.ts (PR fix(test): move attachResetHandler below static imports #163); d9b4b85.4 — scripts/review-fix-parse.mjs:105 now uses explicit .getTime().
Evidence:grep -n 'readPersistedSeed' examples/product-demo/src/views/PlayView.vue → line 5 import. grep -n 'import.*TEST_BACKEND' tests/examples/learningMode.train.test.ts → line 21 (before function at line 29). grep -n 'getTime' scripts/review-fix-parse.mjs → line 105. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)
Add archive banner to each per docs/archive/README.md convention.
[MINOR]docs/plans/2026-04-25-comprehensive-polish-and-harden.md:790 — "Open questions" section presents OQs 1–3 as unresolved; all three are resolved inline earlier in the same file
details
Drift: The "Open questions" section at line 790 lists three numbered items as if open. OQ1 (reward source) is resolved at line 518: "Open question 1 (reward source) resolved: consumer-supplied…". OQ2 (softmax target shape) is resolved at line 592: "Open question 2 (softmax target shape) resolved: stick to the 7…". OQ3 (backend picker UX) is fully resolved — row 20 shipped as PR feat(tfjs): detectBestBackend + probeBackend statics; demo backend picker #104 per the plan's own tracker table at line 86.
Evidence:grep -n 'Open question.*resolved\|## Open questions' docs/plans/2026-04-25-comprehensive-polish-and-harden.md → resolutions at lines 518, 592; unresolved summary section at line 790. grep 'feat/tfjs-detect-backend-and-picker.*#104' docs/plans/2026-04-25-comprehensive-polish-and-harden.md → line 86 confirms row 20 shipped. (Expanded from Docs review — 2026-05-18 (af3914f) #215, which caught OQs 1–2; OQ3 also resolved as of feat(tfjs): detectBestBackend + probeBackend statics; demo backend picker #104.)
Fix: In the "Open questions" section, mark all three items as resolved with a note referencing the inline decision or the PR:
[MINOR]docs/plans/2026-04-25-comprehensive-polish-and-harden.md:825 and docs/plans/2026-04-26-quality-automation-routines.md:160 — dead reference to .claude/memory/feedback_one_pr_per_session.md (file does not exist)
details
Drift: Both files reference MEMORY.md → feedback_one_pr_per_session.md. No such file exists in .claude/memory/. The "one PR per session" rule lives in feedback_pr_hygiene.md.
Evidence:ls .claude/memory/feedback_one_pr_per_session.md → NOT FOUND. ls .claude/memory/feedback_*.md → 10 files; no feedback_one_pr_per_session.md. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)
Fix:
# comprehensive-polish-and-harden.md:825-See `MEMORY.md → feedback_one_pr_per_session.md` for the headline rule+See `MEMORY.md → feedback_pr_hygiene.md` for the headline rule# quality-automation-routines.md:160-(one PR per session — see `MEMORY.md → feedback_one_pr_per_session.md`),+(one PR per session — see `MEMORY.md → feedback_pr_hygiene.md`),
[MINOR]docs/specs/mvp-demo.md — spec filename is missing the required YYYY-MM-DD- date prefix
details
Drift:CLAUDE.md specifies "Specs live in docs/specs/YYYY-MM-DD-<slug>.md. Date prefix = first-commit date. Never drop the date." docs/specs/mvp-demo.md has no date prefix. Every other spec in the directory has one.
Drift: The parenthetical leaf-job list (lines 38–44) does not include the e2e Playwright job. e2e was added to ci-gate.needs in PR feat(demo): tour-happy-path Playwright spec + CI gate (Pillar-1 slice… #158 and runs on every push. Anyone copying this list to configure branch protection would omit e2e.
Evidence:grep -n 'e2e' .github/workflows/ci.yml → job defined at line 470, listed in ci-gate.needs at line 527. grep 'e2e' PUBLISHING.md → no results. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)
Fix: Either remove the parenthetical entirely (the preceding sentence already directs readers to add only CI gate (required check) as the single aggregator check — the safe long-term guidance) or update to include e2e:
[MINOR].claude/skills/review-fix/SKILL.md:343 — hardcoded machine-specific Windows path D:\Projects\agent-library in agent instructions
details
Drift: Line 343 says "the main repo (D:\Projects\agent-library), NOT from the worktree." This is a developer-specific Windows filesystem path with no meaning in CI, Linux, macOS, or any other developer's machine.
Evidence:grep -n 'D:\\Projects\|agent-library' .claude/skills/review-fix/SKILL.md → lines 343, 349. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)
Fix:
-the **main repo** (`D:\Projects\agent-library`), NOT from the+the **main repo** (the repo root, e.g. `~/agentonomous`), NOT from the
[MINOR]STYLE_GUIDE.md:130 — "all ten default skills" but 11 skill files exist in src/skills/defaults/
details
Drift: Line 130 says "src/skills/defaults/*.ts (all ten default skills)." Actual count: CleanSkill, ExpressMeowSkill, ExpressSadSkill, ExpressSleepySkill, ExpressionSkill, FeedSkill, MedicateSkill, PetSkill, PlaySkill, RestSkill, ScoldSkill = 11 (excluding effectiveness.ts and index.ts).
- non-negotiable gate codified in `CLAUDE.md`: format + lint +- typecheck + test + build.+ non-negotiable gate codified in `CLAUDE.md`: format + lint ++ lint:demo + typecheck + test + build + docs.
[MINOR].claude/memory/project_graphify_usage.md:44-46 — claims graphify-out/wiki/ is checked in; git ls-files shows only 3 files under graphify-out/, no wiki directory
details
Drift: Lines 44-46 say "What's checked in:graph.html, graph.json, GRAPH_REPORT.md, and the wiki under graphify-out/wiki/." git ls-files graphify-out/ returns only the three named files; the wiki/ directory is gitignored and not tracked.
-**What's checked in:** `graph.html`, `graph.json`, `GRAPH_REPORT.md`,-and the wiki under `graphify-out/wiki/`.+**What's checked in:** `graph.html`, `graph.json`, `GRAPH_REPORT.md`.+The wiki (`graphify-out/wiki/`) is gitignored and not tracked.
[NIT]docs/plans/2026-04-25-comprehensive-polish-and-harden.md:691 — section marked "shipped" in its header but body still contains "(PR pending)"
details
Drift: The section header at line 689 reads "### 20 — Backend probe + picker — shipped" and the plan's tracker table (line 86) shows PR feat(tfjs): detectBestBackend + probeBackend statics; demo backend picker #104. But the body at line 691 still says "**Branch:** feat/tfjs-detect-backend-and-picker (PR pending)" — stale template text from before the PR was opened.
Evidence:sed -n '689,692p' docs/plans/2026-04-25-comprehensive-polish-and-harden.md → "Branch:feat/tfjs-detect-backend-and-picker (PR pending)". grep '#104' docs/plans/2026-04-25-comprehensive-polish-and-harden.md → line 86 in tracker table.
Fix:
-**Branch:** `feat/tfjs-detect-backend-and-picker` (PR pending)+**Branch:** `feat/tfjs-detect-backend-and-picker` — **shipped as [#104](https://github.com/Luis85/agentonomous/pull/104)**
[BLOCKER]
CLAUDE.md:67—demo:devcomment claims the command builds the library first, but it does notdetails
Drift:
CLAUDE.md:67annotatesnpm run demo:devwith# build library then run examples/product-demo via Vite. The actual script iscd examples/product-demo && npm run dev— it only starts the Vite dev server; no library build. A developer following only this table runs the demo against a stale or emptydist/and gets import errors.Evidence:
grep -n 'demo:dev' CLAUDE.md→ line 67:npm run demo:dev # build library then run examples/product-demo via Vite.jq '.scripts["demo:dev"]' package.json→"cd examples/product-demo && npm run dev". (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)Fix:
Counter-argument to my own [BLOCKER]: The annotation could describe the workflow context ("having built the library, then run the demo") rather than the command's own action.
CLAUDE.md:100already says "Build the library first (npm run build) before running the demo," so an attentive reader knows the prerequisite. Counter doesn't hold:# descriptionin a command-table entry universally means "what this command does." The phrase "build library then run" is an unambiguous false claim. Finding kept.[MAJOR]
CLAUDE.md:79-80— architecture map places needs policies insrc/cognition/; they live insrc/needs/details
Drift:
CLAUDE.md:79-80reads "src/cognition/—UrgencyReasoner,DirectBehaviorRunner, needs policies (Expressive,Active,Composed)." The three policy files —ActiveNeedsPolicy.ts,ComposedNeedsPolicy.ts,ExpressiveNeedsPolicy.ts— live insrc/needs/, notsrc/cognition/.src/cognition/has no policy files.Evidence:
ls src/cognition/→Intention.ts,IntentionCandidate.ts,adapters/,behavior/,learning/,personaBias.ts,reasoning/,tuning.ts— no policy files.ls src/needs/ | grep -i policy→ActiveNeedsPolicy.ts,ComposedNeedsPolicy.ts,ExpressiveNeedsPolicy.ts,NeedsPolicy.ts. (Carried from Docs review — 2026-05-11 (9b16676) #202; still open.)Fix:
And extend the existing
src/needs/bullet:[MAJOR]
.claude/skills/verify/SKILL.md:9,43— skill body says "five stages" / "All 5 stages green"; the verify script has sevendetails
Drift: SKILL.md line 9 says "The underlying npm script runs all five stages sequentially" and line 43 says "All 5 stages green — ready to PR."
npm run verifyruns seven stages:format:check && lint && lint:demo && typecheck && test && build && docs.CLAUDE.md:66correctly lists all seven; the skill omitslint:demo(stage 3) anddocs(stage 7) throughout.Evidence:
jq '.scripts.verify' package.json→"npm run format:check && npm run lint && npm run lint:demo && npm run typecheck && npm run test && npm run build && npm run docs".grep -n 'five\|5 stage' .claude/skills/verify/SKILL.md→ lines 9, 43. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)Fix: Replace every "five"/"5" count with "seven"/"7"; add
npm run lint:demoas stage 3 andnpm run docsas stage 7 to the stage list and isolation-commands block; update the pass-line to "All 7 stages green."[MAJOR]
examples/product-demo/README.md:150-157— localStorage key table documents pre-refactor keys; demo now usesdemo.v2.*and__agentonomous/*namespacesdetails
Drift: The README table shows four keys:
agentonomous/whiskers,agentonomous/__agentonomous/index__,agentonomous/whiskers/tfjs-network,agentonomous/speed. After the keyspace split: (1) snapshot data key isagentonomous/__agentonomous/data/whiskers(DATA_PREFIX = '__agentonomous/data/'inLocalStorageSnapshotStore.ts:16); (2) index key isagentonomous/__agentonomous/meta/index(META_INDEX_KEYat line 8); (3) speed key isdemo.v2.session.speed(SpeedPicker.vue); oldagentonomous/speedis explicitly purged bypurgeLegacyDemoKeys()inapp/main.ts.Evidence:
grep -n 'META_INDEX_KEY\|DATA_PREFIX' src/persistence/LocalStorageSnapshotStore.ts→ lines 8, 16.grep -n 'SPEED_STORAGE_KEY' examples/product-demo/src/components/shell/SpeedPicker.vue→'demo.v2.session.speed'.grep -n 'agentonomous/speed' examples/product-demo/src/app/main.ts→ listed as legacy key to purge. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)Fix:
[MAJOR]
PUBLISHING.md:86-87—npm run sizedescribed as checking 2 dist entries;package.json#size-limithas 5details
Drift: Lines 86-87 say "
npm run sizeruns thesize-limitbudget against the builtdist/index.jsanddist/integrations/excalibur/index.js(gzip)."package.json#size-limithas 5 entries: core, excalibur, and the three cognition adapters (mistreevous, js-son, tfjs).Evidence:
grep -c '"path"' package.json→ 5. (Carried from Docs review — 2026-05-04 (0f72ad7) #191; still open.)Fix:
[MAJOR]
README.md:316andexamples/llm-mock/README.md:4— both referenceLlmReasonerbut no such class exists insrc/details
Drift:
README.md:316says "LlmReasoner→createAgentunderSeededRng+ManualClock."examples/llm-mock/README.md:4says "Wires aMockLlmProvider(deterministic, no network) into a tinyLlmReasoner." Neither the library nor the example defines a class namedLlmReasoner. The example (examples/llm-mock/index.ts) implements an inlineReasonerdirectly.Evidence:
grep -rn 'LlmReasoner' src/→ no results.grep -rn 'class.*Reasoner\|LlmReasoner' examples/llm-mock/→ no class namedLlmReasoner. (Carried from Docs review — 2026-05-11 (9b16676) #202; still open.)Fix (README.md:316):
Fix (examples/llm-mock/README.md:4):
[MAJOR]
docs/plans/2026-04-26-quality-codeql.md— all implementation steps[ ]but umbrella tracker marks this chunk shippeddetails
Drift:
docs/plans/2026-04-26-quality-automation-routines.mdrow 1 is[x] shippedfor the CodeQL chunk. The chunk plan itself has every implementation step still[ ]. A reader of the chunk plan sees multiple open tasks for already-shipped work. Work product confirmed:.github/workflows/codeql.ymlexists.Evidence:
grep -c '\- \[ \]' docs/plans/2026-04-26-quality-codeql.md→ 9.grep 'codeql' docs/plans/2026-04-26-quality-automation-routines.md→ row 1[x] shipped.git ls-files .github/workflows/codeql.yml→ exists. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)Fix: Flip all step checkboxes to
[x], thengit mv docs/plans/2026-04-26-quality-codeql.md docs/archive/plans/per archive convention (add banner> **Archived YYYY-MM-DD.** Completed., no body edits).[MAJOR]
docs/plans/2026-04-26-quality-dep-triage-bot.md— all implementation steps[ ]but umbrella tracker marks this chunk shippeddetails
Drift: Umbrella tracker row 2 is
[x] shippedfor dep-triage-bot. The chunk plan has 8 open[ ]steps. Work product confirmed:docs/dep-triage-bot/PROMPT.mdand.github/dependabot.ymlexist.Evidence:
grep -c '\- \[ \]' docs/plans/2026-04-26-quality-dep-triage-bot.md→ 8.grep 'dep-triage' docs/plans/2026-04-26-quality-automation-routines.md→ row 2[x] shipped. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)Fix: Same as
cac8515.7— flip checkboxes, archive with banner.[MAJOR]
docs/plans/2026-04-26-quality-actions-bump-bot.md— all implementation steps[ ]but umbrella tracker marks this chunk shipped via docs(routine): add weekly action-SHA bump prompt #142details
Drift: Umbrella tracker row 3 is
[x] shipped via #142. The chunk plan has 6 open[ ]steps. Work product confirmed:docs/actions-bump-bot/PROMPT.mdandscripts/bump-actions.mjsexist.Evidence:
grep -c '\- \[ \]' docs/plans/2026-04-26-quality-actions-bump-bot.md→ 6.grep 'bump-bot' docs/plans/2026-04-26-quality-automation-routines.md→ row 3[x] shipped via #142. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)Fix: Flip checkboxes, note PR docs(routine): add weekly action-SHA bump prompt #142, archive to
docs/archive/plans/.[MAJOR]
docs/plans/2026-04-26-quality-plan-recon-bot.md— all implementation steps[ ]but umbrella tracker marks this chunk shipped via docs(routine): add monthly plan reconciliation prompt #143details
Drift: Umbrella tracker row 4 is
[x] shipped via #143. The chunk plan has 7 open[ ]steps. Work product confirmed:docs/plan-recon-bot/PROMPT.mdexists.Evidence:
grep -c '\- \[ \]' docs/plans/2026-04-26-quality-plan-recon-bot.md→ 7.grep 'recon' docs/plans/2026-04-26-quality-automation-routines.md→ row 4[x] shipped via #143. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)Fix: Flip checkboxes, note PR docs(routine): add monthly plan reconciliation prompt #143, archive to
docs/archive/plans/.[MAJOR]
docs/plans/2026-04-26-quality-bundle-trend.md— all implementation steps[ ]but umbrella tracker marks this chunk shipped via ci(metrics): weekly bundle-size trend snapshot #144details
Drift: Umbrella tracker row 5 is
[x] shipped via #144. The chunk plan has 11 open[ ]steps. Work product confirmed:.github/workflows/bundle-size-trend.ymlandscripts/append-size-snapshot.mjsexist.Evidence:
grep -c '\- \[ \]' docs/plans/2026-04-26-quality-bundle-trend.md→ 11.grep 'bundle-trend' docs/plans/2026-04-26-quality-automation-routines.md→ row 5[x] shipped via #144. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)Fix: Flip checkboxes, note PR ci(metrics): weekly bundle-size trend snapshot #144, archive to
docs/archive/plans/.[MINOR]
docs/plans/2026-04-26-pre-v1-demo-guided-walkthrough.md— all five slices marked ✅ shipped but plan has not been archiveddetails
Drift: The plan's roadmap table shows all 5 slices
✅ shippedvia PRs feat(demo): walkthrough domain module + headless tests (Pillar-1 slice 1.1) #140, feat(demo): Vue/Pinia/Router shell bootstrap + petCare salvage (Pillar-1 slice 1.2a) #146, feat(demo): chapter-1 vertical + bridge swap (Pillar-1 slice 1.2b) #150, feat(demo): chapters 2-5 + typed selector registry (Pillar-1 slice 1.3) #153, feat(demo): tour-happy-path Playwright spec + CI gate (Pillar-1 slice… #158. The evolution-plan tracker (docs/product/2026-04-26-pre-v1-demo-evolution-plan.md) also marks Pillar 1 as✅ shipped. No archive banner; plan still indocs/plans/.Evidence:
grep -c '✅' docs/plans/2026-04-26-pre-v1-demo-guided-walkthrough.md→ 5.grep '\- \[ \]' docs/plans/2026-04-26-pre-v1-demo-guided-walkthrough.md→ 0 open items. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)Fix:
Add banner
> **Archived YYYY-MM-DD.** All slices shipped via #140 / #146 / #150 / #153 / #158.perdocs/archive/README.mdconvention. Update the link indocs/product/2026-04-26-pre-v1-demo-evolution-plan.mdaccordingly.[MINOR] Four
docs/plans/2026-04-27-review-bot-*.mdplans still indocs/plans/despite all underlying code fixes shippingdetails
Drift: The four plan files for findings
d9b4b85.1–d9b4b85.4remain indocs/plans/without archive banners. All four code fixes are confirmed merged ondevelop:d9b4b85.1—PlayView.vuenow callsreadPersistedSeed(DEFAULT_SCENARIO_ID)(import confirmed at line 5);d9b4b85.2—cognitionSwitcher.tsrefactored to build learner before wiring (commit comment at line 443 explains the fix);d9b4b85.3—attachResetHandlermoved afterimportintests/examples/learningMode.train.test.ts(PR fix(test): move attachResetHandler below static imports #163);d9b4b85.4—scripts/review-fix-parse.mjs:105now uses explicit.getTime().Evidence:
grep -n 'readPersistedSeed' examples/product-demo/src/views/PlayView.vue→ line 5 import.grep -n 'import.*TEST_BACKEND' tests/examples/learningMode.train.test.ts→ line 21 (before function at line 29).grep -n 'getTime' scripts/review-fix-parse.mjs→ line 105. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)Fix:
Add archive banner to each per
docs/archive/README.mdconvention.[MINOR]
docs/plans/2026-04-25-comprehensive-polish-and-harden.md:790— "Open questions" section presents OQs 1–3 as unresolved; all three are resolved inline earlier in the same filedetails
Drift: The "Open questions" section at line 790 lists three numbered items as if open. OQ1 (reward source) is resolved at line 518: "Open question 1 (reward source) resolved: consumer-supplied…". OQ2 (softmax target shape) is resolved at line 592: "Open question 2 (softmax target shape) resolved: stick to the 7…". OQ3 (backend picker UX) is fully resolved — row 20 shipped as PR feat(tfjs): detectBestBackend + probeBackend statics; demo backend picker #104 per the plan's own tracker table at line 86.
Evidence:
grep -n 'Open question.*resolved\|## Open questions' docs/plans/2026-04-25-comprehensive-polish-and-harden.md→ resolutions at lines 518, 592; unresolved summary section at line 790.grep 'feat/tfjs-detect-backend-and-picker.*#104' docs/plans/2026-04-25-comprehensive-polish-and-harden.md→ line 86 confirms row 20 shipped. (Expanded from Docs review — 2026-05-18 (af3914f) #215, which caught OQs 1–2; OQ3 also resolved as of feat(tfjs): detectBestBackend + probeBackend statics; demo backend picker #104.)Fix: In the "Open questions" section, mark all three items as resolved with a note referencing the inline decision or the PR:
[MINOR]
docs/plans/2026-04-25-comprehensive-polish-and-harden.md:825anddocs/plans/2026-04-26-quality-automation-routines.md:160— dead reference to.claude/memory/feedback_one_pr_per_session.md(file does not exist)details
Drift: Both files reference
MEMORY.md → feedback_one_pr_per_session.md. No such file exists in.claude/memory/. The "one PR per session" rule lives infeedback_pr_hygiene.md.Evidence:
ls .claude/memory/feedback_one_pr_per_session.md→ NOT FOUND.ls .claude/memory/feedback_*.md→ 10 files; nofeedback_one_pr_per_session.md. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)Fix:
[MINOR]
docs/specs/mvp-demo.md— spec filename is missing the requiredYYYY-MM-DD-date prefixdetails
Drift:
CLAUDE.mdspecifies "Specs live indocs/specs/YYYY-MM-DD-<slug>.md. Date prefix = first-commit date. Never drop the date."docs/specs/mvp-demo.mdhas no date prefix. Every other spec in the directory has one.Evidence:
ls docs/specs/→2026-04-24-post-tfjs-improvements.md,2026-04-26-pre-v1-demo-evolution-design.md,2026-04-26-pre-v1-demo-evolution-spec.md,2026-05-06-strategy-ai-modding-review.md,mvp-demo.md. First-commit date:git log --follow --diff-filter=A -- docs/specs/mvp-demo.md→2026-04-26. (Carried from Docs review — 2026-05-11 (9b16676) #202; still open.)Fix:
Update the one internal link in
docs/archive/plans/2026-04-19-mvp-demo-roadmap.mdthat points to this file.[MINOR]
PUBLISHING.md:38— leaf-job list labelled "as of d9b4b85" is missing thee2ejob added in PR feat(demo): tour-happy-path Playwright spec + CI gate (Pillar-1 slice… #158details
Drift: The parenthetical leaf-job list (lines 38–44) does not include the
e2ePlaywright job.e2ewas added toci-gate.needsin PR feat(demo): tour-happy-path Playwright spec + CI gate (Pillar-1 slice… #158 and runs on every push. Anyone copying this list to configure branch protection would omite2e.Evidence:
grep -n 'e2e' .github/workflows/ci.yml→ job defined at line 470, listed inci-gate.needsat line 527.grep 'e2e' PUBLISHING.md→ no results. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)Fix: Either remove the parenthetical entirely (the preceding sentence already directs readers to add only
CI gate (required check)as the single aggregator check — the safe long-term guidance) or update to includee2e:[MINOR]
.claude/skills/review-fix/SKILL.md:343— hardcoded machine-specific Windows pathD:\Projects\agent-libraryin agent instructionsdetails
Drift: Line 343 says "the main repo (
D:\Projects\agent-library), NOT from the worktree." This is a developer-specific Windows filesystem path with no meaning in CI, Linux, macOS, or any other developer's machine.Evidence:
grep -n 'D:\\Projects\|agent-library' .claude/skills/review-fix/SKILL.md→ lines 343, 349. (Carried from Docs review — 2026-05-18 (af3914f) #215; still open.)Fix:
[MINOR]
STYLE_GUIDE.md:130— "all ten default skills" but 11 skill files exist insrc/skills/defaults/details
Drift: Line 130 says "
src/skills/defaults/*.ts(all ten default skills)." Actual count:CleanSkill,ExpressMeowSkill,ExpressSadSkill,ExpressSleepySkill,ExpressionSkill,FeedSkill,MedicateSkill,PetSkill,PlaySkill,RestSkill,ScoldSkill= 11 (excludingeffectiveness.tsandindex.ts).Evidence:
ls src/skills/defaults/*.ts | grep -Ev 'effectiveness|index' | wc -l→ 11. (Carried from Docs review — 2026-05-11 (9b16676) #202; still open.)Fix:
Or drop the count —
(all default skills)— to avoid drifting again on the next skill addition.[MINOR]
.claude/memory/feedback_pr_hygiene.md:10-12— verify gate listed as "format + lint + typecheck + test + build"; omitslint:demoanddocsdetails
Drift: Lines 11-12 enumerate the verify gate as "format + lint + typecheck + test + build" (5 stages). The actual
npm run verifyscript runs 7:format:check && lint && lint:demo && typecheck && test && build && docs.Evidence:
sed -n '10,13p' .claude/memory/feedback_pr_hygiene.md→ "format + lint + typecheck + test + build".jq '.scripts.verify' package.json→ confirms 7-stage chain. (Carried from Docs review — 2026-05-11 (9b16676) #202; still open.)Fix:
[MINOR]
.claude/memory/project_graphify_usage.md:44-46— claimsgraphify-out/wiki/is checked in;git ls-filesshows only 3 files undergraphify-out/, no wiki directorydetails
Drift: Lines 44-46 say "What's checked in:
graph.html,graph.json,GRAPH_REPORT.md, and the wiki undergraphify-out/wiki/."git ls-files graphify-out/returns only the three named files; thewiki/directory is gitignored and not tracked.Evidence:
git ls-files graphify-out/→graphify-out/GRAPH_REPORT.md,graphify-out/graph.html,graphify-out/graph.json.git ls-files graphify-out/wiki/→ empty. (Carried from Docs review — 2026-05-04 (0f72ad7) #191; still open.)Fix:
[NIT]
docs/plans/2026-04-25-comprehensive-polish-and-harden.md:691— section marked "shipped" in its header but body still contains "(PR pending)"details
Drift: The section header at line 689 reads "### 20 — Backend probe + picker — shipped" and the plan's tracker table (line 86) shows PR feat(tfjs): detectBestBackend + probeBackend statics; demo backend picker #104. But the body at line 691 still says "
**Branch:** feat/tfjs-detect-backend-and-picker (PR pending)" — stale template text from before the PR was opened.Evidence:
sed -n '689,692p' docs/plans/2026-04-25-comprehensive-polish-and-harden.md→ "Branch:feat/tfjs-detect-backend-and-picker(PR pending)".grep '#104' docs/plans/2026-04-25-comprehensive-polish-and-harden.md→ line 86 in tracker table.Fix:
cac8515d882127995bfa71fbaf60a540b1f18aa5(63 Markdown files audited)cac8515.1(CLAUDE.md:67demo:dev) — counter tested (annotation-as-workflow-context interpretation + correct info at CLAUDE.md:100), not held, finding kept as BLOCKERdocs/archive/**(frozen by design);docs/api/**(TypeDoc-generated);docs/daily-reviews/**(immutable snapshots);docs/docs-review-bot/PROMPT.md+README.md(meta-review excluded by prompt);CHANGELOG.md+.changeset/*.md(changeset machinery);node_modules/,dist/,coverage/,.worktrees/,graphify-out/wiki/(generated/gitignored)