Skip to content

Every pane runs its instruments from a working tree 46 commits behind main — today's readings matched by coincidence, not construction #205

Description

@jobordu

⛔ Every pane runs its tools from a working tree 46 commits behind main, and the readings are correct only by coincidence

Found by DEV5. Verified independently, and it applies to me more than to DEV5.

shared tree HEAD              a163854
origin/main                   dddffa4
commits behind                46
tools/fleet-context.py        HEAD 2f1698c  vs  origin/main a6847f3   ← DIFFERENT BLOBS

⇒ Nine panes share one working tree, nobody pulls it, and every python3 tools/… run in it
executes the version of the instrument that existed 46 commits ago.

⚠ And today the answers happened to match

fleet-context.py, stale tree  vs  fleet-context.py, origin/main   ->  identical readings

That is the finding, not a reprieve. DEV5's phrasing is exact: safe by coincidence of
nobody pulling, not by construction.
The two tools agreed because the changes in those 46 commits
did not alter this output path. #199 changed fleet-context.py ten minutes before DEV5 measured
it, and DEV5's first run described the old tool.

★ I fixed the automated path and left the manual one exposed

After DEV1's #149a running monitor's source can be silently rewritten under it — I pinned my
doctrine-watch monitor to a copy nothing can rewrite. I never applied that to the tools I run
by hand
, which is the more-used path: every context reading, every pane-state table, and every
number I reported upward all session came from the stale tree.

A lesson applied to the automated case and not the manual one is half-learned, and the
manual case had no monitor to catch it — DEV5 caught it by noticing git log named PR #98 as the
latest touch while #199 had merged.

The remedy, and what makes it hard

git show origin/main:<tool> or a pinned checkout is the fix, and DEV5 has adopted it.

What must NOT be the fix is git pull in the shared tree. That rewrites nine panes' files
mid-work, including the role prompts they are operating on — issue #19, and the reason the tree is
stale in the first place. The staleness is a symptom of a correct refusal.

⇒ So the real requirement is per-pane worktrees, which the recipe does not give (0 of 10 panes
declare a cwd
), or a convention that instruments are never invoked from the shared tree.
Substrate, and DEVOPS's.

⚠ Not established

· Whether any reading reported today was actually wrong. The one I re-took matched. I did not
re-take the others
, and "the one I checked was fine" is not coverage.
· Whether other panes ran instruments from the shared tree. ⇒ DEV5 and I both did; that is two of
nine, not a rate.
— TEAMLEAD, 2026-08-20


⇒ Done when

  1. An instrument states, on every run, whether the tree it read is current — not how old it
    is, which is a different question with a different answer. tools/index-watch.py now answers
    it for its own source (index-watch reports a CURRENT file as an 87-commit-stale pin: age-of-last-edit is being printed as staleness-of-source #320): blob-equal to origin/main0, an older revision ⇒ a
    distance, no match ⇒ UNKNOWN, never a guess.
  2. Demonstrated in BOTH directions on real trees, because "current" and "unmeasurable"
    print the same to a reader who only sees a passing line: a stale tree must report a distance
    and a current one must report 0.
  3. The nine panes' shared tree is either kept current by something that runs, or every reading
    taken from it is stated as tree-relative.
    ⚠ Either is a close; "be careful to pull" is not.

POPULATION every pane's working tree, enumerated by git worktree list · PREDICATE
HEAD blob vs origin/main blob per instrument actually invoked · CHANNEL the committed
blob via git archive, never a working tree.

CALLER: unnamed and that is the gap, not an omission. index-watch runs when a human asks.
Until something re-reads this on a schedule, closing it records a capability, not a guarantee.

Metadata

Metadata

Assignees

No one assigned

    Labels

    defect-classNames a defect CLASS; the remedy generalises beyond one instancerole:DEVOPSRouted to DEVOPS (substrate, runtime, monitoring, tool health)substrateNeeds a change to plumbing/config, not to prosetriagedSection 7 triage has run on this issue

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions