Skip to content

fix(bb): skip BatchMergeTests.TooManySubtablesFails under _GLIBCXX_DEBUG#23018

Closed
AztecBot wants to merge 1 commit into
nextfrom
claudebox/fix-nightly-bb-debug
Closed

fix(bb): skip BatchMergeTests.TooManySubtablesFails under _GLIBCXX_DEBUG#23018
AztecBot wants to merge 1 commit into
nextfrom
claudebox/fix-nightly-bb-debug

Conversation

@AztecBot
Copy link
Copy Markdown
Collaborator

@AztecBot AztecBot commented May 7, 2026

Summary

Nightly debug build failed today on commit b30fe8f4 because goblin_tests aborts in BatchMergeTests/2.TooManySubtablesFails (and /3).

The test deliberately bypasses the BB_ASSERT_LTE(N, max_subtables) guard in BatchMergeProver::construct_proof via BB_DISABLE_ASSERTS() to exercise the verifier-rejection path when a malicious prover sends N > max_subtables subtable commitments. With the guard reduced to a warning, the prover continues into compute_degree_check_polynomial, where it iterates over flattened_columns.size() == (N + 1) * NUM_WIRES while only (M + 1) * NUM_WIRES degree_check_challenges were allocated:

for (size_t idx = 0; idx < flattened_columns.size(); ++idx) {
    reversed_column_spans.emplace_back(reversed_columns[idx]);
    scalars.push_back(degree_check_challenges[idx]);  // OOB when idx >= challenges.size()
}

In release this is silent UB and the verifier rejects the malformed proof (which is what the test asserts). In debug builds _GLIBCXX_DEBUG turns std::vector::operator[] into a bounds-checked accessor and aborts the prover before the verifier can run, taking down the whole goblin_tests binary.

This wasn't visible until now because the prior gemini-masking-poly OOB in OinkProver::commit_to_masking_poly aborted earlier in the test sequence (ultra_honk_tests). With #22937 landed yesterday, the test sequence runs further and exposes this next debug-only abort.

Fix

Skip TooManySubtablesFails under _GLIBCXX_DEBUG (i.e. when NDEBUG is not defined), matching the existing pattern used by commitment_key.test.cpp:DISABLED_PippengerZeroCountRegression. The verifier-rejection contract is still exercised by release builds.

Verification

  • cmake --preset debug -DAVM=OFF configures cleanly.
  • ninja goblin_tests builds cleanly.
  • ./bin/goblin_tests (debug, full suite): 66 passed, 9 skipped, 0 failed in 339 s. Previously aborted on BatchMergeTests/2.TooManySubtablesFails, never completing.
  • dsl_tests (excluding the heavy recursion tests CI also skips): 511 passed, 2 skipped, 0 failed — confirms goblin was the failure point.
  • ultra_honk_tests --gtest_filter='*Gemini*:*ZK*:*Mask*': 28 passed, 6 skipped — prior gemini fix intact.

Detailed analysis: https://gist.github.com/AztecBot/4c24147944dda0075af7133ec531d68b
ClaudeBox log: https://claudebox.work/s/ae4964c11db54c2e?run=1
Failed CI run: https://github.com/AztecProtocol/aztec-packages/actions/runs/25478845904

ClaudeBox log: https://claudebox.work/s/ae4964c11db54c2e?run=1

@AztecBot AztecBot added ci-draft Run CI on draft PRs. claudebox Owned by claudebox. it can push to this PR. labels May 7, 2026
@AztecBot
Copy link
Copy Markdown
Collaborator Author

AztecBot commented May 7, 2026

Flakey Tests

🤖 says: This CI run detected 1 tests that failed, but were tolerated due to a .test_patterns.yml entry.

\033FLAKED\033 (8;;http://ci.aztec-labs.com/034057d4c6d35a82�034057d4c6d35a828;;�):  yarn-project/end-to-end/scripts/run_test.sh simple src/e2e_epochs/epochs_high_tps_block_building.test.ts (297s) (code: 0) group:e2e-p2p-epoch-flakes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci-draft Run CI on draft PRs. claudebox Owned by claudebox. it can push to this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants