commits
TID format validator was rejecting valid TIDs like `3m3zm7eurxk26`.
It seems like syntax format assumed in the file is wrong, so I amended it to use https://atproto.com/specs/tid#tid-syntax. In particular, see the "reference regex" in the spec, which is `/^[234567abcdefghij][234567abcdefghijklmnopqrstuvwxyz]{12}$/` and doesn't match old code.
This is vibecoded so be cautious (though both Claude and ChatGPT seem happy with the result). I've also asked Claude to cross-check the new tests against `atproto/packages/syntax/src/tid.ts`.
Automatically adds $type key when transforming GraphQL data to AT Protocol
format in mutations:
- Blob fields: adds "$type": "blob"
- Lexicon refs: adds "$type": "{ref_nsid}" (e.g., "community.lexicon.location.hthree#main")
- Handles single values, arrays, and nested objects recursively
Renamed transform_blob_fields_for_atproto to transform_fields_for_atproto
to reflect expanded functionality.
- Handle local refs starting with # (e.g., #image)
- Handle external refs with specific def (e.g., app.bsky.embed.defs#aspectRatio)
- Handle external refs to main def (e.g., community.lexicon.location.hthree)
- Add extract_fields_from_properties() to extract fields from lexicon def properties
- Add capitalize_first() helper function
- Pass current lexicon NSID through resolve chain to support local ref resolution
- Generate proper type names: AppBskyEmbedImagesImage, AppBskyEmbedDefsAspectRatio, etc.
- Fixes schema build error for slices using AT Protocol standard lexicons with local refs
- Add GraphQLType::LexiconRef variant to distinguish lexicon type refs from record refs
- Implement type registry to track and deduplicate generated nested object types
- Add resolve_lexicon_ref_type() to resolve and generate types for lexicon refs like community.lexicon.location.hthree
- Add generate_nested_object_type() to recursively create GraphQL types for inline objects
- Update field resolvers to wrap nested object data in NestedObjectContainer
- Support both inline object definitions and lexicon type references
- Enable nested field queries in GraphQL (e.g., homeTown { name value })
Add slice_uri field to JobStatus struct and implement proper filtering in GraphQL subscriptions to prevent cross-slice job updates from appearing on the wrong slice's sync page.
- Add slice_uri to JobStatus struct in jobs.rs
- Update all JobStatus creations to include slice_uri from payload or database
- Implement slice filtering in syncJobUpdated subscription
- Add sliceUri field to SyncJob GraphQL type
Fixes validation error where local references in unions weren't resolved
correctly after following cross-lexicon references. Also updates README
title and adds repository URL to Cargo.toml.
🤖 generated with [claude code](https://claude.com/claude-code)
co-authored-by: claude <noreply@anthropic.com>
Now network.slices.lexicon records will:
1. Be treated as primary collections for the target slice
2. Get indexed without requiring the DID to be an existing actor
3. Not create an actor entry (since lexicons are metadata, not user activity)
TID format validator was rejecting valid TIDs like `3m3zm7eurxk26`.
It seems like syntax format assumed in the file is wrong, so I amended it to use https://atproto.com/specs/tid#tid-syntax. In particular, see the "reference regex" in the spec, which is `/^[234567abcdefghij][234567abcdefghijklmnopqrstuvwxyz]{12}$/` and doesn't match old code.
This is vibecoded so be cautious (though both Claude and ChatGPT seem happy with the result). I've also asked Claude to cross-check the new tests against `atproto/packages/syntax/src/tid.ts`.
Automatically adds $type key when transforming GraphQL data to AT Protocol
format in mutations:
- Blob fields: adds "$type": "blob"
- Lexicon refs: adds "$type": "{ref_nsid}" (e.g., "community.lexicon.location.hthree#main")
- Handles single values, arrays, and nested objects recursively
Renamed transform_blob_fields_for_atproto to transform_fields_for_atproto
to reflect expanded functionality.
- Handle local refs starting with # (e.g., #image)
- Handle external refs with specific def (e.g., app.bsky.embed.defs#aspectRatio)
- Handle external refs to main def (e.g., community.lexicon.location.hthree)
- Add extract_fields_from_properties() to extract fields from lexicon def properties
- Add capitalize_first() helper function
- Pass current lexicon NSID through resolve chain to support local ref resolution
- Generate proper type names: AppBskyEmbedImagesImage, AppBskyEmbedDefsAspectRatio, etc.
- Fixes schema build error for slices using AT Protocol standard lexicons with local refs
- Add GraphQLType::LexiconRef variant to distinguish lexicon type refs from record refs
- Implement type registry to track and deduplicate generated nested object types
- Add resolve_lexicon_ref_type() to resolve and generate types for lexicon refs like community.lexicon.location.hthree
- Add generate_nested_object_type() to recursively create GraphQL types for inline objects
- Update field resolvers to wrap nested object data in NestedObjectContainer
- Support both inline object definitions and lexicon type references
- Enable nested field queries in GraphQL (e.g., homeTown { name value })
Add slice_uri field to JobStatus struct and implement proper filtering in GraphQL subscriptions to prevent cross-slice job updates from appearing on the wrong slice's sync page.
- Add slice_uri to JobStatus struct in jobs.rs
- Update all JobStatus creations to include slice_uri from payload or database
- Implement slice filtering in syncJobUpdated subscription
- Add sliceUri field to SyncJob GraphQL type
🤖 generated with [claude code](https://claude.com/claude-code)
co-authored-by: claude <noreply@anthropic.com>