Skip to content

[TEST-01] Add missing tests from [CLI-01, SIGN-01, API-01] #45

Description

@linear-code

Why

The first Gate A implementation PRs intentionally separated a coherent cross-cutting test set from CLI-01, SIGN-01, and API-01. This issue owns those missing tests without reopening the completed implementation scopes.

Genesis

  • 404 response retries at info without a stack trace
  • unexpected request failure warns without a stack trace and then succeeds
  • abort during genesis polling sleep unwinds cleanly

Readiness

  • syncing to ready across polls
  • EL offline to ready
  • non-ok response followed by success
  • unreachable request followed by success
  • abort during sleep unwinds cleanly
  • optimistic execution produces the agreed diagnostic while preserving the reviewed readiness behavior
  • node-version lookup failure remains non-fatal
  • an unknown configured key remains inert and retries with cancellation
  • a Builder deposited or activated after startup becomes usable without restarting the sidecar

Identity and BN errors

  • happy path returns the Builder index
  • BN non-ok response logs the standard typed ApiError with HTTP status and useful response detail
  • empty successful response is distinct from a BN failure
  • non-active status reports the returned status
  • version mismatch reports bounded expected and received values
  • status lookup failure returns the current reviewed inert/failure result
  • genesis-wait failures use the reviewed log level and stack-trace behavior

BuilderStatusTracker

  • status and balance are undefined before the first successful poll
  • first successful poll stores values without an incorrect status-change warning
  • balance-only changes update the balance without a status-change diagnostic
  • real status changes produce the agreed diagnostic
  • failed status lookup preserves the prior known values

CLI

x malformed execution fee recipient is rejected (tested in validator)

  • zero execution fee recipient is rejected

x valid fee recipient parses to 20 bytes (tested in validator, parser function, cli)

  • unscheduled Gloas configuration is rejected using the final shared fork-epoch source

Done when

The missing Gate A lifecycle, readiness, cancellation, diagnostic, identity, tracker, and CLI cases pass against the merged implementation, with each REVIEW-01 behavior represented by a focused regression where applicable.

Evidence

  • Source implementation: Lodestar PR #9781
  • Current merged baseline refreshed on 1 September 2026: Lodestar unstable at 1e9a530f9897d50d2d6337cd4143c8dc53667c66, including merged Lodestar PR 9832, with TEST-01 head 239149e288c6ce1d6396a48fb5de2ea4c7be4886
  • Existing identity coverage: packages/builder/test/unit/identity.test.ts
  • Existing tracker coverage: packages/builder/test/unit/services/builderStatusTracker.test.ts
  • Upstream PR: ChainSafe/lodestar#9932, open, non-draft, mergeable, and awaiting maintainer review
  • Current TEST-01 evidence: 7 readiness tests, 3 genesis tests, 19 identity tests, 5 BuilderStatusTracker tests, and 6 signer tests pass on Node 24.13.0, for 40 focused Builder tests; package type-check, lint, and git diff --check pass. The source-equivalent pre-refresh head passed unit, type, lint, E2E, browser, spec, CodeQL, and simulation jobs. The refreshed head only merges current unstable; its full fork workflows still require maintainer approval
  • Existing activation evidence: waits for beacon node to return the builder and waits for a pending builder to become active; PR test(builder): cover remaining Gate A lifecycle regressions adds abort-during-wait coverage without duplicating those transitions
  • Review implementation: REVIEW-01
  • Existing signer and keystore coverage: Lodestar PR #9758

Metadata

Metadata

Assignees

Projects

Relationships

None yet

Development

No branches or pull requests

Issue actions