Repository navigation
Conversation
Expose the relay admission default independently of existing participant roles, restore explicit guest assignment, and keep guest channel and thread views read-only. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Keep reading and lifecycle membership separate from writing, reject guest uploads and direct writes, and recheck queued writes before signing and publication. Preserve verified agent-owner message edits and deletion. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Keep the member directory readable for guests while hiding invitation controls, including public previews that admit guests. Preserve existing writing members independently of the admission default. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Move reading and new-participant access into the members dialog, with confirmed changes and existing signed save/readback recovery. Keep individual roles separate and leave Edit details focused on text and lifespan. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Use a compact audience and contribution row for general access, and expose each editable person's role through its existing confirmed menu. Keep immutable roles plain and preserve profile actions during pending changes. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Offer View only and Admin through a split Add menu with explicit confirmation and fresh signed role checks. Preserve ordinary additions and keep identity labels readable at narrow widths. Center access artwork in its full gutter beside the text-link audience control. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Match caret height and outer padding to Add, preserve joined corners while the menu inserts focus guards, and include Participate alongside View only and Admin. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Give the compact caret equal side insets that override leading-icon text padding. Use descriptive add actions consistently in the menu and confirmation. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Group role additions under Add as and reuse ChoiceRow for the same Participate and View only language as general access, plus Admin guidance. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Keep the guest browser journey aligned with the read-only access dialog. Reproduced the old title assertion failure in both Chromium and WebKit; all six permissions journeys pass with the current label. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Reuse the upstream split-button owner, preserve compact caret insets, and align strict discovery and read-only tests with the access contract. Remove the duplicated fixture property introduced by integration. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Keep AbortError identity when an edit is cancelled after signing or final authorization. Genuine pre-publication failures retain request-phase diagnostics, and uncertain publication handling stays intact. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Keep membership commands on their relay-authorized path so Guest owners can remove agents without gaining posting rights. Cover membership requests and fresh roster confirmation through the existing agent-removal workflow. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Distinguish joined Guests from public previews in search labels and recent destinations. Keep their canvas available with live read-only editor state across role changes, and retain archived canvas restrictions. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Keep default participation separate from existing roles in the private-channel summary and align documented reader copy with the current UI. Preserve the explicitly selected compact channel-policy footer. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Keep the link appearance used by channel access and show it in the shared specimen and registry. Remove the unused ghost option instead of maintaining an unadopted variant. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Extend the existing joined-Guest browser journey through the registered channel menu and actual canvas panel, verifying native read-only editing and disabled saving without adding another browser case. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Keep the channel-panel host consistent with menu eligibility: a verified Guest remains a member who can open readable panels. Retain the existing live-session, cached-channel, membership and contribution checks. The Guest canvas browser journey reproduced the blocked opening before this correction. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Describe the existing contributing Bot presentation accurately instead of promising a separate equivalent Member action in the role menu. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Preserve joined Guest context and visible readable panel tabs through the existing conversation-tab owner. Keep cached channels excluded. Cover both Member and Guest launcher lifecycles with the same mounted test. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Authorize canvas reads and history through verified channel membership while retaining the stricter writing predicate for saves. Keep existing capability callers compatible and verify Guest reading and denied saving through the real session. The app journey reproduced the read denial at the capability boundary. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
|
🤖 Carl (AI agent): Princess Donut completed the requested adversarial source review of Repairs in
Dispositions: retain the requested compact policy footer and split Add action menu. Plain Add continues to use the channel's admission default. Bot remains presented as Participating; its documented menu choices now match the UI ( Validation: all six permissions journeys passed Chromium/WebKit at Final-head independent re-review, human acceptance, live role-add, deployed-relay Guest CLI/MCP rejection and broad native acceptance remain pending. The PR remains draft. |
Move the existing access controls into the first scrollable member-list section, match General to the member group captions, and align avatar/text geometry. Preserve access choices and confirmation behavior. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Use regular body-small type and a text-aligned 24px link Select target, then match the access row vertical inset to member identities. Preserve shared selection, focus and confirmation behavior. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Align the audience text to the bottom of its existing target, remove the reader caption gap, and align the participation control with member action edges. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Use the existing squircle Avatar fallback for the lock in editable and read-only access rows. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Move the access section outside the member scrollport and restore its divider while retaining the refined row styling. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Use the same row-gap token for the leading inset and the space between artwork and text. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Let the member scrollport meet the separator and add a small gap between the audience label and its description. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Account for the link target extending above the visible audience line when centering the artwork. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Keep creation focus checks on Private while checking the details form next tab stop after visibility moved to member management. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Overview
Category: new-feature
User Impact: Channel owners can choose who can read and participate, while people with viewing-only access can read messages and threads without posting controls.
Problem: Channel audience, the default access for new people, and each existing member’s role are separate decisions, but the UI does not present them together and guest views still expose writing paths.
Solution: Keep the access row fixed below the scrolling member list, with independent audience and participation defaults and confirmed role changes. Keep guest history and permalinks readable while enforcing guest write restrictions in the session, including queued signing/publication, uploads and typing.
Changes
File changes
browser-host/relay-broker-api.test.mjs
Check that admission defaults use only the purpose-bound details route and reject elevated or duplicate values.
docs/channels.md
Describe the fixed access footer, independent member roles, guest restrictions and save recovery.
docs/relay-queries.md
Document reading public guest-default channels and restoring previews after Leave.
src-tauri/src/relay/channel_writes.rs
Allow only Member/Guest admission defaults in details commands, with native signing/publication boundary coverage.
src/bundled/channels/ChannelDetailsEditor.test.tsx
Keep text/lifespan draft coverage while checking that access is preserved when editing details.
src/bundled/channels/ChannelDetailsEditor.tsx
Move access editing out of the text/lifespan form and preserve current access during reloads and saves.
src/bundled/channels/ChannelGeneralAccess.test.tsx
Cover independent choices, confirmation/cancellation, missing defaults, pending saves and uncertain-save recovery.
src/bundled/channels/ChannelGeneralAccess.tsx
Show editable access controls for authorized members and a discovery-backed explanation for readers, with a subtle lock backdrop and no duplicate section heading.
src/bundled/channels/ChannelHeaderMenu.test.tsx
Verify that a joined guest retains Leave without gaining administration controls.
src/bundled/channels/ChannelHeaderMenu.tsx
Keep lifecycle actions available to joined guests.
src/bundled/channels/ChannelMembersDialog.module.css
Keep the access footer outside member scrolling, align artwork with its two text lines, and match the 8px leading/artwork gaps. Support narrow search-result rows and enlarged-text overflow.
src/bundled/channels/ChannelMembersDialog.test.tsx
Cover role captions, General access and readable guest directories without invitation controls.
src/bundled/channels/ChannelMembersDialog.tsx
Compose General access with member management and confirmed role-specific additions.
src/bundled/channels/ChannelPrivacyConfirmation.test.tsx
Keep creation warnings covered while moving existing-channel changes to General access and matching the Channel members only label.
src/bundled/channels/ChannelPrivacyConfirmation.tsx
Share consequence wording between creation warnings and General access confirmations.
src/bundled/channels/ChannelSettingsPanel.test.tsx
Align settings expectations with access management in the members dialog.
src/bundled/channels/ChannelSettingsPanel.tsx
Leave description editing in settings and remove the duplicate visibility editor.
src/bundled/channels/ChannelsPage.tsx
Connect community artwork and guest reading/lifecycle states without mounting a guest composer.
src/bundled/channels/MemberAdministration.test.tsx
Exercise guest role changes and additions, identity, cancellation, focus and changed-authority/membership gates.
src/bundled/channels/MemberAdministration.tsx
Display role captions and checked role choices through the existing member action menu.
src/bundled/channels/index.tsx
Pass the existing community reader into the channel page.
src/features/channel-members/administration-protocol.ts
Authorize explicit additions only while the target is absent and the viewer retains management authority.
src/features/channel-members/administration.test.ts
Cover explicit additions and reject changed membership, changed authority and absent-target removal.
src/features/channel-members/members.test.ts
Check invitation availability separately from guest/default reading access.
src/features/channel-members/members.ts
Hide invitations for guests and guest-default public previews while preserving existing writers’ invitation access.
src/features/messages/ChannelJoinNotice.test.tsx
Cover read-only notices and suppressed Join actions for guest/default transitions.
src/features/messages/ChannelJoinNotice.tsx
Show a compact read-only notice instead of suggesting Join when it would not grant writing.
src/features/messages/ChannelTimeline.tsx
Avoid prompting read-only viewers to start a conversation below the timeline.
src/features/messages/ThreadPanel.test.tsx
Verify readable guest threads and composer suppression across default changes.
src/features/messages/ThreadPanel.tsx
Keep guest thread context readable, with read-only notice and appropriate focus handoff.
src/features/relay/channel-details-protocol.ts
Parse, validate and serialize admission defaults independently of visibility and existing roles.
src/features/relay/channel-details.test.ts
Check default preservation, command validation and matching signed readback.
src/features/relay/channel-details.ts
Require readback of the chosen default and identify failures before publication without retrying writes.
src/features/relay/contracts.ts
Expose the signed viewer role and admission default as distinct channel-summary values.
src/features/relay/discovery-permissions.test.ts
Cover guest reading/writing, duplicate roles, cached evidence and public preview recovery.
src/features/relay/fold.test.ts
Keep exact discovery-summary assertions aligned with the legacy Member admission default.
src/features/relay/global-search.test.ts
Retain refusal assertions for writes from public search previews using the read-only access explanation.
src/features/relay/prepared.test.ts
Preserve exact hidden-channel summary coverage with the admission default included.
src/features/relay/discovery.ts
Separate reading, membership and writing; restore denied public previews only with fresh matching metadata.
src/features/relay/mentions.test.ts
Align the write-access rejection expectation.
src/features/relay/messages.ts
Gate direct message mutations on writing authority while retaining verified agent-owner edit/delete authorization.
src/features/relay/owned-agent-edits.test.ts
Exercise verified agent-owner edit/delete behavior for both Member and Guest viewers.
src/features/relay/send-to-channel.test.ts
Align direct-send rejection with the writing-access contract.
src/features/relay/session-attachments.test.ts
Align upload setup with the role-aware writing gate.
src/features/relay/session-permissions.test.ts
Exercise direct/queued writes, demotion during signing, signed retries, uploads and retained guest history/Leave.
src/features/relay/session.ts
Recheck guest writing at direct operations, signing and publication while preserving membership-based reads and lifecycle access.
src/features/relay/store.ts
Publish role/default summary changes and keep confirmed guests distinct from nonmember previews.
src/features/relay/typing.integration.test.ts
Check that demoted/guest viewers stop outgoing typing while incoming activity remains readable.
src/shared/design-system/DESIGN.md
Document the adopted compact text-link Select treatment.
src/shared/design-system/styles/components.css
Keep split-button segments aligned with joined corners and a centered caret while the menu is open.
src/shared/design-system/styles/forms.css
Use regular body-small text in the shared 24px text-link Select target while retaining its keyboard behavior.
src/shared/design-system/ui/Select.tsx
Expose the text-link appearance used by channel access without replacing Select keyboard or selection behavior.
src/shared/design-system/ui/SplitButton.tsx
Extend the existing SplitButton with compact size and independent menu availability while preserving its capsule, focus and agent-selection behavior.
src/shared/design-system/ui/controls.test.tsx
Check separate split-action activation, pending gates and menu focus return.
src/shared/design-system/ui/registry.ts
Record split-button and compact text-link Select support.
tests/browser/channel-header-menu.spec.mjs
Remove obsolete details-privacy assertions and verify Cancel is the next tab stop after duration in the details form.
tests/browser/channel-permissions.spec.mjs
Add three browser journeys for guest reading/Leave and old/nested permalinks without joining. Match the read-only dialog’s Channel access title.
tests/browser/fixture.mjs
Opt into signed guest/default metadata, nonmembership and bounded old-message/thread data for those journeys.
tests/fixtures/design-system/ui/ButtonSpecimens.tsx
Show the split Add control with its current role descriptions.
tests/fixtures/design-system/ui/FormSpecimens.tsx
Show the shared compact text-link Select treatment.
src/app/shell/SearchResults.test.tsx
Cover private Guest recents and labels using signed role discovery.
src/app/shell/SearchResults.tsx
Keep joined Guests distinct from public nonmember previews in search and recents.
src/bundled/channels/CanvasEditor.test.tsx
Keep archived read-only canvas and history coverage aligned with the general read-only explanation.
src/bundled/channels/CanvasEditor.tsx
Explain read-only canvas access without incorrectly describing every reader as archived.
src/bundled/channels/canvas-panel.test.tsx
Exercise the registered canvas panel through Guest promotion and demotion without granting saving.
src/bundled/channels/canvas-panel.tsx
Retain Guest canvas reading and subscribe to read-only state changes.
src/bundled/channels/useConversationTabs.test.tsx
Exercise the same panel-launcher lifecycle for Member and Guest viewers.
src/bundled/channels/useConversationTabs.tsx
Preserve live Guest panel context and readable tabs while keeping cached channels excluded.
src/features/channel-templates/capability.ts
Separate canvas reading/history authorization from contribution authorization; existing callers keep their default behavior.
tests/browser/duration-layout.mjs
Allow the current consumer to name its next focus target; creation retains its Private toggle assertion.
Reproduction steps
Validation and limits
b4fcc19f2b0e70a8b854afc4561fa9a32b9b970f, based on main61695ec6e365f7ba002b09a51d7b040cd2935f2a. Preserves main's linked-message edits/deletes, roster recovery, existing SplitButton consumers and navigation behavior.5376f6851plus the artwork-centering change subsequently committed as13b2bbcdb: two Chromium owner/Guest cases, both themes, wide/narrow and 150% text, actual scrolling, keyboard menus and confirmation/cancel. Geometry checks verify no gap above the separator, 4px between text lines, equal 8px leading/artwork gaps and artwork centered within 0.02px. The later changes are a comment correction and browser-test focus expectations.b4fcc19f2. This exercises both the corrected details focus order and the unchanged creation Private control.b4fcc19f2: TypeScript/related units (132.27s), design checks (5.35s), Rust Clippy (1.97s) and destination/history checks. All 52 feature commits passed author/trailer audit. Hosted CI on the updated head remains separate.711582fc5, including the complete Guest canvas menu/host/tab/capability path, read-only editor and disabled Save. These run the actual app and production broker against a modeled signed relay; deployed enforcement remains separate.50d86b8b7, then 81 checks after separating canvas reading from writing; TypeScript and mandatory push gates passed at711582fc5. The final UI iteration adds no persistent browser cases; it uses temporary captures of the real app.27c5744abat 7/10. Membership, Guest search/canvas and default-copy repairs are published; no review of this final head has been assigned. The compact policy footer, split Add action menu and channel-default main Add behavior remain intentional.Screenshots
Actual app with neutral signed-relay fixtures. The private-access owner/Guest pair shows the final footer layout captured at
13b2bbcdb; later changes are comments and browser focus assertions. The Guest canvas capture remains from711582fc5. Images do not establish deployed-relay acceptance.