Repository navigation
Keep local artifact collections current - #1507
Conversation
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account, with independent Rocket, Mantis and Groot review lanes.
Reviewed head 513638a755fbaf63850b66493ca32bea4de3b92b against base 17dead4cc294f8a81f8f2c0be428264fc8790405. Three concrete defects are detailed inline: one P1 and two P2s. Source assessment: 8/10 against the repository’s 9/10 standard; the pagination, reconnect-lifetime and wire-format fixes below are needed to meet that bar. This COMMENT review is advisory; humans decide merge readiness.
Scope: all 18 changed files, storage/session/outbox callers, the stacked storage contract, and the linked relay #8523 protocol at 357da40b3941efd083ea053fab56dbef3cce619c. Inspected the public description and feature commit metadata; no attached images or disclosure finding. Existing storage and delivery owners are reused; native-only capability gating is explicit. No UI component/focus changes are present.
Validation: source analysis only; no tests, builds or app execution. One hosted-check snapshot for this head showed CI required and all executed checks successful; Windows native validation was skipped. The added browser journey exercises real Web Locks/IndexedDB ownership transfer; no browser cases were removed. Its fixed relay snapshot and mocked reader do not establish reconnect or actual relay wire compatibility. Native end-to-end sync, live recovery, performance under production load and human acceptance remain unverified.
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source follow-up via Wes’s account, integrating independent Rocket, Mantis and Groot reviews.
No actionable findings in the six-file fix delta from 513638a755fbaf63850b66493ca32bea4de3b92b to reviewed head 5ee2df40119406b2404caa976e7346eff4029b78 (base 17dead4cc294f8a81f8f2c0be428264fc8790405). The three prior findings are addressed in source: continuation requests now carry only the cursor, open collections survive transient unscoped reconnect snapshots while work remains cancelled, and timestamp validation accepts the relay serializer’s fractional precision forms. Source assessment: 9/10 for this follow-up.
The existing reader, reconciliation and collection-lifetime owners are retained. Regression tests cover the real client reader with a server-shaped token validator, both timestamp response paths, and reconnect recovery with subsequent live/accepted-write hints and periodic repair. The actual linked relay parser/protocol and Chrono serialization source were checked separately; the test does not execute the relay itself. No browser journeys were added or removed in this delta. The public description and new commit metadata were inspected; no attached images or disclosure finding.
Validation is source only: no tests, builds or app execution. A single hosted-check snapshot at 01:58 UTC showed completed executed checks successful, six browser shards still running, and Windows native validation skipped; final CI completion was not established. Native end-to-end sync with the compatible relay, actual reconnect/persistence behavior, production performance and human acceptance remain unverified. This follow-up checks the prior repairs and regressions they introduce; it is not a fresh whole-feature runtime validation or merge approval.
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source follow-up via Wes’s account.
No new changes requested. Compared with previously reviewed eb518c3f7c022394cc014e74a9b908b522aa2b07, the 16 existing feature-file patches retain the same additions and deletions. The merge resolves two import conflicts by preserving both incremental-sync and verified-profile imports. The only additional patch updates the Attention source test to expect native.claim(bot, 0), matching the service’s protection-revision argument and neighboring tests.
Reviewed head 3739f6d3b29f331899e939a5c7111a3c2799731f against base 65a47c469fbb3fc6175e555ef2eb910fb0e36bb3. This uses the small merge-follow-up solo exception; no new teammate review is claimed. The public description and commit messages were inspected, with no new disclosure finding and no attached images. No browser cases were added or removed by this follow-up.
Source-only: tests were inspected, not run; no builds or app execution, and CI was not assessed. The description reports current-head Chromium/WebKit fixture results, which I did not independently reproduce. Native end-to-end sync with the compatible relay and real-relay reset-load validation remain pending. This COMMENT is not approval or merge authorization.
|
🤖 Cross-PR alignment with our guarded Nexus archive/restore work in #2112 and block/buzz#8909. Reviewed this head ( Two integration boundaries to retain:
Our existing native lifecycle pass did not exercise This was source review and merge simulation; I did not run combined tests or the app. |
|
🤖 Recover when the server rejects the saved bookmark (checkpoint) At If that token is the saved checkpoint, every retry sends the same unusable checkpoint. The collection cannot make progress. Because the sync pump runs delta before queued current-ID reads, the repeated failure also blocks refreshes queued by live events or accepted edits. Please route a rejected saved checkpoint through bounded recovery: retry without it, revalidate saved IDs using the existing recovery path, and save the replacement checkpoint only after the whole pass succeeds. One small relay-side option is to return A changed relay signing key is one exceptional trigger. The current relay requires a configured stable key, so ordinary restarts should not cause this. This feedback is about recovering from an unusable saved checkpoint, not an assumption that production keys routinely change. Source review only; this failure path has not been exercised at runtime. |
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
|
🤖 fixed in d99a1a353. A parsed server response with HTTP 400 and The three recovery cases fail before the fix. All 94 focused tests pass with it. The tests use the real client reader with fixed HTTP responses. Native validation against a compatible relay remains pending |
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source follow-up via Wes’s account, integrating independent Rocket, Mantis and Groot lanes.
No new actionable findings in the three-file follow-up from 3739f6d3b29f331899e939a5c7111a3c2799731f. A classified HTTP400 rejection of the initial saved checkpoint now gets one fresh capture plus saved-ID revalidation through the existing recovery path. Continuation failures and locally rejected requests/responses still fail without that reset. Progress is committed only after recovery completes; failed recovery retains the previous checkpoint and existing retry/error handling.
Reviewed head d99a1a35350c50c44f1c2505ad4470e34abf90e7, base 65a47c469fbb3fc6175e555ef2eb910fb0e36bb3. The six new colocated cases cover success, bootstrap/revalidation failure and the no-reset boundaries. No browser cases were added or removed by this follow-up. Optional documentation cleanup: add relay-rejected saved checkpoints to the recovery triggers in docs/artifact-sync.md. Public description and commit material inspected; no attached images or new disclosure finding.
Source-only: tests were inspected, not run; no builds or app execution, and CI was not assessed. The description reports Chromium/WebKit fixture results that we did not reproduce. Native end-to-end sync, IndexedDB restart recovery, real-relay reset-load performance and human acceptance remain unverified. This COMMENT is not approval or merge authorization.
## Why Compatible clients need incremental artifact reads for local collections on every Buzz relay. ## What Expose incremental artifact reads and capability discovery on every Buzz relay. ## How Serve incremental queries through the existing authentication and authorization checks. Keep the existing work budgets and the separate WebSocket sync capability. The HTTP test verifies capability discovery and a successful incremental query. ## Risk The relay starts no additional background work. Clients that use incremental reads consume database capacity. The net database load is not yet measured. Serving writers must maintain the modification timestamps. ## Testing Read-only SQL checks on November 3, 2026 verify the prerequisites below. Each database records successful migrations 76–78. All five required columns have the expected types, defaults, and nullability. All five indexes have the expected definitions and are valid, ready, and live. | Deployment | Schema and indexes | Running timestamp writers | | --- | --- | --- | | Production `bb-block` | Pass | `f6f6d9a` includes PR 8523 | | Production `bb-public` | Pass | `f3a7bab` includes PR 8523 | | Staging `bb-block` | Pass | `b4509de` includes PR 8523 | The checked columns are `artifact_heads.modified_at`, `artifact_revisions.modified_at`, `artifact_revisions.source_channel_id`, `channel_members.sync_modified_at`, and `communities.artifact_policy_modified_at`. The checked indexes are `idx_artifact_revisions_artifact`, `artifact_heads_modified`, `artifact_heads_channel`, `channel_members_sync`, and `artifact_revisions_moves`. At commit `62b26ad`, all 21 NIP-11 tests and the HTTP capability test pass on Linux with PostgreSQL 17 and Redis. The HTTP test checks capability discovery and a successful incremental query. All required push hooks also pass. No manual testing. Human confirmation remains pending. ## Bigger picture [Client PR 1507](block/buzz-app#1507) uses the advertised capability for local artifact sync. Existing deployments receive this behavior when they deploy the relay version that includes this PR. Generated with Codex --------- Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Daniel Rouleau <drouleau@squareup.com>
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source follow-up via Wes’s account.
No new actionable findings in this merge follow-up. Compared with reviewed d99a1a35350c50c44f1c2505ad4470e34abf90e7, 15 of the 16 feature-file patches retain the same additions and deletions. The sole conflict in http-admission.ts preserves both artifact-sync error metadata and main’s HTTP-status argument for write-refusal classification. Both caller paths and their existing regression tests were inspected; the reader, reconciler and sync-owner implementations are unchanged.
Reviewed head 09ee7d13d049a01d4b583fccc386797643c84814 against base 1d9f64bb9c08552aeca92d42d58a02a74beaa786. This uses the small merge-follow-up solo exception; no new teammate review is claimed. Public description and the new merge commit were inspected; no attached media or new disclosure finding. No browser cases were added or removed by this follow-up.
Source-only: no tests, builds or app execution. One current-head hosted-check snapshot showed CI required and all executed checks successful; Windows validation was skipped. The description’s local browser results cover the prior head. Native end-to-end sync with the compatible relay, actual restart/recovery behavior, real-relay reset-load performance and human acceptance remain unverified. This COMMENT is not approval or merge authorization.
Co-authored-by: Martha <73923046810b68ae182000e74ef7c444383a907df20f81f2ba1008870a6f45a1@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * origin/main: test(agents): refuse a real relay workflow mention in the harness kit (#2444) fix(agents): catch up every event watch on the kinds it watches (#1852) Keep local artifact collections current (#1507) feat(members): add several people to a chat in one write (#2010) Signed-off-by: John Tennant <jtennant@block.xyz>
Co-authored-by: Martha <73923046810b68ae182000e74ef7c444383a907df20f81f2ba1008870a6f45a1@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * origin/main: (96 commits) test(agents): refuse a real relay workflow mention in the harness kit (#2444) fix(agents): catch up every event watch on the kinds it watches (#1852) Keep local artifact collections current (#1507) feat(members): add several people to a chat in one write (#2010) feat(solo): let viewers join read-only spaces (#2301) [3/5] Add protection to the Claude harness plugin (#1878) fix(settings): keep the bottom padding on long sections (#2361) fix(mermaid): cap diagram output size (#2231) feat(agents): give plugin agent types the Buzz side of a turn (#2364) feat(plugins): pin buzz://plugin-install links to a path and commit (#2315) feat(plugins): tint currentColor SVG page icons like host icons (#2314) feat(notifications): add a soft notification sound (#1536) feat(agents): let agents propose a profile picture (#2267) fix(plugins): default reminders and workflows off for fresh installs (#2291) Show all reactors in compact, separate emoji capsules (#2179) fix(panels): remember page split widths per workspace (#2264) feat(search): browse open channels from a Channels tab in search (#2164) perf(relay): page combined replay filters after a reconnect (#2308) fix(composer): make native Mac text shortcuts work past link chips (#2390) perf(relay): read creator proofs for many channels per filter (#2312) ... Signed-off-by: John Tennant <jtennant@block.xyz>
…-mentions * origin/main: (57 commits) Keep local artifact collections current (#1507) feat(members): add several people to a chat in one write (#2010) feat(solo): let viewers join read-only spaces (#2301) [3/5] Add protection to the Claude harness plugin (#1878) fix(settings): keep the bottom padding on long sections (#2361) fix(mermaid): cap diagram output size (#2231) feat(agents): give plugin agent types the Buzz side of a turn (#2364) feat(plugins): pin buzz://plugin-install links to a path and commit (#2315) feat(plugins): tint currentColor SVG page icons like host icons (#2314) feat(notifications): add a soft notification sound (#1536) feat(agents): let agents propose a profile picture (#2267) fix(plugins): default reminders and workflows off for fresh installs (#2291) Show all reactors in compact, separate emoji capsules (#2179) fix(panels): remember page split widths per workspace (#2264) feat(search): browse open channels from a Channels tab in search (#2164) perf(relay): page combined replay filters after a reconnect (#2308) fix(composer): make native Mac text shortcuts work past link chips (#2390) perf(relay): read creator proofs for many channels per filter (#2312) fix(channels): let published leave and delete confirm through access loss (#2357) fix(media): save native context menu media downloads and hide loopback links on macOS (#2131) ... Signed-off-by: Ravneet Arora <rarora@squareup.com>
…est-work-activity * origin/main: test(agents): refuse a real relay workflow mention in the harness kit (#2444) fix(agents): catch up every event watch on the kinds it watches (#1852) Keep local artifact collections current (#1507) feat(members): add several people to a chat in one write (#2010) feat(solo): let viewers join read-only spaces (#2301) [3/5] Add protection to the Claude harness plugin (#1878) fix(settings): keep the bottom padding on long sections (#2361) fix(mermaid): cap diagram output size (#2231) feat(agents): give plugin agent types the Buzz side of a turn (#2364) feat(plugins): pin buzz://plugin-install links to a path and commit (#2315) feat(plugins): tint currentColor SVG page icons like host icons (#2314) feat(notifications): add a soft notification sound (#1536)
…w-tab * origin/main: test(agents): refuse a real relay workflow mention in the harness kit (#2444) fix(agents): catch up every event watch on the kinds it watches (#1852) Keep local artifact collections current (#1507) feat(members): add several people to a chat in one write (#2010) feat(solo): let viewers join read-only spaces (#2301)
Signed-off-by: John Tennant <jtennant@block.xyz> Co-authored-by: Damon <8a08290d889f1c68921542bfe9631d4cd671be9bea5f1114951f386819e4c10a@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * origin/main: feat(agents): identify plugins in native hook output (#2299) [4/5] Add protection to the Codex harness plugin (#1879) feat(search): show member counts on channel results (#2333) Fix the mute icon flashing when selecting a channel (#2287) feat(agents): open a working agent's transcript from its activity (#2276) test(agents): refuse a real relay workflow mention in the harness kit (#2444) fix(agents): catch up every event watch on the kinds it watches (#1852) Keep local artifact collections current (#1507) feat(members): add several people to a chat in one write (#2010)
Co-authored-by: Honor <e0bf479eeebe47dde1e35705212a4df70616a7bc834d907ddfb18cf0405f8b1b@seiler-test.communities.public.builderlabstaging.xyz> * origin/main: feat(agents): identify plugins in native hook output (#2299) [4/5] Add protection to the Codex harness plugin (#1879) feat(search): show member counts on channel results (#2333) Fix the mute icon flashing when selecting a channel (#2287) feat(agents): open a working agent's transcript from its activity (#2276) test(agents): refuse a real relay workflow mention in the harness kit (#2444) fix(agents): catch up every event watch on the kinds it watches (#1852) Keep local artifact collections current (#1507) feat(members): add several people to a chat in one write (#2010) Signed-off-by: Brad Seiler <seiler@squareup.com>
…-service * origin/main: (73 commits) fix(bestie): deleting an agent saves no Bestie record where there was none (#2420) fix(unread): never treat agents-audience messages as unread (#1552) feat(focus): add an optional Focus plugin that quiets everything except Solo chats (#2277) [5/5] Add protection to the Goose harness plugin (#839) feat(agents): identify plugins in native hook output (#2299) [4/5] Add protection to the Codex harness plugin (#1879) feat(search): show member counts on channel results (#2333) Fix the mute icon flashing when selecting a channel (#2287) feat(agents): open a working agent's transcript from its activity (#2276) test(agents): refuse a real relay workflow mention in the harness kit (#2444) fix(agents): catch up every event watch on the kinds it watches (#1852) Keep local artifact collections current (#1507) feat(members): add several people to a chat in one write (#2010) feat(solo): let viewers join read-only spaces (#2301) [3/5] Add protection to the Claude harness plugin (#1878) fix(settings): keep the bottom padding on long sections (#2361) fix(mermaid): cap diagram output size (#2231) feat(agents): give plugin agent types the Buzz side of a turn (#2364) feat(plugins): pin buzz://plugin-install links to a path and commit (#2315) feat(plugins): tint currentColor SVG page icons like host icons (#2314) ... # Conflicts: # src-tauri/src/host_process.rs # src-tauri/src/lib.rs # src/bundled/claude-code/claude.ts # src/bundled/codex/rpc.ts # src/bundled/goose/goose.ts # src/bundled/goose/runtime.ts # src/bundled/goose/sessions.test.ts # src/bundled/goose/sessions.ts # src/features/agent-harness/acp/process.ts
* origin/main: (22 commits) feat(mentions): quieter mention menu that marks agents and their owners (#2328) feat: add a Canvas View tab, History diffs and a 256 KiB limit (#2318) feat(plugins): let local agents write and reload plugins (#2435) feat(onboarding): offer Create a community after public Builderlab sign-in (#2397) Open any Inbox filter view by route (#2394) fix(bestie): deleting an agent saves no Bestie record where there was none (#2420) fix(unread): never treat agents-audience messages as unread (#1552) feat(focus): add an optional Focus plugin that quiets everything except Solo chats (#2277) [5/5] Add protection to the Goose harness plugin (#839) feat(agents): identify plugins in native hook output (#2299) [4/5] Add protection to the Codex harness plugin (#1879) feat(search): show member counts on channel results (#2333) Fix the mute icon flashing when selecting a channel (#2287) feat(agents): open a working agent's transcript from its activity (#2276) test(agents): refuse a real relay workflow mention in the harness kit (#2444) fix(agents): catch up every event watch on the kinds it watches (#1852) Keep local artifact collections current (#1507) feat(members): add several people to a chat in one write (#2010) feat(solo): let viewers join read-only spaces (#2301) [3/5] Add protection to the Claude harness plugin (#1878) ... Signed-off-by: Gil Birman <gil@squareup.com> Co-authored-by: Claude <noreply@anthropic.com>
Why
Saved task records need updates after restart without a full download on each sync.
What
Keep each local collection current through the relay's incremental reads. Resume from the last saved checkpoint with a 120-second overlap.
How
One window owns each collection. It saves paged changes and current-ID reads in order. Explicit removals preserve saved bodies and preferences. Channel removal commits at most 100 saved records at a time. Failed pages cannot advance progress. Access recovery revalidates saved IDs.
Incremental reads use
artifacts.incrementalandartifact: "incremental". The existing WebSocket service keepsartifacts.syncfor a complete set followed by live updates. The two capabilities work independently. Long retries wait 60–90 seconds so owners do not all retry at the same fixed interval.Risk
The overlap assumes bounded database delay. Incremental reads cover permanent channels. Native end-to-end sync needs the compatible relay and client together.
Testing
At
09ee7d13d, native macOS tests use the real Buzz relay. A host collection saves bootstrap data, resumes from its checkpoint after app restart, and reads a later update after a live hint. Channel removal returns an explicitremove; the saved body and pinned preference remain, with unavailable status.The relay rejects an invalid initial checkpoint with HTTP 400. The client makes one fresh pass. An injected failure of that fresh pass preserves the prior checkpoint, body, and preference.
A real policy change returns HTTP 409 with
policy_changed. Recovery loads 101 records in pages of 100 and one, then rechecks saved IDs in batches of 100 and one. The two delta reads take 156 ms and 50 ms. All 101 records remain saved, with a checkpoint and no refresh error. This verifies the page boundary; large-scale performance remains unmeasured.Human acceptance passes in the native test harness: Publish test update reaches the saved collection and preserves the pinned preference. The operator supplies the PASS screenshot. The harness uses the real host service and signed reader. It does not establish adoption by a production plugin.
Chromium and WebKit also pass the two ownership-transfer cases with real IndexedDB and Web Locks. Command:
bin/pnpm exec playwright test --config tests/browser/playwright.config.mjs tests/browser/artifact-sync.spec.mjs --project chromium --project webkit --no-deps.buzz-review-completed
Bigger picture
The storage prerequisite, PR 1501, is merged into
main. The relay prerequisite is PR 8523. The client preserves the WebSocket service from PR 1523.Generated with Codex