fix(simulation): BondYield-ChurnOut race and misleading thornode-unreachable failures
What
test/simulation/actors/features/bond_yield.go: BondYield-ChurnOut records the target node'sstatus_sincewhen it submits the leave, and treats any later change as the churn-out. Covered by a new unit test..gitlab-ci.yml(test-simulationafter_script): runmake test-simulation-eventsonly whiledocker-thornode-1is running. Otherwise print the container's status, exit code and OOM flag.
Why
These are two of the three test-simulation failures still flaking on MR pipelines in October 2026.
BondYield-ChurnOut (17 failures in October). Churning a node out clears its leave request, and the sim's ChurnInterval is 55 blocks. So the next churn could make the target Ready and then Active again before the actor ever saw Standby (job 17244699867). The other October failures were:
- 2 from a production churn bug, fixed separately in !5237 (merged);
- 15 from vault migrations that never finished: XMR FROST signing (#3384), the mocknet ZEC expiry window during churn, and XRP/TSS signing. These are not fixed here.
"thornode unreachable". All 270 such jobs since June had already failed earlier, in one of these ways:
- mocknet build or startup;
- image pulls;
- DNS during the genesis contract deploy;
- sim setup readiness;
- actor errors with no
actor=field.
The after_script's thorscan then reported thornode as unreachable, which hid the real cause and showed up as a separate flake. None of those jobs showed a thornode crash, panic or OOM.
The third active flake, InactiveVaultRefund-BTC, was already fixed by !5169 (merged).
Testing
- New
bond_yield_test.gocase. glab ci lintpasses. The after_script snippet was exercised against missing, running and exited containers.