A build step's failure contract: go -json and TAP parsers and a conformance kit every build module runs, so a verdict names the failing test (issue 1901)
#104
Merged
mesh-toolsmerged 4 commits from fix/1901-failure-contract into main2026-10-26 23:44:13 +00:00
Issue 1901: a build's verdict hid the failing test (fixed once for Go in one build module; met twice for TypeScript on 2026-10-26, because each build module parsed its own test output). Thorough fix (the operator's yes 2026-10-26 19:34 CET): one failure contract in mesh-sdk, held on every build module.
This member (merges first, as a merge commit: the consumers pin a2759ec9): go/buildstep failure.go (the Failure every step reports), gotest.go (go test -json), tap.go (node --test TAP, subtest failures and panics kept), step.go, and conformance/ with captured fixtures (never imagined) that every build module runs. A capacity test folded to keep the count flat.
Group fix/1901-failure-contract: mesh-sdk, mesh-catalog (build modules run the kit; a catalogue check refuses a build module without it), mesh-delivery (the checker's Failure is buildstep.Failure; a hidden failure is guarded). Merged with today's main (one conflict, capacity_test.go, main's test kept whole). Tests: go test ./... green, go vet -tags integration clean; no test added (1682 unit / 42 integration, as main).
Quick fix weighed: patch the TypeScript parser in mesh-build-node only; not chosen, the kind was met in two build modules.
Reviewed-by: review-1901k@shanks at 47a66e3c0d (the contract)
Reviewed-by: review-1901m@shanks at a2759ec92e (the merge with main)
Issue 1901: a build's verdict hid the failing test (fixed once for Go in one build module; met twice for TypeScript on 2026-10-26, because each build module parsed its own test output). Thorough fix (the operator's yes 2026-10-26 19:34 CET): one failure contract in mesh-sdk, held on every build module.
This member (merges first, as a merge commit: the consumers pin a2759ec9): go/buildstep failure.go (the Failure every step reports), gotest.go (go test -json), tap.go (node --test TAP, subtest failures and panics kept), step.go, and conformance/ with captured fixtures (never imagined) that every build module runs. A capacity test folded to keep the count flat.
Group fix/1901-failure-contract: mesh-sdk, mesh-catalog (build modules run the kit; a catalogue check refuses a build module without it), mesh-delivery (the checker's Failure is buildstep.Failure; a hidden failure is guarded). Merged with today's main (one conflict, capacity_test.go, main's test kept whole). Tests: go test ./... green, go vet -tags integration clean; no test added (1682 unit / 42 integration, as main).
Quick fix weighed: patch the TypeScript parser in mesh-build-node only; not chosen, the kind was met in two build modules.
Reviewed-by: review-1901k@shanks at 47a66e3c0dc8dcdfd065a01358e04baf5917774d (the contract)
Reviewed-by: review-1901m@shanks at a2759ec92ec910d79b19a7ac6bee7422841362e7 (the merge with main)
Each build module parsed its own test runner's output, so a fix in one never reached the others: a failed node --test
run was worded by a passing line of its first file. buildstep.Failure names the test, its file, its cause and its own
output; ReadGoTest (moved from mesh-build-go) and ReadTAP fill it; package conformance holds every build module to it
with runner output captured with the build nodes' own toolchains.
Deliverynovox/mesh-sdk@a2759ec92ec9 — merged since 2026-10-26T23:44:15Z
Source — source.main moved to novox/mesh-sdk@b0cbc4e6ac. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
2026-10-26 23:43 (new) → proposed (announced): novox/mesh-sdk#104's head announced
2026-10-26 23:43 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
2026-10-26 23:44 ready → merged (merged): on the trunk its modules follow: merged there
The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-sdk@a2759ec92ec9` — **merged** since 2026-10-26T23:44:15Z
**Source** — source.main moved to novox/mesh-sdk@b0cbc4e6aca8. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `fix/1901-failure-contract`: novox/mesh-catalog@e8a953818c71, novox/mesh-delivery@f4a86f58843d, novox/mesh-sdk@a2759ec92ec9
**Transitions**
- 2026-10-26 23:43 (new) → proposed (announced): novox/mesh-sdk#104's head announced
- 2026-10-26 23:43 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
- 2026-10-26 23:44 ready → merged (merged): on the trunk its modules follow: merged there
The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Issue 1901: a build's verdict hid the failing test (fixed once for Go in one build module; met twice for TypeScript on 2026-10-26, because each build module parsed its own test output). Thorough fix (the operator's yes 2026-10-26 19:34 CET): one failure contract in mesh-sdk, held on every build module.
This member (merges first, as a merge commit: the consumers pin
a2759ec9): go/buildstep failure.go (the Failure every step reports), gotest.go (go test -json), tap.go (node --test TAP, subtest failures and panics kept), step.go, and conformance/ with captured fixtures (never imagined) that every build module runs. A capacity test folded to keep the count flat.Group fix/1901-failure-contract: mesh-sdk, mesh-catalog (build modules run the kit; a catalogue check refuses a build module without it), mesh-delivery (the checker's Failure is buildstep.Failure; a hidden failure is guarded). Merged with today's main (one conflict, capacity_test.go, main's test kept whole). Tests: go test ./... green, go vet -tags integration clean; no test added (1682 unit / 42 integration, as main).
Quick fix weighed: patch the TypeScript parser in mesh-build-node only; not chosen, the kind was met in two build modules.
Reviewed-by: review-1901k@shanks at
47a66e3c0d(the contract)Reviewed-by: review-1901m@shanks at
a2759ec92e(the merge with main)Delivery
novox/mesh-sdk@a2759ec92ec9— merged since 2026-10-26T23:44:15ZSource — source.main moved to novox/mesh-sdk@b0cbc4e6ac. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
fix/1901-failure-contract: novox/mesh-catalog@e8a953818c, novox/mesh-delivery@f4a86f5884, novox/mesh-sdk@a2759ec92eTransitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.