QSL-1 — every shipped item in research/queue/built/ still reads status: open, in the repo and on the public site
status: dismissed by PANEL run 23 (2026-09-15), at its own adversarial review, before reaching the queue · class: records integrity · never occupied a row in queue/open/ — filed here so the measurements are not re-derived
What was proposed. Under the 2026-08-21 queue-as-directory migration an
item's directory is its status, but every item file also carries a status:
line in its body. Triage rewrites that line when it dismisses something;
the implementer does not rewrite it when something ships, because
ops/RESEARCH_IMPLEMENTER.md:136-141 explicitly says to record the outcome as
"a file move, not a text edit … the state machine IS the filesystem".
The proposal was to remove or pin that second source of truth.
The measurements, all verified at HEAD 4b30d99 — keep these, they are the
durable part:
| directory | items (excl. README) | in-body status: |
|---|---|---|
open/ | 12 | open — 12/12 correct |
built/ | 13 | open — 13/13 wrong |
dismissed/ | 23 | dismissed by TRIAGE <date> — 23/23 correct |
approved/ | 0 | — |
public_export.publish_set(public_export.py:582-592) globsresearch/**/*.md, so all four queue directories publish;export_research_notes(:613-638) writesweb/public/notes/<slug>.mdverbatim. All 13built/items are on the public site and all 13 readstatus: openthere.research.jsonentries carry{slug,title,date,published,path,words,redactions}and no status field.- Nothing in the repository reads the line.
grepfor^status:/status: openacross every.py,.sh,.ymland.jsreturns zero hits. (scripts/automerge_guard.py'sstatuseskwarg is git file status —modified/renamed/removed— an unrelated word.)
Why it was killed. The single harm offered was the 2026-09-14 daily audit
telling the owner that SKW-3 was "Still open and unapproved … Re-raising it
here because its deadline passed unattended" — SKW-3 having shipped
2026-09-06 in PR #152 (877dce6). The status line is not in that causal
chain. git log origin/outbox/daily-audit shows the routine's previous run
was 2026-09-04 (0af8154), then five dark days; the 09-14 run copied its own
09-04 bullet forward, and SKW-3 was built two days after the report it
copied. Had the audit opened the file at all, the path said built/ and
line 111 said "Built — recorded 2026-09-06 · Shipped (code PR #152)". Line
3 is the third of three concordant signals, and the reader consulted none of
them. The same bullet's "21 items against its 12 cap" — a pre-triage count
already superseded by 2ea65fb eight hours earlier — confirms the mechanism
was a stale-artifact read, not a misleading field.
So the field is decoration that no machine and, in the one instance we have,
no reader consults. Fixing it would not have prevented the harm. Secondary:
the row carried no clock, which under triage's expiring-first rule is what
evicted HIRE-1 on 09-14; and open/ stood at exactly its 12-item cap, so
filing it would have pre-committed Monday's triage to an overflow dismissal.
What survived, and where it went. The real defect is the other leg —
ops/DAILY_AUDIT.md's Continuity paragraph tells the routine to pick up
carried-forward items from its own prior report with no step that re-verifies
them against HEAD. Neither PR #166 nor #168 touches it (both branches'
ops/prompts/daily-audit.md change only fable-5 → opus-5). That is a
one-sentence procedure fix and was escalated in run 23's report, not filed as
a row.
Reopen conditions
Reopens on any of:
- Something starts reading it. Any code, test, procedure or routine
prompt that consults a queue file's in-body
status:line — at that point it stops being decoration and the 13/13 contradiction becomes live. - A second false owner-facing statement of this class, where the contradicting field is demonstrably what the reader used (not an unrefreshed carry-forward). One incident explained by another mechanism is not evidence for this one.
- The public leg acquires a reader. If thales.report's note pages are
shown to be read by anyone making a decision, or if
research.jsongrows a consumer that would need a state field, the site half is worth the ~2 lines (export_research_notesalready special-casesdoc.parent.nameforpaused/at:622). - Automatically, if the fix is taken anyway as a free rider on any other
change to
built/— deleting the status word from the 13 files, leavingclass/effort/horizon, costs nothing and needs no row. That is the recommended disposition if the owner ever touches those files for another reason.