Skip to content

77% of the instruments in tools/ are invoked by nothing — and four other frictions from a 2-day fleet session #579

Description

@jobordu

⛔ 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
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

  1. 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.
  2. Make every fleet-enumerating tool name its registry. One line each; prevents the class of error in §2.
  3. 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

  • The "unwired" claim is restated over MAIN-PATH invocation, not filename presence, and names
    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.
  • A CALLER that reports instruments whose --self-test runs but whose MAIN PATH is invoked by
    nothing — with a known-negative naming at least one instrument that IS run.
    NOT met.
    tools/gated-caller.py exists and answers the neighbouring question: it measures the
    --self-test surface ("every instrument's self-test has a gated caller"), not the main
    path. 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 happened
    once and cannot happen again is a SCREENSHOT."
  • doctrine-uncommitted.py specifically gets a caller, or is recorded as deliberately
    on-demand.
    NOT met. gated-caller.py reports it as "invoked by a workflow-level
    runner over tools/"
    — again the --self-test surface. Nothing was found recording it as
    deliberately on-demand.

⚠ 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions