Eight implementation tasks + the gate under tasks/implementation/, folding the wave-3 gate's four booked findings in as dedicated tasks (the gate's own disposition — wave-4 material, not wave-3 backports). Hardening set (server-side, independent of the client chain, scheduled first as cheap remediation): - w4-git-exit-close: booked item 1 — the git row's status-before-close by construction (the seam/shape decided + recorded in-task; the saturated-buffer scenario pinned on the wire) - w4-channel-not-held-rows: booked item 2 — the guard's wire rows on git/tty pipe/shell, per build (test-only) - w4-tty-coverage: booked item 3 — the channel_close-fired cancel path + the Closed/Break no-exit-chunk rows + the write_all no-deadline known-limit record - w4-router-collision: booked item 4 — the ListenRouter token-collision fail-closed pre-check Client chain (sequential logistically — one client Handler impl): - w4-dial: the russh client stack + the connection handle + the client Handler skeleton at fail-closed defaults, over an in-process fake-sshd server double - w4-op-rows: exec/pty, direct-tcpip, git exec over the shared grammar, the sftp client-side decline — the POC-3 §D.3 mechanics - w4-reverse-listen: the -R leg — forward requests + the acceptor registry + late-install (the wave's highest-risk task) - w4-lifecycle: the OQ-12 primitives (cancellable handles, clean disconnect, no reconnect policy) review-wave-4 depends on all eight. The gate's item 5 (upstream asks) stays booked with its owners — no task. Plan wave-4 section carries the decomposition record + four flagged interpretations; wave table status updated. Verification: taskgraph validate ✓ (35 tasks)
2.6 KiB
2.6 KiB
id, name, status, depends_on, scope, risk, impact, level
| id | name | status | depends_on | scope | risk | impact | level | |
|---|---|---|---|---|---|---|---|---|
| w4-channel-not-held-rows | Wave 4 — channel-not-held guard wire rows (wave-3 gate booked item 2) | pending |
|
narrow | low | component | implementation |
Description
Close the wave-3 gate's booked finding item 2
(review-wave-3 §Booked findings): the channel-not-held guard
lacks wire test rows. The guard is a documented decline class on
all three rows (git / tty pipe / shell) — a second exec (or request)
on an already-served channel — constructible on the wire, but no row
asserts it in any build. mapping.md's every-row-tested-in-every-build
convention names it contract territory; the fail-closed invariant is
contract on both sides of every feature (AGENTS.md convention 5).
Test-only task — no production code change expected (if landing the rows exposes a guard gap, stop and book it for the gate rather than silently widening scope):
- Wire rows through the harness, per build (the per-build cfg-pinned module convention): a second exec on a served git channel → the channel-not-held decline; the same on the tty pipe row and the shell row — the decline class asserted in every build that carries the row (featured builds carry the serving rows; the decline-class rows ride the same per-build matrix the dispatch tests use).
- The rows observe the decline's wire shape + the tracing event
vocabulary (the
w3-decline-tracingclass/reason fields — the rows double as the vocabulary's coverage for this class). - Depends on
w4-git-exit-closeonly to keeptests/git_mapping.rssingle-writer (the hardening lands first; these rows land into the settled file).
Acceptance Criteria
- Wire rows for the channel-not-held decline class on all three rows (git / tty pipe / shell), per build, through the harness
- The rows assert the wire shape + the tracing event class/reason
- No production code change (or a stop-and-booked finding recorded for the gate — nothing silent)
cargo test(+ per-feature +--all-features), clippy ×2 (-D warnings), fmt,cargo doc --no-depspass
References
- tasks/implementation/review-wave-3.md §Booked findings item 2
- docs/architecture/mapping.md (the request-level table — the channel-not-held class; the every-row-tested convention)
- tests/git_mapping.rs, tests/tty_mapping.rs, tests/dispatch_core.rs (the per-build matrix convention the rows join), src/observe.rs (the event vocabulary the rows assert)
Notes
To be filled by implementation agent
Summary
To be filled on completion