100%/E: Spool S6F25/F26 + auto-trigger on re-SELECT
tests / build-and-test (push) Failing after 31s

Closes spooling.  S6F25 (NUM-MSG) goes into the catalog; S6F26
(ACKC6) likewise.  The server's on_selected handler now checks the
spool on entering SELECTED — if there's queued data, it auto-emits
S6F25 so the host can decide what to do (S6F23 Transmit vs Purge).

The happy-path demo never drops TCP so the auto-trigger doesn't fire
there, but the canonical re-SELECT path is wired.  Client gains a
handler for inbound S6F25 that logs the count and acks S6F26.

COMPLIANCE.md: Spooling Additional capability flips from 🟡 to .

Remaining out of scope for spooling: persistent on-disk spool so
restarts don't lose queued events.  Demo + tests don't need it; real
fab equipment would.

Tests: 83 cases / 481 assertions.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-07 02:24:02 +02:00
parent 6cedaa10dc
commit 1e7105a9e0
5 changed files with 55 additions and 9 deletions
+12
View File
@@ -112,6 +112,18 @@ TEST_CASE("S10F3 terminal display round-trip") {
CHECK(parsed->text == "ALARM: chiller temperature high");
}
// ---- Spool data ready (S6F25/F26) --------------------------------------
TEST_CASE("S6F25 carries NUM-MSG; S6F26 ack round-trip") {
auto m = s6f25_spool_data_ready(42);
auto n = parse_s6f25(m);
REQUIRE(n.has_value());
CHECK(*n == 42);
CHECK(m.reply_expected);
CHECK(*ack_byte(s6f26_spool_data_ready_ack(EventReportAck::Accept)) == 0);
}
// ---- Trace Data Collection (S2F23/F24 + S6F1/F2) -----------------------
TEST_CASE("S2F23 round-trip") {