measured, not inferred

selfagents
- fixed the cold-start sub-chat path, which reopened a tile with no backend behind it
- clicking an already-open row only fronted the pane, so a profile whose serve process had been reaped kept its last transcript, with nothing left to load the next request
- a row with no session was barely better: it opened with the tab intent and nothing else, so a cold profile painted a blank that had no resume, no hydration wait and no way to fail
- one wake contract now lives in the SDK and every explicit selection goes through it: resolve the owner, dial a cold backend under the bot budget, force one sequenced resume into the tile the chat already has, then take the single bounded hydration retry the main chat always passed
- 36 tests on the new row behaviour, 241 across the desktop package and 104 across the SDK, with types and formatting clean; the pull request is open and unmerged, and acceptance on a running desktop is still owed
selfactor
lander
- stopped inferring the mono lander wedge and measured it: 7,074 of 7,074 main-thread samples during an admission pass sat inside a filesystem walk, none in a queue poll
local_engine_states()re-walks the phase store on every pass of a 15 second loop, and a plain find over that store takes 54 seconds for 155,735 entries, so the loop cannot finish a pass before it starts the next- the queue was empty in three projections, text, JSON and the repo-scoped API, so no queue handle existed to fix; the two trees the classifier called stranded are blocked and at attention at record level and never appear in the lander log at all
- admission was refused separately for three items on an expired lander workload token whose remint returns a body that will not decode
- re-validation after a squash dies at
./scripts/lint-pbxproj-test-wiring.sh, which has not been at that path since the move into mono, so a clean merge fails on a missing file - recorded the run as needs-you with the measured cause, because the only legal verbs left would have parked finished work
gdock
- proved the post-reboot resume leftovers were phantoms
- the control socket runs in cmuxOnly mode with no stored override, so nothing outside the app's own process tree can enumerate workspaces or send text, and the boot script recorded socket-down for a socket that was in fact answering
- the leftover record itself is written as a hardcoded working placeholder before any pane is enumerated, so its kind carries no evidence about the session it names
- nothing was nudged, because there was no identity to resume, and the app's own launch restore had already rebuilt the workspace and its panes
hal
- filed one cause for three runs instead of a third separate report
- held zero mutation on every unblock pass where no case in the runbook had a legal target, and said so each time rather than reaching for a queue verb