[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 #21 from flo-bit/changeset-release/main

Version Packages

authored by

Florian and committed by
GitHub
(Apr 25, 2026, 3:51 PM +0200) e835f310 3b794639

+97 -41
-18
.changeset/space-no-underscore.md
··· 1 - --- 2 - "@atmo-dev/contrail": minor 3 - "@atmo-dev/contrail-sync": minor 4 - --- 5 - 6 - unify the per-space marker field on records as `space` everywhere. previously `listRecords` / `getRecord` HTTP responses used `space: <spaceUri>` while watch events and `WatchRecord` exposed it as `_space`. the underscored form was inconsistent with the surrounding fields (`uri`, `cid`, `did`, etc.) and forced consumers to remember which path produced which name. 7 - 8 - **breaking.** anywhere you read `r._space` on a `WatchRecord` (or a watch event payload's `record._space` / `child._space`), rename to `r.space`. drop-in. 9 - 10 - ```ts 11 - // before 12 - if (record._space) ... 13 - 14 - // after 15 - if (record.space) ... 16 - ``` 17 - 18 - no migration needed for `listRecords` / `getRecord` consumers — that path was already `space`.
-20
.changeset/space-uri-scheme.md
··· 1 - --- 2 - "@atmo-dev/contrail": minor 3 - "@atmo-dev/contrail-sync": minor 4 - "@atmo-dev/contrail-lexicons": minor 5 - --- 6 - 7 - permissioned spaces now use the `ats://` scheme instead of `at://`. tracks the [permissioned data spec](https://dholms.leaflet.pub/3mhj6bcqats2o), which floats `ats://` as a distinct scheme so spaces can't be confused with atproto record URIs at any layer (logs, query params, dispatch, error messages). 8 - 9 - ``` 10 - - at://did:plc:alice/com.example.event.space/birthday 11 - + ats://did:plc:alice/com.example.event.space/birthday 12 - ``` 13 - 14 - what changed: 15 - - `buildSpaceUri` / `parseSpaceUri` (`@atmo-dev/contrail`) emit / accept `ats://`. anything else returns `null` from `parseSpaceUri`. 16 - - generated lexicons no longer claim `format: "at-uri"` on `spaceUri` params, on the `space` record-output field, or on `spaceView.uri` — they're plain `string`. (atproto's `at-uri` format would reject `ats://`.) regenerate committed `lexicons/generated/*` with `contrail-lex generate`; downstream `lex-cli generate` then emits `v.string()` instead of `v.resourceUriString()` for those fields. 17 - - realtime topics are unchanged in shape (`space:<uri>`), but `<uri>` is now an `ats://` URI. 18 - - record URIs (the `uri` on a record, the `appPolicyRef` field, `notifyOfUpdate` payloads) keep `at://` — those are still atproto record URIs. 19 - 20 - **breaking.** anywhere you build a space URI by string concatenation (`` `at://${did}/${type}/${key}` ``), switch to `ats://` or call `buildSpaceUri()`. anywhere you persist space URIs in your own DB, migrate (`UPDATE … SET space_uri = REPLACE(space_uri, 'at://', 'ats://') WHERE space_uri LIKE 'at://%'`).
+34
packages/contrail/CHANGELOG.md
··· 1 1 # @atmo-dev/contrail 2 2 3 + ## 0.4.0 4 + 5 + ### Minor Changes 6 + 7 + - 469bf65: unify the per-space marker field on records as `space` everywhere. previously `listRecords` / `getRecord` HTTP responses used `space: <spaceUri>` while watch events and `WatchRecord` exposed it as `_space`. the underscored form was inconsistent with the surrounding fields (`uri`, `cid`, `did`, etc.) and forced consumers to remember which path produced which name. 8 + 9 + **breaking.** anywhere you read `r._space` on a `WatchRecord` (or a watch event payload's `record._space` / `child._space`), rename to `r.space`. drop-in. 10 + 11 + ```ts 12 + // before 13 + if (record._space) ... 14 + 15 + // after 16 + if (record.space) ... 17 + ``` 18 + 19 + no migration needed for `listRecords` / `getRecord` consumers — that path was already `space`. 20 + 21 + - 469bf65: permissioned spaces now use the `ats://` scheme instead of `at://`. tracks the [permissioned data spec](https://dholms.leaflet.pub/3mhj6bcqats2o), which floats `ats://` as a distinct scheme so spaces can't be confused with atproto record URIs at any layer (logs, query params, dispatch, error messages). 22 + 23 + ``` 24 + - at://did:plc:alice/com.example.event.space/birthday 25 + + ats://did:plc:alice/com.example.event.space/birthday 26 + ``` 27 + 28 + what changed: 29 + 30 + - `buildSpaceUri` / `parseSpaceUri` (`@atmo-dev/contrail`) emit / accept `ats://`. anything else returns `null` from `parseSpaceUri`. 31 + - generated lexicons no longer claim `format: "at-uri"` on `spaceUri` params, on the `space` record-output field, or on `spaceView.uri` — they're plain `string`. (atproto's `at-uri` format would reject `ats://`.) regenerate committed `lexicons/generated/*` with `contrail-lex generate`; downstream `lex-cli generate` then emits `v.string()` instead of `v.resourceUriString()` for those fields. 32 + - realtime topics are unchanged in shape (`space:<uri>`), but `<uri>` is now an `ats://` URI. 33 + - record URIs (the `uri` on a record, the `appPolicyRef` field, `notifyOfUpdate` payloads) keep `at://` — those are still atproto record URIs. 34 + 35 + **breaking.** anywhere you build a space URI by string concatenation (`` `at://${did}/${type}/${key}` ``), switch to `ats://` or call `buildSpaceUri()`. anywhere you persist space URIs in your own DB, migrate (`UPDATE … SET space_uri = REPLACE(space_uri, 'at://', 'ats://') WHERE space_uri LIKE 'at://%'`). 36 + 3 37 ## 0.3.0 4 38 5 39 ### Minor Changes
+1 -1
packages/contrail/package.json
··· 1 1 { 2 2 "name": "@atmo-dev/contrail", 3 - "version": "0.3.0", 3 + "version": "0.4.0", 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,
+26
packages/lexicons/CHANGELOG.md
··· 1 1 # @atmo-dev/contrail-lexicons 2 2 3 + ## 0.4.0 4 + 5 + ### Minor Changes 6 + 7 + - 469bf65: permissioned spaces now use the `ats://` scheme instead of `at://`. tracks the [permissioned data spec](https://dholms.leaflet.pub/3mhj6bcqats2o), which floats `ats://` as a distinct scheme so spaces can't be confused with atproto record URIs at any layer (logs, query params, dispatch, error messages). 8 + 9 + ``` 10 + - at://did:plc:alice/com.example.event.space/birthday 11 + + ats://did:plc:alice/com.example.event.space/birthday 12 + ``` 13 + 14 + what changed: 15 + 16 + - `buildSpaceUri` / `parseSpaceUri` (`@atmo-dev/contrail`) emit / accept `ats://`. anything else returns `null` from `parseSpaceUri`. 17 + - generated lexicons no longer claim `format: "at-uri"` on `spaceUri` params, on the `space` record-output field, or on `spaceView.uri` — they're plain `string`. (atproto's `at-uri` format would reject `ats://`.) regenerate committed `lexicons/generated/*` with `contrail-lex generate`; downstream `lex-cli generate` then emits `v.string()` instead of `v.resourceUriString()` for those fields. 18 + - realtime topics are unchanged in shape (`space:<uri>`), but `<uri>` is now an `ats://` URI. 19 + - record URIs (the `uri` on a record, the `appPolicyRef` field, `notifyOfUpdate` payloads) keep `at://` — those are still atproto record URIs. 20 + 21 + **breaking.** anywhere you build a space URI by string concatenation (`` `at://${did}/${type}/${key}` ``), switch to `ats://` or call `buildSpaceUri()`. anywhere you persist space URIs in your own DB, migrate (`UPDATE … SET space_uri = REPLACE(space_uri, 'at://', 'ats://') WHERE space_uri LIKE 'at://%'`). 22 + 23 + ### Patch Changes 24 + 25 + - Updated dependencies [469bf65] 26 + - Updated dependencies [469bf65] 27 + - @atmo-dev/contrail@0.4.0 28 + 3 29 ## 0.3.0 4 30 5 31 ### Minor Changes
+1 -1
packages/lexicons/package.json
··· 1 1 { 2 2 "name": "@atmo-dev/contrail-lexicons", 3 - "version": "0.3.0", 3 + "version": "0.4.0", 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": [
+34
packages/sync/CHANGELOG.md
··· 1 1 # @atmo-dev/contrail-sync 2 2 3 + ## 0.4.0 4 + 5 + ### Minor Changes 6 + 7 + - 469bf65: unify the per-space marker field on records as `space` everywhere. previously `listRecords` / `getRecord` HTTP responses used `space: <spaceUri>` while watch events and `WatchRecord` exposed it as `_space`. the underscored form was inconsistent with the surrounding fields (`uri`, `cid`, `did`, etc.) and forced consumers to remember which path produced which name. 8 + 9 + **breaking.** anywhere you read `r._space` on a `WatchRecord` (or a watch event payload's `record._space` / `child._space`), rename to `r.space`. drop-in. 10 + 11 + ```ts 12 + // before 13 + if (record._space) ... 14 + 15 + // after 16 + if (record.space) ... 17 + ``` 18 + 19 + no migration needed for `listRecords` / `getRecord` consumers — that path was already `space`. 20 + 21 + - 469bf65: permissioned spaces now use the `ats://` scheme instead of `at://`. tracks the [permissioned data spec](https://dholms.leaflet.pub/3mhj6bcqats2o), which floats `ats://` as a distinct scheme so spaces can't be confused with atproto record URIs at any layer (logs, query params, dispatch, error messages). 22 + 23 + ``` 24 + - at://did:plc:alice/com.example.event.space/birthday 25 + + ats://did:plc:alice/com.example.event.space/birthday 26 + ``` 27 + 28 + what changed: 29 + 30 + - `buildSpaceUri` / `parseSpaceUri` (`@atmo-dev/contrail`) emit / accept `ats://`. anything else returns `null` from `parseSpaceUri`. 31 + - generated lexicons no longer claim `format: "at-uri"` on `spaceUri` params, on the `space` record-output field, or on `spaceView.uri` — they're plain `string`. (atproto's `at-uri` format would reject `ats://`.) regenerate committed `lexicons/generated/*` with `contrail-lex generate`; downstream `lex-cli generate` then emits `v.string()` instead of `v.resourceUriString()` for those fields. 32 + - realtime topics are unchanged in shape (`space:<uri>`), but `<uri>` is now an `ats://` URI. 33 + - record URIs (the `uri` on a record, the `appPolicyRef` field, `notifyOfUpdate` payloads) keep `at://` — those are still atproto record URIs. 34 + 35 + **breaking.** anywhere you build a space URI by string concatenation (`` `at://${did}/${type}/${key}` ``), switch to `ats://` or call `buildSpaceUri()`. anywhere you persist space URIs in your own DB, migrate (`UPDATE … SET space_uri = REPLACE(space_uri, 'at://', 'ats://') WHERE space_uri LIKE 'at://%'`). 36 + 3 37 ## 0.3.0 4 38 5 39 ### Minor Changes
+1 -1
packages/sync/package.json
··· 1 1 { 2 2 "name": "@atmo-dev/contrail-sync", 3 - "version": "0.3.0", 3 + "version": "0.4.0", 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,