Skip to content

feat: generic NV upgrade test suite + pin to NV28 actor bundle refs#276

Merged
parthshah1 merged 4 commits intomainfrom
nv-upgrade-test-suite
Apr 23, 2026
Merged

feat: generic NV upgrade test suite + pin to NV28 actor bundle refs#276
parthshah1 merged 4 commits intomainfrom
nv-upgrade-test-suite

Conversation

@parthshah1
Copy link
Copy Markdown
Collaborator

Summary

  • Generic, FIP-agnostic network-upgrade test suite — asserts cross-node NV / state-root / receipt-root agreement at every configured boundary, with boundary-labeled Antithesis payloads so failures show which upgrade broke (NV27 vs NV28).
  • Pin lotus to d036ad9521d6621b5393d3d1b707a9994e94feed and forest to nv28-2k-testing, the branches carrying the NV28 actor bundles.
  • Rename XX_HEIGHTFIREHORSE_HEIGHT across every profile to match the env vars the new binaries read (FOREST_FIREHORSE_HEIGHT, LOTUS_FIREHORSE_HEIGHT; see feat: nv28 support for devnet ChainSafe/forest#6943). Lower GOLDENWEEK=20 / FIREHORSE=50 everywhere so all runs spend most of their time in post-NV28 state.

What's in the suite

DoUpgradeSuite (single deck entry, weight 5, enabled only in env.fip) iterates the configured boundaries [{NV27, 20}, {NV28, 50}] and runs:

  • doNetworkVersionAgreement — all nodes report same NV (Always)
  • doUpgradeActivation — per-node pre/post NV check with null-tipset guard (Always)
  • doMigrationStateRootAgreement — state root matches at epoch-1, epoch, epoch+1 (Always)
  • doReceiptConsistencyAtBoundary — receipt roots match at epoch+1 (Always)
  • doChainProgressAcrossBoundary — chain advances in [epoch, epoch+20] window (Sometimes, robust to Antithesis time-dilation)
  • doPostUpgradeNodeHealth — every node responsive and past boundary at some point post-upgrade (Sometimes)
  • doBoundaryMessageBurst, doActorChurnAtBoundary — stress timed to the boundary (Reachable)

FIP-specific hooks go in per-upgrade files later via RegisterFIPBoundaryFunc.

Why not other profiles

STRESS_WEIGHT_UPGRADE_SUITE is unset in env.nightly / env.consensus / env.foc / env.drand, defaulting to weight 0 so DoUpgradeSuite never fires there. The upgrades still happen mid-run in those profiles so the binaries get exercised in post-NV28 state, but no upgrade-specific assertions clutter their reports.

Test plan

  • Antithesis filecoin notebook smoke run (triggered by the antithesis-test-filecoin label on this PR)
  • Verify both NV27 and NV28 boundaries show assertions firing with correct boundary labels in the Antithesis report
  • Confirm no false positives from cross-node Always assertions under fault injection

🤖 Generated with Claude Code

parthshah1 and others added 4 commits April 15, 2026 11:23
- Star-split/bisection: disconnect Forest via NetDisconnect instead of
  NetBlockAdd (which Forest doesn't support). Prevents Forest from acting
  as a gossip bridge that defeats the partition topology.

- F3 agreement: compare full cert data (power table CID, supplemental
  data commitments, aggregate signature) across Lotus and Forest, not
  just ECChain key. Catches subtle cross-implementation divergence in
  finalized certificates.
- env.fip: take main's comprehensive weights, add back UPGRADE_SUITE=5,
  remove zero overrides that conflicted with new non-zero values
- consensus_vectors.go: take main's version (drop signatureShort —
  caused false positives in F3 cert comparison)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Pin lotus to d036ad9 and forest to nv28-2k-testing (post-NV28 binaries)
- Rename XX_HEIGHT → FIREHORSE_HEIGHT across every profile (matches
  FOREST_FIREHORSE_HEIGHT / LOTUS_FIREHORSE_HEIGHT expected by the
  new binaries, per ChainSafe/forest#6943)
- Lower GOLDENWEEK=20 / FIREHORSE=50 in all profiles so every run
  spends most of its time in post-NV28 state
- Refactor upgrade_vectors.go to multi-boundary with per-assertion
  boundary labels; adds doChainProgressAcrossBoundary (Sometimes,
  stall detector) and doPostUpgradeNodeHealth (Sometimes, robust to
  Antithesis fault injection); null-tipset guard on upgrade activation
- DoUpgradeSuite remains gated to env.fip only (weight 0 elsewhere)
  so the other profiles' reports stay focused on their own scope

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@parthshah1 parthshah1 added the antithesis-test-filecoin Label to build and run only implementations. label Apr 21, 2026
@parthshah1 parthshah1 merged commit e506b16 into main Apr 23, 2026
8 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

antithesis-test-filecoin Label to build and run only implementations.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant