ci: allow-list completeness lint + two-phase service startup - #3499
ci: allow-list completeness lint + two-phase service startup#3499tomassrnka wants to merge 5 commits into
Conversation
…w-list select-tests.sh rejects stale entries; nothing caught the opposite rot - a new snapshot-path test nobody adds to the list silently never runs under the compressed configs. The lint attributes snapshot-lifecycle symbol hits (client calls + package-local wrappers, which it discovers and forces into its own symbol list) to top-level tests and requires each to be listed or carry //compression-tests:excluded <reason>. Running it on main found six rotted-out tests, now listed: the cross-team fork/resume/connect trio+, TestSandboxConnect, and envd's TestCACertTrustedAfterFilesystemOnlyReboot. Fifteen fixture-only tests (list/detail/kill/timeout/egress surfaces) carry exclusion markers per the allow-list's own criterion. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
start-service.sh gains start/wait subcommands (legacy form intact) and prints the log tail when a health wait times out. start-services boots otel-collector and orchestrator together, then API and client-proxy together - preserving the orchestrator-before-API ordering while removing the serial health-wait chains. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PR SummaryLow Risk Overview Compressed-config test coverage is guarded by Reviewed by Cursor Bugbot for commit 09b14ca. Bugbot is set up for automated code reviews on this repo. Configure here. |
❌ 2 Tests Failed:
View the top 1 failed test(s) by shortest run time
View the full list of 1 ❄️ flaky test(s)
To view more test analytics, go to the Test Analytics Dashboard |
The repo formatter rewrites //compression-tests:excluded to '// compression-tests:excluded' (the hyphen keeps it from matching the machine-directive pattern), so the lint and its messages use the formatted form. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit c72d995. Configure here.
Measured results (run 30693622934, all green)Commit 1 (allow-list lint): validated. The lint runs in every integration shard via Commit 2 (two-phase startup): no measured wall win — being honest about it. Start Services came in at 40–46s vs 42–48s baseline (~2s, within noise). The step's cost is dominated by DB health-wait + migrations + seed, not the four service boots — prebuilt binaries turn healthy in 1–2 polls, so the serial waits I parallelized were already near-free. What the commit still delivers: the log tail on health-wait timeout (previously a timeout produced zero diagnostics) and the Unrelated to this PR but visible in the run: shards queued 2.1–6.2 min because three pushes in ~10 min stacked runs against the runner group's 24-slot ceiling (wall 17.3 min despite healthy shard durations). Same story as the #3479 measurements — the max-concurrency raise is worth doing. 🤖 Generated with Claude Code |
The unanchored '(^|\|)name' grep let a new wrapper whose name is a prefix of an existing SYMBOLS entry (pauseSand vs pauseSandbox[(]) pass as already listed, leaving its callers invisible to the lint. Match the whole 'name[(]' entry exactly instead, and make the remediation text ask for the portable [(] form rather than \( (which breaks awk -v). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Two follow-ups from the #3479 speedup thread, one commit each.
1. Lint the missing direction of the compression allow-list
select-tests.shrejects stale entries, socompression-tests.tsv"cannot rot into silently reduced coverage" — but only in one direction. Nothing caught a new snapshot-path test that nobody adds to the list: it silently never runs under zstd1/lz4.check-allowlist-completeness.sh(wired intomake check-tests-allowlist, which CI already runs) closes that hole:WithAutoPause(true), fsfreeze) to the enclosing top-level test.pauseSandbox,pauseFilesystemOnly,createSnapshotTemplate{,WithCleanup},startSnapshotInBackgroundon the first run.// compression-tests:excluded <reason>; a test that is both listed and excluded is an error.*are exempt (already rot-proof).Running it on main proved the rot is real. Six tests on the snapshot path were missing from the list and are added here:
TestSandboxFork_CrossTeamAccess,TestSandboxResume_CrossTeamAccess_{Paused,Running},TestSandboxConnect,TestSandboxConnect_CrossTeamAccess_Paused(following the list's own precedent of including lifecycle error/authz paths — cf. the already-listedTestSandboxFork_NotFound), and envd'sTestCACertTrustedAfterFilesystemOnlyReboot(its rotation twin was listed). Fifteen fixture-only tests (list/detail/kill/timeout/egress surfaces) got exclusion markers with reasons, per the tsv's own criterion.Grey calls worth a reviewer's eye: the two
TestEgressFirewall*PersistsAfterResumetests are marked excluded because the tsv explicitly names egress as an excluded subject — but "persists after resume" is arguably snapshot-content integrity; flip them to listed if you read it the other way.2. Two-phase service startup
start-servicesbooted otel → orchestrator → API → client-proxy as four serial start+health-wait chains. Now: otel ∥ orchestrator, then API ∥ client-proxy — preserving the orchestrator-healthy-before-API ordering, while the collector (whose consumers' OTLP exporters retry anyway) and the proxy boot in parallel with their phase-mates.start-service.shgainsstart/waitsubcommands (the legacy 5-arg form still works) and now prints the service log tail when a health wait times out — previously a timeout produced zero diagnostics.Expected effect: ~20–30s off every integration shard's Start Services step; the shards' timing in this PR's runs vs. #3479's baseline (services step 0.7–0.8m) gives the measured answer.
🤖 Generated with Claude Code