@@ -2687,3 +2687,22 @@ PRD: ralph/kernel-hardening (46 stories)
26872687 - v8::StartupData contains *const i8 raw pointer — not Send/Sync. Store snapshot blobs as Arc<Vec<u8>> (via .to_vec()) for cross-thread sharing
26882688 - SnapshotCache holds mutex during snapshot creation (~20ms) — acceptable since it happens once per bridge code variant
26892689---
2690+
2691+ ## 2026-03-19 - US-054
2692+ - Added WarmSnapshot IPC message type (0x09) to both Rust ipc_binary.rs and TypeScript ipc-binary.ts
2693+ - Wire format: [msg_type=0x09][sid_len=0][u32 bridge_code_len][bridge_code bytes] — no session_id (like Authenticate)
2694+ - Updated extract_session_id / extractSessionId to return None/null for WarmSnapshot
2695+ - Added BinaryFrame::WarmSnapshot { bridge_code } variant in Rust and { type: "WarmSnapshot"; bridgeCode: string } in TypeScript
2696+ - 4 new Rust tests: roundtrip, empty bridge code, large bridge code, extract_session_id returns None
2697+ - 5 new TypeScript tests: roundtrip, empty, large, extractSessionId null, wire format byte verification
2698+ - Updated wire_format_message_type_bytes test in both Rust and TypeScript to include 0x09
2699+ - Files changed:
2700+ - crates/v8-runtime/src/ipc_binary.rs — WarmSnapshot variant, encode/decode, extract_session_id, tests
2701+ - packages/secure-exec-v8/src/ipc-binary.ts — WarmSnapshot type, encodeBody, decodeFrame, extractSessionId
2702+ - packages/secure-exec-v8/test/ipc-binary.test.ts — 5 new tests
2703+ - scripts/ralph/prd.json — marked US-054 passes: true
2704+ - **Learnings for future iterations:**
2705+ - Connection-level messages (no session_id) use sid_len=0 in the wire format, same as Authenticate
2706+ - extract_session_id must be updated whenever a new connection-level message type is added
2707+ - WarmSnapshot is fire-and-forget — host sends it and continues without waiting for response
2708+ ---
0 commit comments