3dcd8110
docs: review follow-ups — close_range barrier, observer idle deadline
a73x 2026-08-27 14:10
Commit message
docs/decisions.md
| Old | New | ||
|---|---|---|---|
| @@ -7105,3 +7105,18 @@ The witness asks the OS, not the daemon: `/proc` for the post-exec shell's fd | |||
| 7105 | table (`socket:`, `memfd:`, `/dev/ptmx`) and the daemon's own for | 7105 | table (`socket:`, `memfd:`, `/dev/ptmx`) and the daemon's own for |
| 7106 | `memfd:mux-upgrade`. The QUIC socket's seal is unpinned — no e2e daemon in that | 7106 | `memfd:mux-upgrade`. The QUIC socket's seal is unpinned — no e2e daemon in that |
| 7107 | leg runs `--quic`; filed. | 7107 | leg runs `--quic`; filed. |
| 7108 | |||
| 7109 | **Review follow-ups, same day.** Three things the branch review asked for, | ||
| 7110 | taken rather than filed. (1) The session child runs `close_range(3, ~0)` | ||
| 7111 | before its exec: `execUpgrade`'s clear list and `sealAdoptedFds` are two | ||
| 7112 | hand-kept lists that must agree, and the barrier that needs no list is the | ||
| 7113 | child closing everything above stderr — the seal is now hygiene, and a pipe | ||
| 7114 | opened without CLOEXEC is the pin (`pty.zig`). (2) Observers carry an idle | ||
| 7115 | deadline (`observer_idle_ms_default`, 10 s without a whole frame): the | ||
| 7116 | one-byte peer no longer parks the daemon, but four of them held every | ||
| 7117 | observer slot and closed each later attach at accept with nothing said. | ||
| 7118 | The pump's 100 ms poll is what makes the reap timely. (3) The half-frame | ||
| 7119 | leg's `timeout` scales with `E2E_TIME_SCALE`, against the lib's own | ||
| 7120 | "budgets only" wording: a wedged daemon never answers, so waiting longer | ||
| 7121 | changes nothing about the fact demanded, and a kcov-slowed answer must not | ||
| 7122 | read as the wedge. | ||
docs/superpowers/plans/2026-08-27-daemon-nonblocking-frames.md
| Old | New | ||
|---|---|---|---|
| @@ -1,3 +1,5 @@ | |||
| 1 | > Superseded in part: Task 4 places the seal in `initFromManifest`; that broke rollback. It lives in `resumeRun` after the last rollback exit — see docs/decisions.md 2026-08-27. | ||
| 2 | |||
| 1 | # Daemon Non-Blocking Frame Reads Implementation Plan | 3 | # Daemon Non-Blocking Frame Reads Implementation Plan |
| 2 | 4 | ||
| 3 | > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. | 5 | > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. |