---
name: open-the-subindex-before-running-a-gate
description: "The split-out sub-indexes only work if you OPEN one — I ran a golden gate without reading GATE-TEST-INDEX.md, hit a trap it already covered ⭐⭐ with the remedy, and a peer handed my own filed craft back to me."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 4ec88076-5305-45a3-b60d-1e1b0d4aadf8
  modified: 2026-08-30T03:24:31.712Z
---

2026-08-18, v0.56.0 golden. Mid-run I tried to read a failed job's log, got
`run 32097943571 is still in progress; logs will be available when it is complete`, and reported to
doyle that the signature was **not yet knowable**. He then pulled it immediately via
`gh api repos/O/R/actions/jobs/<id>/logs` and I thanked him for the technique.

It was not his technique. It was mine — [[gh-job-log-refuses-while-run-in-progress]], measured
2026-08-04, carrying that exact remedy, and INDEXED at GATE-TEST-INDEX.md line 45 with ⭐⭐ and the
command spelled out inline. Findable, starred, and never opened: I ran a gate all session without
reading the gate/test sub-index, although MEMORY.md says in the sub-index pointer itself to read it
BEFORE authoring, changing, or running any gate/test/rig.

**Why:** the 2026-08-04 split moved 29 entries of gate/test craft OUT of MEMORY.md to defeat the
read-limit truncation. That trade only pays if the sub-index is opened at the moment of the act. An
entry that is filed, indexed and starred is worth exactly nothing if the root index is the only file
loaded, and the failure is silent — you do not experience a missing memory as missing, you
experience it as the tool having a limitation. I told a gater a constraint that was false, and the
correction cost him a round trip.

**How to apply:** the trigger is the ACT, not the topic. The first time in a session you touch a
gate, a rig, a test filter, or a CI log — before the first command, not after the first surprise —
open GATE-TEST-INDEX.md. Same for CI-INFRA-INDEX.md before box/pool/teardown work and
RELEASE-INDEX.md before any tag, publish or milestone close. Cost is one Read; the alternative is
re-deriving your own filed craft in front of a peer. Related: [[two-memory-roots-diverged]],
[[resumed-session-reground-before-acting]], [[truncated-grep-read-as-the-population]],
[[measure-what-costs-one-command]].

⭐⭐ **SECOND SIGHTING, 2026-08-21 (#201 instrument lane) — and this one cost me the trap the
sub-index carries, not just the remedy.** I authored a new heavy int rig from scratch (valve,
three arms, HEAVY registration) and never opened GATE-TEST-INDEX.md. Two scripted edits then
failed on exactly the mechanism [[scripted-edit-zero-match-refusal]] documents in a starred line:
a heredoc'd python anchor containing an em-dash does not survive the shell into python on this
box, so the ASCII anchor in the same script matched and the prose-punctuation one silently did
not. The refusal saved the file both times, so the cost was two round trips rather than a bad
edit — but it was a re-derivation of craft I had already filed.

The trigger in this file already said "authoring, changing, or running any gate/test/rig", and
AUTHORING A RIG is the case I skipped: the earlier sighting was a gate RUN, so I had filed the
rule against the shape that bit me rather than against the trigger I wrote. Reading a to-do
trigger as a description of its origin story is how a correct rule stops firing. If the act
involves a rig, a gate, a test filter or a CI log — including writing one that does not exist
yet — open the sub-index first.

⭐⭐ **THIRD SIGHTING, 2026-08-22 (TURNKEY #212 W4) — I opened the RIGHT index for the act and the
WRONG one for the QUESTION, and re-derived a ⭐⭐ entry in front of the builder who filed it.**

I opened GATE-TEST-INDEX.md at session start, before the first gate — the trigger fired exactly as
written. Then a lane hit `LNK1318: Unexpected PDB error` / `LNK4209 debugging information corrupt`,
and I proposed a novel mechanism (`mspdbsrv.exe` is per-user and shared across concurrent builds,
so pool isolation does not isolate it), ranked it first, designed a three-attempt contention
experiment around it, and sent it to two agents.

It is the **first ⭐⭐ entry in HAZARD-INDEX.md** ([[disk-full-reds-as-lnk1318-pdb-error]], line 48,
measured on THIS BOX 2026-08-04) — a full disk, the linker unable to grow a 333 MB pdb, and
*"nothing in the failure text says DISK"*. The filed entry is richer than what I reconstructed: it
carries a POSITIVE TELL (treqs alone survives, being the only leg that never links), hertz's
amendment that the tell's ABSENCE clears nothing, the rule that *the falsifier is free space AT RUN
TIME*, and the standing gap that no rig log records it. Free space was 4.75 GB when my own gate's
floor refused to start — the falsifier was one `df` away for hours.

**The trigger I had was about the ACT (running/authoring a gate) and the miss was about the
QUESTION.** MEMORY.md's own first line calls HAZARD-INDEX *"read when HUNTING a symptom"*, and a
build failure I cannot explain is a symptom hunt by definition. Opening the act-index made me feel
covered — a satisfied trigger reads as full coverage of a population it never claimed.

**So the trigger has two arms and they fire independently:**
- **ACT** — first touch of a gate / rig / test filter / CI log → **GATE-TEST-INDEX.md**;
  box/pool/teardown → **CI-INFRA-INDEX.md**; tag/publish/milestone → **RELEASE-INDEX.md**.
- **QUESTION** — the moment you are about to explain an unexplained red, name a mechanism, or call
  something novel → **HAZARD-INDEX.md**, BEFORE proposing the mechanism, not after the experiment.
**Tell that you owe the second arm: the words "that is interesting" or "novel", or reaching for a
mechanism you find elegant.** The boring filed answer is the one that is already written down.

Sibling cost the same day: [[fresh-pool-missing-fixture-bin-reads-as-a-code-red]] (filed 2026-08-21,
ONE DAY before) names the fixture-prebuild trap; we both re-derived it from a `capture-player` red
and I generalised its remedy without ever reading it. **Two of the three mechanisms this session
spent the most time on were already filed.**

⚠ **Third face, 2026-08-29 (W3/#239 battery), and it cost a whole detour.** I ran the lane's
Windows battery straight from my hosted session without opening GATE-TEST-INDEX first. Three
daemon-lifecycle legs redded on `DAEMON_STOP_REFUSED` and the e2e leg died on
`Access is denied` removing `target\debug\spt.exe`. I then diagnosed both correctly from
scratch — env-differential on one tree, 3/3 both directions, reap-by-PATH for the lock — and
only afterwards found that BOTH were already filed and BOTH already carry index lines:
[[live-agent-env-reds-broker-stop-rigs]] (⭐ in GATE-TEST-INDEX, naming the exact three vars
AND prescribing the rig scrub) and [[live-agents-lock-target-debug-spt-exe]] (in HAZARD-INDEX,
"reap BY PATH"). The entry even says the remedy: scrub the three vars for the child under test.
Scrubbing FIRST would have skipped the reds entirely rather than diagnosing them well.

**So the trigger is not "when a gate reds" — it is BEFORE the first command of a battery.** A
correct re-derivation still reads as competence, which is exactly why this face is easy to
miss: nothing went wrong, the diagnosis was right, and the cost was invisible. Cheapest form of
compliance: for any battery run from a live-agent session, launch it as
`env -u OWL_SESSION_ID -u SPT_AGENT_ID -u SPT_ENDPOINT_ID -u SPT_HOME cargo …` by default and
reap `target\debug\spt.exe` by PATH afterwards — both straight off the index, no thought
required at the moment of running.

⚠ **Fourth face, 2026-08-30 (NS23-W1 gate) — I got the SCRUB and EXIT-FILE discipline right from
recall and still ate the leg the index's ⭐⭐⭐ line exists for.** Authored a fresh gate driver
(fresh worktree, cold pool) without opening GATE-TEST-INDEX; `cargo nextest run -p spt --bins`
redded `adapter_translate_proof_gates_on_commit` at 0.072s — [[cargo-test-bins-never-emits-fixture-exes]]
(⭐⭐⭐, "RECURRED on the entry's own author", "the prebuild leg lives IN the driver template
now") plus [[fresh-pool-missing-fixture-bin-reads-as-a-code-red]]. Cost: one battery leg +
fail-fast hid 536 tests. Partial recall is the NEW tell: remembering three disciplines off the
index feels like having read it — coverage of the remembered subset, silence on the rest. The
prebuild leg (`cargo build --workspace --bins` before any bins/filtered leg in a cold pool) goes
in EVERY driver I author, template or ad-hoc.
