Files
command-center/agent/managed-skills/docs-dedupe-verify-campaign/SKILL.md
T

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 + root omp-docs/index.md first; inventory with find omp-docs -name '*.md' | wc -l.
  • Run scripts/kb-lint.sh omp-docs baseline; index-coverage gate is scripts/kb-coverage.py omp-docs (each dir's index.md must link every sibling file/subdir).
  • Branch off fresh origin/main in a NEW worktree (git -C ~/.omp worktree add ~/.omp/wt/<name> -b docs/<issue>-slug origin/main) — workspace policy blocks git checkout -b in session worktrees.
  • Open the Gitea issue first (multi-moving-parts law); branch name docs/<issue#>-<slug>.

Scout fleet (overlap detection)

  • One task call, tasks[] batch, agent scout, 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, see scripts/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, nonexistent ornith-llama-cpp-setup tree, 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 prints error: command not found: caddy on 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-operations for token-extraction + merge payload); xdg-open the 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 +text lines), CUT N.=M / CUT N.=M @reg, PUT <N @reg, PUT >N: / PUT <N:. There is NO PUT 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 lone PUT >N: or PUT <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), then PUT <M @block at the true anchor, re-read tail, add spacing blank if a --- now abuts a list line.