One monitored subscriber endpoint (W3b.5 age contracts). Separate
table from MonitorSpec — sub contracts key different endpoints
and need no publish counter.
One hazard’s observer state. Baked as a static beside the spec, the way
PubMonitorCell is, so the observer adds a slice to the Executor
value and nothing per hazard (issue 0961).
One contracted publisher’s counters. Baked as a static by codegen
(or declared by the fixture); the publisher handle bumps count on
every publish, the executor reads deltas on spin ticks.
One contracted subscriber’s take-age accumulator (W3b.5). The take
path records epoch_now - header.stamp per message (fetch_max); the
age check drains it (swap 0) per window.
Max AGE-monitored subscriptions per executor – the second table, on its
own knob (NROS_EXECUTOR_MAX_AGE_MONITORS, derived from age_rows) so an
image with rate contracts and no age contracts pays for one table only.
HazardSpec::sink when the hazard’s reaction states no safe_state
publisher this image monitors: the observer reports detection and
recovery, and no reaction.
phase-474 I1 – every rule id the executor reports, in WIRE ORDER: a rule’s
numeric code is its index here plus one, and 0 means “not a rule this table
knows”.
phase-474 I2 – the application says its start-up is over: arm the
contract monitors of every executor in the image that waits for this
(NROS_MONITOR_ARM_ON_CALL, or Executor::set_monitor_arming).
phase-503 – time from now to the earliest deadline of a pending supervised
route, in microseconds (0 when one is already due), or None when no
supervised route is waiting. This is the executor’s wake source for the
rule, and what a port’s independent timer (MECHANISM_TIMER) arms on.
phase-503 – the reaction hook: called on the spin thread, inside
spin_once, once per missed route deadline. It must not block; it starts
the fallback (or hands it to another thread) and returns. ctx is what
was registered with the hook.