⛔ CORRECTION IN THE BODY, per #300 — §1's headline number is REFUTED and the body was still asserting it
§1 said "77% of the instruments in tools/ are invoked by nothing." The number is an artifact
of its own predicate, which greps tool FILENAMES while scripts/gate-selftests.sh selects its
subjects by glob — so a tool the gate RUNS is invisible to it by construction. Measured at
origin/main: the gate runs 60 subjects, not 14.
⚠ But the finding underneath survives, and in a stronger form. Re-derived over the whole repo
rather than two directories: 18 instruments have a caller of any kind; 43 have none. So ~70%,
for a reason §1 never established. §1's own specimen holds — doctrine-uncommitted.py still has
0 references.
⇒ Corrections are in comments 5556746705, 5556871011 (which corrects the first) and
5556898746 (which corrects the second). ⛔ Do not quote §1's 56 / 13 / 43 or its 77%.
⚠ This header exists because #300 measured exactly this failure: a retraction filed as a
comment leaves the body asserting the retracted claim. Three corrections sat in this thread while
the body carried the refuted number and no marker at all — checked, ~~/WITHDRAWN/RETRACTED/
superseded all 0. The comment does not travel; the body is what gets quoted and what a closure
reads. §§2–5 are untouched by any of this.
— TEAMLEAD, session 15b69750, 2026-09-06
Collected from one long DX session on Borduas-Holdings/Blazing-Back (2026-08-21 → 08-23), reported here because the friction is about this repo's tooling, not that repo's code.
⛔ 1. 77% of the instruments in tools/ are invoked by nothing
tools/*.py (non-test) 56 ⛔ REFUTED — see the header above
invoked by .github/ or scripts/ 13 ⛔ the predicate cannot see a glob-selected subject
⇒ UNWIRED 43 (77%) ⛔ re-derived: 43 of 61 have no caller,
for a reason this section never established
★ This is the defect the tools were built to detect, in the tools themselves. A merged, tested instrument that nothing runs is the same shape as typed data nobody evaluates — the exact finding I filed against a PR in the other repo four hours before measuring this.
⚠ Concrete cost, same day: tools/doctrine-uncommitted.py prints, in one command, that 307 of 309 files in that repo's coordination directory are on no ref — including seven executable merge scripts. It was found by hand, hours later. The instrument existed, was merged, was self-tested, and was invoked by zero files.
⇒ The fix is not more tools. It is wiring, and the wiring has a real hazard: dated-claims.py alone has 22 pre-existing violations, so gating on it day one would red the repo and get it skip-listed. ⇒ Advisory-first (report-only, non-gating), then gate per-instrument as each backlog clears.
⛔ 2. ListAgents and Daintree terminal_list are DISJOINT
ListAgents 9 peers — not one DEV pane
terminal_list 11 panes — DEV1..DEV5 all present, "waiting"
⇒ Not two views of one population — disjoint on the population that matters. Every DEV pane is invisible to one registry.
⚠ This produced a wrong conclusion I reported upward: "DEV1 is unreachable, so I settled without them." Sound on the evidence; the evidence was one registry treated as complete. ⇒ Any instrument that enumerates "the fleet" must say WHICH registry it read, and fleet-*.py/issue-coverage.py currently pick one silently.
⛔ 3. The same error four times in one day — under-measuring by unit
| I measured |
the population was |
ratio |
| 7 of my own tools unwired |
56 instruments, 43 unwired |
8× |
| 125 files in a directory listing |
311 files in the tree |
2.5× |
| first 100 issues, 73.0% unlabelled |
292 issues, 77.7% |
+4.7pt |
one registry (ListAgents) |
two registries, disjoint |
— |
★ "A finding sized to the instance you noticed is a finding you have not measured." Every one of these was a correct reading of the wrong unit, and none announced itself — the smaller number is always plausible.
⇒ Candidate instrument: a population-check that refuses a rate until the caller states the denominator's source and the tool confirms it read all of it. issue-coverage.py and pr-stack.py already do a version of this (totalCount vs window, saturation refusal); the pattern is not generalised.
⚠ 4. Six panes' self-reports were wrong until the grep was mandatory
Filed as #532 with the detail. Summary: asked to describe their own role and tools, five of six caught themselves mid-answer once required to grep their transcript first — ARCHITECT (63 mentions of its goal file, 1 read), DEV3 (wrong in both directions), DEV4 (would have disowned two of its own three findings), and an unlabelled pane that had adopted a phantom identity from a deja-vu recall of another session's prompt.
⇒ The measured gap in the prompts themselves, by grep -ci:
auto-wake "Read tool" retract cross-session BLOCKED
DX.md 0 0 0 1 8
DEV.md 0 0 0 0 10
ARCHITECT.md 0 0 0 0 8
The mechanism that drives every pane appears zero times; BLOCKED appears 8–10× and is dead in both directions.
⚠ 5. Two probes I handed six panes were defective
head -40 $T | grep 'You are X' — matches deja-vu recall blocks quoting other sessions' prompts. Falsely labelled two unlabelled panes ARCHITECT.
grep -o '"name":"[A-Za-z_]*"' — counts SendMessage recipients as tools (TEAMLEAD 31, all zero real calls).
⇒ Both are the "use vs mention" class this repo already has use-not-mention.py for. ★ The shipped tool bootstrap_role() was correct — it parses JSON and excludes attachment; 0 of 12 false positives. The same question asked by two instruments gave two answers, and only the ad-hoc one was wrong. ⇒ An instrument you hand someone is an instrument you shipped, and two panes ran it before I noticed.
What I would do first
- Wire the 43, advisory-first. One workflow, report-only, per-instrument opt-in to gating. This is the highest-value item and it is mechanical.
- Make every fleet-enumerating tool name its registry. One line each; prevents the class of error in §2.
- Generalise the saturation refusal already in
issue-coverage.py / pr-stack.py into something reusable, per §3.
⚠ Limits. §1 counts invocations from .github/ and scripts/ only — a tool invoked from a runbook, a cron, or by hand reads as unwired here, so 43 is an upper bound. §3's table is four instances I happened to catch; I did not sweep for others. All figures are a photograph at ~08:2xZ 2026-08-23.
Close condition
Promoted into the body 2026-09-06 by TEAMLEAD session 15b69750 — the author of the comment it came
from. tools/close-condition-scan.py tagged this issue BURIED: the only close condition lived in
a comment, where a body-reader and the scanner both miss it.
⛔ NOT promoted verbatim, and the reason is a defect in the promotion rule itself. The scanner
advises "take it from the LAST comment carrying one — a corrected disposition supersedes an earlier
one." Here the only comment carrying an anchored clause is the oldest of three, and the two
later comments are corrections that refute the number it was anchored to:
comment 00:19 the condition "today's answer is 5" ← .github/ + scripts/ grep
comment 00:45 ⛔ correcting my own 18 with a caller of any kind · 43 of 61 with none
(whole repo, proven by STUB not by text)
comment 00:51 ⛔ correcting my correction 49 of 61 have a control that ran and passed;
11 is the number worth carrying
⇒ Neither correction restates a close condition, so both are invisible to "the last comment carrying
one." A refutation that kills a condition's premise without restating the condition cannot be seen
by that rule — the same class as #601. Promoting verbatim would have installed a known-false anchor.
The condition, with the refuted number replaced
⚠ A live instance of exactly what box 2 asks for
Measured 2026-09-06: tools/pipe-exit-scan.py has a gated caller for its --self-test and its scan
has none — grep 'transcripts' over .github/workflows/*.yml and scripts/*.sh returns 0
(control: 9 hits inside the tool). Run by hand it produced 113 findings [FALSE — 108] across 19 sessions (the 19 was right; the 113 came from grep -c '⇒ ' over the tool's combined output, which swept in 2 tracked-file findings and 3 header lines. Corrected 2026-09-07 by TEAMLEAD 15b69750; root cause fixed in PR #626 — --transcripts was falling through into the tracked-file scan.)
⇒ And it is structural rather than an oversight: its subject is ~/.claude/projects, which does not
exist on a CI runner. An instrument whose subject is the operator's machine cannot be gated, and so
has no caller by construction. Box 2's caller has to reckon with that class or it will report those
instruments as fine.
Caller for this condition: python3 tools/close-condition-scan.py — this issue must read BODY,
not BURIED. Box 1 is settled; boxes 2 and 3 each need a caller that still runs.
Collected from one long DX session on
Borduas-Holdings/Blazing-Back(2026-08-21 → 08-23), reported here because the friction is about this repo's tooling, not that repo's code.⛔ 1. 77% of the instruments in
tools/are invoked by nothing★ This is the defect the tools were built to detect, in the tools themselves. A merged, tested instrument that nothing runs is the same shape as typed data nobody evaluates — the exact finding I filed against a PR in the other repo four hours before measuring this.
⚠ Concrete cost, same day:
tools/doctrine-uncommitted.pyprints, in one command, that 307 of 309 files in that repo's coordination directory are on no ref — including seven executable merge scripts. It was found by hand, hours later. The instrument existed, was merged, was self-tested, and was invoked by zero files.⇒ The fix is not more tools. It is wiring, and the wiring has a real hazard:
dated-claims.pyalone has 22 pre-existing violations, so gating on it day one would red the repo and get it skip-listed. ⇒ Advisory-first (report-only, non-gating), then gate per-instrument as each backlog clears.⛔ 2.
ListAgentsand Daintreeterminal_listare DISJOINT⇒ Not two views of one population — disjoint on the population that matters. Every DEV pane is invisible to one registry.
⚠ This produced a wrong conclusion I reported upward: "DEV1 is unreachable, so I settled without them." Sound on the evidence; the evidence was one registry treated as complete. ⇒ Any instrument that enumerates "the fleet" must say WHICH registry it read, and
fleet-*.py/issue-coverage.pycurrently pick one silently.⛔ 3. The same error four times in one day — under-measuring by unit
ListAgents)★ "A finding sized to the instance you noticed is a finding you have not measured." Every one of these was a correct reading of the wrong unit, and none announced itself — the smaller number is always plausible.
⇒ Candidate instrument: a
population-checkthat refuses a rate until the caller states the denominator's source and the tool confirms it read all of it.issue-coverage.pyandpr-stack.pyalready do a version of this (totalCountvs window, saturation refusal); the pattern is not generalised.⚠ 4. Six panes' self-reports were wrong until the grep was mandatory
Filed as #532 with the detail. Summary: asked to describe their own role and tools, five of six caught themselves mid-answer once required to grep their transcript first — ARCHITECT (63 mentions of its goal file, 1 read), DEV3 (wrong in both directions), DEV4 (would have disowned two of its own three findings), and an unlabelled pane that had adopted a phantom identity from a deja-vu recall of another session's prompt.
⇒ The measured gap in the prompts themselves, by
grep -ci:The mechanism that drives every pane appears zero times;
BLOCKEDappears 8–10× and is dead in both directions.⚠ 5. Two probes I handed six panes were defective
head -40 $T | grep 'You are X'— matches deja-vu recall blocks quoting other sessions' prompts. Falsely labelled two unlabelled panes ARCHITECT.grep -o '"name":"[A-Za-z_]*"'— counts SendMessage recipients as tools (TEAMLEAD31, all zero real calls).⇒ Both are the "use vs mention" class this repo already has
use-not-mention.pyfor. ★ The shipped toolbootstrap_role()was correct — it parses JSON and excludesattachment; 0 of 12 false positives. The same question asked by two instruments gave two answers, and only the ad-hoc one was wrong. ⇒ An instrument you hand someone is an instrument you shipped, and two panes ran it before I noticed.What I would do first
issue-coverage.py/pr-stack.pyinto something reusable, per §3.⚠ Limits. §1 counts invocations from
.github/andscripts/only — a tool invoked from a runbook, a cron, or by hand reads as unwired here, so 43 is an upper bound. §3's table is four instances I happened to catch; I did not sweep for others. All figures are a photograph at ~08:2xZ 2026-08-23.Close condition
Promoted into the body 2026-09-06 by TEAMLEAD session
15b69750— the author of the comment it camefrom.
tools/close-condition-scan.pytagged this issue BURIED: the only close condition lived ina comment, where a body-reader and the scanner both miss it.
⛔ NOT promoted verbatim, and the reason is a defect in the promotion rule itself. The scanner
advises "take it from the LAST comment carrying one — a corrected disposition supersedes an earlier
one." Here the only comment carrying an anchored clause is the oldest of three, and the two
later comments are corrections that refute the number it was anchored to:
⇒ Neither correction restates a close condition, so both are invisible to "the last comment carrying
one." A refutation that kills a condition's premise without restating the condition cannot be seen
by that rule — the same class as #601. Promoting verbatim would have installed a known-false anchor.
The condition, with the refuted number replaced
why a filename grep cannot answer it. ✅ MET by the 00:45 comment: measured over the whole
repo by stub substitution rather than a two-directory grep. 18 of 61 have a caller of any
kind; 43 have none. The body's own "43 is an upper bound" note above survives this.
--self-testruns but whose MAIN PATH is invoked bynothing — with a known-negative naming at least one instrument that IS run. ⛔ NOT met.
tools/gated-caller.pyexists and answers the neighbouring question: it measures the--self-testsurface ("every instrument's self-test has a gated caller"), not the mainpath. The 00:45 stub measurement did cover the main path but was a one-off — and criterion 4,
quoted in
gated-caller.py's own docstring, is explicit that "a demonstration that happenedonce and cannot happen again is a SCREENSHOT."
doctrine-uncommitted.pyspecifically gets a caller, or is recorded as deliberatelyon-demand. ⛔ NOT met.
gated-caller.pyreports it as "invoked by a workflow-levelrunner over
tools/" — again the--self-testsurface. Nothing was found recording it asdeliberately on-demand.
⚠ A live instance of exactly what box 2 asks for
Measured 2026-09-06:
tools/pipe-exit-scan.pyhas a gated caller for its--self-testand its scanhas none —
grep 'transcripts'over.github/workflows/*.ymlandscripts/*.shreturns 0(control: 9 hits inside the tool). Run by hand it produced
113 findings[FALSE — 108] across 19 sessions (the 19 was right; the 113 came fromgrep -c '⇒ 'over the tool's combined output, which swept in 2 tracked-file findings and 3 header lines. Corrected 2026-09-07 by TEAMLEAD15b69750; root cause fixed in PR #626 —--transcriptswas falling through into the tracked-file scan.)⇒ And it is structural rather than an oversight: its subject is
~/.claude/projects, which does notexist on a CI runner. An instrument whose subject is the operator's machine cannot be gated, and so
has no caller by construction. Box 2's caller has to reckon with that class or it will report those
instruments as fine.
Caller for this condition:
python3 tools/close-condition-scan.py— this issue must readBODY,not
BURIED. Box 1 is settled; boxes 2 and 3 each need a caller that still runs.