---
name: f026-pickertruth-triage
description: "BUILD-F026-PICKERTRUTH triage (2026-07-02, 6 operator items): #2 broker exit-reap never clears controlled/driven_by/viewer stamps (hall-a latched hours, gossips controller_node=self) · #3 display_status Controlled=driven_by-only so LOCALLY-controlled shows plain ONLINE (KH 7.15 asymmetry) + enlyzeam gossiping stale legs (needs operator bounce, ssh=decode no access) · #1 project history = empty context store + info.cwd-rewritten-on-rebind + psyche-dir pollution (hall-a NOT purged, sessions.log intact) · #4 adapter+project_history NOT gossiped, from_resource_row fakes them · #5 choose-project step · #6 resume keeps confirm panel. Full doc docs/NEXT-MILESTONE-PICKER-TRIAGE.md (UNCOMMITTED)."
metadata: 
  node_type: memory
  type: project
  originSessionId: 69958f2f-9c47-4d30-a74b-23aa77579f56
---

BUILD-F026-PICKERTRUTH — **DISPATCHED to todlando 2026-07-03**, base main @e96f7d0 (v0.21.0). Triage doc: `docs/NEXT-MILESTONE-PICKER-TRIAGE.md` (uncommitted; todlando commits it as wave item 0 with REQ mints). Operator feedback folded: SI-1 promoted to FULL RCA item; project IDS ONLY everywhere (even local) + pure disambiguate fn (parent-folder/drive on collision); +#7 `spt api endpoint-info` attached-node JSON (depends W1 honest stamps; claude-spt consumable; naming alt `spt endpoint get-info` = todlando mint-time call); +#8 endpoint-list 2nd column `<project>/` (4 cols, --json additive).

Wave order: W1 presence-truth (#2 reap-clears + REQ-HAZARD-CONTROL-STAMP-LIFETIME; #3 REQ-PICKER-CONTROLLED-LOCAL) → W2 history+details (#1 REQ-PICKER-PROJECT-HISTORY-TRUTH; SI-1 REQ-STORE-CONTEXT-BRANCH-FILL RCA; #4 REQ-GOSSIP-ADAPTER-PROJECTS) → W3 surfaces (#8 REQ-ENDPOINT-LIST-PROJECT-COL; #7 REQ-API-ENDPOINT-INFO) → W4 UX (#5 REQ-PICKER-START-PROJECT-CHOICE; #6 REQ-PICKER-RESUME-CONTEXT-PANEL). Release v0.22.0 after; release-ping perri must carry #7 consumable.

**Gate ledger:** W0 seed PASS @5adc527 (doc + 9 mints stages[] + traceable 0; #7 spt api endpoint-info + #8 dedicated REQ accepted). W1 #2 PASS @ad609d5 (stamp_reaped in exit-waiter + KH 7.27; traceable 0/clippy/1301 units/int 3×; non-blocking: reap-vs-fast-relaunch ms interleave self-heals — stamp-epoch revisit pinned to W3 #7). W1 #3 PASS @ea400a6 (EndpointRow.controlled all builders, display driven_by||controlled, Unbound precedence intact, "controlled locally" pin; 1301/1301; forward note: #4 must flip from_resource_row controlled-source to the gossiped any-controller datum + port the remote parity test). W1 #9 PASS @1f34005 = **W1 COMPLETE** (parent_pid_of Linux+Win, process_ancestry bounded+cycle-guarded, leg (c) after env legs, alive-gated, auth untouched, degrade-by-construction; 1304/1304, ancestry 3×, doc addendum + #10 seed in). FOLD-FORWARD owed W2: match_self_by_ancestry candidate-order → flip to ANCESTRY-order (nearest ancestor wins — nested agent+psyche trees real on this box) + nested both-in-ancestry unit. GATE GOTCHA: `-p spt --lib` = false-red, spt has NO lib (use --bin spt).

**LATE ADDS (operator, 2026-07-03, rolled into wave via message to todlando):** **#9 → W1**: `spt send` from an endpoint session ALWAYS stamps cli@<node> (detect_self_id roster.rs:91 is ENV-ONLY — OWL_SESSION_ID/SPT_AGENT_ID both absent in agent Bash children, spawn-path-dependent; hall-b has them, doyle/ball-b don't) → receiver reply to cli@<node> = NO_PERCH, breaks agent loops. Fix: pid-ancestry fallback leg vs roster info.json.pid (alive-gated) — from-label ONLY, NOT auth (F-024 parked-layer-3 stays parked). Mint REQ-MSG-SELF-DETECT-ANCESTRY. **#10 → W4**: any `spt X | head` PANICS on closed stdout (os-232, live repro spt daemon status) — tolerate BrokenPipe exit-0. Triage-doc addendum rides todlando's next commit (doc lives on wave branch @5adc527; doyle stays out of his active tree).

**HFENDULEAM = 0.21.0 broker==installed (operator bounced this box too, 2026-07-03)** — 0.20.0 hold MOOT; wave live-smokes run on 0.21.0.

**MID-WAVE DIAGNOSES (2026-07-03, operator refutation arc):**
- **#3-REFUTE → STAMP-BEFORE-BIND LOSS (solved, operator-confirmed topology):** picker-CREATED endpoints (endpoint run → new) read controlled:false FOREVER while driven — spawn's become_controller stamps set_controlled(true) BEFORE the perch exists (adapter binds post-claude-boot), mutate_info NotFound swallowed (let _), bind writes controlled:false default, no re-attach edge. Explains hall-b + ORIGINAL ball-b sighting. RULING: convergence not edges — NEW REQ-HAZARD-CONTROL-STAMP-CONVERGENCE (upward periodic re-assert to broker session-table truth; KIND_SESSIONS-handler piggyback, diff-gated, single-writer, bounded window = reconcile period). W1-ADDENDUM after SI-1.
- **SI-1 RCA VERDICT (todlando, accepted):** BranchStore empty box-wide because manifest-relative commune_dir/signoff_dir (".claude") NEVER resolved against endpoint cwd — ingest_drops joins daemon cwd → exists()=false every pulse tick → zero commits ever (STARVED caller, not no-caller). Abs-only test fixtures masked it. Rulings: anchor=info.cwd AT INGEST TIME; no-cwd → skip + loud-once; owlery-internal anchor skips commit_project (live/agent still commit); project_id via project_id_for_dir; N-1 pure fix. Sweep verdict: commune/signoff = ONLY instance (digest {cwd}-templated, translation program-resolve, session-role absolute-fill all safe); KH class rule approved. SECONDARY → perri consumables: claude-spt commune authoring may emit NO project slice (p-* stays empty post-fix).
- **NEW #11:** hall-b info.pid DEAD while session live + last_active advancing — pid rotated w/o bind re-stamp; presence on stale pid. Tasked.
- **NEW #12 (perri field):** endpoint run w/ MISSING profile binary (ccs absent) fails SILENT (stuck offline/unbound) — must be LOUD at spawn/bind (v0.14.3 loud-rule family).
- **W2 #1 PASS @520c070** (project_refs_from kernel + owlery exclusion + disambiguation + #9 nearest-first fold; seedmap timeout = ledgered load-flake, cleared 2×).
- **perri ENLYZEAM LEG CLOSED:** F015B swap green cross-node (0.10.3→0.11.0 real scenario) + E2E-0104 rotation assertions 1+2 green + auth-chain live; F015B/F024 arc CLOSED both nodes. Trust-gate headless friction → formal finding (pre-trust seam ask, next planning pass). Checkpoint macro self-loopback-only confirmed by-design.

ENLYZEAM ops CLOSED 2026-07-03: operator updated+bounced; doyle on-node verify spt 0.21.0 + broker==installed (F-025 surface's first field use) + ball-b stamps clean → #3 remote half resolved, perri ENLYZEAM leg GO issued. **SSH GOTCHA: ENLYZEAM = WINDOWS; ssh decid@enlyzeam → PowerShell; `bash -lc` there = WSL distro user `decode` w/ separate fs (the earlier "no spt anywhere" false negative). Probe with PowerShell syntax.**

Key evidence anchors: hall-a info.json controlled:true hours post-/exit + SPT_DEV.json gossips controller_node=self (stale latch propagates); broker.rs exit-waiter ~:1844 reaps w/o clear_controller (clear only on detach/evict); model.rs:415 Controlled⇐driven_by only; data.rs:372 history=context-branches-only, :207 origin=rewritten info.cwd; model.rs:340 from_resource_row hardcodes project_history=[] + adapter_profile=resources-blurb; hall-a sessions.log ordinals 0-5 = projects→spt-core→psyche dirs.

Kin: [[nextwave-f025-listredesign]] (enlyzeam staleness = F-025 dormancy class), [[f015b-adapter-apply-silent-noop]] (ENLYZEAM bounce pending), [[presence-dead-shows-online]] (presence-lie family).
