SHR-1 — an UNLISTED mode of the clone hazard, which git fetch cannot detect: a shared working tree moved under CONCURRENT READERS. It happened in this run, to this run's own chair, inside the run reviewing #259
status: dismissed as a queue row · raised panel run 42 (2026-10-21; change-reviewer lens candidate CR42-2 part B, and independently the chair's own error) · killed at the chair's adversarial pass as too small for a slot while the cap binds — the fix is ~0.1 pd of instruction text and this record carries it · class: G2 loudness / measurement provenance
What happened, and it was the chair's doing
#259 (merged 2026-10-20) added ops/DAILY_AUDIT.md §0c, "Your clone is not
the repository", after panel run 41 reported a trading outage that had not
happened.
CORRECTED 2026-10-21, after this file was first written. The first draft of this row said run 41's false reading came from "a working copy taken at its 13:00Z session start" — i.e. §0c's stale mode. That cause was wrong, and #265 (
537e5f3, merged this evening) falsified it from run 41's own reflog:origin/mainfast-forwarded to the meanrev commit at 14:57:54Z, before four of its five readings. It fetched, the fetches worked, and the reading was still zero. The real causes were git's approxidate filling a bare date with the current time of day (so--since=2026-10-20asked at 14:59Z means2026-10-20T14:59Z, excluding every commit made earlier that day) plus a fetched-but-unread ref for the ledger tails. §0c now carries that as its own mode 3, and the panel inherited the stale-clone attribution from #259 and the steward without independently verifying the mechanism — the facts it did verify (that all three sleeves traded) were never in doubt and are unaffected.So this row is not "the third mode" — §0c's mode 3 is the date filter.
And do not replace that with another ordinal. A second correction, hours later the same evening: #266 (
59c2320) added a mode 4 — parking the working tree onbeacon/*oroutbox/*, which swaps out the agent's own instruction files because the harness re-readsCLAUDE.mdfrom the parked branch. So the "fourth" this row claimed for itself was wrong within the hour. §0c is being extended faster than a row can cite a position in it, and an ordinal written into a file someone else is appending to is a claim that rots by default. Cite these by name, never by number.This row is the concurrent-readers mode, and it is still unlisted. It is adjacent to mode 4 and not covered by it: mode 4's harm is to the mover's own instructions and its remedy is "check out
mainagain afterwards" — which this run did do. SHR-1's harm is to other readers of the same tree, who never moved anything and have no way to notice, and its remedy is different (hand each reader the SHA, or export the commit). Mode 3's text comes closest to naming it, in passing, when it notes that the date-filter failure "needs no stale ref, no graft and no concurrent session".The hazard below stands on its own measured evidence, which never depended on run 41's cause.
And it bit this run. Having dispatched three lenses
against the shared checkout at /home/user/thales, the chair then checked out
branch research-queue/panel-run-41 in that same tree to push a correction to
#257. That branch is diverged from origin/main, not merely behind — it
forks before the 2026-10-20 commits — so for several minutes the tree the
lenses were reading lacked bef5203 (#258), 8253ff4 (#259) and 9e28a45
(#256), and every option/borrow capture stream was exactly one session light.
git status was clean throughout. git fetch would not have helped: nothing
was unfetched. git rev-parse --is-shallow-repository tests the wrong
property. The tree was simply pointed somewhere else by another writer.
Measured, CONFIRMED-BY-EXECUTION (the chair's own fingerprints, used to verify each lens afterwards):
| fingerprint | stale (b9e7c1a) | correct (9e28a45) |
|---|---|---|
data/options_iv_term files | 47 | 48 |
data/shortability files | 51 | 52 |
data/options_skew.jsonl dates | 84 | 85 |
_SEPT_2026_OUTAGE in captures.py | absent | present |
ACKNOWLEDGED_GAPS keys | 4 | 7 |
The near-miss is the point. The change-reviewer lens watched
grep -c "_SEPT_2026_OUTAGE" src/thales/data/captures.py return 12 and then
0, with no edit of its own, and was one step from reporting that #258's
acknowledgements were absent from merged code — a false finding about merged
code, in the run reviewing the false-finding incident. The queue-and-clocks
lens was tipped off only because two runs of the same gather function minutes
apart returned different windows. Its own note is the sharpest statement of the
risk: "a routine with no reason to re-run the same command twice would have
shipped the stale figure, exactly as run 41 did."
Both lenses then re-derived everything from an immutable snapshot
(git archive <sha> / git ls-tree) and proved byte-identity against
origin/main by md5/sha256, so no finding in run 42 rests on the moved
tree — verified, not asserted. One figure was corrected on the way (a
DISCHARGED-precedent count), and one measurement was discarded mid-run rather
than reported.
Why it is dismissed as a ROW
- The fix is instruction text, and this file states it — see below. A row would restate it and wait for a builder that has not run since 2026-10-07.
- Part A of the original candidate is already owned and dated. The lens
observed that §0c landed only in
ops/DAILY_AUDIT.mdthough the panel made the error, and thatops/RESEARCH_PANEL.md,ops/ROUTINES.md,ops/STEWARD.mdandops/WEEKLY_AUDIT.mdcarry zero matches for fetch/stale/shallow/clone. True — but #260 names that gap explicitly and assigns the cross-routine edit to the monthly research audit (2026-11-01). A row for an assigned, dated residual is duplication. open/was at 12 of 12, and this run spends its one defensible slot on DLV-1, which bites this Friday.- The panel may not fix it itself. The remedy is an edit to the panel's own
procedure, i.e. recursion on purpose, which
NORTHSTAR.md§5 reserves to the owner's countersign. Propose-only is the correct posture, and a dismissal with the text written out is the cheapest form of the proposal.
The remedy, written out so whoever owns §0c can paste it
A further mode for §0c — add it by name, not by number (~0.1 pd): a
shared working tree can be moved by a concurrent session. git status stays clean and git fetch detects nothing.
Before any claim about merged content, re-read git rev-parse HEAD immediately
before the read — or, better, do not read the shared tree at all: export the
commit under review (git archive <sha> | tar -x -C <your own dir>) and measure
there.
And the generalisation, which is the valuable half (~0.2 pd): a lens should
be handed the SHA it is reviewing and assert it, rather than being told
which branch to trust. The panel's own dispatch brief told three lenses the tree
was at origin/main; that was true when written and false minutes later. A
chair cannot promise the state of a tree it shares with itself.
Noted and deliberately not proposed: the mechanical version of part A — a
clone-vintage banner on thales fleet status / fleet digest, in the shape of
the existing market_session_date() banner (~0.5 pd). The shop already has a
clone-independent liveness detector (thales fleet digest --fail-on-no-run,
cli.py:3777, which correctly did not fire on 2026-10-20). Run 41's error
was hand-reasoning past a mechanical detector that was already right, which
argues the detector is not what is missing.
Reopen conditions (any one)
- A routine publishes a second claim traceable to a moved or mis-vintaged tree — the first was run 41's false outage, this was the near-miss. A second published instance makes it a row, cap or no cap.
- The 2026-11-01 research audit does not make the cross-routine §0c edit
(§0c had gained a third mode, a fourth mode and two corrections within the
single evening of 2026-10-21, and is still only the daily audit's file —
six other routines clone the same way and none of their procedures say any
of this),
leaving
ops/RESEARCH_PANEL.mdandops/STEWARD.mdwith no clone-vintage discipline. Part A then has no owner and reopens as one row with this leg. - A panel run is observed dispatching lenses against a tree it then moves. This run did exactly that; the reopen is for the recurrence, which would show the record did not bind.
- The owner rules that a dismissal is a sufficient record site for a
procedure defect found in the procedure's own run. Then this closes
permanently — but the corollary is SCR-1's:
ops/RESEARCH_PANEL.mdmust name the site, so the next such finding has a pinned reader rather than a passive verb.