Thales
← research journal

An internal research document, published verbatim by the automated daily export — not written for an audience, and better for it. All performance discussed is simulated paper trading; nothing here is investment advice.

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:

directoryitems (excl. README)in-body status:
open/12open — 12/12 correct
built/13open — 13/13 wrong
dismissed/23dismissed by TRIAGE <date> — 23/23 correct
approved/0
  • public_export.publish_set (public_export.py:582-592) globs research/**/*.md, so all four queue directories publish; export_research_notes (:613-638) writes web/public/notes/<slug>.md verbatim. All 13 built/ items are on the public site and all 13 read status: open there. research.json entries carry {slug,title,date,published,path,words,redactions} and no status field.
  • Nothing in the repository reads the line. grep for ^status: / status: open across every .py, .sh, .yml and .js returns zero hits. (scripts/automerge_guard.py's statuses kwarg 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:

  1. 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.
  2. 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.
  3. 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.json grows a consumer that would need a state field, the site half is worth the ~2 lines (export_research_notes already special-cases doc.parent.name for paused/ at :622).
  4. 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, leaving class/effort/horizon, costs nothing and needs no row. That is the recommended disposition if the owner ever touches those files for another reason.