Re-run the emulator suite once when it fails, and read an h3-only ALPN list - #65
Conversation
…N list Two unrelated things the last round left behind. `rerun-flaky.yml` retries `android-ech` once on failure. That job fails on infrastructure often enough to be a nuisance — the emulator comes up half-dead, `package install-create` answers `Can't find service: package`, and the run ends having executed zero tests — and re-running it by hand was the only response anyone had. It happened twice while the last pull request was open. Narrow on purpose, because an auto-retry is a way to hide real failures. Only `android-ech`: the container and network suites fail for reasons worth reading, and covering them would be claiming their failures are noise too. Only once, guarded on `run_attempt == 1` — something that fails twice is either broken or flaky enough to fix rather than absorb. And the retry is visible as attempt 2 of the same run, so the history shows the failure as well as the retry. If it starts firing regularly that is the signal to fix the emulator setup, not to widen the retry. The second thing closes #12's remaining bullet. An `HTTPS` record whose `alpn` offers `h3` and not `h2` is the shape that would break connection setup if a client read the list as a requirement: OkHttp has no HTTP/3, and concluding the origin is unreachable would be wrong, since `http/1.1` is implied into the set and is perfectly usable. No public name publishes such a record, so the ECH fixture's resolver now does, and `SvcParamTest` asserts both halves — the implied default is present, and `h2` is not invented to make the list more palatable. Progresses #5, #12. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LTGos7kiusobSSixhsD19N
|
Zero tests ran, on the first attempt and on the harness's own retry: The device died rather than the code failing: with I checked whether my own change caused it, since this PR edits the ECH fixture's Re-run queued by hand. The workflow added here cannot help on this PR — Generated by Claude Code |
Progresses #5 and #12.
The re-runs
android-echfails on infrastructure often enough to be a nuisance — the emulator comes up half-dead,package install-createanswersCan't find service: package, and the run ends having executed zero tests. It happened twice while #64 was open, and re-running it by hand was the only response anyone had.rerun-flaky.ymldoes that automatically now.The three suites already have daily crons and
workflow_dispatch, so this is the missing piece rather than a change to when things run.It is narrow on purpose, because an auto-retry is a way to hide real failures:
android-ech. The container and network suites fail for reasons worth reading — The rest of the roadmap: DNS, HTTP/2, Alt-Svc, TLS policy, client certificates and SvcParams #64's container failure was a genuine bug in one of my own tests. Covering them would be claiming their failures are noise too, which is a much bigger claim.run_attempt == 1. Something that fails twice is either broken or flaky enough to be worth fixing rather than absorbing.If it starts firing regularly, that's the signal to fix the emulator setup, not to widen the retry.
The h3-only record
This closes #12's remaining bullet, which I couldn't do before the fixture could publish arbitrary records.
An
HTTPSrecord whosealpnoffersh3and noth2is the shape that would break connection setup if a client read the list as a requirement: OkHttp has no HTTP/3, and concluding the origin is unreachable would be wrong —http/1.1is implied into the set and is perfectly usable. No public name publishes such a record, so the ECH fixture's resolver now does.SvcParamTestasserts both halves: the implied default is present, andh2is not invented to make the list more palatable — a client that did would try a protocol the origin never offered.Verification
The Go change is
gofmt-clean and the suite compiles against 5.5.0-SNAPSHOT and against the pinned release (where the 5.5.0 gate excludes it). The record shape is the same one already verified live against a natively-run resolver in #64; this one adds a fourth name in the same table.The workflow itself can only really be verified by the next emulator flake — it is a
workflow_runtrigger, so it cannot fire from a pull request. Its YAML parses and theifguard is exact.Generated by Claude Code