Skip to content

Add Buckets shared-file channels - #6255

Draft
wca4a wants to merge 25 commits into
developfrom
codex/buckets-product-review
Draft

Add Buckets shared-file channels#6255
wca4a wants to merge 25 commits into
developfrom
codex/buckets-product-review

Conversation

@wca4a

@wca4a wca4a commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds %buckets group-scoped shared-file channels across the Urbit backend and the Messenger clients. This draft intentionally separates the product implementation from bot tooling and hosting rollout work so the Gall protocol, client UX, and state model can be reviewed together.

Included

  • %buckets Gall agent, types, marks, JSON conversion, Pioneer bridge threads, backend docs, and Gall tests
  • API models and subscriptions for Bucket channels
  • shared-store synchronization, creation, permissions, and broker client integration
  • mobile and web UI for folders, bucket-wide search, uploads, progress/retry/reconciliation, and file viewing
  • group-admin channel creation, permission selection, channel information, and host-attribution messaging
  • Cosmos fixtures, live-ship fixture support, and focused client/store tests

Deliberately excluded

Review note

The API-level Bucket contract overlaps with #6251 because both the Messenger client and the bot plugin consume it. The two branches should be reconciled before either merges; this PR is the authoritative product/Gall review surface.

Validation

  • API focused tests: 13 passed
  • shared-store focused tests: 22 passed
  • app focused tests: 15 passed
  • @tloncorp/api, @tloncorp/shared, and @tloncorp/app typechecks pass
  • API, shared, and app lint pass with zero errors (existing warnings remain)

Status

Draft for product, design, Gall, and architecture review. This is not a production rollout PR.

@blacksmith-sh

This comment has been minimized.

@wca4a

wca4a commented Aug 12, 2026

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: 92bf6f6304

ℹ️ 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 packages/app/features/buckets/useLiveBucket.ts
Comment thread packages/app/features/buckets/bucketUploadReconciliation.ts
Comment thread packages/app/features/buckets/BucketsLiveChannel.tsx Outdated
Comment thread packages/app/features/buckets/BucketsLiveChannel.tsx Outdated
Comment thread packages/api/src/client/urbit.ts Outdated
Comment thread packages/app/features/buckets/useLiveBucket.ts Outdated
@wca4a

wca4a commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the re-review in f8ba46c and brought the branch current with develop (884731e). %groups now returns a real null permission vase for missing/banned seats, and %buckets preserves that null through its authorization boundary so an empty writer-role set cannot accidentally authorize a seatless actor. The existing test-remote-write-without-seat now exercises and passes this denial path. Local ./backend/run-tests.sh is fully green: unit tests and the full Aqua suite both passed. The previous conflicting state is resolved; CI has been retriggered at the new head.

@wca4a

wca4a commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

Follow-up verification on the re-review:

  • groups now returns a vase containing null for missing/banned seats instead of an empty scry result.
  • %buckets preserves that nullable permission result through group-permissions; group-is-admin and group-can-write explicitly deny null.
  • This also closes the subtler open-writers case: a seatless ship can no longer be reinterpreted as a valid member with an empty role set.
  • Merged current develop; GitHub reports the PR mergeable.
  • Local ./backend/run-tests.sh: unit + Aqua suites passed.
  • GitHub: Backend Tests, Production Build Smoke Test, parallel E2E, Unit Tests, test-build, and CI OK all passed.

The initial test-build attempt failed while downloading Electron (RequestError: socket hang up) before source validation. I reran failed jobs; the rerun passed install, lint, types, tests, skill smoke, and package builds.

Two Shared E2E jobs remain in progress, but all PR-specific gated checks are green.

@blacksmith-sh

This comment has been minimized.

The branch was 172 commits behind. Five conflicts, all where develop moved a
file this branch had also touched; resolved to keep both sides rather than
either wholesale:

- desk.docket-0: took develop's glob, which matches current develop's
  frontend. It gets regenerated at release anyway.
- SystemNotices: develop refactored NonHostAdminChannelNotice onto the
  NoticeBanner/NoticeCard presentation system; kept that and folded the
  bucketHostedByGroup message into it as a title/body pair, so a Bucket still
  says it is hosted by the group host.
- ChannelScreen: develop rewrote the thread-unread effect to abort on
  cleanup, log failures, and depend on notesActivityCapabilitiesEpoch; kept
  that and moved the buckets exclusion into its early return. develop had
  already dropped the channelThreadAbortController ref, so nothing references
  it now.
- Channel/index: develop wrapped the tree in ThreadUnreadsProvider, which
  reindented everything below it. This branch's only change to the file was
  one FileDrop prop, so took develop's version and re-added
  dropEnabled={channel.type !== 'buckets'}.
- CreateChannelSheet: import union. Confirmed useToast, useState and
  ComponentProps are all still used.

Verified: pnpm install --frozen-lockfile clean (peru.yaml unchanged, so no
desk-deps resync needed), tsc clean on packages/app apart from the
pre-existing @tloncorp/editor/dist error, 209 shared store tests, 786 api
tests, 16 buckets client tests.
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.

2 participants