Skip to content

v1.90.2.0 perf: halve local free-suite time and preserve coverage - #2972

Merged
garrytan merged 9 commits into
mainfrom
capy/test-portfolio-speedups
Sep 25, 2026
Merged

garrytan merged 9 commits into
mainfrom
capy/test-portfolio-speedups

Conversation

@garrytan

@garrytan garrytan commented Sep 24, 2026 •

Copy link
Copy Markdown
Owner

Summary

Cut local test waiting without removing scenarios, reducing budgets or moving coverage to a later tier.

  • Use available CPU affinity for local free-test workers, still capped at six. Explicit overrides still win; the separate Linux CI matrix is unchanged. Windows CI pins its original two-worker budget. Free-only runner dependencies no longer trigger unrelated paid work; mapped dependencies and unknown-change fallback remain authoritative.
  • Replace synthetic-terminal startup sleeps with readiness signals, advance the publication fixture's clock through its original polling sequence, and compile the watchdog once while preserving isolated per-case state. Run independent AUQ captures concurrently, starting each unchanged 240-second execution allowance after SDK admission and retaining the original outer deadline.
  • Repair demonstrated DX-footer, shared-library attribution/actor and design-detector evidence defects. Consent detection distinguishes a future permission question from permission to drive now; skip actors preserve source and index flags; symlink read credit requires a matching successful tool result containing current, in-fixture target bytes. Retain strict seed submission and private attempt diagnostics.
  • Clarify /land-and-deploy approval, merge/queue readback, staging, deployment reporting and rollback paths. Head or destination changes invalidate approval; confirmed merges are not replayed; unknown deployment status remains unknown.
  • Isolate alias-name regression setup from unrelated runtime assets while preserving every canonical skill, rerun behavior and source-integrity assertions. Legacy symlinks target checked fixture-local copies, never the working checkout.
  • Document distinct coverage responsibilities and the repository's autonomous, patch-first version policy. Version decisions do not authorize merging or deployment.

Measured performance

Matched workload Before After Reduction
Complete local free suite 887.82s 413.78s 53.4%
Two periodic AUQ callbacks, five independent captures 325.09s 136.40s 58.0%

The free comparison used the same four-CPU Linux machine, Bun 1.4.0 and Node 24.18.0, with identical build/display/Git prerequisites and no worker override. Its pass count increased from 25,504 to 25,547, with zero failures and the same 60 skipped identities. These matched measurements precede the additional repair regressions; they are not whole-paid-suite or CI speedup claims. Exact component selectors and coverage ownership are in docs/TEST_PORTFOLIO.md.

Validation

Integrated revision: c32df847430d65bf736ff87a63ee29672439303d, merging main a84b0b5b6d73fc1d7f97d95dcce484f2ffd334dc into this PR without rewriting history. Fresh merged-head GitHub CI is green: 55 checks passed, zero failed or pending. Four manual-dispatch/release-only jobs were intentionally skipped. All 20 Linux groups, all six AI E2E groups, Windows and their aggregate gates passed. The paid report records 106 automated passes plus one manual acceptance (unscored, no score-cache credit) across 107 executed results; none were reused. The manual case is the existing upstream-approved setup-browser-cookies judge exception for an exact provider refusal, not a new waiver. shared-libs-review-path-eligibility timed out on its first attempt and passed its configured retry; both attempts remain recorded.

  • Complete Linux free suite: 26,489 pass / 0 fail / 83 skip, 212,650 assertions across 1,041 files in 420.87s, using Bun 1.4.0 and Node 22.20.0. All 2,784 regular working-source hashes remained fixed. The committed merge tree equals the tested index tree.
  • Compared with the preceding validated head, main adds 670 passing cases and 23 platform skips, with no original cases removed and all original 60 skipped identities retained. The extra skips belong to native Windows cookie-import/process and delete-lease tests. Nested synthetic output receives zero extra coverage credit; wrapped native parameterized names are reconciled from their complete array text.
  • The integration's focused checks pass 1,408 / 0 fail / 40 skip, with 16,929 assertions across 50 files. Both sets of shared-actor native-public regressions remain intact; the narrower actor/read-detector check passes 199 cases with 880 assertions.
  • Resolved five merge conflicts: preserve version 1.90.2.0 / package 1.90.2, retain both changelog entries, regenerate the matching digest, and combine upstream's precise index-retention classifier with this PR's conditional non-action and coverage-subject handling. No existing assertions were weakened. The two unrelated local renderer outputs remain byte-identical and uncommitted.
  • Build/generation, touched-workflow lint including ShellCheck, source-freeze checks and credential gates pass. The integration scan has zero HIGH findings. The normal push passed the credential-blocking pre-push hook; remote readback matches the merge commit.

Retained pre-integration evidence

The preceding head 4082ef73 had 55 successful CI checks, zero failures or pending checks, plus two intentionally skipped release-only jobs. Its paid run reconciled 106/106 final results: 92 executed and 14 reused, and its native Windows run passed both shards across 664 files.

Local selected validation before this catch-up covered 90 gate callbacks, 25 quality judges and two explicit periodic callbacks. Of those 117 results, 98 retained prior/upstream evidence after consumed-input comparison, 16 retained compatible integrated evidence and three ran on 95333c80. Original source, time, attempts and cache provenance remain recorded. The three AUQ consistency samples and both A/B arms retained 7/7 format and substance 5. The fresh merged-head CI results are reported separately above; these historical results are not relabeled as executions on the merge commit.

Original failures and retries remain preserved, including the pre-repair symlink detector failure, Windows alias timeout and upstream Design UI timeout. The alias repair retains both install passes and the original hook deadline; its negative control still detects write-through without changing checkout skill files. Outside-model review timeouts remain unavailable coverage, not clean-review credit.

Coverage limits

Current local acceptance is complete Linux free validation. Selected paid, quality and periodic evidence above is attributed to its original pre-integration source; fresh merged-head CI is green with the explicit manual/unscored exception and retry noted above. The 123 scheduled/release deferrals remain explicit and receive no pass credit. The two all-skipped paid shards (skill-routing-e2e and llm-judge-recommendation, 11 skipped tests total) likewise receive no coverage credit. Full native macOS/Windows/iOS, the complete periodic census and whole-paid/CI performance gains are not claimed. The retained Windows evidence covers the curated Windows suite, not the complete test portfolio. Deployment fixtures simulate workflows; no real merge, deployment or rollback was performed.

No merge or auto-merge is requested.

Open in Capy

@trunk-io

trunk-io Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

😎 This pull request was merged.

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

E2E Evals: ⚠ MANUAL ACCEPTED (unscored)

106 automated passed / 107 final results | 0 failed, 1 manual accepted (unscored; no score-cache credit) | 107 executed, 0 reused | $35.14 total cost | reconcile exit: 0 | ⚠ 1 cases with multiple attempts

Profile: pr / full-fallback; selected behaviors: 84, judges: 26. Deferred to scheduled/release coverage: 123 behaviors and 0 changed prompt files. Deferred checks did not run and receive no PR-pass credit.

Shard Automated result Manual/unscored Executed Reused Status Cost
e2e-third-party-actions/skill-e2e-third-party-actions 5/5 0 5 0 ✅ $0.56
e2e-learnings/skill-e2e-learnings 1/1 0 1 0 ✅ $0.21
e2e-plan-tune/skill-e2e-plan-tune 1/1 0 1 0 ✅ $0.37
e2e-review-attribution/skill-e2e-review-attribution 3/3 0 3 0 ✅ $0.46
e2e-opus-47/skill-e2e-opus-47 6/6 0 6 0 ✅ $1.36
e2e-session-intelligence/skill-e2e-session-intelligence 4/4 0 4 0 ✅ $0.53
e2e/skill-e2e-workflow 4/4 0 4 0 ✅ $1.15
e2e-design/skill-e2e-design 3/3 0 3 0 ✅ $0.89
e2e/skill-e2e-shared-libs-paths 3/3 0 3 0 ✅⚠ $7.16
e2e-triage/skill-e2e-triage 1/1 0 1 0 ✅ $0.34
e2e/skill-e2e-shared-libs 4/4 0 4 0 ✅ $5.9
e2e-qa-workflow/skill-e2e-qa-workflow 3/3 0 3 0 ✅ $2.52
e2e-review-army/skill-e2e-review-army 5/5 0 5 0 ✅ $1.98
llm-judge/skill-llm-eval 25/26 1 26 0 ⚠ manual/unscored $0.5
e2e-ship-docsync/skill-e2e-ship-docsync 1/1 0 1 0 ✅ $0.6
e2e-retro/skill-e2e-retro 1/1 0 1 0 ✅ $0.61
e2e/skill-e2e-coverage-audit 2/2 0 2 0 ✅ $0.69
e2e-hermetic/skill-e2e-hermetic-canary 2/2 0 2 0 ✅ $0.04
e2e-skillify/skill-e2e-skillify 3/3 0 3 0 ✅ $1.76
e2e/skill-e2e-plan 7/7 0 7 0 ✅ $2.23
e2e-review/skill-e2e-review 2/2 0 2 0 ✅ $0.54
e2e-cso/skill-e2e-cso 1/1 0 1 0 ✅ $1.11
e2e-plan-tune-cathedral/skill-e2e-plan-tune-cathedral 5/5 0 5 0 ✅ $0
e2e-docsync-spawned/skill-e2e-docsync-spawned 1/1 0 1 0 ✅ $0.22
e2e-browse/skill-e2e-bws 7/7 0 7 0 ✅ $0.68
e2e-deploy/skill-e2e-deploy 6/6 0 6 0 ✅ $2.73
Fail-closed reconciliation
[test:paid] report: 6/6 slices, 38 planned shards, tier=gate
[test:paid] coverage: profile=pr mode=full-fallback; selected E2E=84, judges=26
[test:paid] deferred: 123 broad behaviors, 0 changed prompts without quick live coverage; these are not PR passes
  slice 1  passed            249s  test/skill-e2e-plan-mode-no-op.test.ts
  slice 1  passed             54s  test/skill-e2e-plan-tune.test.ts
  slice 1  passed             61s  test/skill-e2e-session-intelligence.test.ts
  slice 1  passed             46s  test/skill-e2e-triage.test.ts
  slice 2  passed             21s  test/skill-e2e-opus-47.test.ts
  slice 2  passed            303s  test/skill-e2e-plan.test.ts
  slice 2  passed            482s  test/skill-e2e-qa-workflow.test.ts
  slice 2  passed           1006s  test/skill-e2e-shared-libs-paths.test.ts
  slice 2  passed            192s  test/skill-e2e-workflow.test.ts
  slice 3  passed             26s  test/skill-e2e-learnings.test.ts
  slice 3  passed            149s  test/skill-e2e-plan-devex-plan-mode.test.ts
  slice 3  passed             90s  test/skill-e2e-review-attribution.test.ts
  slice 3  passed            202s  test/skill-e2e-skillify.test.ts
  slice 3  passed            320s  test/skill-llm-eval.test.ts
  slice 4  passed             95s  test/skill-e2e-bws.test.ts
  slice 4  passed            463s  test/skill-e2e-deploy.test.ts
  slice 4  passed             51s  test/skill-e2e-docsync-spawned.test.ts
  slice 4  passed            236s  test/skill-e2e-plan-ceo-finding-floor.test.ts
  slice 4  passed             41s  test/skill-e2e-plan-ceo-plan-mode.test.ts
  slice 4  passed            162s  test/skill-e2e-retro.test.ts
  slice 4  passed            677s  test/skill-e2e-shared-libs.test.ts
  slice 4  passed              0s  test/skill-llm-eval-spec.test.ts
  slice 5  passed             56s  test/skill-e2e-coverage-audit.test.ts
  slice 5  passed            153s  test/skill-e2e-design.test.ts
  slice 5  passed              9s  test/skill-e2e-hermetic-canary.test.ts
  slice 5  passed            447s  test/skill-e2e-plan-design-with-ui.test.ts
  slice 5  passed            246s  test/skill-e2e-plan-devex-finding-floor.test.ts
  slice 5  passed            459s  test/skill-e2e-review-army.test.ts
  slice 5  passed            134s  test/skill-e2e-ship-docsync.test.ts
  slice 5  passed              0s  test/skill-routing-e2e.test.ts
  slice 6  passed              0s  test/llm-judge-recommendation.test.ts
  slice 6  passed             59s  test/skill-e2e-ask-user-question-format-compliance.test.ts
  slice 6  passed            315s  test/skill-e2e-cso.test.ts
  slice 6  passed             38s  test/skill-e2e-diagram.test.ts
  slice 6  passed            109s  test/skill-e2e-office-hours-auto-mode.test.ts
  slice 6  passed              0s  test/skill-e2e-plan-tune-cathedral.test.ts
  slice 6  passed            117s  test/skill-e2e-review.test.ts
  slice 6  passed             77s  test/skill-e2e-third-party-actions.test.ts
[test:paid] collector final outcomes: 107 executed, 0 reused; 106 passed, 0 failed, 1 manual accepted (unscored; no score-cache credit) (108 attempt records from 27 collectors)
[test:paid] report: ⚠ 1 cases with multiple attempts this run:
  ⚠ shared-libs-review-path-eligibility (x2) — shards/skill-e2e-shared-libs-paths/1.90.2-HEAD-e2e-2026-09-25-1647.json
[test:paid] report: ⚠ 2 shard(s) passed with EVERY test skipped — they verified nothing:
  ⚠ test/skill-routing-e2e.test.ts (10 skipped — external service missing or tier mismatch)
  ⚠ test/llm-judge-recommendation.test.ts (1 skipped — external service missing or tier mismatch)
[test:paid] report: every planned shard accounted; 1 manual acceptance(s), no automated-score credit

Sliced lane: declared PR profile or broad fallback via scripts/test-paid-shards.ts (planner → 6 executors → fail-closed report). Reused scores retain their original provenance and expiry.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant