From ab4be1b419df0d6c1828083695cfe0476d15f333 Mon Sep 17 00:00:00 2001 From: autonomic-bot Date: Thu, 9 Jul 2026 11:03:53 +0000 Subject: [PATCH] fix(redfix): B-redfix-8 reproduction quoted a brittle blob total (3099); the invariant is password=2 / token=0 Adversary (a22c384) confirmed both findings but counted 3061 blobs vs my 3099. Root-caused: (a) later commits add blobs (host now 3104); (b) --batch-all-objects counts 49 unreachable objects rev-list omits (reachable-only = 3026); (c) 'git clone /local/path' hardlinks the whole object store, so local clones inherit unreachable objects while remote clones do not -- hence the Adversary's lower, and for a mirror question more apt, number. All four scans agree on password=2 and token=0. STATUS now asserts those invariants and a 'wc -l > 100' sanity floor instead of an exact total, so the documented repro cannot misfire. Operator-scope, no gate impact, no VETO; DONE stands. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018XE43k4DaeMXHMK51wBUu2 --- machine-docs/BACKLOG-redfix.md | 25 +++++++++++++++++++++++++ machine-docs/STATUS-redfix.md | 22 ++++++++++++++++------ 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/machine-docs/BACKLOG-redfix.md b/machine-docs/BACKLOG-redfix.md index 73ba36e..b9e3396 100644 --- a/machine-docs/BACKLOG-redfix.md +++ b/machine-docs/BACKLOG-redfix.md @@ -882,3 +882,28 @@ wake-#55 sentinel), `shred`-removed after. Positive control: the known-leaked pa is **2**. Always run the positive control. Still **operator-scope, outside DoD, no gate impact.** `## DONE` stands; no VETO. + +### B-redfix-8 — ADDENDUM 2 (wake #58b, 2026-07-09): blob-count figure was brittle; the invariant is 2-and-0, not a total + +The Adversary's wake-#58 adjudication (`63f7001`) independently CONFIRMED both results (token `0` blobs, +password exactly `2` — `fd21fcb8@14c7dee` + `bcc31b55@223cc16`, both mirror-served ancestors) — but reported +its total as **3061 blobs** where I reported **3099**. Neither is wrong; the *total* is simply not an invariant. + +Root-caused, three independent sources of drift: +1. **New commits add blobs.** Same host now reads **3104** (my wake-#58 commits landed after the scan). +2. **`--batch-all-objects` counts unreachable objects** that `git rev-list --all` omits — **49** of them here. + Reachable-only is **3026**. +3. **`git clone /local/path` hardlinks the entire object store**, so a *local* clone inherits those unreachable + objects (verified: my cold clone also reads 3104). A clone from the **remote** gets only reachable objects — + which is why the Adversary's number is lower, and why it is the right scope for a *mirror-exposure* question. + +**Consequence.** My STATUS quoted `# → 3099 lines` as the expected output of the documented reproduction. A +future agent running that command will see a different number, and could read the mismatch as either a broken +probe or a changed repo — both wrong. STATUS corrected: the reproduction now asserts `wc -l > 100` as a sanity +floor and names the **durable invariants — password ⇒ exactly 2 blobs, token ⇒ exactly 0** — which held across +all four scans (3099 / 3104 / 3026 / 3061) precisely because they are scope-independent. + +Lesson, same shape as the `awk` near-miss: **an incidental figure recorded as if it were an assertion becomes a +future false alarm.** Record the invariant, not the measurement. + +No new exposure, no gate impact, operator-scope. `## DONE` stands; no VETO. diff --git a/machine-docs/STATUS-redfix.md b/machine-docs/STATUS-redfix.md index 652f1ba..f5b0649 100644 --- a/machine-docs/STATUS-redfix.md +++ b/machine-docs/STATUS-redfix.md @@ -69,8 +69,8 @@ and the redaction commit `e99e2b3` are clean. Redaction cannot unpublish it — history and in every clone. **CORRECTED (wake #58, 2026-07-09):** an earlier version of this entry said "**only** the historical commit -`14c7dee` serves it." That **understated the exposure**. An exhaustive scan of all **3099** blobs in the -object db (`git cat-file --batch-all-objects`, literal-value match) finds the password in **two distinct +`14c7dee` serves it." That **understated the exposure**. An exhaustive scan of every blob in the object db +(`git cat-file --batch-all-objects`, literal-value match) finds the password in **two distinct blobs**, carried by **two published commits** — both ancestors of `origin/main`, so both are mirror-served: | commit | blob | `machine-docs/BACKLOG-redfix.md` size | @@ -98,15 +98,25 @@ leak, not an error page. `0 hits`: git cat-file --batch-all-objects --batch-check='%(objecttype) %(objectname)' \ - | grep '^blob ' | cut -d' ' -f2 > /tmp/blobs # → 3099 lines; assert >100 before trusting + | grep '^blob ' | cut -d' ' -f2 > /tmp/blobs # assert wc -l > 100 before trusting # then literal-match each blob against a chmod-600 sentinel; positive control MUST return 2 -**Positive control is mandatory.** Any scan of this repo that reports **0** password-bearing blobs is a -**broken probe**, not a clean repo — the correct answer is **2**. +**Do not assert an exact total blob count** — it is host- and time-dependent, and is *not* the invariant. +Observed legitimately: **3099** (Builder wake-#58 scan), **3104** (same host, after that wake's commits), +**3026** (reachable-only), **3061** (Adversary's cold clone, wake #58). Three sources of drift: (a) new +commits add blobs; (b) `--batch-all-objects` counts **unreachable** objects (49 here) that `git rev-list` +omits; (c) `git clone /local/path` **hardlinks the whole object store**, so a local clone inherits those +unreachable objects while a clone from the *remote* receives only reachable ones. All four scans agree on +the only figures that matter. + +**Positive control is mandatory.** The durable invariants, stable across every scan scope above: +**password ⇒ exactly 2 blobs; token ⇒ exactly 0.** Any scan of this repo that reports **0** password-bearing +blobs is a **broken probe**, not a clean repo. **The `oauth2` token (the second exposed credential) does NOT appear in git history.** Same exhaustive scan, same run, literal match against the live token (`sha256[:16]=9c44a1aea2ecb389`, extracted root-only to a -`chmod 600` file, then `shred`-removed): **0 of 3099 blobs.** The 271 history blobs matching the string +`chmod 600` file, then `shred`-removed): **0 blobs** — independently reproduced by the Adversary at wake #58 +against its own cold clone. The 271 history blobs matching the string `oauth2:` are `scripts/recipe-mirror-sync.sh:39`'s `https://oauth2:${TOKEN}@…` **variable interpolation** plus machine-docs **prose citing the sha16 sentinel** — no literal value. So the token's exposure is **filesystem-only** (A-redfix-1: world-readable `.git/config` copies); it is **not** on the public mirror.