Issue #376: Remove StreamingProxy participant double writes#1024
Issue #376: Remove StreamingProxy participant double writes#1024louis4li wants to merge 2 commits into
Conversation
Use the room actor current-state projection as the participant read source and remove the separate participant actor/store writer. Closes #376 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c5d389624f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @@ -537,17 +524,6 @@ private static async Task<IResult> HandleJoinAsync( | |||
| }; | |||
| await DispatchRoomEnvelopeAsync(actorDispatchPort, actor.Id, envelope, ct); | |||
There was a problem hiding this comment.
Activate room projection before dispatching join events
HandleJoinAsync now only dispatches GroupChatParticipantJoinedEvent and returns, but it never ensures the room current-state projection is active first. In this module, the current-state lease is only explicitly activated from StreamingProxyRoomSessionProjectionPort.EnsureProjectionAsync (chat/subscription path), so a join on a room that has not started chat/streaming can be published before any projector subscribes; per IProjectedActor contract this can silently drop materialization, and IStreamingProxyParticipantQueryPort will then return an empty participant list until some later event replays state. This is a user-visible regression for “join then list participants” flows.
Useful? React with 👍 / 👎.
Review of PR #1024 — round 1Verdict: rework Verdict rationale (one paragraph)The PR correctly removes the separate StreamingProxy participant write path and moves participant listing onto a room current-state projection, but it leaves the other explicit half of issue #376 unchanged: FindingsF1 — Nyx round progression still lives in coordinator-local collections
What's good
REVIEW_VERDICT:rework:coordinator still owns Nyx round progression |
Move Nyx discussion progression into the room actor so the coordinator only performs participant LLM I/O. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Review of PR #1024 — round 2Verdict: pass Verdict rationale (one paragraph)Round 2 resolves the prior blocking gap: the diff now moves Nyx discussion transcript, active participant pruning, round cursor, reply success/failure recording, and terminal continue/stop decisions into FindingsNo blocking, comment, or nit findings. What's good (mandatory on pass)
Round comparison
REVIEW_VERDICT:pass:round progression actorized and participant double writes removed |
Issue
Closes #376 — Actorize StreamingProxy orchestration and remove participant double writes
Summary
Verification
dotnet build aevatar.slnx --nologodotnet test test/Aevatar.AI.Tests/Aevatar.AI.Tests.csproj --nologo --no-builddotnet test test/Aevatar.Studio.Tests/Aevatar.Studio.Tests.csproj --nologo --no-buildbash tools/ci/architecture_guards.shbash tools/ci/test_stability_guards.shgit diff --checkFollow-up split candidates
🤖 Generated by codex-implement-loop. Reviewer is a Claude subagent.