fix: address code review #001 findings (M1, M2, L2, L4, L5, N1-N3, N5)
- M1: TtySession now handles the negotiation-rejection error frame. from_halves peeks the first response byte (ADR-052 §5 disambiguation) and returns NegotiationRejected on a 0x00-prefixed error frame; ChunkReader gains peek_stream_type/read_chunk_after_peek. - M2: wait() now surfaces MalformedExitChunk instead of collapsing it to NoExitChunk. The exit watch channel carries a cloneable ExitOutcome enum; MalformedExitChunk carries a String. - L2: add EmittingBackend + recv_stdout_and_stderr_route_backend_data test covering the consumer read-pump stdout/stderr routing. - L4: MockBackend/MockControl/MockStdinSink are now #[cfg(test)] pub(crate), removing them from the public API. - L5: cargo fmt (the BAST drift test was unformatted). - N1: fix all 9 rustdoc intra-doc links. - N2: fix stale doc paths (crates/tty/ and docs/research/). - N3: amend AGENTS.md §14 to accurately describe the local module's libc::kill unsafe blocks. - N5: consolidate nanos_seed into tests/common/mod.rs. Verification: cargo test (84), cargo test --all-features (107), clippy clean (native + wasm), fmt clean, doc clean, wasm check clean. Coverage: session.rs 79.71% -> 87.43%, total 90.74% -> 91.47%.
This commit is contained in:
@@ -213,11 +213,16 @@ implementation agents.
|
||||
modules, `PascalCase` for types/traits, `SCREAMING_SNAKE_CASE` for
|
||||
constants (`STREAM_STDIN`, `TTY_OPEN_SCOPE`, `CHUNK_HEADER_LEN`).
|
||||
|
||||
14. **No `unsafe`** — the crate has zero `unsafe` blocks. The PTY
|
||||
bridge's `libc::kill(-pgid, sig)` and `libc::kill(pid, sig)` calls
|
||||
are safe `libc` crate APIs (not `unsafe` blocks in this crate);
|
||||
bounds-checked slice access via `get(..)`/`ok_or_else` is the
|
||||
pattern. Do not introduce `unsafe` for performance.
|
||||
14. **No `unsafe`** — the crate has zero `unsafe` blocks outside the
|
||||
`local` feature module's signal-forwarding calls. The PTY bridge's
|
||||
`libc::kill(-pgid, sig)` and `libc::kill(pid, sig)` calls (and the
|
||||
pipe-mode `libc::kill(pid, sig)` / `libc::kill(pid, SIGKILL)`
|
||||
fallback) are safe `libc` crate APIs wrapped in `unsafe { ... }`
|
||||
blocks because `libc::kill` is an `unsafe fn`; they are the
|
||||
documented signal-forwarding path, not `unsafe` in the crate's own
|
||||
logic. Bounds-checked slice access via `get(..)`/`ok_or_else` is
|
||||
the pattern. Do not introduce `unsafe` for performance, and do not
|
||||
add `unsafe` outside the `local` module's `libc::kill` calls.
|
||||
|
||||
## Verification Commands
|
||||
|
||||
|
||||
Reference in New Issue
Block a user