Record second GPU invocation review closure

Advance the framing to Revision 6 and record the strengthened non-CRDT,
Ctrl-C, strict-operand, probe-throttling, and PID-cleanup contracts. Update the
durable and volatile checkpoints to implementation commit 154cb9f.
This commit is contained in:
Levi Neuwirth 2026-07-23 12:40:03 -04:00
parent 154cb9f08d
commit 78339352d4
3 changed files with 49 additions and 33 deletions

View File

@ -57,18 +57,21 @@ If it does not, stop and repair the remote/fetch configuration.
- Portable branch: `githubsucks/gpu-invocation` - Portable branch: `githubsucks/gpu-invocation`
- Pull request: **#141 OPEN — do not merge without explicit user approval.** - Pull request: **#141 OPEN — do not merge without explicit user approval.**
- Base: `githubsucks/main` @ `96d0bae`; protocol remains v19. - Base: `githubsucks/main` @ `96d0bae`; protocol remains v19.
- Implementation checkpoints: `69825d0` (exception-safe immediate reaper - Implementation checkpoints: `154cb9f` (second implementation-review fixes)
ownership) atop `82355ca` (first implementation-review fixes) and atop `69825d0` (exception-safe immediate reaper ownership), `82355ca`
`6fd5834`; approved framing began at `821835b` and is now Revision 5. (first implementation-review fixes), and `6fd5834`; approved framing began
- State: all six implementation-review findings are resolved, all 18 at `821835b` and is now Revision 6.
acceptance criteria complete, and the PR awaits another user review. Public - State: both implementation reviews are resolved, all 18 acceptance criteria
path is additive `pmacs --gpu [--socket NAME|PATH]`; bare `pmacs [FILE]` complete, and the PR awaits user review. Public path is additive
remains TUI and `pmacs --gpu FILE` remains rejected. `pmacs --gpu [--socket NAME|PATH]`; bare `pmacs [FILE]` remains TUI and
`pmacs --gpu FILE` remains rejected.
- Review fixes: pre-state GPU events are buffered until winit state exists; - Review fixes: pre-state GPU events are buffered until winit state exists;
daemon stderr is detached; spawned-child ownership is handed off without a daemon stdio is detached; spawned-child ownership is handed off without a
leak window; direct CLI guidance, help operands, and sibling-file discovery leak window; direct CLI guidance, help/path operands, and sibling-file
are strict; transient retry, timeout reporting, hermetic socket paths, and discovery are strict; transient retry, timeout reporting, hermetic socket
deterministic concurrent-loser reaping have behavioral coverage. paths, deterministic concurrent-loser reaping, pre-I/O non-CRDT gating, and
post-SIGINT use of a pre-attached frontend have behavioral coverage. Probe
disconnect polling remains bounded and cleanup skips already-reaped PIDs.
- Verification: strict workspace and CRDT acceptance Clippy; 1,768 default + - Verification: strict workspace and CRDT acceptance Clippy; 1,768 default +
1,944 CRDT library tests; root CLI 33; GPU 149 required; GPU invocation 1,944 CRDT library tests; root CLI 33; GPU 149 required; GPU invocation
acceptance 1 default + 9 CRDT; Vterm Stage 3 7; M4 121 with 3 ignored and acceptance 1 default + 9 CRDT; Vterm Stage 3 7; M4 121 with 3 ignored and

View File

@ -24,8 +24,8 @@ commands, read `docs/active-work.md` immediately after this file.
`ThemeFacts`, v17 = `FontFacts`, v18 = `StatuslineSegments`, v19 = terminal `ThemeFacts`, v17 = `FontFacts`, v18 = `StatuslineSegments`, v19 = terminal
frames/events). frames/events).
- **One-command GPU invocation is implemented on OPEN PR #141, not yet on - **One-command GPU invocation is implemented on OPEN PR #141, not yet on
`main`** (`gpu-invocation`, final implementation-review checkpoint `main`** (`gpu-invocation`, second implementation-review checkpoint
`69825d0`, framing Revision 5). The additive public path is `154cb9f`, framing Revision 6). The additive public path is
`pmacs --gpu [--socket NAME|PATH]`; bare `pmacs [FILE]` remains the TUI. `pmacs --gpu [--socket NAME|PATH]`; bare `pmacs [FILE]` remains the TUI.
Root owns the CRDT gate, socket resolution, sibling-regular-file GPU Root owns the CRDT gate, socket resolution, sibling-regular-file GPU
discovery/PATH fallback, and GPU outcome. The separate `pmacs-gpu` binary discovery/PATH fallback, and GPU outcome. The separate `pmacs-gpu` binary

View File

@ -1,7 +1,7 @@
# GPU invocation — one-command broker framing # GPU invocation — one-command broker framing
**Revision 5 — implementation review complete on `gpu-invocation`. Ground **Revision 6 — second implementation review complete on `gpu-invocation`.
truth: canonical `main` @ `96d0bae`, protocol v19, 2026-07-23.** Ground truth: canonical `main` @ `96d0bae`, protocol v19, 2026-07-23.**
The GPU editor works, but reaching it is still a development-session ritual: The GPU editor works, but reaching it is still a development-session ritual:
build two packages with different feature requirements, keep a foreground build two packages with different feature requirements, keep a foreground
@ -42,6 +42,12 @@ inherits no launcher stdio. Direct GPU help points normal users to the root
broker and labels raw socket attach as advanced. The retry, timeout, socket broker and labels raw socket attach as advanced. The retry, timeout, socket
type, and concurrent-loser contracts now have deterministic behavioral tests. type, and concurrent-loser contracts now have deterministic behavioral tests.
Revision 6 closes the remaining non-blocking review findings. The managed
probe throttles after its event channel disconnects; option-like path operands
are rejected; cleanup never signals an already-reaped daemon PID; and the
acceptance suite now proves both pre-I/O non-CRDT gating and post-SIGINT use of
a frontend attached before the launcher exits.
## Ground truth ## Ground truth
### Current user path ### Current user path
@ -550,9 +556,10 @@ Vterm probe continues to cover offscreen wgpu.
argument named. Bare `pmacs --socket research` (with or without a local argument named. Bare `pmacs --socket research` (with or without a local
file / `-nw`) exits 2 and says which owning mode is required. file / `-nw`) exits 2 and says which owning mode is required.
2. **Non-CRDT build fails before socket or spawn:** a default-feature 2. **Non-CRDT build fails before socket or spawn:** a default-feature
`pmacs --gpu` names `--features crdt`; a capable daemon already listening `pmacs --gpu` names `--features crdt`, invokes no GPU executable, and leaves
does not weaken the gate, and fake GPU/daemon executables record zero the default socket absent under a private runtime directory. Repeating the
invocations. The default socket remains unowned. command against an already-listening Unix socket neither invokes the GPU
nor disturbs that socket, proving the gate precedes socket I/O.
3. **Sibling discovery wins:** with executable fixtures at the current-exe 3. **Sibling discovery wins:** with executable fixtures at the current-exe
sibling and on PATH, the sibling regular file receives the managed sibling and on PATH, the sibling regular file receives the managed
arguments. A directory at the sibling pathname is ignored in favor of arguments. A directory at the sibling pathname is ignored in favor of
@ -566,12 +573,14 @@ Vterm probe continues to cover offscreen wgpu.
handshake, receives the first `BufferSnapshot`, and leaves the daemon handshake, receives the first `BufferSnapshot`, and leaves the daemon
connectable after the probe exits. connectable after the probe exits.
6. **Ctrl-C does not kill the daemon:** spawn the managed probe/broker in its 6. **Ctrl-C does not kill the daemon:** spawn the managed probe/broker in its
own process group, wait for the probe's `phase=ready`, attach a second real own process group, wait for the probe's `phase=ready`, and complete a second
frontend, then simulate terminal Ctrl-C with `kill(-pgid, SIGINT)`. Assert real frontend's handshake and initial snapshot/grid sync before simulating
the launcher/frontend exit while the separately grouped daemon and second terminal Ctrl-C with `kill(-pgid, SIGINT)`. After the launcher/frontend
session remain usable. This does not require a controlling terminal or a exits, resize the pre-existing second frontend and require its full-grid
foreground-process-group claim in CI. Direct foreground `pmacs --daemon` response; the separately grouped daemon and existing session remain usable.
still exits cleanly on SIGINT. This does not require a controlling terminal or a foreground-process-group
claim in CI. Direct foreground `pmacs --daemon` still exits cleanly on
SIGINT.
7. **Concurrent launchers converge:** hold two daemon wrappers behind a shared 7. **Concurrent launchers converge:** hold two daemon wrappers behind a shared
barrier so both managed probes authorize and spawn before either daemon barrier so both managed probes authorize and spawn before either daemon
binds the absent named socket. Exactly one daemon owns the lock; both binds the absent named socket. Exactly one daemon owns the lock; both
@ -615,9 +624,10 @@ Vterm probe continues to cover offscreen wgpu.
direct `--attach PATH` as advanced. Existing `--headless-probe SOCKET direct `--attach PATH` as advanced. Existing `--headless-probe SOCKET
REPORT` and hidden `--headless-managed-probe SOCKET REPORT DAEMON_EXE` REPORT` and hidden `--headless-managed-probe SOCKET REPORT DAEMON_EXE`
accept exactly their operands. Missing/trailing/unknown/incomplete args accept exactly their operands. Missing/trailing/unknown/incomplete args
exit 2; trailing help/version operands say those flags accept no operands. exit 2; trailing help/version operands say those flags accept no operands;
`--version` prints package and protocol versions without initializing option-like path operands are rejected and require an explicit `./`
winit/wgpu. prefix when they name a real relative path. `--version` prints package and
protocol versions without initializing winit/wgpu.
16. **Existing direct and Vterm paths remain intact:** rebuilt 16. **Existing direct and Vterm paths remain intact:** rebuilt
`pmacs-gpu --attach RAW_PATH` still renders an existing CRDT daemon, and `pmacs-gpu --attach RAW_PATH` still renders an existing CRDT daemon, and
`tests/vterm_stage3_acceptance.rs` still invokes its unchanged `tests/vterm_stage3_acceptance.rs` still invokes its unchanged
@ -652,13 +662,16 @@ Vterm probe continues to cover offscreen wgpu.
protocol/capability failures never authorize replacement. protocol/capability failures never authorize replacement.
- `--headless-managed-probe SOCKET REPORT DAEMON_EXE` drives the production - `--headless-managed-probe SOCKET REPORT DAEMON_EXE` drives the production
managed connector, writes atomic `phase=ready` / `phase=complete` reports, managed connector, writes atomic `phase=ready` / `phase=complete` reports,
holds on stdin, and exposes disconnect plus daemon-reaper observations. holds on stdin, exposes disconnect plus daemon-reaper observations, and
- `tests/gpu_invocation_acceptance.rs` covers the root broker, non-CRDT gate, retains its 50-ms cadence after the event channel closes.
existing/missing/stale/racing daemon paths, process-group SIGINT isolation, - `tests/gpu_invocation_acceptance.rs` covers the root broker, pre-I/O
capability and protocol mismatches, bounded startup failure, deterministic non-CRDT gate, existing/missing/stale/racing daemon paths, process-group
losing-child reaping, outcome propagation, and strict headless CLI behavior. SIGINT isolation with a pre-attached surviving frontend, capability and
protocol mismatches, bounded startup failure, deterministic losing-child
reaping without signaling freed PIDs, outcome propagation, and strict
headless CLI behavior.
Verification on 2026-07-23 after the implementation review: Verification on 2026-07-23 after the second implementation review:
- root CLI unit suite: 33 passed; - root CLI unit suite: 33 passed;
- required GPU suite: 149 passed; - required GPU suite: 149 passed;