3.8 KiB
3.8 KiB
name, description
| name | description |
|---|---|
| docs-dedupe-verify-campaign | Run an exhaustive docs dedupe + fact-verification campaign in dank/command-center: scout cluster ledgers, evidence-overridden merges, live fleet probes, log compaction law, and landing via Gitea PR. |
Campaign procedure for deduping + fact-checking omp-docs/ in dank/command-center (proven on Refs #29, 2026-10-19: 8 commits, -2,229 lines, 0 lint/coverage/bats failures).
1. Recon
- Fresh branch off
origin/mainin a new worktree (git worktree add ~/.omp/wt/<name> -b docs/<issue>-<slug> origin/main); the session worktree'sgit checkout -bis policy-blocked. - Run
scripts/kb-lint.sh omp-docsbaseline; write a throwaway index-coverage checker (each dir'sindex.mdmust link every subdir/file) — mechanical, no scout needed. - Open the Gitea issue first (multi-moving-parts law).
2. Scout fan-out (overlap detection)
- One
taskbatch,agent: scout, one task per doc cluster + one cross-cutting sweep (cap 2 concurrent; rest queue). - Each scout writes a ledger to
local://dedupe/<cluster>.md: inventory table (file, lines, purpose, verdict KEEP/MERGE/DELETE/UPDATE), overlaps, facts-to-keep ledger, inbound links, staleness, claims-needing-verification. - Scouts are LEADS, not truth. Observed failures: fabricated ledger entries (claims about text that does not exist in any file), a DELETE verdict on a generated artifact that is under test (
tools/niri/keybindings.mdis generated byscripts/gen-keybinds.shand tested bytests/gen-keybinds.bats— keep), and a KEEP based on misreading a changelog leftover. Re-derive every consequential verdict from the files/repo yourself.
3. Verify fleet facts live (never trust doc dates)
- Read-only BatchMode probes:
ssh -o BatchMode=yes dankclaw '...'(podman ps/inspect, systemctl status, curl localhost, os-release, cpuinfo).sudo -nonly has systemctl verbs — usepodman exec <ctr> grep/catfor in-container files. - Update docs with dated drift banners ("probed 2026-10-19") for policy divergence; NEVER silently re-apply a policy — flag as operator decision (e.g. SearXNG engine policy).
4. Verify external claims via direct web research (no subagents)
- Version/protocol/benchmark claims: primary source only (upstream README, raw.githubusercontent, /api/v1/version, arxiv). If a number cannot be re-attributed to a published benchmark, drop it with an explicit note in the doc.
- Fabrication hunt: invented distros/projects/model names (found: "FreeToken" distro, ornith-llama-cpp-setup tree, Intel CPU on an AMD box) — delete the artifact, not just the line.
5. Log compaction law
- Changelog entry = date + what changed + durable lesson + concept-page pointer, few lines. Full narratives live in git (
git log --follow). Record the law at the top oflog.md. Never re-expand an entry in place. Keep pi-era entries tagged "(pi era)".
6. Gates + landing
- Gate every commit:
bash scripts/kb-lint.sh omp-docs+ index-coverage +bats tests/(67 tests). Pre-commit hook printserror: command not found: caddyon Caddyfile-touching commits — warning only, commit still lands. - Gitea API auth:
~/.config/secrets/giteais URL-form (http://dank:<token>@host), not a raw token. Extract:T=$(sed -n 's|.*://[^:]*:\([^@]*\)@.*|\1|p' ~/.config/secrets/gitea | head -1); rawcatas bearer token → 401. - PR body ends with
---+cwd: <wd> · session: <id>footer; thenxdg-open <PR-URL>immediately; comment the campaign ledger summary on the issue. NEVER merge without Frank's explicit OK.
Edit-tool field notes (recurring traps)
PUT N+=:is invalid syntax — it inserts the literal text. One insert-op per edit call; recompute line numbers per call.- File hash tag changes after every edit — re-
readbefore each subsequent edit call to the same file; reusing a stale tag is rejected.