Repository navigation
feat(agent-pane): fold lane reports and inbox notices - #28749
Conversation
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Gallery before/after for
States
Pick other states with a Shipped in:
|
|
Found 6 test failures on Blacksmith runners: Failures
|
#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
…-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).
…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>
…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>
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
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:
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.mdin leo-workspace.The parser accepts existing report text and the upcoming
lane_report/inbox_noticeprovenance, 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.
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: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 omitscmux-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