Skip to content

perf(ci): cut about a minute from every release - #8250

Merged
t3dotgg merged 2 commits into
mainfrom
t3code/optimize-release-ci-performance
Aug 26, 2026
Merged

perf(ci): cut about a minute from every release#8250
t3dotgg merged 2 commits into
mainfrom
t3code/optimize-release-ci-performance

Conversation

@t3dotgg

@t3dotgg t3dotgg commented Aug 26, 2026

Copy link
Copy Markdown
Member

Releases take a median 13m37s. Two pieces of that are pure waste: the CLI publish job builds the web client twice, and two startup jobs wait for version resolution they never use. This PR removes both, worth about a minute per release. It also fixes two scheduling problems found in the same audit.

  • publish_cli built the web client twice. The t3 build task already depends on @t3tools/web#build, so the explicit web build step repeated ~35s of work on the serial publish path. Verified locally: vp run --filter t3 build emits exactly one web build and still produces dist/bin.mjs, dist/service-launcher.mjs, and dist/client/index.html.
  • relay_public_config and build_wsl_node_pty now run alongside preflight. Both consume only the commit SHA. They previously waited ~30s for preflight to resolve the version, which they never read. Desktop builds still hard-gate on preflight and relay config succeeding.
  • Nightly cron moves to minute 7. Scheduled runs started a median 13m late across 56 sampled runs. GitHub documents the worst scheduling delays at the top of the hour.
  • Concurrency groups per channel. Overlapping nightlies double-built the same commit on August 23. Nightlies now queue behind each other with cancel-in-progress: false, so no running publisher is ever canceled. Stable tag releases get their own group and are never blocked by a nightly.

Timing data comes from an audit of 60 release runs. The larger follow-ups from that audit (prebuilt hosted-web deploy, early CLI build, Windows cache benchmark) are separate work.

Changes by Claude Fable 5 via Claude Code.

🤖 Generated with Claude Code


Note

Low Risk
Changes are limited to GitHub Actions release orchestration; artifact contents should be unchanged aside from avoiding a redundant web build.

Overview
This PR trims release workflow wall time (~1 minute per run) and hardens nightly scheduling.

Parallelism: relay_public_config and build_wsl_node_pty no longer wait on preflight—they only need the commit SHA, so they start in parallel with version resolution (same gating as preflight on scheduled runs when check_changes finds new commits). Both jobs check out github.sha instead of a preflight ref.

Duplicate work: publish_cli drops the explicit @t3tools/web build step; vp run --filter t3 build already pulls in the web client via the existing task dependency.

Scheduling / safety: The nightly cron moves from minute 0 to minute 7 every 3 hours to reduce GitHub’s top-of-hour delay. A concurrency block serializes nightly runs (cancel-in-progress: false, queue: max) while stable tag releases use a separate group so they are not blocked or dropped when nightlies queue.

Reviewed by Cursor Bugbot for commit ebe3ebf. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Run relay_public_config and build_wsl_node_pty in parallel with preflight in release workflow

  • Changes relay_public_config and build_wsl_node_pty to depend on check_changes instead of preflight, so they run in parallel with preflight rather than waiting for it
  • Both jobs are skipped on scheduled runs when has_changes is not true, avoiding redundant builds
  • Checkout now uses github.sha directly instead of needs.preflight.outputs.ref
  • Removes the explicit "Build web package" step since the CLI build already produces it
  • Adds concurrency grouping by channel (nightly vs stable) with cancel-in-progress: false, and shifts the cron schedule from minute 0 to minute 7 to avoid GitHub peak load
  • Risk: jobs no longer wait for preflight to complete, so a preflight failure will not prevent these jobs from starting; verify that relay_public_config and build_wsl_node_pty do not rely on any output from preflight beyond ref

Macroscope summarized ebe3ebf.

Four release workflow changes from a timing audit of 60 release runs:

- Drop the explicit web build in publish_cli. The t3 build task already
  depends on @t3tools/web#build, so the web client built twice (~35s).
- Start relay_public_config and build_wsl_node_pty alongside preflight.
  Both consume only the commit SHA, so they no longer wait for version
  resolution (~30s).
- Move the nightly cron off minute zero. GitHub delays scheduled runs
  most at the top of the hour (median 13m late in the sample).
- Add per-channel concurrency groups so overlapping nightlies cannot
  build the same commit twice. Stable releases keep their own group.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 17aef292-c2bd-4228-b780-55f0ee66b8ee

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Aug 26, 2026
@github-actions

github-actions Bot commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.3 KiB 13.3 KiB +24 B (+0.2%) 15.1 KiB
Codex Thread snapshot wire 6.9 KiB 6.9 KiB −2 B (−0.0%) 7.3 KiB
Codex Live turn WebSocket wire 6.4 KiB 6.4 KiB +26 B (+0.4%) 7.8 KiB
Codex Live turn WebSocket decoded 55.6 KiB 55.6 KiB +44 B (+0.1%) 66.4 KiB
Codex Live turn messages 10 11 +1 (+10.0%) 21
Claude Total thread wire 13.3 KiB 13.3 KiB −20 B (−0.1%) 15.1 KiB
Claude Thread snapshot wire 6.9 KiB 6.9 KiB +7 B (+0.1%) 7.3 KiB
Claude Live turn WebSocket wire 6.5 KiB 6.4 KiB −27 B (−0.4%) 7.8 KiB
Claude Live turn WebSocket decoded 56.4 KiB 56.4 KiB −44 B (−0.1%) 66.4 KiB
Claude Live turn messages 11 10 −1 (−9.1%) 21

Baseline: b0a0281 · PR result: ebe3ebf · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 109.4 KiB
  • Claude decoded thread snapshot: 110.1 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@macroscopeapp

macroscopeapp Bot commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — The PR changes release scheduling, concurrency, queueing, and job dependency behavior for workflows that publish production artifacts. The redundant web build removal is localized, but the release-orchestration changes have material operational impact and should receive human review.

You can add or adjust custom eligibility rules. Learn more.

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Aug 26, 2026
The default concurrency queue holds one pending run per group and
replaces it newest-wins, so a queued stable tag could be silently
canceled by a third release. queue: max preserves all pending runs in
FIFO order. Queued nightlies with no new commits still skip through
check_changes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@macroscopeapp
macroscopeapp Bot dismissed their stale review August 26, 2026 06:57

Dismissing prior approval to re-evaluate ebe3ebf

@t3dotgg

t3dotgg commented Aug 26, 2026

Copy link
Copy Markdown
Member Author

Note

🤖 Claude Fable 5 responding on behalf of Theo

Merging over this verdict. It asks for human review of the release-orchestration changes, and that review happened: Theo and a second reviewing agent audited the workflow changes, the reviewer flagged the pending-stable cancellation edge case, and ebe3ebf fixed it with queue: max per Theo's explicit call. Macroscope's own correctness check passes on this commit, and no reviewer found a defect. The remaining risk is runtime behavior GitHub only exercises on real triggers, which the next scheduled nightly will confirm.

@t3dotgg
t3dotgg merged commit a3a8cbd into main Aug 26, 2026
22 checks passed
@t3dotgg
t3dotgg deleted the t3code/optimize-release-ci-performance branch August 26, 2026 07:03
Dryec pushed a commit to hafencity-dev/t3code that referenced this pull request Aug 26, 2026
* perf(web): stop preview loading rerenders (pingdotgg#7561)

* fix(web): keep messages clear of composer banners (pingdotgg#7792)

* feat(web): double-click chat header title to rename thread (pingdotgg#7817)

* fix(web): model picker no longer shows a double border (pingdotgg#7772)

Co-authored-by: GPT-5.6 <noreply@openai.com>

* fix(web): give sidebar un-settle button a tooltip (pingdotgg#7796)

* fix(web): render oversized terminal graphemes without crashing (pingdotgg#7809)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* feat(web): cmd+enter to create thread in background (pingdotgg#7821)

* fix(web): launcher shortcuts no longer hijack the empty composer (pingdotgg#7794)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* feat(desktop): choose external project icons (pingdotgg#7823)

* perf(web): dedupe terminal mouse motion reports (pingdotgg#7845)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(search): oversized thread queries no longer crash clients (pingdotgg#6633)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(mobile): stop a directly-saved backend from hiding its T3 Connect environment (pingdotgg#7086)

* feat(analytics): threads and turns now know which client started them (pingdotgg#7774)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): stop marking mixed tool runs as failed (pingdotgg#7893)

* fix(web): command-click spaced folder links (pingdotgg#6439)

Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* fix(chat): stop pushing follow-up messages to the top (pingdotgg#7897)

* test(desktop): remove redundant release note assertion (pingdotgg#7873)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(web): handle wide ordered-list marker edge cases (pingdotgg#7856)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(ssh): restore user PATH for remote servers (pingdotgg#7213)

* fix(desktop): keep tailscale spawn defects from breaking advertised endpoints (pingdotgg#7116)

* fix(web): keep Codex service tier labels readable (pingdotgg#4503)

* fix: render workspace images in chat markdown (pingdotgg#6433)

* fix(clients): keep opening responses visible after turns settle (pingdotgg#7723)

* feat(web): add appearance contrast control (pingdotgg#7906)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(server): stop completed Codex threads from staying stuck on working (pingdotgg#7937)

* fix(mobile): preserve markdown image dimensions (pingdotgg#7940)

* fix(web): remove duplicate provider update progress (pingdotgg#7761)

* fix(server): fall back to the remote default branch instead of assuming main (pingdotgg#7078)

* fix(web): give sidebar project menu rows the same side padding as other menus (pingdotgg#7913)

* fix(clients): reconnect after credentials fail during remote server updates (pingdotgg#7953)

* feat(codex): submit thread feedback to OpenAI (pingdotgg#7949)

* fix(server): stop kills lingering Claude work (pingdotgg#5891)

* fix(ci): let Macroscope approve pull requests again (pingdotgg#7970)

* fix(clients): move settled pinned threads into the settled section (pingdotgg#7969)

* perf(ci): speed up release builds and Windows packaging (pingdotgg#7975)

* fix(web): stop tool calls from leaving a blank page in threads (pingdotgg#7971)

* fix(web): stop recovered tool failures from marking work logs red (pingdotgg#7999)

* fix(mobile): isolate markdown image requests (pingdotgg#7942)

* feat(web): redesign skills in `$` menu and in `/` menu (pingdotgg#8009)

* fix(web): restore right panel toggle clicks after closing on desktop (pingdotgg#8016)

* fix(web): keep server update banners flush with the composer (pingdotgg#8000)

* perf(web): reuse work log rows during streaming (pingdotgg#8006)

* fix(web): keep provider badge legible in dark themes (pingdotgg#7968)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(web): treat configured urls with uppercase schemes as secure (pingdotgg#8005)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(desktop): keep release notes visible while downloading (pingdotgg#6412)

* fix(web): show only providers with usage in usage views (pingdotgg#7563)

* fix(web): prevent expanded tool calls from hiding thread content (pingdotgg#8052)

* test(server): remove no-op live activity tests (pingdotgg#8056)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(web): clarify terminal sidebar grouping (pingdotgg#7967)

* fix(codex): show app access approval prompts (pingdotgg#8058)

* feat(web): upload image attachments before sending (pingdotgg#8048)

* fix(server): bound OpenCode skill discovery output (pingdotgg#7675)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(mobile): persist thread shelf collapse state (pingdotgg#5152)

* fix(mobile): restore Android tablet thread controls, clean up header (pingdotgg#5385)

* fix(mobile): land the first thread open above the composer on Android (pingdotgg#5585)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(server): check out submodules in a new worktree (pingdotgg#7674)

Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>

* fix(server): preserve merged PR badges after branch deletion (pingdotgg#6216)

* fix(server): return fresh live pull request reads (pingdotgg#6472)

* fix(web): compare client and server versions as semver, not strings (pingdotgg#7579)

* fix(web): stop follow-ups from leaving giant blank space (pingdotgg#8068)

* fix(marketing): stop automatic Vercel deployments on pull requests (pingdotgg#8070)

* chore: vouch repeat contributors (pingdotgg#8071)

* fix(server): keep the authoritative subagent model when snapshots race task_started (pingdotgg#7583)

* fix(server): honor auto-accept edits for the OpenCode provider (pingdotgg#7100)

* fix(server): run the CLI on Node versions without import.meta.main (pingdotgg#7141)

* fix(server): recover from provider interrupt failures (pingdotgg#7412)

* fix(server): recreate a thread's worktree before starting a turn (pingdotgg#7839)

* fix(server): thread delete no longer fails on already-removed worktrees (pingdotgg#8076)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): stop update notices showing through the composer (pingdotgg#8083)

* fix(web): detect outdated nightly servers (pingdotgg#8124)

* fix(web): align usage page skeleton layout (pingdotgg#8111)

* fix(web): make terminal links appear clickable only when clickable (pingdotgg#7488)

* fix(web): make Windows file links clickable in chat (pingdotgg#8081)

* fix(web): sort usage models by token count (pingdotgg#8108)

* fix: open agent file links in the file viewer (pingdotgg#8098)

* fix(server): stop routine events from rescanning thread history (pingdotgg#8150)

* fix(deps): stop pnpm installs from changing the lockfile (pingdotgg#8163)

* feat(web): settle and restore threads with a keyboard shortcut (pingdotgg#8089)

* perf(desktop): cut macOS signing calls by 81% (pingdotgg#8093)

* feat: link pull requests to threads (pingdotgg#8160)

* feat(web): safely attach HEIC photos as JPEG images (pingdotgg#8161)

Co-authored-by: mweinbach <maxweinbach5@gmail.com>

* feat(mobile): track device models and OS versions (pingdotgg#8169)

* fix(grok): bound cumulative tool output updates (pingdotgg#7279)

* fix(web): delay thread shortcut hints by 200 ms (pingdotgg#8172)

* fix(server): stop probing Cursor until enabled (pingdotgg#8175)

* docs(release): verify remote updates with database migrations (pingdotgg#8177)

* fix(server): keep provider CLIs available in the macOS service (pingdotgg#8173)

* feat(claude): compact old threads before they burn through usage (pingdotgg#8144)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(client-runtime): retry queries after connection interruption (pingdotgg#8117)

* fix(server): keep previously used providers working after upgrades (pingdotgg#8176)

* feat(desktop): build macOS previews from a PR label (pingdotgg#8182)

* fix(web): thread jump hints no longer stick after a dictation paste (pingdotgg#8189)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep grouped project renames (pingdotgg#7831)

* feat(web): reveal chat file chips in the system file manager (pingdotgg#7140)

Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* fix(server): push no longer writes a feature branch's commits to its base branch (pingdotgg#8228)

* chore(deps): bump @clerk/electron to 0.0.37 (pingdotgg#8240)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(server): fetch legacy model classification from a hosted manifest (pingdotgg#8227)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* chore(release): prepare v0.0.34

* fix(desktop): let Clerk UI receive stable auth fixes (pingdotgg#8248)

* fix(app): un-settled threads return to the top of the list (pingdotgg#8231)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(ci): cut about a minute from every release (pingdotgg#8250)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Rakshith Bhat <88523594+RakshithBhat03@users.noreply.github.com>
Co-authored-by: GPT-5.6 <noreply@openai.com>
Co-authored-by: Simone <lucenz@proton.me>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Rishet11 <154429365+Rishet11@users.noreply.github.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: abcdmku <63693423+abcdmku@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: Naveed Iqbal <naveediqbal949@gmail.com>
Co-authored-by: Ishaan Kothari <ishaanko.mail@gmail.com>
Co-authored-by: Tristan Knight <admin@snappeh.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Pavlo Trinko <paul.trinko95@gmail.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com>
Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>
Co-authored-by: Adamulek123 <adam.bogucki2018@gmail.com>
Co-authored-by: spiky02plateau <155588579+spiky02plateau@users.noreply.github.com>
Co-authored-by: Carlos Jimenez <cjimenez@r21digital.com>
Co-authored-by: Mark Griffin <mrmg@deflexion.net>
Co-authored-by: MacKinley Smith <smithmackinley@gmail.com>
Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com>
Co-authored-by: mweinbach <maxweinbach5@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Mohtasham Murshid <154406804+MohtashamMurshid@users.noreply.github.com>
Co-authored-by: Dara Adedeji <daraaded@amazon.com>
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 26, 2026
## What's Changed
* fix(app): un-settled threads return to the top of the list by @t3dotgg in pingdotgg/t3code#8231
* perf(ci): cut about a minute from every release by @t3dotgg in pingdotgg/t3code#8250


**Full Changelog**: pingdotgg/t3code@v0.0.35-nightly.20260826.1194...v0.0.35-nightly.20260826.1195

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.35-nightly.20260826.1195
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant