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 key-commands table 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 — no library build. A developer following only this table runs the demo with a stale or empty dist/ and gets import errors. README.md correctly calls out npm run build as a prerequisite, but the key-commands table actively contradicts it.
Evidence:grep -n "demo:dev" CLAUDE.md → 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".
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 comment could be read as compressed workflow prose — "having built the library, then run the demo" — rather than claiming the command itself performs the build. That interpretation doesn't hold: shell annotation convention (command # description) universally means the annotation describes what the command does. The word "build" precedes "then run," making the claim unambiguously false. Finding kept.
[MAJOR].claude/skills/verify/SKILL.md:9,43 — skill claims verify has five stages; the script has seven
details
Drift: SKILL.md line 9 says "the underlying npm script runs all five stages" and line 43 says "All 5 stages green". The verify script runs seven stages: format:check && lint && lint:demo && typecheck && test && build && docs. lint:demo (stage 3) and docs (stage 7) are absent from the skill's enumeration and isolation-commands block. CLAUDE.md:52 correctly lists all seven.
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.
Fix: Update SKILL.md — replace "five" / "5" with "seven" / "7" everywhere, 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".
Drift: The README table (lines 150-157) shows four keys: agentonomous/whiskers, agentonomous/__agentonomous/index__, agentonomous/whiskers/tfjs-network, agentonomous/speed. After the keyspace split and demo refactor: (1) snapshot data key is agentonomous/__agentonomous/data/whiskers (DATA_PREFIX in LocalStorageSnapshotStore.ts), (2) index key is agentonomous/__agentonomous/meta/index (META_INDEX_KEY), (3) speed key is demo.v2.session.speed (SpeedPicker.vue:11); the old agentonomous/speed key is explicitly purged as legacy by purgeLegacyDemoKeys() in app/main.ts.
Evidence:grep -n "META_INDEX_KEY\|DATA_PREFIX" src/persistence/LocalStorageSnapshotStore.ts → shows __agentonomous/meta/index and __agentonomous/data/ prefixes. 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: Replace the key table with the current layout:
-| `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]docs/plans/2026-04-26-quality-codeql.md — all implementation steps [ ] but umbrella tracker marks chunk shipped
details
Drift:docs/plans/2026-04-26-quality-automation-routines.md row 1 is marked [x] shipped for the CodeQL chunk. The chunk plan itself (quality-codeql.md) has every implementation step still [ ]. A reader of the chunk plan sees 5+ open tasks for already-shipped work.
Evidence:grep "^\- \[" docs/plans/2026-04-26-quality-codeql.md | head -5 → all - [ ]. grep "CodeQL\|codeql" docs/plans/2026-04-26-quality-automation-routines.md → row 1 [x] shipped.
Fix: Flip all step checkboxes to [x], add a shipped note with the relevant PR number, then git mv docs/plans/2026-04-26-quality-codeql.md docs/archive/plans/ per CLAUDE.md archive convention (add archive banner, no body edits).
[MAJOR]docs/plans/2026-04-26-quality-dep-triage-bot.md — all implementation steps [ ] but umbrella tracker marks chunk shipped
details
Drift: Umbrella tracker row 2 is [x] shipped for dep-triage-bot. The chunk plan has 7 open [ ] steps.
[MINOR]PUBLISHING.md:38 — leaf-job list labelled "as of d9b4b85" is missing the e2e job added since that SHA
details
Drift:PUBLISHING.md:38 lists the full leaf-job list "as of d9b4b85" for branch-protection configuration. The e2e job (Playwright) has since been added to ci-gate.needs (present at .github/workflows/ci.yml:527). Anyone configuring branch protection by copying this list would omit e2e as a required status check.
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.
Fix:
(For reference, the full leaf-job list as of d9b4b85: `Format (Prettier)`,
`Lint (ESLint)`, `Typecheck (tsc --noEmit)`, `Lint workflows (actionlint)`,
`Audit production deps (npm audit)`, `API docs (typedoc)`,
`Test core (Vitest, ubuntu-latest)`, `Test tfjs (cpu on ubuntu-latest)`,
-`Build & size budget`, `Demo build (examples/product-demo)`.)+`Build & size budget`, `Demo build (examples/product-demo)`, `e2e`.)
Or remove the parenthetical entirely — the surrounding text already directs readers to wire CI gate (required check) as the single required check, which is the safe long-term guidance.
[MINOR].claude/skills/review-fix/SKILL.md:343 — hardcoded Windows machine path D:\Projects\agent-library
details
Drift: Line 343 says "the main repo (D:\Projects\agent-library), NOT from the worktree". This is a machine-specific Windows developer path with no meaning in a CI, Linux, or macOS context, or on any other developer machine.
Evidence:grep -n "D:\\\\Projects\|agent-library" .claude/skills/review-fix/SKILL.md → line 343 and 349 match.
Fix:
-the **main repo** (`D:\Projects\agent-library`), NOT from the+the **main repo** (the repo root, e.g. `~/agentonomous`), NOT from the
[MINOR]docs/plans/2026-04-25-comprehensive-polish-and-harden.md:790-803 — "Open questions" section lists OQs 1–2 as open; both are resolved inline earlier in the same file
details
Drift: The "Open questions" section (line 790) presents OQs 1–4 as unresolved. OQ1 (reward source) is explicitly 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…". The summary section was never updated after those resolutions were written.
Evidence:grep -n "OQ\b\|Open question" docs/plans/2026-04-25-comprehensive-polish-and-harden.md → resolution markers at lines 518, 592; open summary section at line 790.
Fix: In the "Open questions" section, mark OQ1 and OQ2 as resolved with a one-line note referencing the inline decision (e.g., "Resolved — see line 518"). OQ3 and OQ4 appear genuinely still-open; leave them as-is or mark them if resolved.
[MINOR]docs/plans/2026-04-25-comprehensive-polish-and-harden.md:825 and docs/plans/2026-04-26-quality-automation-routines.md:160 — dead link to .claude/memory/feedback_one_pr_per_session.md (file does not exist)
details
Drift: Both files reference .claude/memory/feedback_one_pr_per_session.md. The file does not exist; ls .claude/memory/feedback_*.md lists 10 feedback files and this is not among them. .claude/memory/MEMORY.md index also has no entry for it.
# comprehensive-polish-and-harden.md:825-See `MEMORY.md → feedback_one_pr_per_session.md` for the headline rule and+See `MEMORY.md → feedback_pr_hygiene.md` for the headline rule and# 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`),
(The one-PR-per-session rule lives in feedback_pr_hygiene.md; alternatively remove the parenthetical if it adds no value.)
[BLOCKER]
CLAUDE.md:67—demo:devcomment claims the command builds the library first, but it does notdetails
Drift:
CLAUDE.mdkey-commands table annotatesnpm run demo:devwith# build library then run examples/product-demo via Vite. The actual script iscd examples/product-demo && npm run dev— no library build. A developer following only this table runs the demo with a stale or emptydist/and gets import errors.README.mdcorrectly calls outnpm run buildas a prerequisite, but the key-commands table actively contradicts it.Evidence:
grep -n "demo:dev" CLAUDE.md→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".Fix:
Counter-argument to my own [BLOCKER]: The comment could be read as compressed workflow prose — "having built the library, then run the demo" — rather than claiming the command itself performs the build. That interpretation doesn't hold: shell annotation convention (
command # description) universally means the annotation describes what the command does. The word "build" precedes "then run," making the claim unambiguously false. Finding kept.[MAJOR]
.claude/skills/verify/SKILL.md:9,43— skill claims verify has five stages; the script has sevendetails
Drift: SKILL.md line 9 says "the underlying npm script runs all five stages" and line 43 says "All 5 stages green". The
verifyscript runs seven stages:format:check && lint && lint:demo && typecheck && test && build && docs.lint:demo(stage 3) anddocs(stage 7) are absent from the skill's enumeration and isolation-commands block.CLAUDE.md:52correctly lists all seven.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.Fix: Update SKILL.md — replace "five" / "5" with "seven" / "7" everywhere, 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.*namespacedetails
Drift: The README table (lines 150-157) shows four keys:
agentonomous/whiskers,agentonomous/__agentonomous/index__,agentonomous/whiskers/tfjs-network,agentonomous/speed. After the keyspace split and demo refactor: (1) snapshot data key isagentonomous/__agentonomous/data/whiskers(DATA_PREFIXinLocalStorageSnapshotStore.ts), (2) index key isagentonomous/__agentonomous/meta/index(META_INDEX_KEY), (3) speed key isdemo.v2.session.speed(SpeedPicker.vue:11); the oldagentonomous/speedkey is explicitly purged as legacy bypurgeLegacyDemoKeys()inapp/main.ts.Evidence:
grep -n "META_INDEX_KEY\|DATA_PREFIX" src/persistence/LocalStorageSnapshotStore.ts→ shows__agentonomous/meta/indexand__agentonomous/data/prefixes.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: Replace the key table with the current layout:
[MAJOR]
docs/plans/2026-04-26-quality-codeql.md— all implementation steps[ ]but umbrella tracker marks chunk shippeddetails
Drift:
docs/plans/2026-04-26-quality-automation-routines.mdrow 1 is marked[x] shippedfor the CodeQL chunk. The chunk plan itself (quality-codeql.md) has every implementation step still[ ]. A reader of the chunk plan sees 5+ open tasks for already-shipped work.Evidence:
grep "^\- \[" docs/plans/2026-04-26-quality-codeql.md | head -5→ all- [ ].grep "CodeQL\|codeql" docs/plans/2026-04-26-quality-automation-routines.md→ row 1[x] shipped.Fix: Flip all step checkboxes to
[x], add a shipped note with the relevant PR number, thengit mv docs/plans/2026-04-26-quality-codeql.md docs/archive/plans/perCLAUDE.mdarchive convention (add archive banner, no body edits).[MAJOR]
docs/plans/2026-04-26-quality-dep-triage-bot.md— all implementation steps[ ]but umbrella tracker marks chunk shippeddetails
Drift: Umbrella tracker row 2 is
[x] shippedfor dep-triage-bot. The chunk plan has 7 open[ ]steps.Evidence:
grep -c "^\- \[ \]" docs/plans/2026-04-26-quality-dep-triage-bot.md→7.grep "dep-triage" docs/plans/2026-04-26-quality-automation-routines.md→ row 2[x] shipped.Fix: Same as af3914f.4 — flip checkboxes, note the PR, archive to
docs/archive/plans/.[MAJOR]
docs/plans/2026-04-26-quality-actions-bump-bot.md— all implementation steps[ ]but umbrella tracker marks 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.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.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 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 6 open[ ]steps.Evidence:
grep -c "^\- \[ \]" docs/plans/2026-04-26-quality-plan-recon-bot.md→6.grep "recon" docs/plans/2026-04-26-quality-automation-routines.md→ row 4[x] shipped via #143.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 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 10 open[ ]steps.Evidence:
grep -c "^\- \[ \]" docs/plans/2026-04-26-quality-bundle-trend.md→10.grep "bundle-trend" docs/plans/2026-04-26-quality-automation-routines.md→ row 5[x] shipped via #144.Fix: Flip checkboxes, note PR ci(metrics): weekly bundle-size trend snapshot #144, archive to
docs/archive/plans/.[MINOR]
PUBLISHING.md:38— leaf-job list labelled "as of d9b4b85" is missing thee2ejob added since that SHAdetails
Drift:
PUBLISHING.md:38lists the full leaf-job list "as of d9b4b85" for branch-protection configuration. Thee2ejob (Playwright) has since been added toci-gate.needs(present at.github/workflows/ci.yml:527). Anyone configuring branch protection by copying this list would omite2eas a required status check.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.Fix:
Or remove the parenthetical entirely — the surrounding text already directs readers to wire
CI gate (required check)as the single required check, which is the safe long-term guidance.[MINOR]
.claude/skills/review-fix/SKILL.md:343— hardcoded Windows machine pathD:\Projects\agent-librarydetails
Drift: Line 343 says "the main repo (
D:\Projects\agent-library), NOT from the worktree". This is a machine-specific Windows developer path with no meaning in a CI, Linux, or macOS context, or on any other developer machine.Evidence:
grep -n "D:\\\\Projects\|agent-library" .claude/skills/review-fix/SKILL.md→ line 343 and 349 match.Fix:
[MINOR]
docs/plans/2026-04-25-comprehensive-polish-and-harden.md:790-803— "Open questions" section lists OQs 1–2 as open; both are resolved inline earlier in the same filedetails
Drift: The "Open questions" section (line 790) presents OQs 1–4 as unresolved. OQ1 (reward source) is explicitly 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…". The summary section was never updated after those resolutions were written.
Evidence:
grep -n "OQ\b\|Open question" docs/plans/2026-04-25-comprehensive-polish-and-harden.md→ resolution markers at lines 518, 592; open summary section at line 790.Fix: In the "Open questions" section, mark OQ1 and OQ2 as resolved with a one-line note referencing the inline decision (e.g., "Resolved — see line 518"). OQ3 and OQ4 appear genuinely still-open; leave them as-is or mark them if resolved.
[MINOR]
docs/plans/2026-04-25-comprehensive-polish-and-harden.md:825anddocs/plans/2026-04-26-quality-automation-routines.md:160— dead link to.claude/memory/feedback_one_pr_per_session.md(file does not exist)details
Drift: Both files reference
.claude/memory/feedback_one_pr_per_session.md. The file does not exist;ls .claude/memory/feedback_*.mdlists 10 feedback files and this is not among them..claude/memory/MEMORY.mdindex also has no entry for it.Evidence:
ls /home/user/agentonomous/.claude/memory/feedback_*.md—feedback_one_pr_per_session.mdabsent.grep "one_pr_per_session" .claude/memory/MEMORY.md→ no results.Fix:
(The one-PR-per-session rule lives in
feedback_pr_hygiene.md; alternatively remove the parenthetical if it adds no value.)af3914f3eaed7a0f39da7ed4437f4be259e89fec(64 Markdown files audited)af3914f.1(CLAUDE.mddemo:dev) — counter tested, 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(owned by changeset machinery);node_modules/,dist/,coverage/,.worktrees/,graphify-out/wiki/(generated/gitignored). Bot prompt internals (docs/review-bot/PROMPT.md,docs/actions-bump-bot/PROMPT.md,docs/dep-triage-bot/PROMPT.md,docs/plan-recon-bot/PROMPT.md) were cross-referenced for file/path claims but not audited for internal consistency.