Skip to content

fix(app): offer channel menu actions only where they can succeed - #525

Merged
iamnbutler merged 2 commits into
mainfrom
menu-actions
Oct 19, 2026
Merged

iamnbutler merged 2 commits into
mainfrom
menu-actions

Conversation

@iamnbutler

Copy link
Copy Markdown
Contributor

Fixes #504.

The channel context menu now decides each action per row and hides the ones the host would refuse, instead of showing them (or showing them disabled).

  • Fork gets a per-row fork capability: the channel runs on this host, the person is its owner, and it isn't a cloud compute channel. This mirrors the host's refusals in gateway.ts (owned ops, catalog.owns, peer fork) and manage.ts fork.
  • Archive / Delete / Start & Stop compute now also require the person to be the channel's owner on this host. Before, they only checked the host, but the host refuses them to anyone except its owner.
  • Rename keeps its existing owner check. The menu now hides it instead of disabling it.
  • Leave channel was always shown disabled, because the app never passes onLeave. It's now hidden.
  • Unarchive, Delete (archived), Channel info and Rebuild Lobby are hidden when unavailable instead of being shown disabled.
  • A row with nothing to offer (for example a teammate's archived channel) no longer opens an empty menu.

The host still enforces every rule; this only stops the menu from offering actions that can't succeed.

Built in Ace

No — Claude Code subagent outside Ace, run by the lead during a batch of fixes.

Fork appeared on every row and failed on teammates' and cloud compute
channels. Rows now carry a fork capability (this host's own, non-compute
channels), and archive, delete and compute also require the channel to be
this person's channel on this host, matching the host's owner-only ops.
The menu hides unavailable Rename, Fork, Info, Leave, Archive, Unarchive,
Delete and Rebuild items instead of showing them disabled, and does not
open on a row with nothing to offer.

Fixes #504

Why: apps/app/src/app.tsx#function row | each capability mirrors a host-side refusal (gateway owned ops, catalog.owns, compute fork); keep them in step when the host's rules change
Why: packages/ui/src/components/session-item/session-item-actions.tsx#function RowMenu | an action this row can't perform is hidden, never shown disabled
@iamnbutler
iamnbutler merged commit e708ef0 into main Oct 19, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Only offer Fork on channels this person can fork

1 participant