Skip to content

feat(agent-pane): fold lane reports and inbox notices - #28749

Merged
teamleaderleo merged 1 commit into
feat-cmux-nextfrom
lane/orch-lane-report-ui
Oct 31, 2026
Merged

teamleaderleo merged 1 commit into
feat-cmux-nextfrom
lane/orch-lane-report-ui

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 31, 2026 •

Copy link
Copy Markdown
Collaborator

Consecutive lane reports and inbox notices now fold into one count row. Reports show the verdict first; opening a report preserves the full P1/P2 findings, with session IDs, commits and protocol footer under Details. Single messages keep their own row, sender links, message actions and Find behavior.

Leo, 2026-10-31:

“are these useful or are there ways we can improve it”
“build all”

Risk: normal. This changes transcript presentation only. Existing queued-message grouping (#28113), message disclosures (#27312), and Copy (#28057) are retained. Design contract: design/chat-transcript.md in leo-workspace.

The parser accepts existing report text and the upcoming lane_report / inbox_notice provenance, keeping structured details and opaque thread IDs. Immutable messages and batch extensions are cached; unchanged notices are not reparsed on token updates. No timer, observer or animation loop is added.

The change stays together because parser, transcript batching, pending groups and Find must agree on the same rows. Most added lines are regression coverage, gallery fixtures and localized strings.

Validation: 63 focused Bun tests pass; the five component cases include 49 assertions, covering boundaries, verdict counts, singleton passthrough, cache identity, full findings, Details, sender opening and Find. Full local web checking was interrupted by host disk stalls after reporting existing Settings token/layer/format errors; focused lint on the new/changed components, parsers and tests passes. A combined CI check follows publication.

Before/after: six gallery states (five mixed reports, three inbox notices and a single report, each collapsed/expanded), 2×, synthetic data, light and dark.

State Theme Before After
Five reports, collapsed light Before: Five reports, collapsed, light After: Five reports, collapsed, light
Five reports, collapsed dark Before: Five reports, collapsed, dark After: Five reports, collapsed, dark
Five reports, expanded light Before: Five reports, expanded, light After: Five reports, expanded, light
Five reports, expanded dark Before: Five reports, expanded, dark After: Five reports, expanded, dark
Three inbox notices, collapsed light Before: Three inbox notices, collapsed, light After: Three inbox notices, collapsed, light
Three inbox notices, collapsed dark Before: Three inbox notices, collapsed, dark After: Three inbox notices, collapsed, dark
Three inbox notices, expanded light Before: Three inbox notices, expanded, light After: Three inbox notices, expanded, light
Three inbox notices, expanded dark Before: Three inbox notices, expanded, dark After: Three inbox notices, expanded, dark
Single report, collapsed light Before: Single report, collapsed, light After: Single report, collapsed, light
Single report, collapsed dark Before: Single report, collapsed, dark After: Single report, collapsed, dark
Single report, expanded light Before: Single report, expanded, light After: Single report, expanded, light
Single report, expanded dark Before: Single report, expanded, dark After: Single report, expanded, dark

Gallery capture passed: https://github.com/manaflow-ai/cmux/actions/runs/41158893490. Web validation is tracked in https://github.com/manaflow-ai/cmux/actions/runs/41158893861.

The unrelated tooling/guard failures were reproduced from the CI run's exact base, 8b3fa55ef585c369955e0dc19694046969272262, with the same errors:

  • Python registry: tests/test_check_objc_selectors_step.py: linux-guard lane is not run by any workflow.
  • AppCrateLicenseGate.test_the_ten_first_party_gpl_crates_are_named_exactly: the expected list omits cmux-chats-mirror.
  • SigningHooksInStepWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check: the newest released hook is absent from the signing-hook list.

Viewed after image: yes — expanded reports in light/dark, inbox expansion and single-report collapse.

Visual verdict: the count row replaces repetitive report headings; sender/verdict lines stay compact, and the full P1/P2 findings remain legible behind one disclosure.

Agent session: agent session

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

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 7f1a501: 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=pr28749 -f ref=lane/orch-lane-report-ui -f platform=macos -f backend_mode=local

Gallery before/after for 7f1a501: 16 states rendered, 5 images differ, 2560 more touched states not rendered. Images are in the run's artifact, not on this public PR.

gh run download 41158893490 -R manaflow-ai/cmux -n gallery-advisory-28749-7f1a501dcb390a02ca61e8485c445bd1dcc45a8a (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.addressed-message/relayed Apple System Colors Light unchanged 0% own IncomingMessageCard.tsx
agent-pane.addressed-message/relayed Apple System Colors unchanged 0% own IncomingMessageCard.tsx
agent-pane.card-copy/prompt-rest Apple System Colors Light unchanged 0% own IncomingMessageCard.tsx
agent-pane.card-copy/prompt-rest Apple System Colors unchanged 0% own IncomingMessageCard.tsx
agent-pane.card-copy/prompt-hover Apple System Colors Light changed 4.18% own IncomingMessageCard.tsx
agent-pane.card-copy/prompt-hover Apple System Colors unchanged 0% own IncomingMessageCard.tsx
agent-pane.card-copy/prompt-copied Apple System Colors Light unchanged 0% own IncomingMessageCard.tsx
agent-pane.card-copy/prompt-copied Apple System Colors unchanged 0% own IncomingMessageCard.tsx
agent-pane.card-copy/message-rest Apple System Colors changed 0.0904% own IncomingMessageCard.tsx
agent-pane.card-copy/message-rest Apple System Colors Light changed 0.0888% own IncomingMessageCard.tsx
agent-pane.card-copy/message-hover Apple System Colors changed 2.82% own IncomingMessageCard.tsx
agent-pane.card-copy/message-hover Apple System Colors Light unchanged 0% own IncomingMessageCard.tsx
agent-pane.card-copy/message-copied Apple System Colors Light unchanged 0% own IncomingMessageCard.tsx
agent-pane.card-copy/message-copied Apple System Colors unchanged 0% own IncomingMessageCard.tsx
agent-pane.card-copy/quiet-rest Apple System Colors changed 0.478% own IncomingMessageCard.tsx
agent-pane.card-copy/quiet-rest Apple System Colors Light unchanged 0% own IncomingMessageCard.tsx
agent-pane.card-copy/quiet-copied Apple System Colors Light unchanged 0% own IncomingMessageCard.tsx
agent-pane.card-copy/quiet-copied Apple System Colors unchanged 0% own IncomingMessageCard.tsx
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

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

Shipped in:

@blacksmith-sh

blacksmith-sh Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

Found 6 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
test_every_listed_hook_is_one_glaeda_released_with_the_check (main.SigningHooksInSt
epWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check)/
test_every_listed_hook_is_one_glaeda_released_with_the_check (main.SigningHooksInSt
epWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check)
View Logs
test_the_ten_first_party_gpl_crates_are_named_exactly (main.AppCrateLicenseGate.tes
t_the_ten_first_party_gpl_crates_are_named_exactly)/
test_the_ten_first_party_gpl_crates_are_named_exactly (main.AppCrateLicenseGate.tes
t_the_ten_first_party_gpl_crates_are_named_exactly)
View Logs

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

@teamleaderleo
teamleaderleo merged commit 517a276 into feat-cmux-next Oct 31, 2026
162 of 165 checks passed
@teamleaderleo
teamleaderleo deleted the lane/orch-lane-report-ui branch October 31, 2026 03:17
teamleaderleo added a commit that referenced this pull request Oct 31, 2026
#28749 drew an inbox_notice as a message card named "inbox" with the
notice's text and folded adjacent ones into a LaneNoticeBatch. This
branch's inbox_notice case in incomingPrompt comes first and returns
kind "inbox" (InboxNoticeCard, mergeInboxNotices), so #28749's inbox
branch there could not run and is removed; its test now checks the
thread identity on the new kind. Lane reports, their batches and
LaneNoticeBatch are kept as #28749 left them.

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

Copy link
Copy Markdown
Contributor

Base red from this PR: "Default cursor (no pointing hand in app UI)" (check-default-cursor.py) is red on feat-cmux-next. .cv-lane-batch__toggle in LaneNoticeBatch.css has cursor: pointer, but cmux-next app UI keeps the arrow (3cb1742). #28856 removes the rule.

lawrencecchen added a commit that referenced this pull request Oct 31, 2026
…-default-cursor) (#28856)

* base red: the lane batch toggle keeps the arrow cursor (#28749)

#28749 (517a276) gave .cv-lane-batch__toggle in
LaneNoticeBatch.css `cursor: pointer`, so check-default-cursor.py
("Default cursor (no pointing hand in app UI)" in cmux-next checks)
is red on feat-cmux-next: cmux-next app UI keeps the arrow over
clickable controls (3cb1742). Drop the rule, the fix the check names.

check-default-cursor.py: 1 finding at 6352bf5 (base), ok here.

* base red: the lane batch toggle sets the arrow again after all: unset

Review of the previous commit: deleting the rule left the toggle, whose
rule starts with `all: unset`, inheriting its parent's I-beam, which
webviews/test/clickable-cursor.test.ts refuses ("a clickable element
whose rule resets every property sets its cursor again"). Set
`cursor: default`, as AgentMessageRow.css, PendingMessagesCard.css,
SubsessionCallCard.css and CardCopy.css do.

check-default-cursor.py: ok. bun test test/clickable-cursor.test.ts:
6 pass, 0 fail (the review ran it red at the base and at the previous
commit).
teamleaderleo added a commit that referenced this pull request Oct 31, 2026
…that already failed (#28852)

* ci(janitor): a job created after a lost one is never its gate

Run 41158893861 (PR #28749): `GhosttyKit release check` sat queued with
runner_id 0 on blacksmith-4vcpu-ubuntu-2404 from 02:18:12Z to 02:59:09Z
while a newer job on that label started, and category e never found it
lost. find_lost() treated every unfinished job of the run as a possible
gate and every sibling's completion as a possible need, so the
`web / react-*` jobs created at 02:30Z and 02:43Z (and `web / runners`,
done at 02:43:49Z) kept the run gated and its wait start moving.

GitHub creates a job's record only once its needs finished (the run's
`ci-status`, which needs every job, had no record yet), so a sibling
created with the job or later is never one of its needs. may_need()
says so, and lost_wait_start() and _gated() only count siblings that
may be needs. A running sibling created before the job still gates it.

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

* ci(janitor): fail over a lost job beside later siblings and in a run that already failed

Run 41150189497 (PR #28544): `cmux-next fast tier` sat on
glaeda-side-std-xcode-26.6 with runner_id 0 for 2.5 hours. Every sweep found it
lost and kept it, because `cmux-next swift test` had failed and
open_head_lost() refused any run that already failed. When the lost job is
the run's only unfinished job, the sweep now cancels the run and re-runs that
job alone (POST /actions/jobs/{id}/rerun, as cmux-bot), so the red stays.
LostJob carries the job id, and the pending re-run entry carries it as
`job_id`, which rerun_lost() reads.

Running siblings created after the lost job no longer gate it either. They
cannot be its needs, the run cannot finish without it, and the re-run of the
cancelled run brings them back. In run 41158893861 they arrived in waves and
ran beside the GhosttyKit check until a runner finally took it.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Oct 31, 2026
…job takes one Linux size (#28858)

* ci: the GhosttyKit release check reads the Linux runner pool, and no new job takes one Linux size

On 2026-10-31 `GhosttyKit release check` (run 41158893861, PR #28749) sat
41 minutes on blacksmith-4vcpu-ubuntu-2404 while the 16 and 32 vCPU sizes
started jobs. Its runs-on read `vars.LINUX_RUNNER || 'blacksmith-4vcpu-...'`,
which is one size: LINUX_RUNNER holds a single label, and the overflow switch
moves it only when every probed Blacksmith size stalls. It now reads
fromJSON(vars.RUNNER_POOLS).linux after the fork branches, as main's
cmux-tui-spec and required-checks-drift do.

tests/test_ci_linux_single_size.py counts, per workflow, the jobs that still
read LINUX_RUNNER as their one size (259 in 137 workflows). The count only
shrinks. test_ci_repo_variable_defaults.py and test_runner_label_policy.py
take main's RUNNER_POOLS allowances.

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

* ci: run the single-Linux-size guard from ci-guards

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

* test(ci): single-size counts include the jobs feat-cmux-next added since (chromium staleness, pr-checks, stable-next)

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

---------

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

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 7f1a501d Deployed Oct 31, 2026 by teamleaderleo via cmux-tui tree preflight #86616
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.

2 participants