Skip to content

merge-train: read device failure records as written; a device failure is a devices problem, not a driver error (#91) - #205

Merged
thejackshelton merged 8 commits into
masterfrom
device-failure-records
Oct 6, 2026
Merged

thejackshelton merged 8 commits into
masterfrom
device-failure-records

Conversation

@thejackshelton

Copy link
Copy Markdown
Contributor

The bug (#91's landing): the driver failed #91 at stage error with "packages/parity/out/device-failures-ios.json has an entry that is not { lane, case, dpr, node, kind }".

The validator in parseDeviceEvidence (scripts/merge-train-lib.ts) required node to be a string. But device-lanes.ts writes node: null for a failure of a whole case, such as a device record or a missing dump. #91's iOS host timed out, giving device-record failures with case "-" and node null. So the run's own failures threw, and the driver reported a driver error instead of judging them.

What changed:

  • parseDeviceEvidence now accepts exactly the written shape, { lane, case, dpr, node: string | null, kind, detail: string }. It stays strict about everything else: a wrong type or an unknown key throws, naming the entry's index and contents. Both committed master files (ios 57, android 86 entries) match the shape.
  • deviceRunProblems reports a failing lane readably:
    • a count per case and DPR (most first, at most 8);
    • then the first details;
    • both for "N failure(s) master does not have" and for a lane that now fails where master passed. The latter listed no failures before.
  • scripts/land.ts judgeDevices: if the run's own records can't be read, that is now a judge-devices failure with the reason, not a driver error. Master's records stay a driver error.

What passed:

  • pnpm typecheck passed.
  • vitest run merge-train land passed (123 tests).
  • New tests use real records: three entries copied from /tmp/dragon-land/packages/parity/out/device-failures-ios.json, plus INL1a 5/5 (C2): lowering inline boxes and <br>s, native runtime emit, 7 inline fixtures and lanes #91's device-record entry, rebuilt from its run log. Its detail, "the host did not finish: timed out after 1896 s waiting for the iOS host to finish", is verbatim. The tests cover:
    • parsing node null and detail;
    • refusing a non-string detail, a numeric node, and an unknown key;
    • the readable summary for a newly failing lane and for added failures;
    • truncation past 8 cases.
  • Two existing tests were retargeted to the new messages, with the same intent: the problem text and the refusal text.

🤖 Generated with Claude Code

…l), strict otherwise; a device failure is a judge-devices problem with a count per case and its first details, not a driver error (#91)
…s; MQ-PREF is MQ-R2 and waits for MQ-R1 runtime and PNT1
… Chrome-proven outline geometry; a1 web, a2 native, unstacked)
…grew 1 MiB: spawnSync git ENOBUFS failed the landing proof)
@thejackshelton
thejackshelton merged commit b3538a6 into master Oct 6, 2026
5 checks passed
@thejackshelton
thejackshelton deleted the device-failure-records branch October 6, 2026 03:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant