Files
buzz/docs/nips
Wes 6a86531ac9 feat(relay): add atomic complete read-state snapshots (#7572)
Opened by Brain on behalf of Wes (GitHub: wesbillman).

## Summary

Add an opt-in, host-scoped completeness primitive for NIP-RS read-state
clients. Ordinary query arrays and WebSocket behavior remain unchanged.

- Advertise a version-1 `read_state_snapshot` capability in NIP-11 only
when the request resolves a community.
- Accept exactly one self-author kind-30078 snapshot filter on
authenticated `POST /query`, after the existing admission, replay and
membership gates.
- Read all retained, nondeleted self-author kind-30078 coordinates from
the writer at one SQL-statement MVCC cut—including unrelated application
coordinates and events without a read-state tag.
- Return a complete versioned envelope bound to community, signer and a
content-identity hash. Reject malformed contracts,
reconstruction/signature/storage failures and whole-request overflow;
never return a truncated complete response.
- Bound snapshots at 4,096 events and 8 MiB of compact encoded
event-array bytes, advertised as `max_event_array_bytes`; envelope
metadata is additional. Retain the separate stored-payload preflight
budget.

## Safety and scope

This is point-in-time enumeration, **not** a live freshness guarantee,
cursor, CAS token, cross-relay transaction, or unread total. NIP-RS now
explicitly requires fresh complete enumeration from every write relay
before each override action, canonical publication, carry-forward or
deletion. It does not enable synchronized manual-unread overrides in any
client. No schema migration or deployment is included.

## Validation

Executed against the source committed as
`1fd5a5e0c0d893c1259386885517c0c44ae7630f`:

- Four real-router/PostgreSQL snapshot cases: beyond-page-cap
enumeration and overflow; corruption/storage failure; production
payload-bound NIP-98, Redis replay guard and membership enforcement;
host discovery/scope/strict request shape.
- Two database cases: replacement during preflight preserves a single
statement cut; encoded-byte overflow and writer-not-replica routing. The
cluster-wide probe uses the required `cluster_global_` serialization
prefix.
- Production-call-site mutations killed for dispatch, strict filter
validation, discovery tenant, snapshot tenant, encoded-byte guard,
membership enforcement and replay enforcement; isolated mutation tree
restored.
- Both affected crates pass all-target Clippy; formatting, differential
file-size and repository PostgreSQL test-discovery checks pass.
- Normal pre-push gates pass without bypass: branch skew, push-head
scope, file size, Rust unit lanes and desktop Tauri checks.
- Independent read-only review by Pinky found no remaining relay blocker
at this commit. The execution/mutation results above were run by Brain,
not duplicated by the reviewer.

Hosted CI and maintainer review remain separate gates. No production
traffic or deployment was used for these fixture tests.

Originating Buzz channel: `a394ecdb-9c67-4c4e-a3c6-4a95f69e8cc8`
(unread-but-good), thread
`2413d0ba7fa5b2ac5c777df6b3754e2099b042ec8fb96ca64302a0919a0550b3`.

## Review repair (2026-09-21)

Carl updated this existing branch to
`2f9c9b11266c24947412cf28cefae4e96e7167b7`, merging main
`5079c770fe30bb3d8204822ce6c2431eacac6d4b` without rewriting published
history.

- Resolved the DB export conflict, preserving both snapshot and
storage-accounting exports.
- Addressed the blocking review using its accepted alternative: rename
`max_bytes` to `max_event_array_bytes` and explicitly document that
success-envelope metadata is outside the array budget. No auth, query,
runtime-limit, or client-behavior redesign.
- Added a PostgreSQL/router regression proving discovery, exact
8,388,608-byte array success with a larger envelope, and one-byte-over
rejection (413, no partial complete response).

Exact-head validation: all seven snapshot PostgreSQL/router tests passed
in an isolated local database; both affected crates passed all-target
Clippy; mandatory pre-commit/pre-push gates passed without bypass (Rust
unit lanes, Tauri default/mesh Clippy and tests, differential file size,
branch-skew/ref checks). Reverting only the descriptor rename made the
new regression fail before the final commit. Independent bounded
source-delta review by Mordecai found no blockers; execution was Carl's.

A broader `cargo test -p buzz-db -p buzz-relay --all-targets` run on the
merged candidate passed 131 DB tests and 1,057 relay tests, then
encountered the same unrelated
`mesh_demo::demo_join_forwarded_arm_round_trips_echo` 504 recorded in
the prior review. Full repository `just ci` / `just test` were not rerun
locally; hosted CI remains a separate gate. No deployment or production
traffic was exercised.

---------

Signed-off-by: Brain <1a02c72794dcd0f07058a353bc3a81f4028b8c77c92c87fce6d5c8b85970a20b@buzz.block.builderlab.xyz>
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Co-authored-by: Brain <1a02c72794dcd0f07058a353bc3a81f4028b8c77c92c87fce6d5c8b85970a20b@buzz.block.builderlab.xyz>
Co-authored-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
2026-09-21 12:30:03 -06:00
..