Skip to content

main red: test_op_parity throws on the MiniMax-Music3 golden manifest — null where a string is required #737

Description

@localai-bot

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_namenull
  • /spec_facts/pipeline/scheduler_config/shift_terminalnull

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions