details
Drift: The architecture map entry for src/cognition/ reads: "UrgencyReasoner, DirectBehaviorRunner, needs policies (Expressive, Active, Composed)." The three needs policies (ExpressiveNeedsPolicy, ActiveNeedsPolicy, ComposedNeedsPolicy) live in src/needs/, not src/cognition/.
Evidence: ls src/needs/ → ActiveNeedsPolicy.ts, ComposedNeedsPolicy.ts, ExpressiveNeedsPolicy.ts, Need.ts, Needs.ts, NeedsPolicy.ts. ls src/cognition/ → only Intention.ts, IntentionCandidate.ts, adapters/, behavior/, learning/, personaBias.ts, reasoning/, tuning.ts.
Fix:
-- `src/cognition/` — `UrgencyReasoner`, `DirectBehaviorRunner`, needs policies (`Expressive`, `Active`, `Composed`). Tuning constants in `src/cognition/tuning.ts`.
+- `src/cognition/` — `UrgencyReasoner`, `DirectBehaviorRunner`. Tuning constants in `src/cognition/tuning.ts`.
+- `src/needs/` — homeostatic needs + three needs policies (`ExpressiveNeedsPolicy`, `ActiveNeedsPolicy`, `ComposedNeedsPolicy`).
(The existing src/needs/ bullet only says "homeostatic needs, categorical mood" — the policies should be listed there.)
[MAJOR]
CLAUDE.md:75—npm run demo:devcomment claims "build library then run" but the script does not build the librarydetails
Drift:
CLAUDE.mdkey-commands section annotatesnpm run demo:devwith# build library then run examples/product-demo via Vite. The actual script iscd examples/product-demo && npm run dev, which only starts the Vite dev server — no library build. A contributor running this command without a priornpm run buildgets a broken demo because the demo resolvesagentonomousvia../../dist/aliases that require a pre-builtdist/.Evidence:
jq '.scripts["demo:dev"]' package.json→"cd examples/product-demo && npm run dev".README.md(Running the example) explicitly states: "You must build the library before the example resolves it."Fix:
Counter-argument to my own [MAJOR]: The comment could be read as compressed prose describing the assumed workflow context — "having built the library, then run the demo" — rather than claiming the command itself builds. That interpretation doesn't hold: shell annotation conventions (
command # description) universally mean the annotation describes the command's action, not a prerequisite. The README reinforces that the build is a separate prerequisite step. Finding kept.[MAJOR]
CLAUDE.md:90— architecture map places needs policies insrc/cognition/, they live insrc/needs/details
Drift: The architecture map entry for
src/cognition/reads: "UrgencyReasoner,DirectBehaviorRunner, needs policies (Expressive,Active,Composed)." The three needs policies (ExpressiveNeedsPolicy,ActiveNeedsPolicy,ComposedNeedsPolicy) live insrc/needs/, notsrc/cognition/.Evidence:
ls src/needs/→ActiveNeedsPolicy.ts,ComposedNeedsPolicy.ts,ExpressiveNeedsPolicy.ts,Need.ts,Needs.ts,NeedsPolicy.ts.ls src/cognition/→ onlyIntention.ts,IntentionCandidate.ts,adapters/,behavior/,learning/,personaBias.ts,reasoning/,tuning.ts.Fix:
(The existing
src/needs/bullet only says "homeostatic needs, categorical mood" — the policies should be listed there.)[MAJOR]
README.md:316andexamples/llm-mock/README.md:4—LlmReasoneris referenced as a named class but does not exist insrc/details
Drift:
README.mdline 316 says "A full end-to-end runnable example —MockLlmProvider→LlmReasoner→createAgent".examples/llm-mock/README.mdline 4 says "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) builds an inlineReasonerimplementation directly;grep -rn "LlmReasoner" src/returns nothing.Evidence:
grep -rn "LlmReasoner" src/→ no results.grep -rn "LlmReasoner" examples/llm-mock/index.ts→ no results (the index.ts importsReasonertype and implements one inline).Fix (README.md):
Fix (examples/llm-mock/README.md):
[MAJOR]
examples/product-demo/README.md:150-155— localStorage key table has 3 stale keys after the Vue pillar refactor and keyspace split (PR fix(persistence): split localStorage keyspace so index cannot collide with data #72)details
Drift: The README's localStorage key layout table shows the pre-refactor key names. After PR fix(persistence): split localStorage keyspace so index cannot collide with data #72 (keyspace split) and the Pillar-1 Vue bootstrap (which purges the old
agentonomous/*namespace and usesdemo.v2.*for new keys):agentonomous/whiskers→ snapshot data key is nowagentonomous/__agentonomous/data/whiskers(keyspace split:DATA_PREFIX = '__agentonomous/data/'inLocalStorageSnapshotStore.ts:16)agentonomous/__agentonomous/index__→ meta index is nowagentonomous/__agentonomous/meta/index(META_INDEX_KEY = '__agentonomous/meta/index'inLocalStorageSnapshotStore.ts:8)agentonomous/speed→ nowdemo.v2.session.speed(SPEED_STORAGE_KEYinSpeedPicker.vue:11); old key is purged bypurgeLegacyDemoKeys()inapp/main.tsagentonomous/whiskers/tfjs-network— still correct.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 a legacy key to purge.Fix:
[MAJOR]
PUBLISHING.md:86-87—npm run sizedescribed as checking 2 dist entries;package.json#size-limithas 5details
Drift: PUBLISHING.md lines 86-87 say "
npm run sizeruns thesize-limitbudget against the builtdist/index.jsanddist/integrations/excalibur/index.js(gzip)."package.json#size-limitcontains 5 entries: core, excalibur, mistreevous, js-son, and tfjs adapters.Evidence:
jq '."size-limit" | length' package.json→5.jq '."size-limit"[].name' package.json→ shows 5 distinct path entries. (Carried forward from run0f72ad7.1; still open.)Fix:
[MINOR]
.claude/skills/verify/SKILL.md:3,9— description and stage list say "five stages", omittinglint:demoanddocsdetails
Drift: The skill's frontmatter description lists "format:check, lint, typecheck, tests, and build" (5); the body says "all five stages"; the stage list enumerates only 5.
npm run verifyruns 7:format:check && lint && lint:demo && typecheck && test && build && docs.Evidence:
jq '.scripts.verify' package.json→ confirms 7-stage chain. (Carried forward from run0f72ad7.2; still open.)Fix: Update description, count ("five" → "seven"), stage list (add steps 3 and 7 for
lint:demo/npm run docs), isolation-commands block, and pass/fail summary line.[MINOR]
STYLE_GUIDE.md:130— "all ten default skills" but 11 skill files exist insrc/skills/defaults/details
Drift:
STYLE_GUIDE.md:130says "src/skills/defaults/*.ts(all ten default skills)". Actual count:CleanSkill,ExpressMeowSkill,ExpressSadSkill,ExpressSleepySkill,ExpressionSkill,FeedSkill,MedicateSkill,PetSkill,PlaySkill,RestSkill,ScoldSkill= 11 skill files (pluseffectiveness.tsandindex.ts).Evidence:
ls src/skills/defaults/*.ts | grep -Ev 'effectiveness|index' | wc -l→11. (Carried forward from run0f72ad7.6; still open.)Fix:
Or drop the count:
(all default skills)— removes drift risk.[MINOR]
.claude/memory/feedback_pr_hygiene.md:11— verify gate listed as "format + lint + typecheck + test + build", omittinglint:demoanddocsdetails
Drift: Lines 10-12 say the gate is "
npm run verifygreen pre-PR … format + lint + typecheck + test + build". The actual script runs 7 stages;lint:demoanddocsare missing from the enumeration.Evidence:
jq '.scripts.verify' package.json→ 7 stages. (Carried forward from run0f72ad7.7; still open.)Fix:
[MINOR]
.claude/memory/project_graphify_usage.md:44-45— claimsgraphify-out/wiki/is checked in but it is not tracked by gitdetails
Drift: Lines 44-45 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 3 files — no wiki directory.Evidence:
git ls-files graphify-out/→graphify-out/GRAPH_REPORT.md,graphify-out/graph.html,graphify-out/graph.json. (Carried forward from run0f72ad7.4; still open.)Fix:
[MINOR]
docs/plans/2026-04-26-quality-automation-routines.md:160— dead reference tofeedback_one_pr_per_session.mdwhich does not existdetails
Drift: Line 160 says "(one PR per session — see
MEMORY.md → feedback_one_pr_per_session.md)". No such file exists in.claude/memory/.ls .claude/memory/feedback_*.mdlists 10 feedback files;feedback_one_pr_per_session.mdis absent.Evidence:
ls .claude/memory/feedback_*.md→ nofeedback_one_pr_per_session.md. (Carried forward from run0f72ad7.5; still open.)Fix:
[MINOR]
docs/specs/mvp-demo.md— 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, unlike every other spec file in the directory.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. All others have date prefixes.Fix:
git mv docs/specs/mvp-demo.md docs/specs/YYYY-MM-DD-mvp-demo.mdwhere the date is the file's first-commit date (git log --follow --diff-filter=A -- docs/specs/mvp-demo.mdto find it).[MINOR] Four review-bot finding plans still in
docs/plans/despite all underlying fixes having shipped — should be archiveddetails
Drift: The four
2026-04-27-review-bot-*.mdplan files describe code fixes for findingsd9b4b85.1–4. All four fixes have since merged:d9b4b85.1—fix(demo): share seed storage key between PlayView and useAgentSession(PR fix(demo): share seed storage key between PlayView and useAgentSession #159)d9b4b85.2—fix(demo): wire learner before reasoner on cognition swap(PR fix(demo): wire learner before reasoner on cognition swap #162)d9b4b85.3—fix(test): move attachResetHandler below static imports(PR fix(test): move attachResetHandler below static imports #163)d9b4b85.4—fix(scripts): use Date.getTime() in review-fix sort comparator(PR fix(scripts): use Date.getTime() in review-fix sort comparator #164)Per
CLAUDE.mdarchive convention, each plan should move todocs/archive/plans/after its work ships.Evidence:
git log --oneline -- examples/product-demo/src/views/PlayView.vue→ includesfix(demo): share seed storage key…(#159). Same pattern confirmed for PRs fix(demo): wire learner before reasoner on cognition swap #162, fix(test): move attachResetHandler below static imports #163, fix(scripts): use Date.getTime() in review-fix sort comparator #164.Fix:
(Per
docs/archive/README.mdconvention: add archive banner, no body edits.)[MINOR]
docs/plans/2026-04-26-pre-v1-demo-guided-walkthrough.md— every slice is✅ shippedbut plan has not been archiveddetails
Drift: The plan's roadmap table shows all five 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 table (docs/product/2026-04-26-pre-v1-demo-evolution-plan.md:378) also marks row A (Guided walkthrough) as✅ shipped. The plan should be archived perCLAUDE.mdconvention.Evidence:
grep "✅\|not started" docs/plans/2026-04-26-pre-v1-demo-guided-walkthrough.md→ all rows✅ shipped.Fix:
Update
docs/product/2026-04-26-pre-v1-demo-evolution-plan.md:378link accordingly.[MINOR] Five shipped quality chunk plans have all internal implementation steps still
[ ]despite the umbrella tracker marking them[x] shippeddetails
Drift: The umbrella tracker (
2026-04-26-quality-automation-routines.md) marks rows 1–5 as[x] shippedwith PR links. But the individual chunk plan files still have every implementation step marked[ ](unchecked). A reader of the chunk plans sees open work for already-shipped features:quality-codeql.md— 9 unchecked steps (shipped: tracker row 1)quality-dep-triage-bot.md— 8 unchecked steps (shipped: tracker row 2)quality-actions-bump-bot.md— 6 unchecked steps (shipped: PR docs(routine): add weekly action-SHA bump prompt #142, tracker row 3)quality-plan-recon-bot.md— 7 unchecked steps (shipped: PR docs(routine): add monthly plan reconciliation prompt #143, tracker row 4)quality-bundle-trend.md— 11 unchecked steps (shipped: PR ci(metrics): weekly bundle-size trend snapshot #144, tracker row 5)All five delivered artifacts exist (
codeql.yml,dependabot.yml,bundle-size-trend.yml,docs/actions-bump-bot/,docs/dep-triage-bot/,docs/plan-recon-bot/).Evidence:
grep -c "\- \[ \]" docs/plans/2026-04-26-quality-{codeql,dep-triage-bot,actions-bump-bot,plan-recon-bot,bundle-trend}.md→ 9, 8, 6, 7, 11.Fix: Per the umbrella tracker's "When to mark this tracker shipped" section: archive all five chunk plans (plus the three unshipped ones can remain in
docs/plans/until they ship) when every row is[x]. For now, consider archiving the five shipped chunk plans individually, or tick their internal steps off before archiving.[NIT]
PUBLISHING.md:38-39— leaf-job list (labelled "as of d9b4b85") is now also missingE2E (Playwright)added in PR feat(demo): tour-happy-path Playwright spec + CI gate (Pillar-1 slice… #158details
Drift: The parenthetical "as of d9b4b85" leaf-job list omitted the matrix expansion of
test-core/test-tfjs(flagged in prior run0f72ad7.8). Since that run,E2E (Playwright)was also added toci-gate.needs(PR feat(demo): tour-happy-path Playwright spec + CI gate (Pillar-1 slice… #158). The list now lags two changes behind.Evidence:
grep "e2e" .github/workflows/ci.yml→e2ejob defined at line 470, listed inci-gate.needs. (Prior finding carried forward; drift has grown.)Fix: Remove the parenthetical list entirely (the surrounding text already directs readers to wire only "CI gate (required check)"), or update it to note the matrix and E2E job.
9b166765ba14e21c05987ba5f793d8abd9f1b837(66 Markdown files audited)9b16676.1(CLAUDE.md demo:dev) — counter tested, not held, finding keptdocs/review-bot/PROMPT.md,docs/review-bot/README.md,docs/actions-bump-bot/PROMPT.md,docs/actions-bump-bot/README.md,docs/dep-triage-bot/PROMPT.md,docs/dep-triage-bot/README.md,docs/plan-recon-bot/PROMPT.md,docs/plan-recon-bot/README.md(cloud-routine prompt internals — cross-references spot-checked only),docs/specs/2026-04-26-pre-v1-demo-evolution-design.md,docs/specs/2026-04-26-pre-v1-demo-evolution-spec.md(large specs — headers and external references spot-checked),docs/plans/2026-04-26-pre-v1-demo-cognition-diff-panel.md,docs/plans/2026-04-26-pre-v1-demo-determinism-fingerprint.md,docs/plans/2026-04-26-pre-v1-demo-json-preview-commit.md,docs/plans/2026-04-26-pre-v1-demo-second-scenario.md,docs/plans/2026-04-26-quality-demo-smoke.md,docs/plans/2026-04-26-quality-determinism-replay.md,docs/plans/2026-04-26-quality-mutation-testing.md(not-started plans; tracker status consistent with open[ ]rows),docs/reviews/2026-04-25-library-review-issue.md(historical review snapshot — immutable),docs/specs/2026-04-24-post-tfjs-improvements.md,docs/specs/2026-05-06-strategy-ai-modding-review.md(specs only scanned for symbol/path references)