Skip to content

cmux NEXT What's New: the changelog page answers a PR chip's card (pr.inspect, browser.list, browser.openIn) - #24088

Merged
teamleaderleo merged 6 commits into
feat-cmux-nextfrom
release-rings/changelog-chip-ops
Oct 23, 2026
Merged

teamleaderleo merged 6 commits into
feat-cmux-nextfrom
release-rings/changelog-chip-ops

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

The What's New lane (gallery-loop-b4) is adding a PR chip with the agent page's link hover card to the changelog page. The card maps each of its calls m to cmux.changelog.<m>. Today the changelog page answers only cmux.changelog.list|get|reel and cmux.app.action.run, so the card's calls came back unknown_op. This PR has the changelog page answer the card's three methods with the agent page's params, checks and replies. There are no web changes; the web lane points its card at these names.

  • cmux.changelog.pr.inspect {url}: what the app's pull request cache (AgentReplyPullRequests.shared) has, {pullRequest | null, reading, fetchedAt?}. Only a plain https://github.com/<owner>/<repo>/pull/<n>. Passive.
  • cmux.changelog.browser.list {}: the installed browsers by opaque id, {browsers: [{id, name, icon?}]}. Passive.
  • cmux.changelog.browser.openIn {url, browserId}: cmux opens the link in a cmux browser tab through LinkOpener.openWeb, the path the agent page's card uses, from the pane that shows the page. An id from the last browser.list opens the link in that browser.
    • On this page it takes only https. Anything else is refused with cmux.protocol.invalid_params.
    • It spends one of the person's gestures in the page view: context.userGesture plus a gestureEvent not already spent. Without one it fails with link.gesture_required, as on the agent page.

One code path, not a copy:

  • The agent page's handling of these three moved into AgentPaneReplyLinks.respond(toCard:consumeGesture:openInCmux:), and AgentPaneModel.respond now calls it.
  • The changelog provider parses with the same AgentPaneReplyRequest (its knownParams, URL and pull request checks) and turns the reply into a PageError through the same AgentPageProvider.value(of:). Only the gesture source (each page's own) and the https-only rule differ.
  • Both routes get the ops through PageFactory.changelogNotes: the changelog tab and the update surface island. Each sets the provider's anchor to its page view.

Known-params lists:

  • The methods and params are the agent page's own AgentPaneReplyRequest.knownParams, unchanged. The changelog provider admits only AgentPaneReplyLinks.cardMethods (pr.inspect, browser.list, browser.openIn).
  • The changelog page has no other per-op list. Its descriptor admits the cmux.changelog. namespace.
  • There is no Rust mirror for these page methods: cmux-agent-pane-policy covers the agent pane's _acpmux/* requests, not AgentPaneReplyRequest, and cmux-tui/spec/page-router.json has no changelog entry. So nothing in Rust changes.

ReleaseNotes.Highlight is not touched; the What's New lane adds its pr field.

No capture: no visible UI changes. The PR adds host ops the changelog page can call (pr.inspect, browser.list, browser.openIn) and moves the agent page's handling of them into one shared method. The chip and card that use them land in the What's New lane's web PR.

Testing

Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/ChangelogPRChipTests.swift:

  • pr.inspect
    • Returns exactly the agent page's reply for the same cache answer, and a null pullRequest before the cache has one.
    • Refuses anything but a pull request URL without asking the cache.
  • browser.list
    • Lists the installed browsers by opaque id.
    • That id opens the link in that browser on a gesture; an unlisted id is link.browser_unknown.
  • browser.openIn
    • With cmux, an https URL and a gesture, it reaches the injected opener. Without a gesture it is refused (link.gesture_required), and one gesture opens one link.
    • It refuses http (any case), file, javascript, cmux, user info, an empty host, a non-URL and an empty string (invalid_params) without opening anything.
    • A malformed call (missing browserId, a non-string url, an extra key) is refused, and a failed open is link.open_failed.
  • Other agent link methods (link.openPath, image.load, and so on) and the old link.open are unknown_op on this page.

Observed / Not run

  • Observed: python3 scripts/cmux-next/prepush-gate.py reported no new violations.
  • Not run, blocked: the CmuxNext test build. The fast tier fails to build the tests on base (HomeChiefLinkInkTests.swift:23, ambiguous use of 'display', the same lines as base f8c77f4), so no CmuxNext test has run on this head. fix(next tests): CmuxNext test targets compile again (HomeChiefLinkInk selector, HoleRecordingPage setSeeThrough) #24211 fixes that base red. A fleet suite step queued for over 100 minutes with no worker and was cancelled. The fast-tier log shows ChangelogPRChipTests.swift compiling without errors.
  • Observed: an independent Codex (xhigh) review returned SHIP at 10cc2ec. The re-review at the merged head is recorded in a PR comment.
  • Not run: a live click on a PR chip in the app; the web chip lands in the What's New lane's PR. No local Swift build (huge-blue is Linux).

Changelog

none

Agent session: huge-blue

🤖 Generated with Claude Code

cmux.changelog.pr.inspect {url} answers from the app's pull request cache with
the agent page's pr.inspect reply (one shared AgentPanePullRequestAnswer.reply).
cmux.changelog.link.open {url} opens an https link in a cmux browser tab via
LinkOpener.openWeb, spending one of the person's gestures in the page view.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c1c-9365-71b3-b73b-dc961610d618&host=huge-blue
@teamleaderleo teamleaderleo added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 22, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by release-rings on huge-blue · session

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 90c0a28: 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=pr24088 -f ref=release-rings/changelog-chip-ops -f platform=macos -f backend_mode=local

red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on 44fc3d3 to compare; do not merge until green; see lane-rules

Tour of 90c0a2846a (run): no media. The tour job failed before the tour ran (build or setup); the run log has the output.

@blacksmith-sh

blacksmith-sh Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Found 11 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp4gwzqxr3/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmp6fto501p/summary-missing.json (live):/summary-missing.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
test_base_passes (main.NoticesPairTests.test_base_passes)/
test_base_passes (main.NoticesPairTests.test_base_passes)
View Logs
test_every_submodule_free_checkout_on_an_owned_runner_resets_submodules (main.Reuse
dWorkspaceSubmodules.test_every_submodule_free_checkout_on_an_owned_runner_resets_submo
dules)/
test_every_submodule_free_checkout_on_an_owned_runner_resets_submodules (main.Reuse
dWorkspaceSubmodules.test_every_submodule_free_checkout_on_an_owned_runner_resets_submo
dules)
View Logs
test_every_submodule_free_checkout_on_an_owned_runner_resets_submodules (main.Reuse
dWorkspaceSubmodules.test_every_submodule_free_checkout_on_an_owned_runner_resets_submo
dules) (job='web-bundles')/
test_every_submodule_free_checkout_on_an_owned_runner_resets_submodules (main.Reuse
dWorkspaceSubmodules.test_every_submodule_free_checkout_on_an_owned_runner_resets_submo
dules) (job='web-bundles')
View Logs

...and 1 more test failures. View all on Blacksmith

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

@github-actions github-actions Bot added risk:high Risk tier (docs/ci/risk-tiers.md) and removed risk:normal Risk tier (docs/ci/risk-tiers.md) labels Oct 22, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-nhftt created for this PR by the cmux coordinator.

…methods

The web card maps each chip call m to cmux.changelog.<m>, so the changelog page
answers pr.inspect, browser.list and browser.openIn with the agent page's params
and replies, through one shared AgentPaneReplyLinks.respond(toCard:). The agent
page now calls the same method. On the changelog page, browser.openIn takes only
https and spends one gesture from the page view. link.open is removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c1c-9365-71b3-b73b-dc961610d618&host=huge-blue
@teamleaderleo teamleaderleo changed the title cmux NEXT What's New: changelog ops for a PR chip's hover card (pr.inspect, link.open) cmux NEXT What's New: the changelog page answers a PR chip's card (pr.inspect, browser.list, browser.openIn) Oct 22, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / nightly-guards / workflow-guard-tests / release-notary is red on 17 of 22 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex xhigh, independent, different model): SHIP at 1733afe

Checked: gesture spending and https-only on cmux.changelog.browser.openIn, opaque browser.list ids, the agent page's behavior after the shared AgentPaneReplyLinks.respond(toCard:) refactor (check order and replies unchanged), weak anchors on both routes (the changelog tab and the update surface island), and the Swift 6 isolation of the new API and tests. Static review; tests not run. An earlier Codex xhigh review returned SHIP at 10cc2ec; this head adds only a merge of feat-cmux-next f8c77f4.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex xhigh, independent, different model, run on cmux16 from a diff bundle): SHIP at 0ab0b44

  • https is checked before the gesture is spent or anything opens. Browser ids resolve only through the host's listed-app map.
  • The shared responder keeps the agent page's gesture order, errors and reply shapes.
  • Both changelog routes wire the provider with weak anchors.
  • Static review; the fleet test compile and the fast tier are the compile proof. This head adds a merge of feat-cmux-next 3e0991f on top of the earlier SHIPs (10cc2ec, 1733afe).

…rings/changelog-chip-ops

# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneReplyLinks.swift
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex xhigh, independent, different model, run on cmux16 from a diff bundle): SHIP at a8c231f

  • The base merge (a986daa) conflicted in AgentPaneReplyLinks.swift. The resolution routes base's five new image and drag cases to AgentPaneImageCopies, as base does, and keeps the shared respond(toCard:). Both switches are exhaustive, and the changelog page's three-method allowlist excludes the new operations.
  • https is checked before any gesture is spent. Browser ids come only from the host map. The agent page's order, errors and replies are unchanged.
  • Static review; the fleet test compile and the fast tier are the compile proof.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Orphaned: no activity for 13 h, and no lane holds a lease on it. Adopted by the orphan sweep: merged feat-cmux-next in at 90c0a28. A later pass queues it for the merge hub if it is reviewed, small and red only on base reds.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next crash-class rules / cmux-next crash-class rules is red on 12 of 12 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (Codex gpt-6.1-sol, xhigh, on big-red, diff-only from gh pr diff 24088 plus base context, no checkout): SHIP at 90c0a28

  • Session 01a166e2-6a59-71c1-beb7-f5fe8f221b99. Round 1 BLOCKed on userinfo URLs and round 2 on a nonisolated call to @mainactor closures. Both were false positives from code the diff doesn't show: AgentPaneReplyRequest.webURL rejects user/password, and respond(toCard:) belongs to the @MainActor class AgentPaneReplyLinks. Round 3 had that context and found no defects.
  • Fleet cmux-ci compile-check --app --ref 90c0a2846ac70de4c7c7e43d6ee5a4fe2ce19680: passed (job 0ae11dd6d18ed3dbcd112057).
  • Reds at this head are all base: the swift test helper exits with no summary line (same on cmux NEXT updates: a staged update gives way to a newer build of the ring #24183); cmux-next checks (No new SwiftUI, fleet host names in gallery fixtures, Checks job structure; "Pushed commits add no violations" passes); crash-class rules (red on 12/12 PRs); release-notary and Guard status. Risk evidence is the risk:high hold this receipt clears.

@teamleaderleo
teamleaderleo merged commit f4f2a41 into feat-cmux-next Oct 23, 2026
120 of 126 checks passed
@teamleaderleo
teamleaderleo deleted the release-rings/changelog-chip-ops branch October 23, 2026 04:05
@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 90c0a284 Deployed Oct 22, 2026 by teamleaderleo via namespace autofix #1502
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant