Two of the 22 stubs killed bottom-up, because the gyro chain needs them:
GyroscopeSimulation -> PowerWatcher::Simulation -> UpdateWatch ->
HeatWatcher::WatchSimulation.
HeatWatcher::WatchSimulation (@004aeac4): resolve the watched subsystem,
read its temperature, drive the 3-level heat alarm (Normal / Degradation /
Failure). The binary dereferences the watch link unconditionally -- it
always binds on a master node; the null guard covers replicants, holding
Normal.
PowerWatcher::UpdateWatch (@004b181c's body): the heat mirror first, then
the watchdog MIRRORS the watched subsystem's electrical state -- which is
what drives the Torso's twist-rate power gate and the searchlight/thermal
voltage reads -- with one override: a subsystem reading Ready off a SAGGING
source (measured <= minVoltage x rated) shows level 1, the BROWNOUT.
Both Performances now REGISTER in their ctors on the master instance (the
established sibling gate; the binary's form is the segment-copy/master flag
pair). They had never been registered before -- which is why the old
Fail() stubs never tripped in months of runs: the watchers existed but
nothing ever asked them to watch.
Plumbing: class-typed Performance shims on both watchers (the base takes
the Subsystem-typed pointer -- same shim every sibling carries),
HeatableSubsystem::CurrentTemperatureOf() accessor, UpdateWatch declared.
Live run clean. Stub census: 20 across 14 files.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>