feat(wiki): model-era aging signal — verified_model field + re-verification lint check - #178
Merged
Merged
Conversation
…cation lint check Model-coupled wiki pages (guidance about model/LLM behavior) age with model generations: directives verified against one generation can become obsolete quirk workarounds by the next, silently bloating agent context. This adds the pruning signal the knowledge-capture loop was missing: - scripts/wiki-lint-model-era.js (new): report-only checker flagging model-coupled pages (subject-keyword match, scoped outside frontmatter, ## Sources, link URLs, and index.md) whose optional `verified_model` frontmatter is absent or outside the current generation. Current set: --current csv > DEV_LOOP_CURRENT_MODELS > default opus-4,fable-5. Exit 0/3/4, summary on stdout, `revalidate:` lines on stderr. Deliberately NOT in the blocking CI wiki-checks step (live corpus carries ~20 candidates by design). - AGENTS.md + templates/page.md: document the optional field; never a required key — absence is a candidate signal, not an error. - skills/wiki-lint/SKILL.md: check #12 (info), fourth Phase 0 baseline command, total_weight 24 -> 25, fix-protocol rule (never stamp without re-verifying); tests/wiki-lint-score.bats pins bumped in the same change. - tests/wiki-lint-model-era.bats (17 tests) + fixtures: detection both directions, Sources/index/hyphen-id negative controls, override precedence, usage/boundary errors; mutation-checked. Detection is subject-keyword based, not quirk-phrase based: measured on the live corpus, explicit "model tends to" phrasing appears on 3/271 pages while model-coupled subjects cover ~27/271 — the phrase regex misses the real aging surface (platforms/tools, backend/common/llm). Planned and executed via loop-implement/wiki-plan (plans/wiki-model-era/): gate-A/B ledgers green, plan-reviewer PASS, three independent test-quality-auditor PASSes, full bats suite rc=0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018JKZ3yrS6YpouWSoB4BaLu
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The wiki had a growth loop (insight → harvest → flush → PR) but no aging loop. Guidance about model/LLM behavior — quirk workarounds, harness-specific directives — silently rots as model generations advance (the "Sonnet 3.7 do-nots polluting Opus 4.5 context" problem). This PR adds the pruning signal; the pruning itself stays a human-reviewed act.
scripts/wiki-lint-model-era.js(new, report-only): flags model-coupled pages whose optionalverified_modelfrontmatter is absent or outside the current generation as re-verification candidates. Contract: stdoutpages: N, model-coupled: M, candidates: K, stderrrevalidate:<file>: <reason>, exit 0/3/4. Current-generation set:--current <csv>>DEV_LOOP_CURRENT_MODELS> defaultopus-4,fable-5— overridable so the checker's own list can age without editing callers.AGENTS.md+templates/page.md: document the optionalverified_modelfield. Not a REQUIRED key — absence is a signal, never an error; the 275-page corpus stays green untouched.skills/wiki-lint/SKILL.md: check knowledge: non-interactive CLI stdin, LLM response completeness, externally-owned defaults #12 (info severity), fourth Phase 0 baseline command,total_weight24 → 25, fix-protocol rule: never stampverified_modelwithout actually re-verifying; stampverified_model+last_verifiedtogether or rewrite/retire the guidance.tests/wiki-lint-model-era.bats(17 tests + fixtures): coupled/uncoupled detection,## Sources/index.md/hyphenated-page-id negative controls, override precedence (CLI beats env), usage + boundary errors. Mutation-checked (regex flip reddened exactly the owning tests).Design notes
platforms/toolsandbackend/common/llm— the phrase regex misses the real aging surface. Live run on this branch:pages: 275, model-coupled: 20, candidates: 20.Verification
plans/wiki-model-era/): gate-A/gate-B ledgers green, independent plan-reviewer PASS.rc=0(1000+ tests) on the rebased base;wiki-structure-checks+wiki-lint-prohibitionsgreen.Follow-ups (separate PRs)
[no-wiki]decisions (field schema design, override precedence, schema-layer authority) into the wiki.🤖 Generated with Claude Code
https://claude.ai/code/session_018JKZ3yrS6YpouWSoB4BaLu