cluster-025: voice host session state moves to actor; remote audio disabled until raw transport#706
Conversation
…e audio disabled Per Phase 9 #701 consensus (Auric architecture + Option A, 3/3 unanimous round 5): - Collapse RemoteActorVoicePresenceSessionResolver from locked host-owned relay to setup/control-only bridge. Remove _gate, _state, AttachmentState, subscription handling, relay task, PCM-as-VoiceRemoteAudioInputReceived dispatch, and VoiceRemoteTransportOutput.AudioOutput forwarding. - Remote media attach now dispatches Open + immediate Close with reason "remote_audio_transport_unavailable", disposes transport, throws NotSupportedException so callers fail explicitly. - Keep remote setup/close/control envelope plumbing live through existing EventEnvelope + IActorDispatchPort (Auric pipeline: function-call boundary uses envelope, chunks never via envelope). - VoicePresenceSessionDispatch: direct host envelopes no longer accept VoiceRemoteAudioInputReceived. - VoicePresenceModule: actor still owns remote session open/close/control state; remote audio input inert; provider audio not republished as remote transport audio output. - WebSocket/WHIP endpoints surface remote_audio_transport_unavailable. - Behavior tests rewritten to assert setup/close/control remains and audio chunks never relayed through envelopes. Diff: 7 files, +172 / -440 (net -268). Build pass; VoicePresence.Tests 118/118; arch+stability guards pass. No new actor type, envelope kind, pipeline phase, or core abstraction added. Proto compatibility surface preserved (remote audio arms unused but reserved for future raw-transport restoration). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Codecov Report❌ Patch coverage is
@@ Coverage Diff @@
## auto-refact-dev #706 +/- ##
===================================================
- Coverage 82.44% 82.43% -0.02%
===================================================
Files 939 939
Lines 59722 59610 -112
Branches 7832 7818 -14
===================================================
- Hits 49240 49139 -101
+ Misses 7112 7100 -12
- Partials 3370 3371 +1
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 3 files with indirect coverage changes 🚀 New features to boost your workflow:
|
🤖 Phase 8 Reviewer —
|
🤖 Phase 8 Reviewer —
|
🤖 Phase 8 Reviewer —
|
Applied 7 fixes (FIX_DONE:706:round-1:applied-7:rejected-0:blocked-0): addresses tests reviewer reject + quality reviewer comment. Diff: 5 files, +158 / -14. Key additions: WebSocket/WHIP endpoint behavior tests for remote_audio_transport_unavailable scenarios (covers codecov/patch shortfall on new endpoint code paths). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
🤖 Fix codex round 1 —
|
🤖 Phase 8 Reviewer —
|
🤖 Phase 8 Reviewer —
|
🤖 Phase 8 Reviewer —
|
Applied 3 fixes (FIX_DONE:706:round-2:applied-3:rejected-0:blocked-0). Diff: 2 files, +1 / -21 (net -20). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
🤖 Fix codex round 2 —
|
🤖 Phase 8 Reviewer —
|
🤖 Phase 8 Reviewer —
|
🤖 Phase 8 Reviewer —
|
Applied 2 fixes (FIX_DONE:706:round-3:applied-2:rejected-0:blocked-0): - (A) architect: add Refactor (iter15/cluster-025) marker on DetachTransportAsync - (A) tests: add source-regression test asserting host-owned session state tokens (_gate, _state, AttachmentState, IActorEventSubscriptionProvider, VoiceRemoteAudioInputReceived) cannot return Diff: 2 files, +38. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
🤖 Fix codex round 3 —
|
…io surface (cluster-026) Applied 9 fixes (FIX_DONE:707:round-4:applied-9:rejected-0:blocked-0). Cross-PR note: also touches RemoteActorVoicePresenceSessionResolver (PR #706 scope). Both PRs delete same dead code → rebase clean either order. Diff: 7 files, +16 / -181 (net -165). Deletion-positive. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary / 摘要
English
iter15 cluster-025-voice-host-session-state-actorization (severity:medium, rule_ids: AG-ACTOR-LIFECYCLE-01).
RemoteActorVoicePresenceSessionResolverlocks shared mutable lease state (_gate,_state,AttachmentState) outside actor lifecycle, and relays PCM audio chunks throughEventEnvelope(VoiceRemoteAudioInputReceived/VoiceRemoteTransportOutput.AudioOutput).VoicePresenceModuleopen/close handlers +EventEnvelopeat function-call boundary only. Host-side lease state collapsed. Remote audio chunk envelope relay disabled until raw media transport exists; attach fails withremote_audio_transport_unavailable.Violated: CLAUDE.md "## Actor 执行模型" — "回调只发信号" + "业务推进内聚"; also AGENTS architecture "no chunk-data through EventEnvelope" (per Phase 9 #701 unanimous consensus).
中文
iter15 cluster-025-voice-host-session-state-actorization(严重度:medium,规则 ID:AG-ACTOR-LIFECYCLE-01)。
RemoteActorVoicePresenceSessionResolver在 actor 生命周期外用_gate/_state/AttachmentState锁定可变 lease 状态;并把 PCM 音频 chunk 通过EventEnvelope(VoiceRemoteAudioInputReceived/VoiceRemoteTransportOutput.AudioOutput) 中继。VoicePresenceModule的 open/close handler + 仅在 function-call 边界使用的EventEnvelope持有 remote session id 与 lease。host 侧 lease 状态被合并。remote 音频 chunk envelope 中继被禁用,直到 raw media transport 出现;attach 以remote_audio_transport_unavailable失败。违反:CLAUDE.md "## Actor 执行模型" — "回调只发信号" + "业务推进内聚";同时违反 AGENTS 架构 "chunk 数据不走 EventEnvelope"(按 Phase 9 #701 3/3 unanimous 共识)。
Scope / 范围
7 files changed, +172 / -440 (net -268).
src/Aevatar.Foundation.VoicePresence/Hosting/RemoteActorVoicePresenceSessionResolver.cssrc/Aevatar.Foundation.VoicePresence/Hosting/CompositeVoicePresenceSessionResolver.cssrc/Aevatar.Foundation.VoicePresence/Hosting/VoicePresenceEndpoints.cssrc/Aevatar.Foundation.VoicePresence/Hosting/VoicePresenceSessionDispatch.cssrc/Aevatar.Foundation.VoicePresence/Modules/VoicePresenceModule.cstest/Aevatar.Foundation.VoicePresence.Tests/RemoteActorVoicePresenceSessionResolverTests.cstest/Aevatar.Foundation.VoicePresence.Tests/VoicePresenceModuleTests.csValidation: build pass;
Aevatar.Foundation.VoicePresence.Tests118/118 pass;architecture_guards.sh+test_stability_guards.shpass.No new actor type / envelope kind / pipeline phase / core abstraction. No proto removal in this patch (compatibility surface preserved). No external repo changes.
Phase 9 design source
Closes #681 after merge. Built on Phase 9 #701 round 5 consensus (architect+tests+quality solvers all
propose:A). See implement summary in.refactor-loop/runs/implement-cluster-025-voice-host-session-state-actorization.md.🤖 Auto-loop / codex-refactor-loop iter15 (Phase 9 consensus → implement)