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:
+5
-7
@@ -92,7 +92,7 @@ Legend:
|
||||
| Equipment Terminal Services | 🟡 | E30 §6.19| S10F1/F2, S10F3/F4 | Single-line only. **S10F5/F6 multi-block, S10F7 broadcast not implemented.** |
|
||||
| Clock | ✅ | E30 §6.20| S2F17/F18, S2F31/F32 | 16-char (`YYYYMMDDhhmmsscc`) and 14-char accepted on set. |
|
||||
| Limits Monitoring | ✅ | E30 §6.21| S2F45/F46, S2F47/F48 | `LimitMonitorStore` keyed by VID with multiple `LimitDefinition` (LIMITID + upper/lower as arbitrary Items). Server S2F45 validates each VID exists (returns VLAACK=4 otherwise) and stores definitions; S2F47 returns them. Crossing-detection + CEID emission is intentionally left to the application's set_value path (E30 §6.21 is permissive about *how* the equipment detects crossings). |
|
||||
| Spooling | 🟡 | E30 §6.22| S2F43/F44, S6F23/F24 | Spoolable-streams config (S2F43/F44) + spool request transmit/purge (S6F23/F24) implemented; SpoolStore queues equipment-initiated primaries when the host is unreachable or force-spool is on, drains FIFO on S6F23 transmit, purges on S6F23 purge. **Not implemented**: S6F25/F26 spooled-data-ready notification, automatic spool activation tied to HSMS NOT-SELECTED, persistent (on-disk) spool. |
|
||||
| Spooling | ✅ | E30 §6.22| S2F43/F44, S6F23/F24, S6F25/F26 | `SpoolStore` queues equipment-initiated primaries when the host is unreachable (or `force_spool` is on in the demo), drains FIFO on S6F23 transmit, purges on S6F23 purge. Server auto-emits **S6F25** on entering SELECTED whenever the spool is non-empty (the canonical re-SELECT notification path); host acks via S6F26. Demo doesn't drop TCP so re-SELECT doesn't fire there, but the wiring is correct. **Not implemented**: persistent (on-disk) spool — equipment restart still loses queued events. |
|
||||
| Control | ✅ | E30 §6.2 | — | See Fundamental. |
|
||||
|
||||
---
|
||||
@@ -132,7 +132,7 @@ Legend:
|
||||
| S6F15 / S6F16 | H→E | ⬜ | — | event report request |
|
||||
| S2F43 / S2F44 | H→E | ✅ | catalog | ✅ round-trip + demo |
|
||||
| S6F23 / S6F24 | H→E | ✅ | catalog | ✅ round-trip + demo |
|
||||
| S6F25 / S6F26 | spool | ⬜ | — | spool-data-ready notification |
|
||||
| S6F25 / S6F26 | E→H | ✅ | catalog + server | ✅ round-trip + auto-emitted on re-SELECT |
|
||||
| S7F3 / S7F4 | H→E | ✅ | `messages.hpp` | ✅ round-trip |
|
||||
| S7F5 / S7F6 | H→E | ✅ | `messages.hpp` | ✅ in demo |
|
||||
| S7F19 / S7F20 | H→E | ✅ | `messages.hpp` | ✅ round-trip + demo |
|
||||
@@ -189,11 +189,9 @@ Unit tests: **63 cases / 278 assertions pass** (`docker compose run --rm tests`)
|
||||
|
||||
The honest list, in priority order:
|
||||
|
||||
1. **Finish spooling**: S6F25/F26 spooled-data-ready notification, plus
|
||||
automatic activation when HSMS goes NOT-SELECTED (and automatic
|
||||
notification on re-SELECT) so the host doesn't have to manually flip
|
||||
the test-only `force_spool` flag. Optional: persistent on-disk spool
|
||||
so equipment restarts don't lose queued events.
|
||||
1. *(done in this revision)*: S6F25/F26 + auto-trigger on re-SELECT.
|
||||
Optional remaining: persistent on-disk spool so equipment restarts
|
||||
don't lose queued events.
|
||||
2. *(done in this revision)*: S9F3/F5/F11 — all S9 conditions now auto-emit.
|
||||
3. *(done in this revision)*: S1F19/F20 + S1F21/F22 — Documentation.
|
||||
4. **Implement EC range validation** in `set_equipment_constant_value`
|
||||
|
||||
Reference in New Issue
Block a user