4.3 KiB
4.3 KiB
name, description
| name | description |
|---|---|
| docs-dedupe-verify-campaign | Run an exhaustive docs dedupe + fact-verification campaign in dank/command-center: scout cluster ledgers, override scouts with evidence, gate every commit, and sweep scaffolding before PR. |
Exhaustive docs dedupe + verification campaign (dank/command-center)
Frame
- Read
omp-docs/references/okf-spec.md+ rootomp-docs/index.mdfirst; inventory withfind omp-docs -name '*.md' | wc -l. - Run
scripts/kb-lint.sh omp-docsbaseline; index-coverage gate isscripts/kb-coverage.py omp-docs(each dir'sindex.mdmust link every sibling file/subdir). - Branch off fresh
origin/mainin a NEW worktree (git -C ~/.omp worktree add ~/.omp/wt/<name> -b docs/<issue>-slug origin/main) — workspace policy blocksgit checkout -bin session worktrees. - Open the Gitea issue first (multi-moving-parts law); branch name
docs/<issue#>-<slug>.
Scout fleet (overlap detection)
- One
taskcall,tasks[]batch, agentscout, read-only; one cluster per task (skills trees, llama trees, pi vs packages, niri, sleep/power, core, gitea, gitea+cross-cutting sweep). Cap 2 concurrent; queue rest. - Ledger format per cluster →
local://dedupe/<cluster>.md: inventory table (file | lines | verdict KEEP|MERGE|DELETE|VENDOR|UPDATE), overlaps, facts-to-keep, inbound links, staleness. - Scouts lie. Verified misses in the 2026-10-19 campaign: fabricated ledger entries ("peer-reviewed BrowseComp" claim that exists in no file), a DELETE verdict for a generated artifact that is checked in by design AND under test (
tools/niri/keybindings.md, seescripts/gen-keybinds.sh+tests/gen-keybinds.bats), and a KEEP for a leftover the scout misread its own changelog about. NEVER apply a scout verdict without re-checking the file, the tests, and the changelog yourself.
Fact verification
- Fleet facts: read-only probes over
ssh -o BatchMode=yes dankclaw|dankserver(podman ps/inspect/top, stat, /etc/os-release, curl localhost APIs,podman exec <c> <tool> --version). Live state beats docs even when docs claim recent verification — the 2026-10-18 "audit" still drifted (zealot 27B→9B, build 10754→10777, container census 14→32). - External claims: web_search/web read yourself (no subagents per Frank's rule). Kill fabrications outright (invented distro
FreeToken, nonexistentornith-llama-cpp-setuptree, unattributable "44.5% peer-reviewed CUA") — delete/drop with an explicit note, never keep "plausible" numbers. - Policy drift (live ≠ tuned docs): flag in the doc + PR body as an operator decision; NEVER silently re-apply policy.
Log compaction (log.md)
- Entry law: dated entry = what changed + durable lesson + concept-page pointer; narratives recoverable via
git log --follow. Record the law at the top of the log. Tag historical-era entries.
Gates + landing
- Gate every commit:
bash scripts/kb-lint.sh omp-docs && python3 scripts/kb-coverage.py omp-docs && bats tests/. Pre-commit hook printserror: command not found: caddyon Caddyfile-touching commits — warning only, commit still lands. - Before opening the PR:
git diff --stat origin/main..HEAD | grep -i 'tmp\|scratch\|\.bak'— scaffolding merged under a.tmp-name in the 2026-10-19 campaign and needed a follow-up PR to promote. - PR via API (skill
gitea-api-pr-operationsfor token-extraction + merge payload);xdg-openthe PR the moment it opens; comment the campaign ledger on the issue. - After Frank's merge OK: propagate deployment
git -C ~/.omp fetch && git merge --ff-only origin/main; reap campaign worktree (git worktree remove --force) + delete branch local/remote; close issue with landing comment.
Line-edit op syntax trap (bit three times)
- Valid ops:
PUT N.=M:(body+textlines),CUT N.=M/CUT N.=M @reg,PUT <N @reg,PUT >N:/PUT <N:. There is NOPUT N+=:form — it lands in the file as a literal garbage line and shifts the insert to the wrong position. For gap-insert use a lonePUT >N:orPUT <N:per call; pre-compute line numbers against the file map (ops reference original lines within one call, but a failed op poisons positions). - Recovery recipe when a literal op line lands: read exact bounds,
CUT N.=N(junk),CUT A.=B @block(misplaced section), thenPUT <M @blockat the true anchor, re-read tail, add spacing blank if a---now abuts a list line.