The duplicate-ARRIVED fix from the previous commit returned INVALID_OBJECT
with the message "no substrate 'X'" — a lie, since the substrate exists.
Rewrite ReportSubstrate so ARRIVED has its own ack mapping: a duplicate is
CANNOT_DO_NOW with "substrate 'X' already exists" (a state conflict, not a
missing object), and we never silently re-create over live FSM state.
Coverage gaps closed:
- C++: ARRIVED records carrier_id/slot (now asserted); module NOT_EXECUTING
reset transition; duplicate-ARRIVED expects CANNOT_DO_NOW.
- Interop: @eq.command now drives the real host S2F41 path (was @eq.on, so
the headline decorator had zero wire coverage); @eq.command NameError on
unknown name; eq.names var/alarm + dir() + typo-suggestion; replaced the
two `check(..., True)` tautologies with full E90 journey + AT_DESTINATION
and real error paths (ghost wafer raises, illegal module jump raises).
All 8 daemon test cases (248 assertions) and 24 pyclient interop checks pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>