Cloud Team Collections (S3 + Supabase)#8052
Conversation
…mits, byte-identical), #8048 closed Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
02e5610 to
8ac48df
Compare
|
@greptile-apps review (Claude Fable 5: regenerated packaging branch — same 9 review-grained commits, now including the 13-14 Jul dogfood fixes: member display names + CONTRACTS v1.6, identity-first book resolution, --attended launch flag, remote-rename dedup, pending-invite constraint fix. Byte-identical to cloud-collections at f5a00c1.) |
|
| Filename | Overview |
|---|---|
| src/BloomExe/TeamCollection/Cloud/CloudTeamCollection.cs | Core cloud backend: implements GetUpdatesAvailableCount, ReceiveAllUpdates, E2–E9 optimizations, and polling. Contains a stale NOTE in ReceiveAllUpdates that contradicts both the doc comment and the code regarding which books are excluded from the badge count. |
| src/BloomExe/TeamCollection/Cloud/CloudBookTransfer.cs | New file: S3 upload/download with SHA-256 checksum verification, pinned version-id downloads, parallel transfer, staging-then-atomic-swap pattern, and retry logic. |
| src/BloomExe/TeamCollection/Cloud/CloudCollectionClient.cs | New file: RestSharp client for Supabase RPCs and edge functions with auth-retry, typed error mapping, and Newtonsoft-based serialization. |
| src/BloomExe/TeamCollection/Cloud/CloudRepoCache.cs | New file: thread-safe, persisted book/group cache with full/delta snapshot apply, write-through on mutations, and atomic Save via temp-then-move. |
| src/BloomExe/TeamCollection/Cloud/CloudAuth.cs | New file: provider-agnostic session lifecycle with proactive refresh at 80% TTL and on-demand 401 retry. |
| src/BloomExe/TeamCollection/Cloud/CloudTokenStore.cs | New file: DPAPI-backed persistent token store using DataProtectionScope.CurrentUser. |
| src/BloomBrowserUI/utils/bloomApi.ts | Adds useWatchApiDataWithReload and getApiDataOnce shared hooks. Correct caching and dep-suppression. |
| src/BloomBrowserUI/teamCollection/sharingApi.ts | New file: typed TS bindings for SharingApi endpoints using the new shared hooks. |
| src/BloomBrowserUI/teamCollection/teamCollectionApi.tsx | Adds capabilities/status-metadata/cloudCollectionId hooks with getApiDataOnce to prevent per-book re-fetches. |
| DistFiles/localization/en/Bloom.xlf | New XLF strings for cloud TC UI. Previously flagged double-hyphen fixed (now uses semicolon). |
Reviews (6): Last reviewed commit: "Cloud TC E2E: Playwright-over-CDP harnes..." | Re-trigger Greptile
…e P1) L10NSharp routes <note> content through XML-comment parsing, where '--' is illegal, so the CollectionTab.BookNotYetDownloaded note's '... confirmation -- may belong ...' crashed Bloom at startup with "An XML comment cannot contain '--'" once localization loaded. Replace the '--' with a semicolon. Found by Greptile on PR #8052; matches the known failure the xlf-strings skill documents. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
8ac48df to
b45e5e2
Compare
b45e5e2 to
8fbe66e
Compare
|
@greptile-apps review (Claude Fable 5) Regenerated review branch: re-merged origin/master, and folded in fixes for the Devin slice-review findings (upload-race lock, cache LockedSeat/LocalVersionSeq, experimental-feature-flag token collision, blank cloud history-event label). Byte-identical to the cloud-collections working branch. |
…obes cleaned up; Greptile re-running
8fbe66e to
aa3842f
Compare
|
@greptile-apps review (Claude Fable 5) Regenerated after a fresh-eyes review pass over yesterday's fixes: hardened the remote-rename guard (now keyed to the authoritative repo lock, so a checked-out-and-renamed book can't be reverted/clobbered at startup), display-name cache now invalidates on account switch, and the run.sh freshness check uses build outputs that incremental builds actually touch. Regeneration scripts now live in-repo (Design/CloudTeamCollections/orchestration/regen-*.sh). Byte-identical to cloud-collections. |
aa3842f to
51da40f
Compare
|
@greptile-apps review (Claude Fable 5) Regenerated after a documentation cleanup: removed 13 spent orchestration scratch files (one-time agent launch prompts, an implemented design sketch, stale scouting notes) — the diff shrinks from 256 to 243 files. The durable docs (design, CONTRACTS, GOING-LIVE deploy plan, task specs, state log, regeneration procedure) are unchanged. No code changes beyond three comment pointers in the e2e harness. Byte-identical to cloud-collections. |
51da40f to
98bc352
Compare
|
@greptile-apps review (Claude Code, Opus 4.8) Regenerated after applying the /simplify quality-review pass across the whole branch — intended as no behavior change:
Verification: C# required filter 442/442, vitest + deno green. One item worth a look: |
All 3 /simplify batches done + committed (6 logical-chunk commits); C# 442/442, vitest/deno green. Live e2e blocked by environment (WebView2 about:blank under the machine's memory pressure, not a regression). PR #8052 regenerated locally + byte-identical, force-push held for John's explicit OK. Flags recorded: master-merge/launcher reconciliation, live-e2e + launcher smoke for John's env, and the ReceiveAllUpdates/GetUpdatesAvailableCount predicate drift. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…PASS With memory freed (49% free), e2e-1 + e2e-2 both pass through the live Supabase+MinIO stack, live-verifying R1/R2 and ReceiveAllUpdates. Earlier about:blank failures were the documented memory-pressure flake. PR #8052 regenerated + force-pushed byte-identical; Greptile re-triggered. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Part of the Cloud Team Collections feature (S3 + Supabase backed Team Collections). This branch is a regenerable review-grained packaging of the cloud-collections working branch; only the final tree is test-verified (see Design/CloudTeamCollections/orchestration/SQUASH-PLAN.md). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Part of the Cloud Team Collections feature (S3 + Supabase backed Team Collections). This branch is a regenerable review-grained packaging of the cloud-collections working branch; only the final tree is test-verified (see Design/CloudTeamCollections/orchestration/SQUASH-PLAN.md). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…transactions Part of the Cloud Team Collections feature (S3 + Supabase backed Team Collections). This branch is a regenerable review-grained packaging of the cloud-collections working branch; only the final tree is test-verified (see Design/CloudTeamCollections/orchestration/SQUASH-PLAN.md). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Part of the Cloud Team Collections feature (S3 + Supabase backed Team Collections). This branch is a regenerable review-grained packaging of the cloud-collections working branch; only the final tree is test-verified (see Design/CloudTeamCollections/orchestration/SQUASH-PLAN.md). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…DK v4) Part of the Cloud Team Collections feature (S3 + Supabase backed Team Collections). This branch is a regenerable review-grained packaging of the cloud-collections working branch; only the final tree is test-verified (see Design/CloudTeamCollections/orchestration/SQUASH-PLAN.md). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…flow, background downloads, account-switch handling Part of the Cloud Team Collections feature (S3 + Supabase backed Team Collections). This branch is a regenerable review-grained packaging of the cloud-collections working branch; only the final tree is test-verified (see Design/CloudTeamCollections/orchestration/SQUASH-PLAN.md). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… book-list merge Part of the Cloud Team Collections feature (S3 + Supabase backed Team Collections). This branch is a regenerable review-grained packaging of the cloud-collections working branch; only the final tree is test-verified (see Design/CloudTeamCollections/orchestration/SQUASH-PLAN.md). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…oad placeholders Part of the Cloud Team Collections feature (S3 + Supabase backed Team Collections). This branch is a regenerable review-grained packaging of the cloud-collections working branch; only the final tree is test-verified (see Design/CloudTeamCollections/orchestration/SQUASH-PLAN.md). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Part of the Cloud Team Collections feature (S3 + Supabase backed Team Collections). This branch is a regenerable review-grained packaging of the cloud-collections working branch; only the final tree is test-verified (see Design/CloudTeamCollections/orchestration/SQUASH-PLAN.md). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
98bc352 to
9de218b
Compare
|
Too many files changed for review. ( Bypass the limit by tagging |
|
@greptile-apps review (Claude Code, Opus 4.8) Regenerated after merging current Backend efficiency (no behavior change):
Behavior changes (intentional, decided with John):
Test-only refactors (no production change):
Verification: cloud/TC C# filter 453/453; front-end consumer vitest 38/38; pgTAP/deno green earlier this cycle; live e2e-1/e2e-2 previously passed. |
Records the origin/master merge (10 commits, zero conflicts, merge not rebase because cloud-collections is shared), the cloud-collections push, and the cloud-tc-for-review regeneration (0 unmatched, byte-identical, force-pushed, Greptile re-triggered). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The full Cloud Team Collections feature — a cloud backend (one S3 bucket + Supabase Postgres/edge functions) for Bloom's Team Collections, alongside the existing folder implementation — packaged as 9 dependency-ordered, review-grained commits. Replaces draft PR #8048 (same tree, byte-identical — verified by an empty
git diffagainst thecloud-collectionsworking branch), whose ~200 orchestration-grained commits were not reviewable.Suggested review order = commit order:
tcschema, RLS, RPCs, pgTAP (65 green)CloudTeamCollection, polling monitor, progressive join, background downloads, account-switch takeover with per-collection-copy seatsReview caveat: each commit is a coherent reviewable unit and the order makes most of them compile, but only the FINAL tree is test-verified (C# cloud filter 428/428, full suite green, pgTAP 65/65, deno 33/33, E2E matrix green with every scenario passing on this tree). This is the accepted trade-off; per-commit CI-green is not a goal.
Bot review history (on #8048): Greptile reviewed the full diff via the file-limit bypass, found 1 P1 (S3 credential scoping) + 2 P2s — all fixed and verified resolved by its re-review ('No new blocking issues'). Devin cannot analyze a diff this size. CI green.
Remaining before merge: John's two [HUMAN] visual checks (centered check-in dialog; real web upload/download per GOING-LIVE.md 4.3) and the OUTSTANDING BUGS #0 follow-up decision (server-side same-user cross-seat check-in) — tracked in
Design/CloudTeamCollections/orchestration/DOGFOOD-BATCH-1.md.🤖 Generated with Claude Code
Devin review
This change is