← all branches

feat/ci-speed

needs attentionviewing older commit
ca9f915 · fullpre-PRreviewed 2026-08-11 19:27 UTC1H · 4M · 4L · 2I
The branch
Purpose
Cut CI gate latency — deployment_status trigger eliminates 287s Vercel build wait from E2E; Turbo remote cache cuts cold typecheck+lint
Goal
Reduce warm-path merge gate from ~11.5min to ~3-4min wall-clock
Sub-goals
  • SG-1: Switch e2e.yml to deployment_status trigger — E2E starts READY, not polling
  • SG-2: Add TURBO_TOKEN/TURBO_TEAM to validate job — typecheck/lint warm-cache in seconds
  • SG-3: Update e2e-testing.md docs to reflect new trigger mechanics
The changes (whole branch)
What
e2e.yml trigger rewritten from pull_request to deployment_status with new gate step resolving PR via /commits/:sha/pulls API; pr-checks.yml validate job gains Turbo remote cache env vars; e2e-testing.md CI section updated; docs/ci-cd-diagnosis.html added
Why
287s of a 354s E2E green run was polling curl waiting for Vercel to finish building — tests themselves take 21s. Typecheck is 143s cold on every PR Checks run. Neither bottleneck is actual test/check work.
Areas
.github/workflows+12355.claude/rules+2919docs+1270
Blast
CI infrastructure only — 4 files, +279/-74. No domain code, DB schema, or API surface changed. e2e.yml changes inert on feature branches (deployment_status GitHub constraint), active on merge to main.
ci-only no-app-code inert-until-merge-to-main
ci· No PR open — no CI run to reporte2e· deployment_status trigger inert on feature branchcoderabbit· No .coderabbit.yaml in repo

Findings · 11

correctness3

medium

No pass-through stub for non-preview branches — footgun if 'e2e testing' is re-required

.github/workflows/e2e.yml:25

branches outside feat|fix|hotfix|feature/* produce no platform deployment_status event, so the 'e2e testing' check never runs for those PRs. If re-required without a pull_request pass-through stub first, every docs/chore PR blocks forever on 'Expected — waiting for status.' Documented in the workflow header but no structural guard.

medium

migration-lint excluded from 'All Checks Passed' summary gate

.github/workflows/pr-checks.yml:494

Pre-existing: summary job needs array omits migration-lint. A red migration-lint job does not block merge. Intentional (tracked MON-48) but worth noting.

low

PLATFORM_PREVIEW_URL set without PLAYWRIGHT_WEB_BASE_URL → 6-min hang on non-feat/* branch

.github/workflows/e2e.yml:160

Unusual config: only PLATFORM_PREVIEW_URL override set → web URL falls back to slug-derived (no web preview for non-feat/* branches) → wait-on hangs to 300s. Requires unusual operator error; slow failure not silent.

security1

low

Shell injection via inline step-output expansion of branch name

.github/workflows/e2e.yml:156

Resolve preview URLs step expands ${{ steps.gate.outputs.branch }} inline into shell at YAML evaluation time. A branch name with shell metacharacters could execute arbitrary code. Exploitable only by someone with repo push access. Fix: use env: BRANCH: ${{ steps.gate.outputs.branch }} and reference $BRANCH in the script.

conventions2

medium

docs/ci-cd-diagnosis.html committed as permanent repo artifact

docs/ci-cd-diagnosis.html:1

One-time measurement/analysis document dated 2026-08-06. Findings are now encoded in workflow changes and e2e-testing.md. Will drift as CI evolves with no update mechanism. Consider keeping only in PR description or internal wiki.

low

pnpm/action-setup@v4 in e2e.yml vs @v3 everywhere else (pre-existing)

.github/workflows/e2e.yml:116

Pre-existing inconsistency. Both resolve to pnpm 10 via packageManager field. Cosmetic; worth normalizing in a follow-up.

tests3

high

New e2e.yml gate step cannot be CI-validated on this feature branch before merge

.github/workflows/e2e.yml:10

deployment_status only fires for workflow files on the default branch (GitHub platform constraint). The ~30-line gate step (PR resolution via API, supersession check, branch-pattern match) cannot be exercised by any push to this feature branch. Low-likelihood of error given careful authorship and logical code-path analysis, but structurally unverifiable before merge.

medium

No Turbo remote cache hit observability — bypass is silent

.github/workflows/pr-checks.yml:34

If the remote cache silently fails (wrong team slug, token scope, network), typecheck/lint fall through to cold recompute with no CI signal. The .turbo fallback is a good safety net, but a cache-hit assertion would make warm/cold distinguishable.

info

Unit tests remain non-blocking (continue-on-error) — pre-existing P0 gap

.github/workflows/pr-checks.yml:83

pnpm test runs with continue-on-error: true. Diagnosis doc identifies this as P0 but PR does not address it.

improvement2

low

web wait-on at 300s may be conservative

.github/workflows/e2e.yml:190

deployment_status fires when platform is already READY; web usually finishes first. 300s is safe (exits on first success) but 120s would likely suffice.

info

No required checks enforced on main — speed improvements are moot without enforcement

docs/ci-cd-diagnosis.html:40

Ruleset 9729732 has no required status checks. Restoring enforcement (P0 per diagnosis) should accompany or precede this merge.

History · 3 commits

  1. 167f02aneeds attentionincremental1H · 2M · 2L2026-08-12 17:47
  2. ca9f915needs attentionfull1H · 4M · 4L2026-08-11 19:27current
  3. f7dbbf7needs attentionfull0H · 5M · 7L2026-08-07 02:01