iterion

← Bot runs

docs-refresh (Doki) — bilans

Documentation refresh bot. Detects mismatches between project docs (README, docs/*/.md, CLAUDE.md, bundled skills, Go comments) and the actual code, fixes the DOCS only (never code logic), and auto-commits on convergence. Alternating claude_code (opus-4-8) / claw (gpt-5.5) reviewers, deterministic streak_check (two cross-family approvals), a scan_docs footprint enumerator + build_manifest anchor verifier so agents can’t truncate the audit set. Runs on ANY repo; iterion is the reference self-host case.

2026-07-07 — v2 dogfood on iterion’s own docs: 4 real fixes in stride, honest non-convergence on manifest FPs, self-filed findings (run 019f3d4d-1aed)

2026-07-07 — converted to v2 minimal-framing (ADR-058 fleet rollout) — structural-validated, dogfood pending

2026-06-22 — docs/studio-visuals branch self-review (run 019eef81)

2026-06-14 — repo-wide .bot→.bot CLI-example drift (run 019ec7ba)

Findings / misses

First recorded dogfood, on the real board ticket c4043495 (“Align the .bot documentation boundary”). Run in an isolated git worktree (--merge-into none), store pointed at the operator’s .iterion so the run was visible in studio. Bot launched via standalone iterion run (not the watchexec studio backend) and the install was a fresh static binary at HEAD — both per the CLAUDE.md dogfood discipline.

Value produced

Finding (bot coverage gap) → FIXED this session

The bot converged without resolving the ticket’s headline item: CLAUDE.md:3 still claimed “.bot / .bot — identical semantics” and linked a dead anchor README.md#iter-vs-bot (the README heading was removed; the CLI now rejects .bot outright — unsupported workflow extension). The reviewers verify doc→code refs (symbols, CLI surface, file paths under known roots) but nothing systematically audited doc→doc internal links / #heading-anchors. FILE_RE in build_manifest only matches paths under known roots (so bare README.md slipped through) and never captured the #anchor fragment. The dead_link taxonomy existed but had no deterministic candidate feeder.

Fix (v0.14.0, build_manifest): added an md_link anchor kind that extracts [text](path#anchor) links and verifies BOTH the target file’s existence AND, for .md targets, the #heading-anchor (GitHub-slug match: lowercase, strip non-[\w\s-], spaces→hyphens, strip leading/ trailing hyphens to handle emoji headings; line anchors #Lnn skipped). Drifted md_links flow through the existing candidate pipeline at high priority; doc-mismatch-taxonomy.md now points md_linkdead_link (anchor_kind: external). Validated standalone over the full 153-doc tree (764 verified / 16 drifted, 0 false positives after the slug fix), and in a real scoped re-run (019ec69f) build_manifest flagged exactly the two dead anchors (CLAUDE.md:3 + docs/examples.md:12README.md#iter-vs-bot, drifted_anchors: 2 of 288, zero FP). The scanner is generic — dead internal links/anchors are a universal doc-drift class, not iterion-specific.

Engine hardening

Lessons for next run

2026-06-14 — synthetic clone-validation + 2nd real-bot C082 proof (run 019ec58a)

A second, independent dogfood from the C082 board-emit session (parallel to the real-board run above). Purpose was narrower: confirm Doki’s machinery + convergence on a clean iterion clone and, incidentally, exercise the C082 sandboxed-board fix end-to-end on a real catalog bot. (Lower-value target than the real-board run above — kept for the C082 proof + the gitignore finding.)