diff --git a/.changeset/identity-handle-resolution.md b/.changeset/identity-handle-resolution.md deleted file mode 100644 index 2226180..0000000 --- a/.changeset/identity-handle-resolution.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -"@atmo-dev/contrail-base": patch ---- - -fix(identity): stop stranding/clobbering handles during resolution (#42) - -Backfill left a meaningful fraction of identities with a PDS but no handle. -Two root causes: - -- `resolvePDSCached` short-circuited on any row with a non-null PDS and returned - without ever resolving the handle. A partial resolution (slingshot can return - a PDS without a handle under load) was therefore persisted and never healed. - It now treats a row as a complete cache hit only when both PDS *and* handle are - present; a PDS-only row falls through to re-resolve and fill the handle, while - still serving the known PDS (including if the re-resolution fails). -- `saveIdentity` overwrote `handle`/`pds` unconditionally, so - `refreshStaleIdentities` (which passes a null handle through when slingshot - omits one) could clobber a previously-resolved handle with null. The upsert now - COALESCEs both columns: a fresh non-null value still applies (handle changes - work), but a null never nulls a good value. - -Backfill also resolves PDS endpoints up front instead of in a detached -background promise, so identity resolution no longer competes with record -backfill for slingshot — reducing the partial responses that triggered the -above in the first place. diff --git a/packages/contrail-appview/CHANGELOG.md b/packages/contrail-appview/CHANGELOG.md index c1b9cbe..570af82 100644 --- a/packages/contrail-appview/CHANGELOG.md +++ b/packages/contrail-appview/CHANGELOG.md @@ -1,5 +1,14 @@ # @atmo-dev/contrail-appview +## 0.9.1 + +### Patch Changes + +- Updated dependencies [4c8fedb] + - @atmo-dev/contrail-base@0.9.1 + - @atmo-dev/contrail-authority@0.9.1 + - @atmo-dev/contrail-record-host@0.9.1 + ## 0.9.0 ### Minor Changes diff --git a/packages/contrail-appview/package.json b/packages/contrail-appview/package.json index 7720226..f591f7c 100644 --- a/packages/contrail-appview/package.json +++ b/packages/contrail-appview/package.json @@ -1,6 +1,6 @@ { "name": "@atmo-dev/contrail-appview", - "version": "0.9.0", + "version": "0.9.1", "description": "Public-records appview for contrail — jetstream ingestion, backfill, query layer, feeds, labels, profiles, per-collection XRPC routes.", "type": "module", "sideEffects": false, diff --git a/packages/contrail-authority/CHANGELOG.md b/packages/contrail-authority/CHANGELOG.md index 1766bb5..94b0836 100644 --- a/packages/contrail-authority/CHANGELOG.md +++ b/packages/contrail-authority/CHANGELOG.md @@ -1,5 +1,12 @@ # @atmo-dev/contrail-authority +## 0.9.1 + +### Patch Changes + +- Updated dependencies [4c8fedb] + - @atmo-dev/contrail-base@0.9.1 + ## 0.9.0 ### Patch Changes diff --git a/packages/contrail-authority/package.json b/packages/contrail-authority/package.json index 1e1f7ee..d2cfee9 100644 --- a/packages/contrail-authority/package.json +++ b/packages/contrail-authority/package.json @@ -1,6 +1,6 @@ { "name": "@atmo-dev/contrail-authority", - "version": "0.9.0", + "version": "0.9.1", "description": "Default space-authority implementation for contrail — member list, invites, app policy, credential issuance. Contrail's binary-membership ACL flavor; for ladder-style access levels see @atmo-dev/contrail-community.", "type": "module", "sideEffects": false, diff --git a/packages/contrail-base/CHANGELOG.md b/packages/contrail-base/CHANGELOG.md index db1878d..143377f 100644 --- a/packages/contrail-base/CHANGELOG.md +++ b/packages/contrail-base/CHANGELOG.md @@ -1,5 +1,31 @@ # @atmo-dev/contrail-base +## 0.9.1 + +### Patch Changes + +- 4c8fedb: fix(identity): stop stranding/clobbering handles during resolution (#42) + + Backfill left a meaningful fraction of identities with a PDS but no handle. + Two root causes: + + - `resolvePDSCached` short-circuited on any row with a non-null PDS and returned + without ever resolving the handle. A partial resolution (slingshot can return + a PDS without a handle under load) was therefore persisted and never healed. + It now treats a row as a complete cache hit only when both PDS _and_ handle are + present; a PDS-only row falls through to re-resolve and fill the handle, while + still serving the known PDS (including if the re-resolution fails). + - `saveIdentity` overwrote `handle`/`pds` unconditionally, so + `refreshStaleIdentities` (which passes a null handle through when slingshot + omits one) could clobber a previously-resolved handle with null. The upsert now + COALESCEs both columns: a fresh non-null value still applies (handle changes + work), but a null never nulls a good value. + + Backfill also resolves PDS endpoints up front instead of in a detached + background promise, so identity resolution no longer competes with record + backfill for slingshot — reducing the partial responses that triggered the + above in the first place. + ## 0.9.0 ## 0.8.0 diff --git a/packages/contrail-base/package.json b/packages/contrail-base/package.json index d39fef0..91352cf 100644 --- a/packages/contrail-base/package.json +++ b/packages/contrail-base/package.json @@ -1,6 +1,6 @@ { "name": "@atmo-dev/contrail-base", - "version": "0.9.0", + "version": "0.9.1", "description": "Shared infrastructure for the contrail family of packages — interfaces (SpaceAuthority, RecordHost, CommunityIntegration), credential primitives, binding resolvers, realtime infra, schema scaffolding. No routes, no tables of its own.", "type": "module", "sideEffects": false, diff --git a/packages/contrail-community/CHANGELOG.md b/packages/contrail-community/CHANGELOG.md index 3e55e9d..388f88c 100644 --- a/packages/contrail-community/CHANGELOG.md +++ b/packages/contrail-community/CHANGELOG.md @@ -1,5 +1,13 @@ # @atmo-dev/contrail-community +## 0.9.1 + +### Patch Changes + +- Updated dependencies [4c8fedb] + - @atmo-dev/contrail-base@0.9.1 + - @atmo-dev/contrail@0.9.1 + ## 0.9.0 ### Patch Changes diff --git a/packages/contrail-community/package.json b/packages/contrail-community/package.json index 9b21bd6..7ef6a7f 100644 --- a/packages/contrail-community/package.json +++ b/packages/contrail-community/package.json @@ -1,6 +1,6 @@ { "name": "@atmo-dev/contrail-community", - "version": "0.9.0", + "version": "0.9.1", "description": "Community module for contrail — community-owned spaces with tiered access levels (member → moderator → admin), invite tokens, DID provisioning, and the access-level reconciler that keeps spaces_members in sync.", "type": "module", "sideEffects": false, diff --git a/packages/contrail-record-host/CHANGELOG.md b/packages/contrail-record-host/CHANGELOG.md index 07161ca..cb54091 100644 --- a/packages/contrail-record-host/CHANGELOG.md +++ b/packages/contrail-record-host/CHANGELOG.md @@ -1,5 +1,12 @@ # @atmo-dev/contrail-record-host +## 0.9.1 + +### Patch Changes + +- Updated dependencies [4c8fedb] + - @atmo-dev/contrail-base@0.9.1 + ## 0.9.0 ### Patch Changes diff --git a/packages/contrail-record-host/package.json b/packages/contrail-record-host/package.json index e20fd4c..b520533 100644 --- a/packages/contrail-record-host/package.json +++ b/packages/contrail-record-host/package.json @@ -1,6 +1,6 @@ { "name": "@atmo-dev/contrail-record-host", - "version": "0.9.0", + "version": "0.9.1", "description": "Default record-host implementation for contrail — stores records and blobs for permissioned spaces, enforces local enrollment as the host's consent layer.", "type": "module", "sideEffects": false, diff --git a/packages/contrail/CHANGELOG.md b/packages/contrail/CHANGELOG.md index b82bcb8..7076dc0 100644 --- a/packages/contrail/CHANGELOG.md +++ b/packages/contrail/CHANGELOG.md @@ -1,5 +1,15 @@ # @atmo-dev/contrail +## 0.9.1 + +### Patch Changes + +- Updated dependencies [4c8fedb] + - @atmo-dev/contrail-base@0.9.1 + - @atmo-dev/contrail-appview@0.9.1 + - @atmo-dev/contrail-authority@0.9.1 + - @atmo-dev/contrail-record-host@0.9.1 + ## 0.9.0 ### Patch Changes diff --git a/packages/contrail/package.json b/packages/contrail/package.json index e784ff8..26b5430 100644 --- a/packages/contrail/package.json +++ b/packages/contrail/package.json @@ -1,6 +1,6 @@ { "name": "@atmo-dev/contrail", - "version": "0.9.0", + "version": "0.9.1", "description": "Index AT Protocol records with typed XRPC endpoints. Cloudflare Workers + D1, SvelteKit, Node.js.", "type": "module", "sideEffects": false, diff --git a/packages/lexicons/CHANGELOG.md b/packages/lexicons/CHANGELOG.md index 63c0055..b4f526e 100644 --- a/packages/lexicons/CHANGELOG.md +++ b/packages/lexicons/CHANGELOG.md @@ -1,5 +1,11 @@ # @atmo-dev/contrail-lexicons +## 0.4.10 + +### Patch Changes + +- @atmo-dev/contrail@0.9.1 + ## 0.4.9 ### Patch Changes diff --git a/packages/lexicons/package.json b/packages/lexicons/package.json index 3759eca..2360e2a 100644 --- a/packages/lexicons/package.json +++ b/packages/lexicons/package.json @@ -1,6 +1,6 @@ { "name": "@atmo-dev/contrail-lexicons", - "version": "0.4.9", + "version": "0.4.10", "description": "Generate atproto lexicon JSON (and optionally TypeScript types via @atcute/lex-cli) from a Contrail config.", "type": "module", "files": [ diff --git a/packages/sync/CHANGELOG.md b/packages/sync/CHANGELOG.md index ad9a3de..f70abe4 100644 --- a/packages/sync/CHANGELOG.md +++ b/packages/sync/CHANGELOG.md @@ -1,5 +1,7 @@ # @atmo-dev/contrail-sync +## 0.9.1 + ## 0.9.0 ## 0.8.0 diff --git a/packages/sync/package.json b/packages/sync/package.json index 02f533c..59f718b 100644 --- a/packages/sync/package.json +++ b/packages/sync/package.json @@ -1,6 +1,6 @@ { "name": "@atmo-dev/contrail-sync", - "version": "0.9.0", + "version": "0.9.1", "description": "Client-side reactive watch-store over contrail's watchRecords endpoints. SSE + WebSocket transports, optimistic updates, optional IndexedDB cache.", "type": "module", "sideEffects": false,