Running-parents via live spawn edges, honest live tokens, always-live open panels (round N) #39
Loading…
Reference in a new issue
No description provided.
Delete branch "oss-oo/observatory-round-n-nkyn20260925"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Round N — three owner findings, all validated 23/23 green (fixture harness + fake live dispatchers + CDP; evidence in /tmp/pinky-polish4-evidence/).
1. Running sessions show no parent — root cause corrected forensically. The bell ledger DOES apply its edges in family_maps, but its records only exist once a child COMPLETES (dispatch.py ledgers at notify/bell-spawn time, not child-spawn time) — a running child has no record yet. The true spawn-time linkage lives on the child dispatcher command line:
--notify-parent <sid>plus the session id in the--outresult JSON. Newlive_spawn_parents()scans /proc for exactly those processes (new-child spawns only — steers/bells/notify resumes all carry --resume and never match), read-only, sid-shape-validated, parent must be a known session, never overriding an established parent (native parent_id wins). When the child completes, the dispatcher exits and the ledger record takes the edge over — same parent, seamless (verified live on the real system this round: my own session resolved its parent while running, the ledger carried it after completion).2. Running sessions show 0/0 tokens — turn_usage rows only exist at completion. A running first turn now renders a mint "live" in the tokens cell (tooltip explains when the numbers land); real sums from earlier completed turns keep rendering as numbers. The optional partial-usage stretch was skipped: during a first turn there are no step-finish parts yet either, so "live" is the honest answer.
3. Open panel froze while the owner typed. Root cause: the response modal parks its 5 s poll once a session looks quiet (round-J design), but nothing ever RESUMED it — a bell ringing in later left the panel frozen at its last fetch while the dock badge (global 5 s poll) kept blinking, exactly the reported asymmetry. No typing-guard exists. Fix: the quiet-stop records a quiet baseline (last transcript activity); the global 3 s sessions refresh resumes the modal poll the moment activity passes it (or the session runs, a steer queues, a question pends). The resumed render re-parks instantly when quiet again — each new message renders within one 3 s cycle without a permanent poll on a static session. Bonus hardness for the same contract: follow-off/paused re-renders (drawer AND modal) now keep the exact scrollTop around the innerHTML rebuild (was left to browser scroll anchoring, which drifted the reading position — found by the new regression).
CDP regression added: open panel, park, type a draft, inject a doorbell → appended within one cycle, draft + focus preserved, follow-ON tail scroll, follow-OFF exact scroll position kept.
Gates: pinned Super-Linter slim v8.7.0 (pylint 10.00/10, ruff, markdown), py_compile, node --check.