docs: fix tty-bast.md to cover only binary framing, not JSON payloads
The previous BAST document modeled the JSON payloads (NegotiateRequest, ControlMessage and its resize/signal/eof/exit variants, TerminalParams) as BAST struct/union definitions with uint16/int32 fields. That was a category error: BAST describes binary data layouts, and per the BAST format spec itself, "a BAST document cannot validate a JSON payload." The control and negotiation payloads on the wire are UTF-8 JSON text serialized via serde_json, not struct-encoded binary — the uint16/int32 field widths implied a binary encoding that does not exist on the wire and would have misled any generated validator. The rewrite keeps only the genuinely-binary framing layer: - ChunkHeader (5-byte: stream_type u8 + length u32 BE) - StreamType enum (name->index table; documented deviation: on-wire is uint8, not BAST's standard u32 enum index) - Chunk (header + length-prefixed bytes payload) - NegotiationFrame (4-byte BE length prefix + UTF-8 JSON body, modeled as bytes since the body's JSON interpretation is above the BAST layer) The JSON shapes (NegotiateRequest, ControlMessage, TerminalParams) remain specified in tty-wire.md and implemented by the Rust source (src/negotiation.rs, src/control.rs), which are the source of truth for those payloads. Cross-references in tty-wire.md, overview.md, and README.md updated to reflect the simplified scope. The drift-detection test (project plan "Risk: BAST schema drift") still works unchanged — it asserts the StreamType enum values match wire.rs's STREAM_* constants, and that enum is retained. Docs-only change; no Rust source changes. Verification: - cargo test --all-features -> 122 tests pass (unchanged) - cargo clippy --all-targets --all-features -- -D warnings -> clean - cargo fmt --check -> clean - cargo doc --no-deps -> no new warnings (9 pre-existing rustdoc link warnings in src/, unchanged) - BAST JSON block parses as valid JSON (4 : ChunkHeader, StreamType, Chunk, NegotiationFrame)
This commit is contained in:
@@ -388,7 +388,12 @@ a session — see [tty-adapter.md](tty-adapter.md).
|
||||
- `src/control.rs` — the JSON control schema (`ControlMessage` tagged
|
||||
enum) this spec documents
|
||||
- [tty-bast.md](tty-bast.md) — the BAST (Binary Abstract Syntax Tree)
|
||||
document for this wire format; a normative JSON spec downstream
|
||||
consumers can validate against
|
||||
document for the binary framing layer of this wire format (the
|
||||
5-byte chunk header and the negotiation frame's 4-byte length
|
||||
prefix); a normative JSON spec downstream consumers can validate
|
||||
against. The JSON payloads (`NegotiateRequest`, `ControlMessage`,
|
||||
`TerminalParams`) are specified in this document and the Rust
|
||||
source, not in the BAST — BAST describes binary layouts, not JSON
|
||||
shapes
|
||||
- [tty-adapter.md](tty-adapter.md) — the session lifecycle that consumes
|
||||
this wire format
|
||||
Reference in New Issue
Block a user