Skip to content

docs(runbook): corrections from the v0.67-0.69 media pass - #831

Closed
edspencer wants to merge 1 commit into
mainfrom
docs/runbook-v069
Closed

docs(runbook): corrections from the v0.67-0.69 media pass#831
edspencer wants to merge 1 commit into
mainfrom
docs/runbook-v069

Conversation

@edspencer

Copy link
Copy Markdown
Owner

Eight corrections to DOCS-UPDATE-RUNBOOK.md, each one something that cost this pass real time or nearly produced a wrong result.

The two that would have cost a whole pass

The stale-build trap. The rig served dist/ from a clone that predated the visual redesign. Restart it without rebuilding and every "re-shot" frame is the old UI — and nothing tells you: the rig comes up, the seed passes, the leak scan passes, every shot succeeds. The only tell is a design nobody examines while concentrating on framing. The runbook now carries the one-navigation check: open /config and confirm the Appearance section with four theme cards, which cannot exist on any build before 75c3935, and which tests the served bundle rather than the git state of a directory.

The 127.0.0.1 baseline was both stale and self-contradictory. It read 38; a later revision said 46 for the docs subtree and then added "plus 6 in README.md" — summing to 52 against a real total of 46. Recounted and split: 39 docs + 7 README = 46. This matters more than it looks: the baseline exists so you can subtract it and investigate the remainder, so a baseline that overcounts is exactly how a genuine new leak hides inside an expected one.

What a design release changes about a docs pass

Normally docs drift is per-page and recency is a useful hint. A design release invalidates every UI-bearing image simultaneously, and recency stops being evidence at all — the previous pass's seven stills were merged 41 minutes before the first design commit. Age was never the criterion; what landed after them was.

Verification hygiene

  • Positive-control every verification grep. A grep returning nothing is two results wearing one face: the thing is absent, or your pattern is broken. This PR is its own example — my first audit of this very file reported six of eight corrections MISSING. They were all present; I had written \| alternation under grep -E, where it is a literal. The control (Cloudflare, known present, no alternation) matched, which is what exposed it.
  • Cloudflare serves inconsistently mid-propagation — three identical fetches of one page returned 1, 1, 0 images. Fetch the asset URL directly rather than sampling harder.
  • /proc and ss do not work from a keeper here — we run in a container and see only our own netns, so ss reports no listening socket while curl gets a 200. Prove instance identity from the API's own contents (/api/instance-configdataDir, driveMode), not from the process table.
  • A detection pattern is content. An early capture.mjs carried this box's private dev domain inside its own leak-detection regex — the tool written to stop that string being published would have published it. Hence $PADDOCK_LEAK_EXTRA.

Rig fragility

The projects tree must be on persistent storage, and the projects tree and the data dir must be wiped together or not at all. Half a wipe leaves job records describing chats whose transcripts are gone, and that renders into the screenshots as a subtly broken instance.

Verification

DOCS-UPDATE-RUNBOOK.md is at the repo root and therefore outside the website/** CI path filter, so this PR gets no docs build — the site build is not affected by it either way. Built locally regardless: npm run build in website/ exits 0, 52 pages. Markdown-only, no site content changed, no links added.

Docs-only: no changeset, no version bump.

- Positive-control every verification grep. A grep returning nothing is two
  results wearing one face — absent, or a broken pattern. One check reported a
  page had zero images; the page was fine and the pattern was too narrow.
- Cloudflare serves inconsistently mid-propagation: three identical fetches of
  one page returned 1, 1, 0. Fetch the asset URL directly rather than sampling
  the page harder.
- A detection pattern is content. An early capture.mjs carried a private dev
  domain inside its own leak-detection regex, so the tool written to stop that
  string being published would have published it. That is why PADDOCK_LEAK_EXTRA
  exists, and the README now says so.
- Corrects the 127.0.0.1 baseline, which summed to 52 while claiming 46. It is
  39 in the docs subtree + 7 in README.md.
@edspencer

Copy link
Copy Markdown
Owner Author

Superseded by #833, which is a strict superset of this branch: byte-identical runbook plus a 21-line record of what actually happened when the stale-build check was run at v0.69 (it passed first time — but only because the rig's existing checkout was already replaced; the rig's clone was parked pre-redesign). That empirical note is the most useful paragraph in the change, so #833 is the one to review. Closing to leave a single runbook PR from this lineage.

@edspencer edspencer closed this Aug 10, 2026
edspencer pushed a commit that referenced this pull request Aug 10, 2026
This branch and #830/#831 each had material the other lacked, so merging any two
would conflict and merging one would silently drop the other's content. Folded
here so ONE runbook PR carries everything:

- Positive-control every verification grep. A grep returning nothing is two
  results wearing one face — absent, or a broken pattern.
- Cloudflare serves inconsistently mid-propagation; fetch the asset URL directly
  rather than sampling the page harder.
- A detection pattern is content: an early capture.mjs carried a private dev
  domain inside its own leak-detection regex, so the tool written to stop that
  string being published would have published it.

This branch's per-file 127.0.0.1 table is kept over #830's two-row summary — same
numbers (46 = 39 site + 7 README), more useful breakdown.

#830 becomes rig-tools-only; #831 is byte-identical to #830's runbook half.
@edspencer

Copy link
Copy Markdown
Owner Author

Closing as superseded by #832.

This branch's DOCS-UPDATE-RUNBOOK.md was byte-identical to the runbook half of #830 (same md5), so the three runbook PRs were two distinct pieces of content, not three.

They were not, however, duplicates of each other: #832 carried ~180 lines this branch never had — verifying an auditor's negative findings, archive screenshots showing the old UI being correct rather than stale, off-limits lists going stale mid-pass, and counting at the end when your own PR edits what you are counting. Merging any two of the three would have conflicted; merging one would have silently dropped the other's content.

Resolved by folding this content into #832, which now carries all of it:

  • positive-control every verification grep
  • Cloudflare serving inconsistently mid-propagation
  • a detection pattern is content (why PADDOCK_LEAK_EXTRA exists)

#832 keeps its per-file 127.0.0.1 table over the two-row summary here — same numbers (46 = 39 site + 7 README), more useful breakdown.

Final split: #829 captures · #830 rig tooling · #832 runbook. Nothing from this branch is lost.

edspencer pushed a commit that referenced this pull request Aug 10, 2026
The last-but-one figure was stale before it was pushed: the commit that recorded
it (#778) also closed two README gaps, one of which added the seventh 127.0.0.1.
That is not drift afterwards — it is the recording PR invalidating its own count.

Last item outstanding from the #830/#831/#832 reconciliation; everything else
those branches carried is already here.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant