Skip to content

test(server): the fake Claude CLI exits with its parent - #14926

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
TrogonStack:yordis/fix-claude-probe-test-orphan
Oct 3, 2026
Merged

juliusmarminge merged 1 commit into
pingdotgg:mainfrom
TrogonStack:yordis/fix-claude-probe-test-orphan

Conversation

@yordis

@yordis yordis commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

Problem

Every run of ClaudeCapabilitiesProbe.test.ts leaves an orphaned node .../fake-claude.mjs process behind. The probe aborts the SDK without awaiting its child, and the fake CLI keeps itself alive with an unconditional setInterval, so it is reparented to PID 1 and runs until reboot. On a machine that runs the suite often, these pile up.

Change

The fake CLI still stays alive for follow-up control requests, but exits once its stdin closes, which happens when the parent goes away.

Scope and approval

A test-only fix for an obvious bug. No product code changes.

Verification

  • vp test run apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts: 3 passed.
  • Without the change, all tests still pass and ps -axo pid,ppid,command | grep fake-claude shows a leftover process with parent PID 1 after the run. With the change, none remain.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Oct 2, 2026
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 2, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 54bcf16

Macroscope's review found this PR approvable — The single ignored test-harness change makes the fake Claude CLI terminate when its parent closes stdin, preventing orphaned processes without affecting product runtime behavior or defaults.

Notes:

  • Diff unchanged. Approvability was decided on eligibility alone.

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

@juliusmarminge juliusmarminge added the macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews label Oct 2, 2026 — with ChatGPT Codex Connector
@macroscopeapp
macroscopeapp Bot dismissed their stale review October 2, 2026 23:28

Dismissing prior approval to re-evaluate 54bcf16

@coderabbitai

coderabbitai Bot commented Oct 2, 2026

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

🧰 Additional context used
📚 Code guidelines (1)
docs/internals/effect-services.md — configured

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: pingdotgg/t3code/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: fd825268-5482-42d9-8621-312c8f6354a4
📥 Commits

Reviewing files that changed from the base of the PR and between fd7ee2c and 54bcf16.

📒 Files selected for processing (1)
  • apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review.


📝 Walkthrough

Walkthrough

The fake Claude SDK process keeps its stdin handler active for follow-up control requests. It clears its keep-alive timer and exits when stdin closes.

Changes

Claude probe test

Layer / File(s) Summary
Fake SDK process lifetime
apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts
The fake SDK process uses a named keep-alive timer. It clears the timer when stdin closes, allowing the process to exit.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~3 minutes

Change: Bug fix

Suggested reviewers: juliusmarminge

Merge Risk: ⚪ Minimal · up to 54bcf

The test fake can handle follow-up requests and exit when stdin closes. No actionable merge-blocking risk is established.

Architecture Summary

Architecture risk: 🔵 Low · up to 54bcf

The change affects 1 system.

Changed systems: apps/server

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — apps/server (service) was modified; 1 changed file maps to changed impact.

Before / after behavior

  • observed — Modified behavior in apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts: The fake SDK process replaces an unconditional interval with a named keep-alive timer that remains active for control requests and is cleared on stdin close, when the process exits.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the test-only change: the fake Claude CLI exits with its parent. It follows the repository's conventional commit format.
Description check ✅ Passed The description covers the problem, the change, scope justification, and focused verification results. It explains the orphaned process and confirms that the updated test leaves no process behind.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR

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

@juliusmarminge
juliusmarminge merged commit 6414268 into pingdotgg:main Oct 3, 2026
32 checks passed
github-actions Bot added a commit to davidvanderklay/t3code-flake that referenced this pull request Oct 3, 2026
## T3 Code Orchestrator V2

This nightly is the first build of T3 Code Orchestrator V2. V2 rebuilds the part of T3 Code that runs your agents: how turns start, stop, queue, and resume; how subagents and background work are tracked; how threads move between providers; and how history is saved. **Read "Before you update" if you use the mobile app or OpenCode.**

### The short version
- **Pi** and **OpenCode 2** support
- **`delegate_task`**: an agent can start child agents on any provider or model and wait for their results. This is the way to use several harnesses together.
- **Fork any thread**
- **Switch provider or model mid-thread**, with caveats (see below)
- **The T3 Code MCP**: agents can create, launch, message, wait on, read, search, and interrupt threads
- **ACP Registry**: add any registry agent (Devin, Cline, Kimi, Droid, and more)
- **Cursor** runs on the official Cursor SDK instead of the CLI
- **A real server-side queue**: queued messages survive restarts, and you can steer or queue each message
- **Subagents you can follow**: every child shows up with its model, status, and results
- **Interrupted threads continue after a restart**
- **Auto-resume when usage limits reset**
- **Scheduled tasks**

### Highlights

**Agents that manage agents**
- `delegate_task` lets an agent hand work to a child agent on any provider and model, with its own options and role. Each child runs as its own thread, keeps its own provider-native history, and reports a result. The parent can wait for children or keep working, and it wakes up when they finish, with results batched together. **This is the recommended way to combine harnesses**, for example Claude planning and Codex implementing.
- The **T3 Code MCP** gives agents tools to create, launch, message, wait on, read, search, and interrupt threads. They can also:
  - fork and merge back;
  - edit and reorder queues;
  - answer questions;
  - rename threads, regenerate titles, link pull requests, and settle threads;
  - manage scheduled tasks and projects;
  - hand work off to a worktree;
  - list and close previews.

  Agents can't approve their own permission requests.
- Attach another thread as context: type `@` and the thread's name, or drag a thread from the sidebar into the composer.

**Fork any thread**
- Fork from any finished run, including failed, interrupted, and limited ones. Forks stay on the same provider by default and use the provider's native fork where it has one (Codex, Claude, Pi, OpenCode 2), so the full history comes along. When you're done, merge the fork's context back into its source.

**Switching providers mid-thread**
- You can change provider, account, model, or options between turns, and queue a switch without stopping the current turn. Per-provider and per-model options are remembered.

> [!WARNING]
> **Switching providers is supported, but it isn't the recommended way to use multiple harnesses.** The handoff is lossy. The new provider gets a budgeted selection of the conversation's messages, but not the previous provider's reasoning, its tool calls and results, or attachments. The agent can look up omitted messages, but the working state the first provider built up doesn't carry over. To get another harness's help, have the agent use `delegate_task` instead. Changing model or options *within* the same provider usually continues the provider's own session, so nothing is lost.

**Subagents and background work you can see**
- Native subagents from Claude, Codex, OpenCode 2, Cursor, and Pi show as child threads in a lineage view, with their model, status, progress, results, and duration. Several subagents fold into one collapsible card, and the mobile app has an agents sheet.
- When background work finishes, the agent wakes up and says which subagent, command, or monitor finished.
- **Stop works on background work too**, including after the foreground turn has finished.
- After a restart, T3 Code tells the agent which background work died, and threads that lost background work can continue.

**More providers, and deeper support**
- **Pi**, including Pi 1.0: native resume, fork, rollback, and steering; skills, extensions, and extension dialogs; T3 Code tools inside Pi; and permission modes Pi enforces itself.
- **OpenCode 2** (2.0.18+):
  - native steering, forks, rollback, compaction, and plan mode;
  - child sessions as subagent threads;
  - T3 Code tools injected into the server;
  - recovery after restarts.

  T3 Code detects whether you run 1.x or 2.x. OpenCode 1.x keeps the support it had in V1, plus forking.
- **ACP Registry**: search the official registry and install an agent on the server you choose, with shared sign-in across your devices.
- **Cursor** on the official SDK: browser sign-in, model discovery, project skills and rules, images, plans, and resuming local agents.
- Many fixes for **Claude**, **Codex**, **Grok**, and **Antigravity**. Questions, plans, and todos work again, along with compaction and resume. Subagent output stays in the right thread, and approvals route correctly.

**A queue you can trust**
- The queue lives on the server and keeps its order across restarts. After a restart it waits for you to resume it. It also survives usage limits.
- Edit, reorder, remove, and steer queued messages, including their attachments. This works on mobile too.
- Choose whether a follow-up message steers the running turn or queues: **Settings → General → Follow-up behavior**. `Cmd/Ctrl+Enter` does the opposite of your default.

**Limits and recovery**
- Threads stopped by a usage limit show as **Limited**. Resume manually, **resume at reset**, or **snooze until reset**.
- With **Settings → General → Continue threads after restarts** on, interrupted threads continue after an update, crash, or reboot.
- A live context meter, plus usage that stays correct through compaction and session changes.

**Scheduled tasks**
- Create, edit, pause, resume, run, and delete automations on web and mobile, filtered by project and environment. Fixed schedules use the server's time zone.

**Thread details and the sidebar**
- Workspace, Git, scripts, linked pull requests, automations, and lineage now live in a thread-details panel. Merge controls follow the current checks.
- Sidebar status reflects what's actually running: working, waiting, limited, or failed. Settling is handled by the server and accounts for linked PRs, pins, and background work.
- **Working section (beta)**: busy threads stay out of the way until they need you.
- Configurable worktree branch names, per project if you like.

**Faster and lighter**
- Long conversations load in pages.
- Streaming updates are batched, and the app re-renders less.
- Memory use is lower, and mobile scrolls more smoothly.

### Before you update

- **Your threads come with you, but it's a one-way copy.** The first time V2 starts, it copies your existing database and imports your threads. V1 keeps its own copy, and changes made in one version don't show up in the other. See "Moving from V1 to V2" in the pinned issue.
- **The mobile app must be updated too.** V2 servers only accept V2 clients, and the current App Store and Play Store releases are V1. Join the beta for a compatible app:
  - **Android:**
    1. Join https://groups.google.com/g/t3-code-v2-beta.
    2. With the same Google account, open https://play.google.com/apps/testing/com.t3tools.t3code.
  - **iOS:** TestFlight. https://testflight.apple.com/join/XgaxaRtd
- **OpenCode users:** V2 is built for OpenCode 2.0.18 and newer, and 1.x keeps limited support. "Limited support" means OpenCode 1.x works in V2 much as it did in V1 (steering, rollback, subagents, approvals, plan mode, compaction, T3 Code tools), and gains forking. The one thing it loses is that an approval or question still waiting when T3 Code restarts is not shown again; answer or stop it before updating. New OpenCode features go to OpenCode 2 only. OpenCode 2 is a separate package (`@opencode/cli`), and it converts OpenCode's shared database the first time it runs. Don't run 1.x and 2.x side by side on one machine.
- **Minimum provider versions:** Codex 0.159+, Claude Code 2.1.280+, Grok 1.0.13+, OpenCode 2.0.18+, Pi 0.80.5+ (1.0 recommended). **Settings → Providers** tells you if a version is too old.

Read this issue for more info: pingdotgg/t3code#14871

### Changed or removed
- The desktop app uses a new browser profile, so you may need to sign in again to websites opened inside the app.
- The separate agents panel is gone. Subagents appear in the lineage view and inline in the thread.
- Workspace, Git, and script controls moved into thread details.
- The token-by-token streaming setting is gone.
- Grok no longer offers Auto-accept edits. Those threads run in Supervised mode.
- Antigravity receives images directly. Other attachments are passed as file paths.
- Subagent threads are read-only. Message the parent thread instead.

We'll be polishing this over the next few days, so expect frequent updates. Please report anything that feels off.


## What's Changed
* fix(mobile): opening a thread no longer crashes Android release builds by @bompus in pingdotgg/t3code#14850
* fix(server): stop a second server from resending Claude turns by @cestercian in pingdotgg/t3code#13295
* docs(triage): leave protected PRs open by @juliusmarminge in pingdotgg/t3code#14852
* feat(orchestrator): introduce new orchestrator by @juliusmarminge in pingdotgg/t3code#2829
* fix(server): Claude MCP tools show their names and icons by @scratchyone in pingdotgg/t3code#14860
* fix(server): released builds keep the OpenCode policy for their own version by @juliusmarminge in pingdotgg/t3code#14863
* fix(server): idle shells stop reloading every project once a minute by @SunkenInTime in pingdotgg/t3code#14893
* fix(server): Claude model changes no longer kill running background agents by @juliusmarminge in pingdotgg/t3code#14726
* fix(server): API-key Codex installs no longer warn on every start by @yordis in pingdotgg/t3code#14903
* fix(server): steers keep the newest next-turn selection by @juliusmarminge in pingdotgg/t3code#14725
* fix(settings): Pi and ACP Registry no longer show an Early Access badge by @juliusmarminge in pingdotgg/t3code#14915
* fix(server): Codex auth tokens are an omitted key, never undefined by @yordis in pingdotgg/t3code#14908
* chore(lint): forbid declaring tests inside for loops by @juliusmarminge in pingdotgg/t3code#14921
* fix(desktop): markdown no longer loads invisible in new dark-mode browser tabs by @shivamhwp in pingdotgg/t3code#14727
* test(server): the fake Claude CLI exits with its parent by @yordis in pingdotgg/t3code#14926
* fix(mobile): production OTAs no longer reach the previous major's store binaries by @juliusmarminge in pingdotgg/t3code#14944


**Full Changelog**: pingdotgg/t3code@v0.0.45-nightly.20261002.2595...v0.0.46-nightly.20261003.2610

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261003.2610
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 3, 2026
## T3 Code Orchestrator V2

This nightly is the first build of T3 Code Orchestrator V2. V2 rebuilds the part of T3 Code that runs your agents: how turns start, stop, queue, and resume; how subagents and background work are tracked; how threads move between providers; and how history is saved. **Read "Before you update" if you use the mobile app or OpenCode.**

### The short version
- **Pi** and **OpenCode 2** support
- **`delegate_task`**: an agent can start child agents on any provider or model and wait for their results. This is the way to use several harnesses together.
- **Fork any thread**
- **Switch provider or model mid-thread**, with caveats (see below)
- **The T3 Code MCP**: agents can create, launch, message, wait on, read, search, and interrupt threads
- **ACP Registry**: add any registry agent (Devin, Cline, Kimi, Droid, and more)
- **Cursor** runs on the official Cursor SDK instead of the CLI
- **A real server-side queue**: queued messages survive restarts, and you can steer or queue each message
- **Subagents you can follow**: every child shows up with its model, status, and results
- **Interrupted threads continue after a restart**
- **Auto-resume when usage limits reset**
- **Scheduled tasks**

### Highlights

**Agents that manage agents**
- `delegate_task` lets an agent hand work to a child agent on any provider and model, with its own options and role. Each child runs as its own thread, keeps its own provider-native history, and reports a result. The parent can wait for children or keep working, and it wakes up when they finish, with results batched together. **This is the recommended way to combine harnesses**, for example Claude planning and Codex implementing.
- The **T3 Code MCP** gives agents tools to create, launch, message, wait on, read, search, and interrupt threads. They can also:
  - fork and merge back;
  - edit and reorder queues;
  - answer questions;
  - rename threads, regenerate titles, link pull requests, and settle threads;
  - manage scheduled tasks and projects;
  - hand work off to a worktree;
  - list and close previews.

  Agents can't approve their own permission requests.
- Attach another thread as context: type `@` and the thread's name, or drag a thread from the sidebar into the composer.

**Fork any thread**
- Fork from any finished run, including failed, interrupted, and limited ones. Forks stay on the same provider by default and use the provider's native fork where it has one (Codex, Claude, Pi, OpenCode 2), so the full history comes along. When you're done, merge the fork's context back into its source.

**Switching providers mid-thread**
- You can change provider, account, model, or options between turns, and queue a switch without stopping the current turn. Per-provider and per-model options are remembered.

> [!WARNING]
> **Switching providers is supported, but it isn't the recommended way to use multiple harnesses.** The handoff is lossy. The new provider gets a budgeted selection of the conversation's messages, but not the previous provider's reasoning, its tool calls and results, or attachments. The agent can look up omitted messages, but the working state the first provider built up doesn't carry over. To get another harness's help, have the agent use `delegate_task` instead. Changing model or options *within* the same provider usually continues the provider's own session, so nothing is lost.

**Subagents and background work you can see**
- Native subagents from Claude, Codex, OpenCode 2, Cursor, and Pi show as child threads in a lineage view, with their model, status, progress, results, and duration. Several subagents fold into one collapsible card, and the mobile app has an agents sheet.
- When background work finishes, the agent wakes up and says which subagent, command, or monitor finished.
- **Stop works on background work too**, including after the foreground turn has finished.
- After a restart, T3 Code tells the agent which background work died, and threads that lost background work can continue.

**More providers, and deeper support**
- **Pi**, including Pi 1.0: native resume, fork, rollback, and steering; skills, extensions, and extension dialogs; T3 Code tools inside Pi; and permission modes Pi enforces itself.
- **OpenCode 2** (2.0.18+):
  - native steering, forks, rollback, compaction, and plan mode;
  - child sessions as subagent threads;
  - T3 Code tools injected into the server;
  - recovery after restarts.

  T3 Code detects whether you run 1.x or 2.x. OpenCode 1.x keeps the support it had in V1, plus forking.
- **ACP Registry**: search the official registry and install an agent on the server you choose, with shared sign-in across your devices.
- **Cursor** on the official SDK: browser sign-in, model discovery, project skills and rules, images, plans, and resuming local agents.
- Many fixes for **Claude**, **Codex**, **Grok**, and **Antigravity**. Questions, plans, and todos work again, along with compaction and resume. Subagent output stays in the right thread, and approvals route correctly.

**A queue you can trust**
- The queue lives on the server and keeps its order across restarts. After a restart it waits for you to resume it. It also survives usage limits.
- Edit, reorder, remove, and steer queued messages, including their attachments. This works on mobile too.
- Choose whether a follow-up message steers the running turn or queues: **Settings → General → Follow-up behavior**. `Cmd/Ctrl+Enter` does the opposite of your default.

**Limits and recovery**
- Threads stopped by a usage limit show as **Limited**. Resume manually, **resume at reset**, or **snooze until reset**.
- With **Settings → General → Continue threads after restarts** on, interrupted threads continue after an update, crash, or reboot.
- A live context meter, plus usage that stays correct through compaction and session changes.

**Scheduled tasks**
- Create, edit, pause, resume, run, and delete automations on web and mobile, filtered by project and environment. Fixed schedules use the server's time zone.

**Thread details and the sidebar**
- Workspace, Git, scripts, linked pull requests, automations, and lineage now live in a thread-details panel. Merge controls follow the current checks.
- Sidebar status reflects what's actually running: working, waiting, limited, or failed. Settling is handled by the server and accounts for linked PRs, pins, and background work.
- **Working section (beta)**: busy threads stay out of the way until they need you.
- Configurable worktree branch names, per project if you like.

**Faster and lighter**
- Long conversations load in pages.
- Streaming updates are batched, and the app re-renders less.
- Memory use is lower, and mobile scrolls more smoothly.

### Before you update

- **Your threads come with you, but it's a one-way copy.** The first time V2 starts, it copies your existing database and imports your threads. V1 keeps its own copy, and changes made in one version don't show up in the other. See "Moving from V1 to V2" in the pinned issue.
- **The mobile app must be updated too.** V2 servers only accept V2 clients, and the current App Store and Play Store releases are V1. Join the beta for a compatible app:
  - **Android:**
    1. Join https://groups.google.com/g/t3-code-v2-beta.
    2. With the same Google account, open https://play.google.com/apps/testing/com.t3tools.t3code.
  - **iOS:** TestFlight. https://testflight.apple.com/join/XgaxaRtd
- **OpenCode users:** V2 is built for OpenCode 2.0.18 and newer, and 1.x keeps limited support. "Limited support" means OpenCode 1.x works in V2 much as it did in V1 (steering, rollback, subagents, approvals, plan mode, compaction, T3 Code tools), and gains forking. The one thing it loses is that an approval or question still waiting when T3 Code restarts is not shown again; answer or stop it before updating. New OpenCode features go to OpenCode 2 only. OpenCode 2 is a separate package (`@opencode/cli`), and it converts OpenCode's shared database the first time it runs. Don't run 1.x and 2.x side by side on one machine.
- **Minimum provider versions:** Codex 0.159+, Claude Code 2.1.280+, Grok 1.0.13+, OpenCode 2.0.18+, Pi 0.80.5+ (1.0 recommended). **Settings → Providers** tells you if a version is too old.

Read this issue for more info: pingdotgg/t3code#14871

### Changed or removed
- The desktop app uses a new browser profile, so you may need to sign in again to websites opened inside the app.
- The separate agents panel is gone. Subagents appear in the lineage view and inline in the thread.
- Workspace, Git, and script controls moved into thread details.
- The token-by-token streaming setting is gone.
- Grok no longer offers Auto-accept edits. Those threads run in Supervised mode.
- Antigravity receives images directly. Other attachments are passed as file paths.
- Subagent threads are read-only. Message the parent thread instead.

We'll be polishing this over the next few days, so expect frequent updates. Please report anything that feels off.


## What's Changed
* fix(mobile): opening a thread no longer crashes Android release builds by @bompus in pingdotgg/t3code#14850
* fix(server): stop a second server from resending Claude turns by @cestercian in pingdotgg/t3code#13295
* docs(triage): leave protected PRs open by @juliusmarminge in pingdotgg/t3code#14852
* feat(orchestrator): introduce new orchestrator by @juliusmarminge in pingdotgg/t3code#2829
* fix(server): Claude MCP tools show their names and icons by @scratchyone in pingdotgg/t3code#14860
* fix(server): released builds keep the OpenCode policy for their own version by @juliusmarminge in pingdotgg/t3code#14863
* fix(server): idle shells stop reloading every project once a minute by @SunkenInTime in pingdotgg/t3code#14893
* fix(server): Claude model changes no longer kill running background agents by @juliusmarminge in pingdotgg/t3code#14726
* fix(server): API-key Codex installs no longer warn on every start by @yordis in pingdotgg/t3code#14903
* fix(server): steers keep the newest next-turn selection by @juliusmarminge in pingdotgg/t3code#14725
* fix(settings): Pi and ACP Registry no longer show an Early Access badge by @juliusmarminge in pingdotgg/t3code#14915
* fix(server): Codex auth tokens are an omitted key, never undefined by @yordis in pingdotgg/t3code#14908
* chore(lint): forbid declaring tests inside for loops by @juliusmarminge in pingdotgg/t3code#14921
* fix(desktop): markdown no longer loads invisible in new dark-mode browser tabs by @shivamhwp in pingdotgg/t3code#14727
* test(server): the fake Claude CLI exits with its parent by @yordis in pingdotgg/t3code#14926
* fix(mobile): production OTAs no longer reach the previous major's store binaries by @juliusmarminge in pingdotgg/t3code#14944


**Full Changelog**: pingdotgg/t3code@v0.0.45-nightly.20261002.2595...v0.0.46-nightly.20261003.2610

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

Labels

macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews size:XS 0-9 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.

2 participants