Claude: changes for issue #92 #96
No reviewers
Labels
No labels
breaking-change
bug
documentation
duplicate
enhancement
good first issue
help wanted
performance
question
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Grandiras/ATProto.NET!96
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "claude/issue-92"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #92.
"type": "space"Lexicon definitions #92🤖 Reviewing this PR — follow along in the action run; the reply will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the task runs.
✅ Verdict: approve — no blocking issues found.
Solid implementation of
spaceLexicon definition support in both directions ofatproto-lexgen, plus diffing.CSharpEmitter.EmitSpaceType): emits a static holder aroundSpaceTypeDeclarationwith sensible fallback/warning behavior whenkey/name/collectionsare missing (matches therequiredmembers on the SDK'sSpaceTypeDeclaration, verified insrc/ATProtoNet/Spaces/SpaceTypeDeclaration.cs). The unknown-def-type warning correctly special-cases emptytypevs an unrecognized one, andLexiconSchema.Typedefaults to""(not null), so no NRE risk there.LexiconEmitter.EmitSpaceDeclarations/GetStaticSpaceDeclarations): the space scan runs before the abstract/interface/enum filter, which is necessary since the generated holder classes are implicitlyabstract sealed. NSID attribution via a siblingNsid/SpaceTypeconstant, with a.Contains('.')sanity check, is a reasonable heuristic. The def-collision guard (AddDefinition) deterministically keeps the first-seen definition and warns on the rest, addressing the same-NSID collision case the changelog calls out.LexiconDiffer.CompareSpaceDeclaration): correctly gated behind the existing type-equality check and record/space branches, so it can't be reached when types differ or after the record-specific comparison. Breaking/non-breaking classification (key = breaking, collection removal = breaking, name/localization/collection-addition = non-breaking) matches the documented "grant evaluated at read time" rationale, and tests cover each branch including type-swap-to-record.Code, docs (
docs/lexicon-codegen.md,docs/spaces.md), CHANGELOG, and the new/updated test suites (CSharpEmitterTests, newLexiconEmitterTests,LexiconDifferTests) are all internally consistent — the round-trip fixtures in the new test file are explicitly shaped to match what thecsharpemitter produces, which is a nice touch for catching drift between the two directions.One minor, non-blocking observation:
EmitSpaceTypewarns whenevercollectionsresolves to an empty list, whether the schema omitted the field or the author explicitly declared"collections": []to mean "no default set." Not a bug, just a potential source of an unavoidable warning for an intentionally collection-less space type — worth knowing about but not worth blocking on.⏱ 1m 50s · 6 turns · tokens: 48.1k in / 9.6k out (+361.1k cache-read)
📜 Full session transcript