Skip to content

Transcript: a finished Claude turn folds per run, as Claude desktop does (Codex unchanged) - #30176

Merged
teamleaderleo merged 3 commits into
feat-cmux-nextfrom
opus/claude-turn-groups
Nov 1, 2026
Merged

teamleaderleo merged 3 commits into
feat-cmux-nextfrom
opus/claude-turn-groups

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

Leo, 2026-11-01: "do we have the claude style tool call/interim chatter collapse restored yet the 7:11 nightly didnt' seem to have that nor the expanding tool calls doesn't push chats up yet"

Then, on how: "separate it per harness/model family. claude gets claude behaviour, codex gets codex".

Why Claude lost it. Replaying a real Claude Code turn through the pane's client and turnView showed the calls folding under Worked for but every interim note left outside it. #29802 turned the interim fold off for Claude chats (preserveAssistantText). Leo wants #29802 kept for Codex, so this keeps it and gives Claude its own behaviour.

What changes, keyed on the session family App.tsx already passes (snapshot.summary?.family):

  • Codex / ChatGPT: unchanged. The whole turn's work and chatter fold under one Worked for, and the final answer stays below it.
  • Claude, as Claude desktop draws it: no Worked for. Each run of calls folds into its own summary line ("Ran 5 commands, read 2 files"), along with the short notes inside that run, edit runs included. The line opens on a click anywhere on it (the existing run disclosure). A longer message between runs stays in place, and the final answer stays last.
  • Both: a steer and the reply before it are never folded (Transcript: copy once per turn and keep pre-steer replies visible #29740), and for Claude that reply never joins a run. Interim text has no per-reply copy row (hasReplyActions is off app-wide; the footer copies the turn).

Tests

  • transcript-claude-turn-groups.test.ts replays one real Claude Code turn as acpmux recorded it (fixtures/claude-turn-groups.ndjson: 81 calls, 17 messages, every word and command replaced with neutral text of the same short or long kind). For Claude it checks: no Worked for, every run folded, no short note left between runs, the 3 long messages in place, the answer last. For Codex it checks that the same events still give one Worked for and the answer.
  • A steered turn for both families: for Claude, u, run(b1+note), r1, run(b3), s1, run(b4+note), answer, summary. For Codex, u, Worked for, r1, s1, answer, summary (today's output, pinned).
  • transcript-steer-continuous.test.tsx: the two Transcript: fold assistant prose only for Codex sessions #29802 Claude expectations move to the new behaviour, and the one-fold steer test runs as Codex.
  • Fleet run of the transcript and conversation suites at this tree: 1118 pass, 0 fail. tsc is clean apart from test/latency/probe.ts, which this PR doesn't touch. vp fmt and vp lint are clean.

Risk: transcript shaping only (turns.ts shapeTurn and mergeShortNotes), and every new branch is gated on the Claude family. No Swift, no persistence.

Agent session: agent session

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

A finished Claude chat turn now folds per run, as Claude desktop draws it, while Codex and ChatGPT keep today's behavior of folding the whole turn under one "Worked for".

Behavior

  • Claude turns no longer draw a "Worked for" card; each run of calls folds into its own summary line that opens on a click, with the short notes inside that run (edit runs included).
  • Longer messages stay in place between runs, and the final answer stays last.
  • Codex/ChatGPT turns are unchanged.
  • Both families keep a steer and its preceding reply in sight, and that reply never joins a run.

Tests

  • Adds transcript-claude-turn-groups.test.ts, which replays one real Claude Code turn (81 calls, 17 messages) and a steered turn for both families, checking the per-run fold for Claude and the single "Worked for" for Codex.
  • Updated the Claude expectations in transcript-steer-continuous.test.tsx to the new per-run behavior.
  • Updated browser tests to open a Claude turn's run line where they used to open "Worked for"; the history paging tests now use Codex-family chats to keep reading the "Worked for" label.

Written for commit 36b5517. Summary will update on new commits.

View guided diff Turn on auto-fix

Leo Li and others added 2 commits November 1, 2026 04:43
Leo (2026-11-01): "separate it per harness/model family. claude gets
claude behaviour, codex gets codex".

Codex and ChatGPT keep today's fold: the whole turn's work and chatter
under one Worked for, the answer below it. A Claude chat ends as Claude
desktop draws it: no Worked for; each run of calls, with the short notes
inside it (an edit run too), folds into its own summary line that opens on
a click, and a longer message between runs stays in place. Steers and the
reply before each stay in sight in both (#29740), and that reply never
joins a run. Keyed on the session family App.tsx passes since #29802.

transcript-claude-turn-groups.test.ts replays one real Claude Code turn as
acpmux recorded it (81 calls, 17 messages; words and commands replaced),
plus a steered turn, for both families.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-ccd47120b442de37f367
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-ccd47120b442de37f367
@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 36b5517: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr30176 -f ref=opus/claude-turn-groups -f platform=macos -f backend_mode=local

Gallery before/after for 36b5517: 16 states rendered, 0 images differ, 2729 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 41286329808 -R manaflow-ai/cmux -n gallery-advisory-30176-36b5517256be4838fa69b60faa3fd1ae3d18b6aa (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.chat-width/standard Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/standard Apple System Colors unchanged 0% own App.tsx
agent-pane.chat-width/wide Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/wide Apple System Colors unchanged 0% own App.tsx
agent-pane.chat-width/wide-blocks Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/wide-blocks Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-edge/short-edge Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-edge/short-edge Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-edge/wide-edge Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-edge/wide-edge Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-edge/no-edge Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-edge/no-edge Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-floats/scrolled-to-end Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-floats/scrolled-to-end Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-floats/composer-grown Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-floats/composer-grown Apple System Colors unchanged 0% own App.tsx
agent-pane.continuation-spacing/shipped Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/shipped Apple System Colors unchanged 0% own App.tsx
agent-pane.continuation-spacing/two-thirds Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/two-thirds Apple System Colors unchanged 0% own App.tsx
agent-pane.continuation-spacing/half-tucked Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/half-tucked Apple System Colors unchanged 0% own App.tsx
agent-pane.continuation-spacing/before Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/before Apple System Colors unchanged 0% own App.tsx
agent-pane.copy-controls/output Apple System Colors Light unchanged 0% own App.tsx
agent-pane.copy-controls/output Apple System Colors unchanged 0% own App.tsx
agent-pane.docked-chat/new-chat Apple System Colors Light unchanged 0% own App.tsx
agent-pane.docked-chat/new-chat Apple System Colors unchanged 0% own App.tsx
agent-pane.docked-chat/after-turn Apple System Colors Light unchanged 0% own App.tsx
agent-pane.docked-chat/after-turn Apple System Colors unchanged 0% own App.tsx
agent-pane.docked-chat/working Apple System Colors Light unchanged 0% own App.tsx
agent-pane.docked-chat/working Apple System Colors unchanged 0% own App.tsx

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW: red check: Daemon capabilities export is fresh (+4 more) is not red on the base 08c0011; do not merge until green; see lane-rules

Shipped in:

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at a4692e7

Codex/ChatGPT output unchanged (every new branch is gated on the Claude family; mergeShortNotes keeps its defaults). Claude: no duplicate ids from edit runs, render cards and permission rows drawn as in today's opened fold, cache keyed on family, Find/toggle harmless without a Worked-for row. Fixture holds only neutral text. 183ff65..a4692e7 is formatting only.

Follow-ups:

  • [follow-up] A Claude turn's footer now says its time (folded=false); check it reads right beside Claude desktop's look.
  • [follow-up] Add a two-steer Claude case for the pre-steer keep across several steers.
  • [follow-up] Skip building the unused Worked-for row object for Claude.
  • [follow-up] Note in design/transcript.md that Claude ignores the codexToolRuns debug toggle.

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 1, 2026

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 5 files

View guided diff | Turn on auto-fix | Re-trigger cubic

@blacksmith-sh

blacksmith-sh Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Found 4 test failures on Blacksmith runners:

Failures

Test View Logs
main.DeveloperIdAppTests.test_download_prints_the_active_profile_only/
test_download_prints_the_active_profile_only
View Logs
stubs: /System/Library/Frameworks/Security.framework/Versions/A/Security has no stub/
Security has no stub
View Logs
stubs: CoreFoundation.tbd: install-name /System/Library/Frameworks/
CoreFoundation.framework/Versions/A/CoreFoundation, missing 1: ['_CFRetain']/
CoreFoundation, missing 1: ['_CFRetain']
View Logs
stubs: CoreFoundation.tbd: install-name /System/Library/Frameworks/
CoreFoundation.framework/Versions/A/CoreFoundation, missing 1: ['_log2']/
CoreFoundation, missing 1: ['_log2']
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

A finished Claude turn has no Worked for (turns.ts claudeGroups), so the
browser tests that opened it to reach its calls or a subagent's done line
read them where a Claude chat draws them: the run's own line, or in sight.
The spacing test measures the first run line under the prompt. The history
paging tests read Worked for's label and its folded compaction, the Codex
family's fold, so their chats say family codex.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-ccd47120b442de37f367
@cursor

cursor Bot commented Nov 1, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at 36b5517

a4692e7..36b5517 is test-only: the browser tests that opened a Claude turn's Worked for now open its run line or read the line in sight (subagent done, spacing); history paging asserts Codex's fold, so its chats say family codex. Each keeps its intent.

Follow-ups:

  • [follow-up] Claude-family variant of the history-paging test (compactions in sight between runs).
  • [follow-up] Decide whether compaction and subagent-done lines in a finished Claude turn join the run beside them; update turns.ts's 2026-10-21 fold comment and design/ spec.
  • [follow-up] Claude footer now shows its Worked for time; check beside Claude desktop.
  • [follow-up] Two-steer Claude test; skip building the unused Worked-for row for Claude; note in the spec that Claude ignores codexToolRuns.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 4 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="webviews/test/agent-pane-transcript-spacing.test.ts">

<violation number="1" location="webviews/test/agent-pane-transcript-spacing.test.ts:196">
P2: This selector also accepts an individual tool row, so the test can pass when Claude renders calls directly instead of a run summary. Select the run-summary shape explicitly so this regression remains covered.</violation>
</file>

Reply with feedback, questions, or to request a fix.

View guided diff | Turn on auto-fix | Re-trigger cubic

const firstContent = afterFirst.querySelector(".cv-md, .cv-worked") ?? afterFirst;
const worked = rowAfter(userRow("Ship it when green.")).querySelector(".cv-worked");
// A Claude turn's first run line, where a Codex turn draws Worked for (turns.ts claudeGroups).
const worked = rowAfter(userRow("Ship it when green.")).querySelector(".cv-worked, .cv-tool");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: This selector also accepts an individual tool row, so the test can pass when Claude renders calls directly instead of a run summary. Select the run-summary shape explicitly so this regression remains covered.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/test/agent-pane-transcript-spacing.test.ts, line 196:

<comment>This selector also accepts an individual tool row, so the test can pass when Claude renders calls directly instead of a run summary. Select the run-summary shape explicitly so this regression remains covered.</comment>

<file context>
@@ -192,7 +192,8 @@ await requireBrowserLane("agent-pane-transcript-spacing.test.ts", async () => {
       const firstContent = afterFirst.querySelector(".cv-md, .cv-worked") ?? afterFirst;
-      const worked = rowAfter(userRow("Ship it when green.")).querySelector(".cv-worked");
+      // A Claude turn's first run line, where a Codex turn draws Worked for (turns.ts claudeGroups).
+      const worked = rowAfter(userRow("Ship it when green.")).querySelector(".cv-worked, .cv-tool");
       // Turn footers only: a reply's own row (cv-reply-actions) reuses their look.
       const footers = [...document.querySelectorAll<HTMLElement>(".cv-turn-actions:not(.cv-reply-actions)")];
</file context>
Suggested change
const worked = rowAfter(userRow("Ship it when green.")).querySelector(".cv-worked, .cv-tool");
const worked = rowAfter(userRow("Ship it when green.")).querySelector(".cv-worked, .cv-tool[aria-expanded]:not([data-tool-id])");

@teamleaderleo
teamleaderleo merged commit e9f2496 into feat-cmux-next Nov 1, 2026
149 of 158 checks passed
@teamleaderleo
teamleaderleo deleted the opus/claude-turn-groups branch November 1, 2026 09:13
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
…ays) (#30265)

* gallery health: gate layout shift on load and every play step (element boxes per frame)

WIP: baseline seeded in a following commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* gallery: shift scenarios play Codex folds and the debug load_seed history; document the shift gate

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* gallery health: check the design specs' geometry rules from the DOM of every state

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* gallery: real-shaped recorded Claude and Codex chats (anonymized replays)

Leo, 2026-11-01: "how about like the apparatuses for improving ui verification? let's examine what we can do better for our workflows".

anonymize-recording.ts turns an acpmux session recording into a fixture with
none of its words (same lengths, line breaks and punctuation; fake ids, fixed
epoch). agent-pane.recorded-chats replays the #30176 Claude turn and a real
Codex turn steered by agent inbox messages through the pane's own client, so
gallery health's shift and geometry checks see real-shaped chats.

Tests: bun test test/gallery-anonymize-recording.test.ts (2 pass).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* gallery-matrix: write shift rows from the worst seeding run

A state that shifts in some runs got a 0 row when rows were written from the
least run, and would then fail unrelated PRs on its flaky runs. Review
follow-ups 2 and 3 on #30250.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* gallery: older-history waits on a boolean (typecheck)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* gallery-matrix: seed shift-baseline.json from two gallery-health runs

Rows from the worst of #30250's two full gallery-health runs (0ac1691 and
a17daa5): 2763 states, 561 with a non-zero row. A state at 0 now fails on
any shift; the rest fail past their row by a quarter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* gallery: a wait step never fails a play; gallery health scores its shift

The webview suite found that measuring waitFor as a step made existing plays fail
on what they wait for: the header PR button arriving (header-tools), the mention
list opening (composer-mention), the composer controls settling
(narrow-layouts). A wait now goes unjudged in judgeStep, for shift, anchor moves,
long frames and settle. Its shift is still measured and scored against the
state's row in gallery health's shift baseline.

Test: bun test test/gallery-shift.test.ts. The new case fails on the previous
head and passes here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* gallery: say a wait step still gets the popup-layer check

Review follow-up on #30250.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* gallery: smooth zero-row shift limit, copy-proof violation keys, listboxes only in popups

Three review follow-ups on #30256, fixed before the geometry baseline is seeded so
its keys do not bake them in:
- Every shift row's limit now adds LIMIT_SLACK (0.0005), a 0 row's included. A 0
  row was ten times stricter than a tiny row, at the level where frame timing
  alone scores.
- Violation keys use the row id, data-id, data-value, value or aria-label before
  an element's text, so a copy-only PR does not rename a listed violation. Plain
  generated ids are never used.
- A listbox counts as a menu only inside a popover or dialog, so pane-wide list
  panels do not trip menu-fit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* gallery-matrix: reseed shift rows from three runs, seed geometry rows

Shift rows are rebuilt from the worst of three full gallery-health runs: the two
on #30250 and this PR's run at 92c5bb5 on base 593b25f. That gives 2843
states, 608 of them non-zero. Base moved after the first seed, and one flaky
state, model-picker#quick-search-field-opencode (0.0024 to 0.0081 across renders),
came out as this PR's own red. Geometry rows come from that run: 2841 states, 345
with listed violations.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* Gallery geometry baseline: add the violations base gained since the seed run

Base 762fda7 (after #30652 and #30194) adds center-line violations to the folded-run,
queued-from-agent, hover-fade and incoming-message states; the base replay cannot excuse them
until base has the checker, so they join the baseline rows from gallery-health run 41322226213.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* Shift baseline: motion.sync-list#inserts-from-second-client row 0.0059

The insert from a second client animates the list rows into place; three seed runs scored 0, gallery-health
run 41327725064 scored 0.0059 on the Replay click. A real insert moves rows, so its row is that run's score.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* Gallery baselines: seed shift rows from the worst of five full runs

Full renders (this PR changes scripts/gallery-matrix) kept turning up states that shift in some runs and in
every attempt of that run (guest-page.waiting#decided, artifact-panel#svg, settings-menus#customized), so
three seed runs were not enough. Shift rows are rebuilt from scratch as the worst score of the three seed runs
plus gallery-health runs 41322226213 and 41335560293; geometry rows gain the 3 keys the last run saw.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

* anonymize-recording: keep each event's kind in its typed output

The scrubbed rest is typed through Omit of an index-signature type, which drops the required kind, so the
merge with base failed the webviews type check (TS2741). The kind is a protocol word the scrubber keeps;
set it from the event.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Nov 2, 2026
… Worked for over one stretch (#31825)

* Transcript: a Codex turn header reads N previous messages over a mix

Codex folds a turn with the agent messages between its work under
N previous messages, and one stretch of work under Worked for.
Claude turns keep their per-run folding (#30176).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e9d08b9237cbd1067052

* Transcript: codexHeader test labels type-clean

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e9d08b9237cbd1067052

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 36b55172 Deployed Nov 1, 2026 by teamleaderleo via cmux-tui tree preflight #94743
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant