Files
serverAppConfigs/serverAppConfigs-docs/Agent/Agent Docs and Edits.md
T
Frank a5fe045b58 docs(vault): one fact, one owner — repair the doubled pages, single-source the facts
Structural repair:
- 13 pages were the same document twice (each exactly 2x its HEAD size),
  a second frontmatter block whose closing fence had been glued onto a body
  line by a frontmatter rewrite that re-read its own output. Un-doubled by
  cutting at the second frontmatter and keeping the copy whose body is a
  superset; the orphan census reports 0 lost tokens against HEAD.
- log.md: one entry per date, bare `## YYYY-MM-DD` headings, newest first —
  66 dated headings merged into 34, titles demoted to bold leads, every
  content line verified present. The file had been descending at the head
  and ascending at the tail.

Ownership moves:
- New `LLM/frank-medium.md` is the locator for the retired Dankserver
  endpoint: era windows quoted from each era page's own banner, no numbers
  restated, and the two unresolved date conflicts recorded instead of
  silently resolved. `frank-archon.md` links to it instead of restating the
  pre-rename window.
- The four Pipeline-Parallelism stubs (frontmatter only, no body) are gone;
  `Multi-Node Runtimes.md` owns runtime construction, launch, mixed-vendor
  verdicts and cross-split spec decode, and the four links that pointed at
  the stubs were repointed at it or at the drafter page.
- Authentik's three stub pages fold into `Authentik.md`, with the process
  detail and the outpost reference split out so the parent stays under the
  length hint.

Verified corrections (host census + live probe, 2026-10-19):
- The MXFP4 checkpoint two pages called the "on-disk rollback" is gone:
  /home/dank/models/ holds StillDeadcode, rad and tpl.jinja. Stated once, on
  the era page that owns that payload; the swap page now links to it.
- frank-medium-radiance-mxfp4: the 4.24/7 accept rate belongs to the DFlash2
  arm measured on the FP8 target, not to the MXFP4 era; the 3-family soak run
  census is kept once (155 requests) instead of twice (~120 and 155).
- Fleet shapes re-confirmed against the live endpoints before touching any
  page: 3x200000 fp8 KV, 2x200704, 2x262144.

Index rows are regenerated, not hand-carved. Net -1,849 vault lines.
2026-10-19 05:00:43 -07:00

5.2 KiB

type, title, description, tags, timestamp
type title description tags timestamp
reference Agent Docs and Edits Two self-inflicted doc damage classes from parallel agent edits, with the audit checks and recovery order for each.
agents
docs
markdown
hashline
edit-recovery
2026-10-18T00:00:00Z

Agent Docs and Edits

Doc-structure audit (after parallel agent edits)

Use after one or more subagents have edited markdown docs (OKF/Obsidian vault with --- frontmatter), before committing. Link checkers and completeness seams validate references, not structure — agents reliably produce structurally broken markdown that still links cleanly.

Damage catalogue:

  1. Banner/prose prepended above the opening --- → the frontmatter is no longer frontmatter (title/tags/description become body text).
  2. A rewrite appended instead of merged → duplicate headings and a stray second --- mid-file.
  3. Literal model artifacts in the body: <|channel>}<tool_call|>..., +- , - - .
  4. Wrapped bullets re-emitted with a - prefix on every physical line.
  5. Line-range replacement that dropped a sentence tail → dangling fragment, often mid-parenthesis.

Checks (fast, run all):

head -3 <file>                          # must be `---` if the page has frontmatter
grep -c '^---$' <file>                  # exactly 2 (opener + closer)
grep -n '^## ' <file> | sort -t: -k2 | uniq -f1 -d   # duplicate sections
grep -rnE '^\+- |^- - |<\|' <files>     # artifacts
python3 scripts/check-vault-links.py <vault-dir>
./tests/run.sh                          # docs completeness seam etc.

Repair order (matters):

  1. If the file was destroyed rather than edited: stash the agent version to .AGENTTRASH/<YYYYMMDD-topic>/, then git checkout HEAD -- <file> and re-apply only the intended changes by hand.
  2. If it merely duplicated: salvage unique content first — cut the one-of-a-kind section, paste it into the copy you keep, THEN delete the duplicate ranges. Never delete first.
  3. Re-add missing sentence tails (insert before the orphaned fragment), keeping list continuation lines indented.
  4. Re-run all checks above.

Gotchas: agents can write AFTER they appear finished (job settles, file changes) — re-verify structure after the last background job reports, not before. Editing an agent's already-damaged file with fresh line numbers is safe, but its snapshot tag changes on every edit — re-read before each subsequent edit. .AGENTTRASH/ is gitignored (.gitignore:25), so NEW trash stays local — but do not read that as "the repo has none of it": on 2026-10-18 git ls-files | grep -c AGENTTRASH returns 37 tracked paths (.AGENTTRASH/, scripts/.AGENTTRASH/, dankserver/.AGENTTRASH/, tests/.AGENTTRASH/), because gitignore never untracks what was committed before the rule. Trash is a temporary hold, not an archive.

Hashline edit recovery

Failure mode: multi-op edits resolve every PUT N.=M: / CUT N.=M: index against the original file numbering, and the post-apply diff view elides lines (it shows an anchor window, not the whole file). Two traps follow:

  1. A second edit call built from a diff-view snapshot uses line numbers from a partial view. Lines outside the window are invisible but still counted.
  2. If the first apply was itself wrong, the file shifted. The diff view tells you the damage, but not the true offsets.

Result: the repair pastes fresh text beside stale text instead of over it.

Procedure:

  1. Never carry line numbers across calls. Re-read the target range for a fresh tag before every subsequent edit. A read is cheap; a duplicated paragraph costs a commit and a revert.
  2. One op per call when the previous apply was imperfect. Fixed offsets are only trustworthy when every preceding apply landed exactly as specified.
  3. Re-read after every apply, and verify the whole affected region — the diff view is a sample, not proof. Check the boundaries: the line before the edit and the line after it. Damage shows up as a repeated sentence straddling the seam.
  4. Repair by CUT, not by re-PUT. Once you know the exact stale lines from a fresh read, delete them. Do not try to PUT a corrected superset over a range whose extent you are guessing at.
  5. Verify with a content assertion, not a diff review: grep -c for the duplicated sentence, plus a syntax/compile check on any touched script.

Same rule for any imperative edit tool with an old/new match: the matched text must be the entire text being replaced. Matching a bare fragment inside a paragraph splices the replacement into the middle of the sentence and silently corrupts the file. Re-read the file afterwards to confirm.

Renaming a Markdown heading breaks [[#Old Heading]] anchors. When a section is retitled, grep for the old heading text and fix every anchor in the same pass — doc link-checkers frequently do not validate #fragment targets, so a green suite will not catch a dangling one.