Claude: changes for issue #66 #67
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Grandiras/ATProto.NET!67
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "claude/issue-66"
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 #66.
🤖 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.
Clean refactor that hoists subscriber registration out of
SubscribeAsync's lazy generator into an eagerPdsSequencer.Subscribe(cursor)returning a disposablePdsFirehoseSubscription. The replay snapshot,CurrentSeq, andOldestAvailableSeqare all captured under the same lock at registration time, so the WebSocket handler can register beforeAcceptWebSocketAsyncand validate the cursor against a state snapshot rather than the sequencer's live state — correctly closing the race described in issue #66.SubscribeAsyncnow delegates toSubscribe+ReadAllAsync, preserving prior behavior (backlog snapshot, single-reader bounded channel, drop-on-full semantics, subscriber removal infinally/Dispose). Dispose is idempotent (tested), double-enumeration is guarded (tested), and the new unit tests cover buffering-before-read, snapshot isolation from a later publish, dispose idempotency, and single-enumeration enforcement. CHANGELOG entries are appropriately placed under Added/Fixed. No correctness, security, or omission issues found; a couple of very minor no-ops (early cursor-error path still transiently registers/disposes a subscription, the seq<=lastReplayed guard inReadAllAsyncis now unreachable since replay and channel seq ranges can't overlap) aren't worth blocking on.⏱ 0m 39s · 1 turns · tokens: 20.6k in / 3.7k out (+23.7k cache-read)
📜 Full session transcript