crates/spt-daemon/tests/twohost.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/crates/spt-daemon/tests/twohost.rs b/crates/spt-daemon/tests/twohost.rs index 4d778a6..cf04644 100644 --- a/crates/spt-daemon/tests/twohost.rs +++ b/crates/spt-daemon/tests/twohost.rs @@ -873,6 +873,29 @@ fn two_host_ladder_role_b() { std::fs::write(xroot.join("sid.txt"), sid.to_string()).expect("write sid"); println!("TWOHOST role B: drive session {sid} ready"); + // NAMEPLATE's engine-room posture must be backed by broker truth, not only + // by a hand-written `controlled=true` stamp. A daemon liveness reconcile is + // entitled to clear that stamp when no session exists. + #[cfg(unix)] + let (er_program, er_args) = ("cat".to_string(), Vec::::new()); + #[cfg(windows)] + let (er_program, er_args) = ("findstr".to_string(), vec![".".to_string()]); + let er_sid = host_brain + .spawn_session(spt_daemon::msg::SpawnReq { + program: er_program, + args: er_args, + rows: 24, + cols: 80, + endpoint: spt_store::engineroom::ENGINE_ROOM_ID.to_string(), + cwd: None, + env: Default::default(), + translation_binary: None, + adapter: String::new(), + install_dir: None, + }) + .expect("spawn NAMEPLATE engine-room controller session"); + println!("TWOHOST role B: NAMEPLATE engine-room session {er_sid} ready"); + // ── Rung 1 — pair (responder): the PRODUCT surface (M7 D5). The // daemon-hosted ALWAYS-ON responder — the broker NetHost speaking the // pre-trust pairing ALPN beside the trusted surface (pairhost) — answers