Repository navigation
fix(smoke): an unpublished third-party runner image skips its pairs - #8752
Conversation
The upstream registry added stitcher-moq-media-client before publishing its image, and the pre-pull aborted the whole Upstream Docker job. Only our client images and relay gate the run, so an unpullable third-party image now drops its optional pairs and is listed under Not run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upstream runs a docker relay that declares endpoints once per transport, as docker-quic and docker-webtransport, and quic-zig now does. Validate (client, relay, mode) cells instead of one docker run per pair. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 23 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
There was a problem hiding this comment.
ℹ️ One rough edge in the empty-matrix guard. Nothing else to flag.
Reviewed changes
I reviewed how the Upstream Docker smoke wrapper now handles unpublished third-party images and per-endpoint relay runs.
- Unpullable third-party images are skipped: after the retries, a missing moq-dev client image still aborts the job. A missing third-party image is marked
not run: image unavailable, its role is dropped from both matrices, and the job warns and lists it under the report's "Not run". - Per-run coverage:
expected_runsnow produces one(client, relay, mode)per declared relay endpoint, or plaindocker, andvalidate_summarychecks that exact set. - Required gate: a required pair fails if it never ran or if any of its runs is red. The optional warning now lists runs.
- Tests: these cover an unpublished client, an unpublished last relay, a missing own image, and endpoint cells gating their pair.
claude-opus-5-5 | 𝕏
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
I reviewed the commit pushed since the prior Pullfrog review.
- Empty-matrix guard narrowed:
runkeeps the unfiltered plans and skips an empty matrix only when its unfiltered plan has runs. A matrix the registry alone leaves empty still raisesno compatible pairs. - Regression test added:
test_matrix_the_registry_leaves_empty_fails_despite_unrelated_missing_imagecovers an unrelated missing image alongside a registry-empty matrix.
claude-sonnet-5-5 | 𝕏

Problem
The scheduled Smoke job "Upstream Docker interoperability" has failed every night since 2026-11-12 (job 132483728890). Two upstream registry changes each break our wrapper,
test/smoke/runner.py:ghcr.io/englishm/moq-interop-runner-stitcher-moq-media-client:latest, but the image was never published. The package API answers "Package not found", anonymous GHCR answers 403 while sibling images answer 200, and upstream'sbuild-images.ymlhas not run since 2026-09-03. Upstream's 2026-11-13 xquic consolidation added two more unpublished images (xquic-client,xquic-relay; its notes say "GHCR publication is deferred until review"). Upstream's own runner skips missing images. Ours pre-pulls every image and aborts the whole job, althoughtest/smoke/AGENTS.mdsays only our clients against this checkout's relay may fail it.endpointsruns once per transport (docker-quic,docker-webtransport). englishm/moq-interop-runner#187 (merged 2026-11-13) gavequic-zigtwo endpoints, and ourvalidate_summaryrejects anything but onedockerrun per pair. Fixing 1 surfaced this one.Approach
not run: image unavailableinstead, its role is dropped from both matrices, it is listed under the report's "Not run" alongside local-only builds, and the job emits a::warning::. If that empties the optional matrix, the matrix is skipped. A matrix that is empty before dropping missing images still raises, even when some unrelated image is missing.(client, relay, mode)run, with one expected mode per declared endpoint or plaindocker. A required pair passes only if it ran and every one of its runs passed. The optional warning lists runs.Impact
None: CI harness only, no public API or wire change.
Alternatives
skiprows. That would also hide our own image going missing.Follow-ups
build-images.ymlforstitcher-moq-media-client. Until then, its pairs show under Not run.Caused by
dockerrun per pair, though upstream already ran one cell per declared docker endpoint.Validation
('moq-dev-js', 'quic-zig', 'docker-quic')among them.incomplete runner coverage. Replaying that run's real matrix-1 summary (14 runs, modesdocker,docker-quic, anddocker-webtransport) through the newvalidate_summaryaccepts it; the old code rejected it.python3 test/smoke/runner.test.py: 12 tests pass. The new one (a matrix the registry alone leaves empty raises even when an unrelated image is missing) fails against the previous head's guard. They cover an unpublished third-party client or last relay (both fail againstmain's runner), an unpublished moq-dev image aborting before any matrix runs, and per-endpoint cells gating their pair.just checkpasses.quest review --harness codex: round 1 found the empty-matrix case (fixed), and rounds 2 and 3 found nothing.Models
Size: S
Implementer: Claude Code, claude-opus-5-5, unknown effort
Implementer: Claude Code, claude-opus-5-5, unknown effort (iterate)
🤖 Generated with Claude Code
Review
Rewritten by
quest reviewafter each round.Head: 055bf7d
Base: origin/main at 98ed0f8
Risk: medium,
the base has no RISK.md to name what is always high or customer-facing, so every change is mediumClassified: medium by default
Reviewer: Codex, gpt-6.1-sol, medium effort
Session:
01a1de28-caaa-7401-a627-dbab05961b88, round 1Score: 9/10,
Source inspection found no actionable defects in image filtering, endpoint-level coverage validation, or required-pair gating, though builds and tests were not run as instructed.Rounds: 1; first round 0; findings 0: fixed 0, refuted 0, open 0
Findings: none