Skip to content

test(dev): run the Compose dev-up cases in their own file - #2960

Merged
freeqaz merged 2 commits into
mainfrom
test-deslop-1019c-devup
Oct 19, 2026
Merged

freeqaz merged 2 commits into
mainfrom
test-deslop-1019c-devup

Conversation

@freeqaz

@freeqaz freeqaz commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

tests/integration/dev-up.test.mjs runs its 69 cases one after another and sets the Checks and Conformance 1 window: CI median 82.1 s over the 15 green main runs from 61ec422 to d331d24, while the lane's other 95 files pack into about 78 s at fileConcurrency 8. The file is CPU-light and serial (the product under test spawns its fake engine, k3d and CLI processes one at a time), so the lane's last minute mostly waits on this one file.

Change

Test-only, no assertion changes.

  • The Compose-side cases move verbatim to tests/integration/dev-up-compose.test.mjs (46 cases, main lines 33-766 and 1210-1299, in order): engine selection, generated configuration, key output, readiness, profile selection, the ports Compose renders, and the Kubernetes Compute checks that refuse before startup.
  • The Kubernetes Compute lifecycle, cleanup, rollback and launcher-recovery cases (23) stay in dev-up.test.mjs. Keeping them in place means open PRs that add Kubernetes cases (fix(occdev): use Docker Desktop's bridge resolver for k3d on macOS #1557) still merge without conflicts.
  • runDevDown moves to tests/helpers/dev-up.mjs, since both files use it.
  • checks-baseline-1.json lists the new file as a parallel file with its own expected tests. file-durations.json: dev-up 58.5 s -> 25.7 s, dev-up-compose 30.9 s. These rows are the file's slowdown-normalised median (55.1 s, the method test(console): consolidate the console browser tests added since #2903 #2947 uses) scaled by each half's share of its 79.3 s of summed per-test CI medians: 44.5 s for dev-up-compose, and for dev-up 34.8 s plus 2.2 s for building its own CLI.
  • The two docs that name the command list the new file.

Each case keeps its own fixture (temporary directory, fake engine and state directory), and the files share no process state, so running them side by side can't leak state between cases. Both files build the Go CLI once each.

Verification

  • Same cases: a line-multiset check shows every line of the old file is in exactly one new file. The only differences are imports, the header comments, runDevDown's move and loadYaml sitting below the header. Test counts are 46 + 23 = 69, the same as main.
  • Pins at 2 CPUs (CPUs 8-11), 20 runs each:
    • dev-up.test.mjs: 20/20.
    • dev-up-compose.test.mjs: 20/20.
    • Eight Podman Compose cases can't run on this host, because the local podman compose provider fails the real config call. They fail the same way on main, so the pin counts a run as passing only when no other case fails. CI runs them.
  • Mutants: 14 mutants of scripts/dev-up, internal/occdev/{compose,down,up,state,node_dns_k3d,cluster_create_k3d}.go. Each ran against main's single file and against the two new files.
    • Kill sets are equal for every mutant, matched by test name.
    • 11 are killed and 3 survive on both sides: script_key_exists (the earlier Python check still refuses), script_key_mode, go_rollback_keeps_key.
Mutant Killing cases (main = branch)
compose_public_host 5
compose_network_mode 4
compose_dynamic_port 4
down_docker_kube_plane 1
script_runtime_build_inverted 1
script_installation_match 1
go_dns_refused_inconclusive 3
go_k3s_channel 1
go_installation_id_match 1
go_tempdir_alias 1
go_rollback_remove_state 5
script_key_exists, script_key_mode, go_rollback_keeps_key survive on both
  • Time:
Measure main this PR
dev-up file(s), local 2 CPUs 63-68 s (one file) 41 s + 34 s (medians of 20, run separately)
Checks and Conformance 1 lane, local 8 CPUs (run-tests.mjs run checks-baseline-1, alternating) 95.3 s, 97.2 s 85.7 s, 85.3 s
CI test window, simulated from CI medians (longest-first, 8 slots) 82.1 s about 77.7 s

Risks

  • A PR that edits a Compose case in dev-up.test.mjs will now conflict and must move the edit to dev-up-compose.test.mjs. None of the open PRs do.
  • The lane gain depends on longest-first packing. If other files grow, the window moves to them. That is the intended outcome.

dev-up.test.mjs ran its 69 cases one after another and set the
checks-baseline-1 window (CI median 82 s; the other 95 files pack into
about 78 s at fileConcurrency 8). The Compose stack cases (engine
selection, generated configuration, key output, readiness, rendered
ports) move verbatim to dev-up-compose.test.mjs; the Kubernetes Compute
lifecycle, rollback and launcher cases stay, so open PRs that add
Kubernetes cases still merge cleanly. runDevDown moves to the shared
helper. No assertion changes.
@freeqaz
freeqaz requested a review from a team as a code owner October 19, 2026 19:49
@clawsweeper

clawsweeper Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

…how the row was scaled

Review follow-up: the Compose file keeps the Kubernetes Compute checks
that refuse before startup, and the dev-up row adds the CLI build to
the Kubernetes half's share before scaling.
@clawsweeper clawsweeper Bot added P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Oct 19, 2026
@clawsweeper

clawsweeper Bot commented Oct 19, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

What this changes

This PR separates Compose development-startup tests from Kubernetes lifecycle tests so CI can run both files concurrently.

Example: Checks and Conformance 1 executes the 69 development-startup cases.

  • Before: All 69 cases run sequentially in dev-up.test.mjs.
  • After: The runner can execute 46 Compose cases alongside 23 Kubernetes lifecycle cases.

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) A useful, focused test refactor supported by preserved test bodies and passing relevant CI; detailed CI logs and timing measurements were not independently verified.
Proof confidence 🐚 platinum hermit (4/6) This collaborator-authored test-only refactor is outside the ordinary runtime-proof gate; source equivalence and successful current-head CI support the changed test selection, while the downloaded policy-tester screenshots concern a different PR.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Product

Kind: Test only · Worth it: Yes · Fix scope: Complete
User problem: Contributors wait for a long sequential development-startup test file on the required CI path.
Reason: The collaborator-authored direction has a concrete CI benefit and preserves existing coverage without adding production machinery.

Merge readiness

✅ Ready for maintainer review

Keep this PR open with no actionable findings: the split preserves the existing test behavior and uses the established parallel CI runner.

Priority: P3
Reviewed head: 981d2adc8c4983f1122b621e4ab5b230cf45c507

Before merge

None.

Findings

None.

Agent review details

How this fits together

The CI lane manifest selects test files and required cases; the existing runner schedules isolated Node processes, which exercise development commands through disposable fixtures and report their results.

flowchart TB
  A[CI lane manifest] --> B[Parallel test runner]
  B --> C[Compose test file]
  B --> D[Kubernetes lifecycle file]
  C --> E[Shared development fixtures]
  D --> E
  E --> F[Development CLI and scripts]
Loading

Technical review

Best possible solution:

Retain the focused split and shared cleanup helper within the existing CI scheduling system.

Do we have a high-confidence way to reproduce the issue?

This is a test-organization optimization; source inspection confirms the original sequential grouping, while the supplied timing comparisons were not independently rerun.

Is this the best way to solve the issue?

The split uses existing file-level concurrency, preserves assertions and fixture ownership, and extracts only the cleanup helper needed by both files.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 7fa0a561df61.

Provenance checked

  • Development-startup test grouping and shared cleanup keeps the original intent (dd5729e: The Kubernetes startup work established real CLI lifecycle and cleanup coverage alongside the existing Compose cases.)
  • Parallel CI file ownership keeps the original intent (0f3d190: Audited test files opt into bounded concurrency while unaudited files remain serial and required cases remain enforced.)
  • Duration estimates keeps the original intent (15ce5dd: Measured file-duration estimates start longer shared files earlier without changing coverage or concurrency limits.)

Testing

Proof path: in-process harness.

Security

None.

Evidence

What I checked:

Likely related people:

  • freeqaz: Raw commit 0f3d190 adds scripts/ci/test-suites/checks-baseline-1.json:7 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 0f3d19078a86; files: scripts/ci/test-suites/checks-baseline-1.json)
  • Derek Carr: Raw commit dd5729e adds tests/helpers/dev-up.mjs:36 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: dd5729e195df; files: tests/helpers/dev-up.mjs)
  • kevinlin-openai: Raw commit 2268b0b adds tests/helpers/dev-up.mjs:12 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 2268b0b611ba; files: tests/helpers/dev-up.mjs)

Review metrics

Metric Value Why it matters
Change distribution Production +0/-0; tests +865/-840; CI metadata +18/-4; documentation +4/-4 The apparent test growth primarily reflects moving existing cases into a separately scheduled file.

Labels

Label changes:

  • add P3: This is a behavior-preserving test-maintenance improvement that reduces CI scheduling pressure without changing product runtime behavior.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.

Label justifications:

  • P3: This is a behavior-preserving test-maintenance improvement that reduces CI scheduling pressure without changing product runtime behavior.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

Reviewed October 19, 2026, 4:11 PM ET / 20:11 UTC.

@freeqaz
freeqaz merged commit f92cc40 into main Oct 19, 2026
62 of 63 checks passed
@freeqaz
freeqaz deleted the test-deslop-1019c-devup branch October 19, 2026 20:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant