Skip to content

Unify mobile channel details - #6113

Open
klopez4212 wants to merge 7 commits into
mainfrom
kennylopez-mobile-channel-details
Open

Unify mobile channel details#6113
klopez4212 wants to merge 7 commits into
mainfrom
kennylopez-mobile-channel-details

Conversation

@klopez4212

@klopez4212 klopez4212 commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Summary

  • combine channel identity, actions, member previews, and lifecycle controls in one navigable mobile details page
  • add compact member management and desktop-aligned channel editing
  • smooth the profile entrance transition and standardize settings-group spacing
  • align Huddle lifecycle rows with regular message author and body spacing

Testing

  • just mobile-check
  • just mobile-test — 1,477 tests
  • Pixel 10 debug build, install, and interaction review

Snapshots

Channel header

Channel header with channel name and member count

Combined channel details

Combined channel details with actions and member preview

Manage channel

Manage channel editing controls

Signed-off-by: kenny lopez <klopez4212@gmail.com>
klopez4212 added a commit that referenced this pull request Aug 17, 2026
@klopez4212

Copy link
Copy Markdown
Contributor Author

🤖 Fresh Pixel snapshots from the exact PR build.

Channel header

The channel name and collective member count form the new details entry point.

01-channel-header

Combined channel details

Identity, quick actions, and the compact five-member preview live on one page.

02-channel-details-members

Manage channel

Editing keeps the focused name, description, and canvas controls.

03-manage-channel

Signed-off-by: kenny lopez <klopez4212@gmail.com>
@klopez4212
klopez4212 marked this pull request as ready for review August 17, 2026 14:22
@klopez4212
klopez4212 requested a review from a team as a code owner August 17, 2026 14:22

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

The redesigned management surfaces need accessible names and state before this lands:

  • mobile/lib/features/channels/manage_channel_sheet.dart:112-130,287-308 gives the pre-populated Name and Description fields only hintText. Because both fields already contain values, assistive technology does not get a persistent field name and users have to infer which value they are editing. The new test at mobile/test/features/channels/channel_detail_page_test.dart:1360-1368 explicitly expects labelText == null but does not assert semantics. Please preserve the outline-only design if desired, but add reliable accessible names (for example, non-duplicating Semantics labels) and test both pre-populated fields through the semantics tree.
  • mobile/lib/features/channels/add_members_sheet.dart:161-191 represents selection solely by swapping the trailing plus/check icon. The tappable result row exposes no selected/toggled semantic state, so VoiceOver/TalkBack users cannot reliably determine whether that person is selected. Please expose the row as a button/control with its current selected state and cover selection and deselection semantics.

These are regressions in core channel-administration workflows, not visual polish.

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

One additional blocking authorization defect surfaced during the consolidated review:

ChannelActionsSheet exposes Manage channel to every non-DM (mobile/lib/features/channels/channel_actions_sheet.dart:208-224), while this change weakens ManageChannelSheet.canEditCanvas from channel.isMember && !channel.isArchived to only !channel.isArchived (mobile/lib/features/channels/manage_channel_sheet.dart:50-54). A nonmember browsing an open channel can therefore open this legacy path and submit a kind:40100 canvas replacement. The relay's generic authorization admits nonmembers to open channels (crates/buzz-relay/src/handlers/ingest.rs:643-679), and canvas is not one of the kinds routed through a stricter per-kind admin validator (:2290-2304). Because canvas content feeds agent context, this permits drive-by modification of operational instructions.

Restore an explicit membership/moderation capability gate for canvas editing, and test the channel-tile → Manage path for an open-channel nonmember. The same path currently presents name/description editors to users whom kind:9002 will reject; gate those controls with the resolved management capability rather than offering a guaranteed failure.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c7c776e9b6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mobile/lib/features/channels/channel_details_page.dart
Comment thread mobile/lib/features/channels/manage_channel_sheet.dart
@klopez4212

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c7c776e9b6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mobile/lib/features/channels/manage_channel_sheet.dart Outdated
Comment thread mobile/lib/features/channels/channel_details_page.dart
Comment thread mobile/lib/features/channels/manage_channel_sheet.dart
Signed-off-by: Fast Fizz <2df81cb51f05a9d5387ef24d7b9ecb8fcdfcd1c70ffabc67061c9596e1b5b1c4@buzz.block.builderlab.xyz>
Co-authored-by: Fast Fizz <2df81cb51f05a9d5387ef24d7b9ecb8fcdfcd1c70ffabc67061c9596e1b5b1c4@buzz.block.builderlab.xyz

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 19ede787df

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mobile/lib/features/channels/channel_actions_sheet.dart Outdated
Signed-off-by: Fast Fizz <2df81cb51f05a9d5387ef24d7b9ecb8fcdfcd1c70ffabc67061c9596e1b5b1c4@buzz.block.builderlab.xyz>
Co-authored-by: Fast Fizz <2df81cb51f05a9d5387ef24d7b9ecb8fcdfcd1c70ffabc67061c9596e1b5b1c4@buzz.block.builderlab.xyz>

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d34728722c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mobile/lib/features/channels/channel_details_page.dart Outdated
Comment thread mobile/lib/features/channels/channel_actions_sheet.dart Outdated
Co-authored-by: Fast Fizz <2df81cb51f05a9d5387ef24d7b9ecb8fcdfcd1c70ffabc67061c9596e1b5b1c4@buzz.block.builderlab.xyz>
Signed-off-by: Fast Fizz <2df81cb51f05a9d5387ef24d7b9ecb8fcdfcd1c70ffabc67061c9596e1b5b1c4@buzz.block.builderlab.xyz>

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6810faf909

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mobile/lib/features/channels/channel_details_page.dart
Comment thread mobile/lib/features/channels/add_members_sheet.dart
Signed-off-by: Fast Fizz <2df81cb51f05a9d5387ef24d7b9ecb8fcdfcd1c70ffabc67061c9596e1b5b1c4@buzz.block.builderlab.xyz>
Co-authored-by: Fast Fizz <2df81cb51f05a9d5387ef24d7b9ecb8fcdfcd1c70ffabc67061c9596e1b5b1c4@buzz.block.builderlab.xyz
@klopez4212

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e13e9cfd99

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread mobile/lib/features/channels/add_members_sheet.dart
Comment thread mobile/lib/features/channels/channel_actions_sheet.dart
Signed-off-by: Fast Fizz <2df81cb51f05a9d5387ef24d7b9ecb8fcdfcd1c70ffabc67061c9596e1b5b1c4@buzz.block.builderlab.xyz>
Co-authored-by: Fast Fizz <2df81cb51f05a9d5387ef24d7b9ecb8fcdfcd1c70ffabc67061c9596e1b5b1c4@buzz.block.builderlab.xyz>

@jedwards27 jedwards27 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.

:bot: Jude’s code review agent, commenting via Wes’s GitHub account.

Consolidated review — changes requested

Reviewed exact head a8e6aee0191995136a6c446afabc19f6eb0a667c against base f956e6fe06a76e50cbd8fba1a162482e752e7f1a. The combined review is not merge-ready. Three material workflow/state-boundary defects remain:

  1. Small channels lose member administration. ChannelDetailsPage only renders See all when members.length > 5 (mobile/lib/features/channels/channel_details_page.dart:382-390), while this PR removes the non-DM app-bar Members button (mobile/lib/features/channels/channel_detail_page.dart:333-361). Preview rows open profiles, not MembersSheet (channel_details_page.dart:371-381,636-656). Owners/admins in channels with five or fewer members therefore cannot reach the role-change/remove controls that exist only in MembersSheet (members_sheet.dart:225-275,316-360). The test at channel_detail_page_test.dart:908-947 currently locks in the inaccessible state. Retain a route to the complete member-management surface and add a biting ≤5-member role/remove navigation regression.

  2. Add members is actionable before the roster is authoritative. For an open channel, canAddMembers(null) is true, so the row is shown while channelMembersProvider is loading or failed (channel_details_page.dart:65-66,92-94,175-193,333-355; channel.dart:86-95). The sheet then receives an empty existingPubkeys, can offer an existing owner/admin, and submits explicit role=member (add_members_sheet.dart:44-58,78-83; channel_management_provider.dart:693-724). The relay treats changing an active member’s role as a real privileged role change (crates/buzz-db/src/channel.rs:456-503), so this race can accidentally demote an existing member. A temporary widget regression requiring the Add row to remain absent during a pending roster failed causally. Keep Add members hidden/disabled until a successful authoritative roster load, and cover pending/error states.

  3. A stale community-scoped action object can publish channel mutations after the user switches communities. channelActionsProvider captures the old relay identity and supplies an isCommunityValid fence (channel_management_provider.dart:971-987), but only addMembers invokes it (:693-735). updateChannel submits kind 9002 without checking the fence (:768-783); leave/archive/unarchive/delete/canvas and role/remove methods have the same missing boundary check. I retained a ChannelActions, switched relayConfigProvider, attached the new community socket, then invoked updateChannel: the regression expected no event but recorded a signed kind 9002 for channel-1. Evidence is local review artifact .scratch/pr6113-carl/stale-update-regression.log; the temporary test was removed and the worktree restored clean. Apply the community-validity fence before every scoped publish (and where needed after awaited boundaries before cache invalidation), with regressions for metadata plus destructive/member lifecycle actions.

The accessibility semantics, lifecycle confirmation/success ordering, partial-add invalidation, metadata/canvas refresh paths, and supplied screenshots were also reviewed without an additional blocker. Those repaired paths do not override the demonstrated failures above.

Exact-head evidence

  • PASS — just mobile-check (format/analyze/size gate).
  • PASS — full just mobile-test: 1,481 tests.
  • PASS — all reported required GitHub checks, including Mobile, at a8e6aee0.
  • PASS — post-probe local HEAD = live PR head; worktree clean.
  • FAIL (causal probe) — stale ChannelActions.updateChannel published kind 9002 after a community switch.
  • NOT RUN independently — real Pixel/iOS interaction and assistive-technology journey; the author reports Pixel 10 interaction review.

Green CI does not exercise the three states above. Please address them and add the risk-shaped regressions before merge.

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.

3 participants