[READ-ONLY] Mirror of https://github.com/flo-bit/contrail. atproto backend in a bottle flo-bit.dev/contrail/
0

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #62 from flo-bit/changeset-release/main

Version Packages

authored by

Tom Scanlan and committed by
GitHub
(Jun 17, 2026, 12:53 PM EDT) fa3d4cdd 2b9baa77

+69 -25
-17
.changeset/fts-no-duplicate-rows-on-backfill.md
··· 1 - --- 2 - "@atmo-dev/contrail-appview": patch 3 - --- 4 - 5 - Stop accumulating duplicate FTS rows when records are re-applied during backfill. 6 - 7 - The FTS-sync path only deleted an existing FTS row before inserting when the 8 - record was already in `existingMap`. Backfill runs with `skipReplayDetection`, 9 - which leaves `existingMap` empty, so every re-applied record looked brand-new 10 - and appended another FTS row. The FTS virtual table has no uniqueness 11 - constraint, so these accumulated, and the search JOIN fanned each event out into 12 - one result row per duplicate. Make the delete-then-insert unconditional so FTS 13 - sync is idempotent regardless of replay detection. 14 - 15 - The unconditional delete also evicts a stale FTS row when an update clears all 16 - searchable fields: in that case there is no content to re-insert, but the prior 17 - row must still be removed so old terms stop matching.
+22
packages/contrail-appview/CHANGELOG.md
··· 1 1 # @atmo-dev/contrail-appview 2 2 3 + ## 0.12.2 4 + 5 + ### Patch Changes 6 + 7 + - 32ace91: Stop accumulating duplicate FTS rows when records are re-applied during backfill. 8 + 9 + The FTS-sync path only deleted an existing FTS row before inserting when the 10 + record was already in `existingMap`. Backfill runs with `skipReplayDetection`, 11 + which leaves `existingMap` empty, so every re-applied record looked brand-new 12 + and appended another FTS row. The FTS virtual table has no uniqueness 13 + constraint, so these accumulated, and the search JOIN fanned each event out into 14 + one result row per duplicate. Make the delete-then-insert unconditional so FTS 15 + sync is idempotent regardless of replay detection. 16 + 17 + The unconditional delete also evicts a stale FTS row when an update clears all 18 + searchable fields: in that case there is no content to re-insert, but the prior 19 + row must still be removed so old terms stop matching. 20 + 21 + - @atmo-dev/contrail-base@0.12.2 22 + - @atmo-dev/contrail-authority@0.12.2 23 + - @atmo-dev/contrail-record-host@0.12.2 24 + 3 25 ## 0.12.1 4 26 5 27 ### Patch Changes
+1 -1
packages/contrail-appview/package.json
··· 1 1 { 2 2 "name": "@atmo-dev/contrail-appview", 3 - "version": "0.12.1", 3 + "version": "0.12.2", 4 4 "description": "Public-records appview for contrail — jetstream ingestion, backfill, query layer, feeds, labels, profiles, per-collection XRPC routes.", 5 5 "type": "module", 6 6 "sideEffects": false,
+6
packages/contrail-authority/CHANGELOG.md
··· 1 1 # @atmo-dev/contrail-authority 2 2 3 + ## 0.12.2 4 + 5 + ### Patch Changes 6 + 7 + - @atmo-dev/contrail-base@0.12.2 8 + 3 9 ## 0.12.1 4 10 5 11 ### Patch Changes
+1 -1
packages/contrail-authority/package.json
··· 1 1 { 2 2 "name": "@atmo-dev/contrail-authority", 3 - "version": "0.12.1", 3 + "version": "0.12.2", 4 4 "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.", 5 5 "type": "module", 6 6 "sideEffects": false,
+2
packages/contrail-base/CHANGELOG.md
··· 1 1 # @atmo-dev/contrail-base 2 2 3 + ## 0.12.2 4 + 3 5 ## 0.12.1 4 6 5 7 ### Patch Changes
+1 -1
packages/contrail-base/package.json
··· 1 1 { 2 2 "name": "@atmo-dev/contrail-base", 3 - "version": "0.12.1", 3 + "version": "0.12.2", 4 4 "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.", 5 5 "type": "module", 6 6 "sideEffects": false,
+7
packages/contrail-community/CHANGELOG.md
··· 1 1 # @atmo-dev/contrail-community 2 2 3 + ## 0.12.2 4 + 5 + ### Patch Changes 6 + 7 + - @atmo-dev/contrail@0.12.2 8 + - @atmo-dev/contrail-base@0.12.2 9 + 3 10 ## 0.12.1 4 11 5 12 ### Patch Changes
+1 -1
packages/contrail-community/package.json
··· 1 1 { 2 2 "name": "@atmo-dev/contrail-community", 3 - "version": "0.12.1", 3 + "version": "0.12.2", 4 4 "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.", 5 5 "type": "module", 6 6 "sideEffects": false,
+6
packages/contrail-record-host/CHANGELOG.md
··· 1 1 # @atmo-dev/contrail-record-host 2 2 3 + ## 0.12.2 4 + 5 + ### Patch Changes 6 + 7 + - @atmo-dev/contrail-base@0.12.2 8 + 3 9 ## 0.12.1 4 10 5 11 ### Patch Changes
+1 -1
packages/contrail-record-host/package.json
··· 1 1 { 2 2 "name": "@atmo-dev/contrail-record-host", 3 - "version": "0.12.1", 3 + "version": "0.12.2", 4 4 "description": "Default record-host implementation for contrail — stores records and blobs for permissioned spaces, enforces local enrollment as the host's consent layer.", 5 5 "type": "module", 6 6 "sideEffects": false,
+10
packages/contrail/CHANGELOG.md
··· 1 1 # @atmo-dev/contrail 2 2 3 + ## 0.12.2 4 + 5 + ### Patch Changes 6 + 7 + - Updated dependencies [32ace91] 8 + - @atmo-dev/contrail-appview@0.12.2 9 + - @atmo-dev/contrail-base@0.12.2 10 + - @atmo-dev/contrail-authority@0.12.2 11 + - @atmo-dev/contrail-record-host@0.12.2 12 + 3 13 ## 0.12.1 4 14 5 15 ### Patch Changes
+1 -1
packages/contrail/package.json
··· 1 1 { 2 2 "name": "@atmo-dev/contrail", 3 - "version": "0.12.1", 3 + "version": "0.12.2", 4 4 "description": "Index AT Protocol records with typed XRPC endpoints. Cloudflare Workers + D1, SvelteKit, Node.js.", 5 5 "type": "module", 6 6 "sideEffects": false,
+6
packages/lexicons/CHANGELOG.md
··· 1 1 # @atmo-dev/contrail-lexicons 2 2 3 + ## 0.4.15 4 + 5 + ### Patch Changes 6 + 7 + - @atmo-dev/contrail@0.12.2 8 + 3 9 ## 0.4.14 4 10 5 11 ### Patch Changes
+1 -1
packages/lexicons/package.json
··· 1 1 { 2 2 "name": "@atmo-dev/contrail-lexicons", 3 - "version": "0.4.14", 3 + "version": "0.4.15", 4 4 "description": "Generate atproto lexicon JSON (and optionally TypeScript types via @atcute/lex-cli) from a Contrail config.", 5 5 "type": "module", 6 6 "files": [
+2
packages/sync/CHANGELOG.md
··· 1 1 # @atmo-dev/contrail-sync 2 2 3 + ## 0.12.2 4 + 3 5 ## 0.12.1 4 6 5 7 ## 0.12.0
+1 -1
packages/sync/package.json
··· 1 1 { 2 2 "name": "@atmo-dev/contrail-sync", 3 - "version": "0.12.1", 3 + "version": "0.12.2", 4 4 "description": "Client-side reactive watch-store over contrail's watchRecords endpoints. SSE + WebSocket transports, optimistic updates, optional IndexedDB cache.", 5 5 "type": "module", 6 6 "sideEffects": false,