test_op_parity fails on a clean main. Found by the operator gate on #732, proven by mutation to be unrelated to that PR.
The failure
tests/parity/test_op_parity.cpp:1989: ERROR: test case THREW exception:
[json.exception.type_error.302] type must be string, but is null
[doctest] test cases: 10 | 9 passed | 1 failed | 0 skipped
[doctest] assertions: 70 | 70 passed | 0 failed |
[doctest] Status: FAILURE!
Note the shape: 70 assertions, 0 failed — the case died by throwing, so the assertions line reads perfectly healthy. Anyone grepping assertions: sees a green summary for a failing gate. That is the documented doctest trap and it is worth seeing a live instance of.
Cause — proven by removing it, not by reading
tests/parity/goldens/minimax_music3_oracle/manifest.json, added 2026-08-14 by 34dc57876 (MiniMax-Music3, #672/#679), carries two nulls:
/environment/device_name → null
/spec_facts/pipeline/scheduler_config/shift_terminal → null
RunGoldenPass enumerates the golden directories, reaches this manifest, and reads a field it requires to be a string.
Mutation: moved that one directory aside and re-ran the same binary, then restored it and verified the manifest md5 byte-for-byte (4f8aff37425920d9da8453d6ddf32497 before and after, git status clean):
|
cases |
assertions |
exit |
| with the Music3 golden |
10, 1 failed |
70 |
1 |
| without it |
10, 10 passed |
123 |
0 |
Note the assertion count also jumps 70 → 123: the throw was aborting the pass partway, so 53 assertions were never reached while the summary still printed "0 failed".
Why it is not #732
The PR that surfaced it touches 7 files — .agents/roadmap_v1.md, its spec, docs/FEATURES.md, and four sources (ltx2.cpp, ltx2_audio_vae.cpp, ltx2_video_vae.cpp, test_vocoder1d.cpp). No parity code, no manifest, no header. test_op_parity.cpp's translation unit is byte-identical between arms, and a constexpr double substitution cannot reach a JSON field-type error.
What closing this looks like
Either the generator should emit a string (or omit the key) where the reader requires one, or the reader should tolerate an absent/null optional — decide which is correct against the field's meaning, do not simply make the reader permissive to turn the gate green. /environment/device_name being null looks like a capture that ran with no device name available; if so, the honest fix is in the capture, and the manifest should be regenerated rather than hand-edited.
Whichever way it goes, the fix wants a red-before test: today nothing asserts that every committed golden manifest is readable, which is why this landed.
This is the second main red from that row today — #731 is audit-live-rows reporting the Music3 ACTIVE row abandoned.
Related: #731, #672, #679.
test_op_parityfails on a cleanmain. Found by the operator gate on #732, proven by mutation to be unrelated to that PR.The failure
Note the shape: 70 assertions, 0 failed — the case died by throwing, so the assertions line reads perfectly healthy. Anyone grepping
assertions:sees a green summary for a failing gate. That is the documenteddoctesttrap and it is worth seeing a live instance of.Cause — proven by removing it, not by reading
tests/parity/goldens/minimax_music3_oracle/manifest.json, added 2026-08-14 by34dc57876(MiniMax-Music3, #672/#679), carries two nulls:/environment/device_name→ null/spec_facts/pipeline/scheduler_config/shift_terminal→ nullRunGoldenPassenumerates the golden directories, reaches this manifest, and reads a field it requires to be a string.Mutation: moved that one directory aside and re-ran the same binary, then restored it and verified the manifest md5 byte-for-byte (
4f8aff37425920d9da8453d6ddf32497before and after,git statusclean):Note the assertion count also jumps 70 → 123: the throw was aborting the pass partway, so 53 assertions were never reached while the summary still printed "0 failed".
Why it is not #732
The PR that surfaced it touches 7 files —
.agents/roadmap_v1.md, its spec,docs/FEATURES.md, and four sources (ltx2.cpp,ltx2_audio_vae.cpp,ltx2_video_vae.cpp,test_vocoder1d.cpp). No parity code, no manifest, no header.test_op_parity.cpp's translation unit is byte-identical between arms, and aconstexpr doublesubstitution cannot reach a JSON field-type error.What closing this looks like
Either the generator should emit a string (or omit the key) where the reader requires one, or the reader should tolerate an absent/null optional — decide which is correct against the field's meaning, do not simply make the reader permissive to turn the gate green.
/environment/device_namebeing null looks like a capture that ran with no device name available; if so, the honest fix is in the capture, and the manifest should be regenerated rather than hand-edited.Whichever way it goes, the fix wants a red-before test: today nothing asserts that every committed golden manifest is readable, which is why this landed.
This is the second main red from that row today — #731 is
audit-live-rowsreporting the Music3 ACTIVE row abandoned.Related: #731, #672, #679.