持续重构集成#690
Conversation
📊 iter17 进展 — 4/4 cluster merged 🎉
iter17 净改动:多 actor / 多 projection / proto schema 演化 + 删 process-local 权威源。 🤖 controller status banner |
📊 iter18 audit 派出iter17 4/4 cluster merged → 自动派 iter18 audit codex(per SKILL '## INFINITE refactor loop')。
剩 open design issue:#720 #722(escalated 等 maintainer)— 不阻 iter18。 🤖 controller status banner |
📊 iter18 bootstrap — 7 cluster 进入工作链
Phase 9 multi-solver 已为 6 design issue 排队,controller 下次 wakeup 触发派出 r1 三 solver。 🤖 controller status banner |
📊 iter18 Phase 9 r1 派出(6 design issue × 3 solver = 18 child codex)
每 solver 3600s 上限。等齐 3 solver per issue → controller 派 meta-judge。 🤖 controller status banner |
📊 iter18 Phase 9 r1 全 18 codex 派出 ✅
后台 in-flight = 19 codex(18 Phase 9 r1 solver + 1 cluster-003 implement)。 🤖 controller status banner |
implement: cluster-003已完成
摘要: |
📊 iter18 Phase 9 r1 结果
后台 in-flight = 13 codex(12 r2 solver + 1 rebase resolve)。 🤖 controller status banner |
📊 iter18 进展更新
iter18 净:2/7 cluster merged;5 escalated 等 maintainer 决策。 Auto-loop 推进无可派任务(全 escalation 路径 + 0 in-flight codex)。下次 wakeup 进入 idle heartbeat 模式。 🤖 controller status banner |
📊 iter19 audit 派出iter18 已 merge 2/7(余 5 escalated 等 maintainer);loop 在 idle 后按 INFINITE 规则派 iter19 audit 拉新工作(独立于 escalation 路径)。 🤖 controller status banner |
📊 状态 — 已收到 maintainer 评论(daemon 识别)
🤖 comment-monitor.sh daemon ⟦AI:AUTO-LOOP⟧ |
📊 状态卡片 — solver 派出
🤖 controller status banner ⟦AI:AUTO-LOOP⟧ |
📊 状态卡片 — solver 派出
🤖 controller status banner ⟦AI:AUTO-LOOP⟧ |
|
⟦AI:AUTO-LOOP⟧ iter20 bootstrap complete OPENED:design-issue:cluster-001-studio-host-authoring-orchestration:747 Notes:
|
📊 codex 进展 iter20-bootstrap (⏳ 进行中; 已跑 6 min)
|
Brings in 50 cluster commits from the codex-refactor-loop rollup branch — 368 files, +22120/-12016 net (matches PR #690). Major architectural inflow: - ILLMProvider stream-only contract (cluster-001 deletes ChatAsync; all 25 callsites migrated to ChatStreamAsync+aggregator) - NyxRelay reply-token cleanup → persisted admission claim flow (CaptureNyxRelayReplyToken/RemoveNyxRelayReplyToken/Schedule*Cleanup helpers + NyxRelayReplyTokenCleanupRequestedEvent removed; capped RelayReplayClaimsCap=10000, PendingRelayAdmissionsCap=1000) - Studio authoring port + Host fake actor shell deletion (iter21 cluster-001) - Request-path projection priming via CQRS binders (iter21 cluster-002, supersedes #751) - Projection scope watermark → typed readmodel + committed-state publication hook (cluster-003/006) - Voice host session state / provider response epoch move into actor turn (iter15 cluster-025/026/027) - Workflow scope/channel typed proto fields (cluster-029) Conflicts resolved (3): - agents/.../ConversationGAgent.cs: kept router's chat-route admission reject path (issue #694), replaced the dead RemoveNyxRelayReplyToken call with ClearReplyLifecyclesAsync(..., "chat_route_rejected") to match the new admission-claim flow; merged the runCopy mutations so target_ref + reply_token + transport credentials all flow through to the run actor. - test/Aevatar.AI.Tests/NyxIdChatEndpointsCoverageTests.cs: kept HEAD's generalized NormalizeEndpointArgs (Any-based) with chat-routing stub insertions, dropped auto-refact-dev's legacy length-equality short-circuit. - test/.../ConversationGAgentDedupTests.cs: merged optional ctor params (queryPort + chatRouteResolver + store + eventPublisher) and kept both branches' helper classes (StaticChatRoute* + RecordingEventPublisher). Build: 171 projects, 0 errors. No push.
per Auric 2026-05-21 "完整分析改脚本": 新文件 tools/refactor-loop/controller_lib.sh: - safe_worktree: detect-or-create,消除 "already exists" race - merge_pr <pr>: auto-close linked issue + cleanup phase labels + worktree remove。修复 #2 (Closes # 不 trigger close 因为 base!=master) - open_pr_with_label: 原地 export PR_NUM,消除 bash subshell grep var bug (iter22 #690 reviewer 误发事故) - render_template: 处理 {{var}} + envsubst 双语法 - sweep_stale_labels: 批量清 closed but in-flight phase label - validate_prompt: 派 codex 前 check 0 unresolved {{var}} (iter25 #784 implement blocked 事故) 模板修正:audit.md/implement.md/remote-ci-fix.md/test-add.md/verify.md 全部从 {{var}} 转 ${VAR}(envsubst 兼容)。 SKILL.md 新章节: - Label 生命周期状态机(per kind:design issue / cluster PR / rollup PR) - 强制规则:派 codex 必 validate_prompt;merge 必 merge_pr; worktree 必 safe_worktree;PR num 必 open_pr_with_label ⟦AI:AUTO-LOOP⟧
…ned + callback self-signal (#872) * iter44 issue-866 voice-presence-process-runtime-state: VoicePresenceModule 字段事实改 actor-owned + callback self-signal 按 issue #866 Phase 9 r1 consensus(meta-judge: structural,reuse RoleGAgent voice runtime): 1. VoicePresenceModule 删 _runtimeState/_userTransport/_selfEventDispatcher/_relayCts/_userToProviderRelay/_providerToUserRelay 等参与业务事实的 module field 2. 业务事实改 RoleGAgent voice runtime state 唯一权威(actor-owned typed state) 3. Transport/provider handles 改 volatile byte-only lease(不决定 business state) 4. Provider/transport callback 改 typed self-signal pattern(actor turn validate) 5. WebRtcVoiceTransport lock 收窄到 pure codec buffer(不影响 control/session state) 6. voice_presence.proto / VoicePresenceSession / VoicePresenceSessionDispatch 适配 7. 测试覆盖 typed-only authority + callback self-signal + transport byte-only + lock 收窄 不引入新 actor。 Closes #866 ⟦AI:AUTO-LOOP⟧ * test(pr872 r3): 补 codecov/patch — VoicePresenceModule typed signal + lease validation + provider keying 覆盖 omnibus r2 approve(架构 OK),但 codecov/patch < 80%。补 4 处: - VoicePresenceModuleTests +351 LOC:typed signal handler + lease owner/expiry validation + provider callback keying - VoiceTransportRelayTests:微调 12 LOC 注:codex 也微调 production(voice_presence.proto +9 字段 / VoicePresenceModule +176 LOC)— 应是 codex 补 typed signal 完整化所需 minor 增益(非新功能,架构 surface 完整化)。 本地 Cobertura diff-line for VoicePresenceModule.cs:404/427 = 94.6%。 ⟦AI:AUTO-LOOP⟧
…e-endpoint-direct-runtime-dispatch
…-turn-inline-timeouts
…althProbeStartupService 改 committed-state activation (#875) * iter47 cluster-005 status-dashboard-startup-projection-activation: HealthProbeStartupService 改 committed-state activation plan provider 按 iter47 audit cluster-005(requires_design:false,机械重构): 1. HealthProbeStartupService: 删 _projectionPort.EnsureProjectionForActorAsync 直接 startup priming 2. HealthProbeStartupService: 删 Task.Delay retry,改 hosted scheduling pattern 3. 新增 HealthProbeCommittedStateProjectionActivationPlanProvider(projection-owned lifecycle activation,非 query-time priming) 4. HealthProbeProjectionPort + StatusDashboardServiceCollectionExtensions 适配 5. 测试:HealthProbeStartupServiceTests(+169 行)/ HealthProbeCommittedStateProjectionActivationPlanProviderTests / StatusDashboardServiceCollectionExtensionsTests Note: full test suite has pre-existing failures in scripting/GAgentService integration tests not in this change scope。本 PR 仅含 StatusDashboard 改动 + 测试,本地相关测试 pass。 ⟦AI:AUTO-LOOP⟧ * fix(iter47 cluster-005): r2 codecov coverage gap — 补 HealthProbeCommittedStateProjectionActivationPlanProvider + DI 测试 按 PR #875 codecov-quality fail:patch coverage 不达标。 补测试覆盖: - HealthProbeCommittedStateProjectionActivationPlanProvider 完整 lifecycle path - HealthProbeStartupService 新 path(删 EnsureProjection + Task.Delay 后) - DI 注册改动 applied=3 rejected=0 blocked=0(per fix-pr875-r2 codex) ⟦AI:AUTO-LOOP⟧
…tor-turn-inline-timeouts iter47 issue-878 actor-turn-inline-timeouts: 删 CardKit actor-turn 等待,改 typed continuation
…vice-endpoint-direct-runtime-dispatch iter47 issue-873 device-endpoint-direct-runtime-dispatch: typed facade + 删 callback auto-create + registration admission
Cover VoicePresence typed sentinel endpoint branches and WHIP detach behavior.\n\n⟦AI:AUTO-LOOP⟧
… + dual store,room actor 单事实源 (#893) * iter50 issue-887 streaming-proxy-participant-authority: room actor 单事实源,删 singleton + dual store + readmodel design consensus(Phase 9 r1 unanimous,#887):room-actor-authority-delete-singleton。 删除: - StreamingProxyParticipantGAgent(singleton cluster-scoped actor) - streaming_proxy_participant_messages.proto + State - Projection/projector + studio_projection_readmodels.proto 内 StreamingProxyParticipantCurrentStateDocument - projection readmodel registration + cluster-scoped 启动注册 - ActorBackedStreamingProxyParticipantStore(dual-write surface)+ 应用层 IActorRuntime 注入 保留/重做: - StreamingProxyGAgent per room 作 participant authority(已 own participants 字段) - Endpoint 改 typed application/interaction service 注入,移走 IActorRuntime - 应用层调 room current-state query 替代旧 store - 不动 StreamingProxyNyxParticipantCoordinator(facade 边界,#885 并行) - 不动 NyxID LLM provider / room chat semantics - 不动 chat lifecycle path(那是 #885/#877) 测试:room actor authority + endpoint typed service + 删 singleton 后无引用残留 + projection 物化路径。 31 files +399/-1235(净 -836 LOC,真删除而非空壳)。 ⟦AI:AUTO-LOOP⟧ * fix(pr893 r2): r1 architect+quality 2 BLOCKER — projection activation + actor-owned idempotent join quality+architect r1 2 BLOCKER: 1. Participant readmodel 无 projection activation path → 加 StreamingProxyCommittedStateProjectionActivationPlanProvider + ServiceCollectionExtensions DI 2. Cold/stale projection 漏入 write control flow → 删 service-layer dedupe(read projection 决定 dispatch);dedupe 决策上移 actor 内(StreamingProxyGAgent.HandleGroupChatParticipantJoined 见 participants.Contains(id) → 不 publish event) 更新 stale test: - StreamingProxyCoverageTests:duplicate same-id joins 期望 publish count 1(不再 2),actor-owned idempotent ⟦AI:AUTO-LOOP⟧ * test(pr893 r3): 加 StreamingProxyCommittedStateProjectionActivationPlanProviderTests + DI 注册 + 物化链 omnibus r2 mixed:架构 OK 但缺 activation provider 回归测试。 加 8 tests covering: - Provider 真给出 activation plan - Plan 真覆盖 room state-event types - DI 注册 provider 到 dispatcher chain - committed state-event → projection runs → readmodel populated ⟦AI:AUTO-LOOP⟧
…or,改 typed provisioning port (#883) * iter49 cluster-049 chat-history-index-side-lifecycle: 删 ChatConversationGAgent service-locator,改 typed provisioning port 按 iter49 audit cluster-049-chat-history-index-side-lifecycle(requires_design:false 机械重构): 1. 删 ChatConversationGAgent.cs:118 `Services.GetService(IActorRuntime)` service-locator 反射 resolve 2. 删 inline 创 ChatHistoryIndexGAgent in event handling 3. 改 constructor-injected narrow provisioning/topology port(IChatHistoryIndexProvisioningPort 或类似) 4. ChatHistoryIndexGAgent 由 catalog/manager actor / explicit topology setup 前创建 不引入新 actor / 不改 user-visible behavior。 ⟦AI:AUTO-LOOP⟧ * test(pr883 r1): 补 ChatConversationGAgent lifecycle boundary tests for coverage-quality patch cover ChatConversationGAgent forwarding lines 48 / 73; codex-verified Cobertura hits 已覆盖。注:仓库 coverage_quality_guard.sh 在 PROJECTION_DISABLED 集成测试失败前就 exit,不影响本 PR 实际 coverage。 ⟦AI:AUTO-LOOP⟧
|
host-composition-smoke investigation:
|
…ent facade + 删 UI/layout server fact (#869) * iter42 issue-864 studio-workspace-execution-fact-owner: ServiceRunGAgent readmodel facade + 删 UI/layout server fact 按 issue #864 Phase 9 r2 consensus(meta-judge: delete framing): 1. ExecutionsController/Service backed by IServiceRunQueryPort(bounded facade,scope-filtered + bounded Take + no query-time replay/priming) 2. 删 server-side UI/layout workspace facts(appearance theme / color mode / workflow canvas layout / authoritative HasLayout) 3. 派生 draft index 自 existing StudioWorkspaceGAgent draft map + workflow/service catalog readmodels 4. ScriptEvolutionSessionGAgent / StudioWorkspaceGAgent state 收窄(typed proto field 重排) 5. 新增 guard tools/ci/studio_fact_owner_guard.sh 防 FileStudioWorkspaceStore / StoredExecutionRecord / executions/*.json / StudioExecutionHistory* / DraftIndexActor / workflow-draft-index.json resurrection 6. architecture_guards.sh 接入新 guard 不引入新 actor(retrospective follow-up of #711 reflector "split" 决议的正确收尾)。 Closes #864 ⟦AI:AUTO-LOOP⟧ * fix(iter42 issue-864): r2 polish — 3 comment 处理 按 PR #869 r1 3 reviewer comments(均 non-blocking): - quality: ExecutionService 内重复 refactor banner → 改短 local intent 注释 - tests: studio_fact_owner_guard.sh 缺 negative/fixture test → 新增 StudioFactOwnerGuardTests.cs(在 Architecture.Tests 项目) - architect: minor advisory 处理 applied=4 rejected=0 blocked=0(per fix-pr869-r2 codex) ⟦AI:AUTO-LOOP⟧ * fix(pr869): make studio fact owner guard self-contained
…okup + 4 ports + guard (#903) design consensus(Phase 9 r1 unanimous,#898):structural typed Projection Core lease lookup。 机械扩展 #884 pattern 到 4 个 feature ports: - agents/Aevatar.GAgents.NyxidChat/NyxIdChatProjectionSession.cs - agents/Aevatar.GAgents.StreamingProxy/StreamingProxyRoomSessionProjectionPort.cs - src/Aevatar.Scripting.Projection/Orchestration/ScriptEvolutionProjectionPort.cs - src/workflow/Aevatar.Workflow.Projection/Orchestration/WorkflowExecutionProjectionPort.cs 全部走 IProjectionScopeAttachExistingLeaseLookup<TLease>。新 guard tools/ci/projection_attach_existing_side_read_guard.sh 防 recurrence,挂 architecture_guards.sh。 ⟦AI:AUTO-LOOP⟧
…eceipts + 3 narrow ports (#904) * iter51 issue-900 workflow-actor-port-runtime-object: typed actor-id receipts + 3 narrow ports design consensus(Phase 9 r1 unanimous,#900):actor-id-workflow-receipts-split-ports。 删 Application 层 IActor 暴露: - IWorkflowRunActorPort 拆为 3 个窄端口:IWorkflowDefinitionProvisioningPort / IWorkflowRunProvisioningPort / IWorkflowDefinitionParser - Application 改 typed WorkflowRunCreationReceipt(ActorId, DefinitionActorId, CreatedActorIds) - WorkflowRunCommandTarget 基于 ActorId + dispatch contract,不持 IActor - 一次性替换 caller,不留 backwards-compat shim 35 files +287/-495(净 -208 LOC,删除压倒添加)。 验证:test_stability_guards / workflow_binding_boundary_guard / architecture_guards 全 PASS。 ⟦AI:AUTO-LOOP⟧ * fix(pr904 r2): 删 double-bind regression + 加 integration test omnibus r1 reject:DefaultServiceRuntimeActivator EnsureDefinitionAsync 后又 BindWorkflowDefinitionAsync,real port 内部已 bind → WorkflowGAgent.Version 增 2 次,duplicate committed facts。 修法:删 duplicate Bind 调用;加 real-port integration test 断言 Version 只增 1 次;fix test fake 让其 model bind side effect。 ⟦AI:AUTO-LOOP⟧
…ion proto contract + typed schedule boundary (#880) * iter48 issue-879 runtime-callback-persistent-state-not-proto: Foundation runtime proto contract + typed schedule boundary 按 issue #879 Phase 9 r1 consensus(meta-judge: structural): 1. 新 runtime_callback_scheduler_state.proto:Foundation runtime callback proto contract(actor id / callback id / generation / periodic / due/period / fire index / delivery mode / trigger envelope) 2. 删 RuntimeCallbackSchedulerGrainState.cs(hand-written C# class + Dictionary + byte[] EnvelopeBytes) 3. 替换 IRuntimeCallbackSchedulerGrain / RuntimeCallbackSchedulerGrain 使用 proto-backed state 4. OrleansActorRuntimeDurableCallbackScheduler 改 typed EventEnvelope schedule boundary(无 raw bytes) 5. runtime_callback_guards.sh 更新:阻止非 proto IPersistentState<...State> callback payload 6. 测试:RuntimeCallbackSchedulerStateProtoTests(新) / OrleansActorRuntimeCallbackSchedulerTests / OrleansActorRuntimeForwardingTests / CiTestAuthorityContractTests 更新 不引入新 actor / 新 query surface;保留 actor-scoped Orleans scheduler grain + lease semantics。 Closes #879 ⟦AI:AUTO-LOOP⟧ * chore: trigger CI re-run after gh checkout flake Empty commit to retry actions/checkout@v4 transient failure on PR #880(infrastructure issue, not code). ⟦AI:AUTO-LOOP⟧ * fix(pr880 r1): typed slot_epoch in lease + envelope proto — preserve generation fencing across v2 storage upgrade architect r1 BLOCKER:`SchedulerStateName -v2` 重置 generation fencing,旧 persisted lease 可 cancel 升级后新 schedule。 修法 B(typed epoch): - 新 lease/envelope proto 加 `slot_epoch` 字段 - v2 storage 用新 epoch - cancel/cancel-by-generation 校验 (slot_epoch, generation) 一对 - 旧 epoch 的 lease 不能 cancel 新 epoch 的 schedule 加 regression test:old-epoch-lease-vs-new-schedule-fencing。 ⟦AI:AUTO-LOOP⟧ * Fix runtime callback guard fallback * test: cover runtime callback slot epoch lines * test: cover runtime callback grain fences
… startup materializer + readmodel facade (#902) * iter46 issue-871 workflow-file-catalog-query-port: WorkflowGAgent + startup materializer + readmodel facade 按 issue #871 Phase 9 r1 consensus(meta-judge): 1. WorkflowGAgent per-definition authority(committed definition state) 2. FileBackedWorkflowCatalogPort retire as online query source 3. WorkflowCapabilitiesStartupMaterializer(新)— startup time 一次性 file → readmodel projection 4. WorkflowCapabilitiesCurrentStateDocumentMetadataProvider(新)— typed readmodel projection 5. WorkflowDefinitionCatalog + WorkflowGAgent state proto 适配 6. workflow_state.proto / workflow_execution_messages.proto 扩展 typed events 7. tools/ci/workflow_catalog_query_port_guard.sh(新)— 防 Directory.EnumerateFiles / WorkflowParser.Parse / LoadConnectors / _cacheLock / _workflowFileDiscoveryCache / _parsedWorkflowCache 在 query port 复活 8. WorkflowProjectionMaterializationTests(+84)+ 其他测试覆盖 不引入新 actor type(no WorkflowCatalogActor),复用 WorkflowGAgent。 Closes #871 ⟦AI:AUTO-LOOP⟧ * fix(pr902 r2): GAgentServiceHosting 加 WorkflowCatalog/Capabilities readmodel providers omnibus r1 reject:standalone GAgentService bundle startup 挂(ProjectionStoreDispatcher 抛 No configured projection store bindings),因 AddGAgentServiceProjectionReadModelProviders 不注册 WorkflowCatalogCurrentStateDocument / WorkflowCapabilitiesCurrentStateDocument stores。 修法:Hosting/ServiceCollectionExtensions.cs 补 workflow readmodel store bindings + 加 startup integration test 验证 standalone bundle 真能 startup。 ⟦AI:AUTO-LOOP⟧ * test(pr902): cover workflow catalog readmodels
…try via durable self-callback (#908) * iter53 issue-906 oauth-bootstrap: one-shot bootstrap + actor-owned retry via durable self-callback design consensus(Phase 9 r1 unanimous,#906):actor-owned-oauth-provisioning-retry。 - AevatarOAuthClientBootstrapService 改 one-shot signal publisher,不持 Task.Run/retry loop/Task.Delay - AevatarOAuthClientGAgent 内 own retry/backoff via durable self-callbacks(per CLAUDE 延迟/超时事件化) - Drift reconciliation 同 actor 内 emit OAuthClientDriftReconciled event - 不动 NyxID 外部 surface 6 files +527/-274。27 OAuth tests PASS。 ⟦AI:AUTO-LOOP⟧ * fix(pr908 r2): actor 内 guard 防 duplicate external Ensure 绕过 pending backoff omnibus r1 reject P1:multi-silo bootstrap 每 silo dispatch 一次 EnsureCommand,actor 每次 immediately enter DCR call,bypass pending backoff。 修法:HandleEnsure 加 guard — State.ProvisioningRetryAttempt > 0 且 next-due-time > now 时 no-op;只 self-callback 才 re-enter DCR。 加 regression test:多 broadcast 模拟,verify DCR 只调 1 次直到 self-callback 触发。 ⟦AI:AUTO-LOOP⟧
…ace + projection-owner activation (#907) * iter52 issue-905 public-projection-ensure-ports: 删 public Ensure surface + projection-owner activation design consensus(Phase 9 r1 unanimous,#905):projection-owned activation,public ports attach/query only。 删:public IServiceCatalogProjectionPort / IServiceRunCurrentStateProjectionPort / IServiceDeploymentCatalogProjectionPort / IServiceServingSetProjectionPort / IServiceTrafficViewProjectionPort / ILlmSessionCurrentStateProjectionPort 等 EnsureProjectionAsync(actorId) 接口;ChannelBotRegistrationProjectionPort / DeviceRegistrationProjectionPort / UserAgentCatalogProjectionPort / HealthProbeProjectionPort 等 public port 删除。 保留/迁移: - Activation 移到 startup hosted services 直接持 bootstrap port - public ports 保留 Attach* / Release* / Query* / Read* 操作(#898 typed lookup attach-only pattern) - command target binder 不调 activation(已有 guard) - 加 guard projection_public_ensure_ports_guard.sh 64 files +90/-1041(净 -951 LOC,真删除)。 验证:guard / test_stability / architecture 全 PASS。 ⟦AI:AUTO-LOOP⟧ * fix(pr907 r2): 扩 guard scan + 删剩 ScriptExecution/ScriptEvolution/Studio public Ensure + 更新 docs omnibus r1 reject 2 issues: 1. guard 太窄,漏 ScriptExecution/ScriptEvolution/Studio public Ensure surfaces 2. docs/canon/status-dashboard.md 还文档已删 HealthProbeProjectionPort + EnsureProjectionForActorAsync 修法: - guard 扫所有 production public abstraction/agent/application surfaces,显式 allowlist projection-owned/bootstrap internals - 删 ScriptExecutionProjectionContracts / ScriptEvolutionProjectionContracts EnsureProjectionAsync(actorId);移到 internal port - 删 Studio public Ensure surface - 更新 docs/canon/status-dashboard.md 反映新 startup-dispatch + committed-state activation 模型 ⟦AI:AUTO-LOOP⟧ * fix(pr907 r3): coverage-quality 修 Inspector demo bootstrap path InspectorApplication 直接持 internal projection lifecycle 调用,fix-r2 删 public Ensure 后 demo 编译挂。补 InspectorStudioActorBootstrap startup adapter 代替直接 Ensure。 coverage_quality_guard PASS,line 88.4% branch 72.4%。 ⟦AI:AUTO-LOOP⟧
…ctivationPlanProvider coverage (#909) * iter52 issue-895 provider-coverage-contract: CI guard + 现有 readmodel 加 [ProjectionExempt] / provider design consensus(Phase 9 r1 unanimous,#895):provider-coverage-ci-composition-contract。 - 新 guard tools/ci/projection_activation_provider_coverage_guard.sh:扫所有 *CurrentStateDocument/Projector,要求 IProjectionActivationPlanProvider + DI 注册 + test,或显式 [ProjectionExempt] 分类 - 现有 readmodel(Studio / Channel / Device / Scheduled / Identity)按 case 加 [ProjectionExempt(Reason="...")] 或加 provider - 挂 guard 入 architecture_guards.sh 27 files +143 LOC。验证:projection_activation_provider_coverage_guard / architecture_guards / test_stability_guards / focused provider/DI tests 全 PASS。 ⟦AI:AUTO-LOOP⟧ * fix(pr909 r2): guard per-projector 验证 + 加 GAgentRunTerminalProjectionContext plan omnibus r1 reject 3 issues: 1. guard 太 coarse(同 file 任意 provider 算 covered) 2. ServiceCommittedStateProjectionActivationPlanProvider 不返回 GAgentRunTerminalProjectionContext plan 3. CI red 修法: - projection_activation_provider_coverage_guard.sh 改 per-projector 验证(每个 AddCurrentStateProjectionMaterializer 对应 specific provider plan) - ServiceCommittedStateProjectionActivationPlanProvider 加 GAgentRunTerminalProjectionContext plan - ScriptingCommittedStateProjectionActivationPlanProvider 同样补足 + test 更新 ⟦AI:AUTO-LOOP⟧ * Classify workflow capabilities projection bootstrap * Align activation providers with bootstrap activators * test(pr909 r3): 补 codecov/patch — Projection*Exempt 普查 + provider plan unit tests omnibus r1 reject 3 issues 全 resolved(investigator commit + r2)。codecov/patch 单点 fail。 补 5 test 文件: - ProjectionExemptAttributeTests(attribute 自身覆盖) - StudioProjectionExemptionTests(Studio readmodel 普查) - WorkflowProjectionExemptionTests(Workflow readmodel 普查) - ServiceCommittedStateProjectionActivationPlanProviderTests 扩展(GAgentRunTerminalProjectionContext) - ScriptingCommittedStateProjectionActivationPlanProviderTests 扩展 不动 production。 ⟦AI:AUTO-LOOP⟧
… committer (#913) #894 Phase 9 r2 consensus (3/3 unanimous): - StreamingProxyNyxParticipantCoordinator 收缩为 adapter-only,只 forward Nyx I/O 结果到 typed room request payloads - StreamingProxyGAgent (room actor) 处理 join/post/leave/terminal request,唯一 committer of room facts - IStreamingProxyRoomCommandService 加 LeaveAsync + 新 typed request payloads - 不新增 actor type / envelope kind / Projection phase - Nyx LLM I/O (长 ChatStreamAsync) 仍在 coordinator outside actor turn LOC +433/-176;StreamingProxyGAgent 95.94% / coordinator 86.00% / command service 97.11% coverage test_stability_guards.sh + architecture_guards.sh + StreamingProxy filter 82/82 PASS ⟦AI:AUTO-LOOP⟧
…nk (#915) #912 audit-iter-56 cluster-056-external-link-callbacks-bypass-actor-signal-contract: - 新增 ExternalLinkMessageReceivedSignal + reuse 已有 typed state signal - WebSocketTransport 不再直接 invoke OnMessageReceived/OnStateChanged callback - transport 只 publish typed signal,ExternalLinkManager 在 actor turn 内消费再 emit public event - Telegram external-link transport/fakes/tests 同步迁移 Coverage: WebSocketTransport line-rate 1.0 / branch-rate 0.82 不加 reconnection feature(per cluster boundary) test_stability_guards.sh + architecture_guards.sh PASS ⟦AI:AUTO-LOOP⟧
…ion port (#918) #868 Phase 9 r4 consensus(4 轮收敛达成 IGAgentDraftRunInteractionPort): - 新增 IGAgentDraftRunInteractionPort:DraftRun actor create/reuse/register/rollback 收敛到 Application interaction service - 删除旧 IGAgentDraftRunActorPreparationPort + preparation service surface(被 interaction port 取代) - NyxID stream/approval endpoint 不再直接注入/读取 IActorRuntime - NyxID relay endpoint 改走 INyxIdRelayIngressPort,不再直接 create actor / dispatch envelope - 补 unit + integration + NyxID coverage tests LOC +1005/-1154 net -149(大 cleanup) Patch coverage 238/252 = 94.44% GAgentDraftRun + ScopeGAgentEndpoints + NyxIdChat tests 183 passed test_stability_guards.sh + architecture_guards.sh PASS ⟦AI:AUTO-LOOP⟧
…mitted-state provider (#916) * iter56 cluster-910: 删除 command-path projection activation,改 Studio committed-state provider #910 Phase 9 r1 consensus(3/3 一轮达成 minimal/structural/delete): - 删除 Scripting / Studio 写命令路径 EnsureActorProjectionAsync / ActivateAsync 同步调用 - 删除 Scripting/Workflow 老的 activation port interface + wrapper facade + 未用的 StudioProjectionPort - 新增 StudioCommittedStateProjectionActivationPlanProvider(覆盖 Studio projected actors) - 移除 Studio projector exemption(provider guard 覆盖后无需 exempt) - 不新增 Core types / pipeline phase / docs/canon vocabulary LOC +227/-593 net -366(大 cleanup) test_stability_guards.sh + projection_activation_provider_coverage_guard.sh + architecture_guards.sh PASS Scripting Core + Studio + Workflow Host API tests PASS ⟦AI:AUTO-LOOP⟧ * iter56 cluster-910 r2 fix: 修 InspectorApplication 旧 StudioProjectionPort 引用 + 补 Studio hook 覆盖 omnibus r1 APPROVE 但 coverage-quality CI 因 build break + patch coverage 边界失败: - InspectorApplication.cs:用新 StudioCurrentStateProjectionPort 替代被删的 StudioProjectionPort(build break 修复) - Studio 委托 committed-state hook 路径补 unit test 覆盖 - UserConfigProjectionAndControllerTests:更新 assert "no command-path projection priming" local PASS: - restore_and_build.sh + test_stability_guards.sh + coverage_quality_guard.sh - StudioCommittedStateProjectionActivationPlanProvider line/branch = 1.0/1.0 - 过滤 line 88.7% / branch 72.6% ⟦AI:AUTO-LOOP⟧
* iter56 cluster-891: endpoint-only ACK 诚实(202+Location) #891 Phase 9 r2 consensus(3/3 endpoint-only repair,不新增 Core typed phase vocabulary): - NyxID conversation create endpoint:返回 202 + Location 指向 status 资源 - StreamingProxy post-message / join endpoint:202 + Location - workflow resume / signal / stop endpoint:202 + Location - service invoke run:Location header 指向 status 资源 - response DTO 用 typed names(acceptedCommandId / statusUrl)代替模糊的 result/data 不动 actor / projection / event sourcing / Core CQRS 路径。 不新增 I*Phase / I*CommandPhase / I*OutcomeResolver 等 Core vocabulary。 LOC +169/-49 across 17 files test_stability_guards.sh + architecture_guards.sh PASS endpoint integration tests PASS ⟦AI:AUTO-LOOP⟧ * iter56 cluster-891 r2 fix: Location/statusUrl 改指注册路由 omnibus r1 reject: - StreamingProxyEndpoints.cs post-message Location 指 /stream(unregistered) → 改 /messages:stream(实际注册) - ScopeServiceEndpoints 同类问题一并修 - 对应 test 更新 assert 正确路由 local PASS: - test_stability_guards.sh + architecture_guards.sh + query_projection_priming_guard.sh - targeted endpoint tests PASS - dotnet build aevatar.slnx --nologo ⟦AI:AUTO-LOOP⟧ * iter56 cluster-891 r5 fix: 修 stale StreamingProxyRoomJoinStatus.Joined 引用 coverage-quality CI 实际 fail 原因:build break(stale test enum reference 因 #913 删除) - test/Aevatar.AI.Tests/StreamingProxyNyxParticipantCoordinatorTests.cs:430 用了被删的 .Joined - 改用 .Accepted(post-#913 honest ACK join contract) local PASS: - coverage_quality_guard.sh:line 88.7% / branch 72.6% - StreamingProxyNyxParticipantCoordinatorTests PASS ⟦AI:AUTO-LOOP⟧
…spatch (#919) * iter56 cluster-911: Studio Store → query-command ports + CQRS Core dispatch - I*Store → I*QueryPort + I*CommandPort/CommandService split - ActorCommandDispatcher 删除(被 CQRS Core dispatch 替代) - IChatHistoryStore / IRoleCatalogStore / IConnectorCatalogStore + ActorBacked 实现 + Studio Projection CommandServices 重构 - Studio 行为完全保留(catalog/workspace/history/team/member 接口语义不变) - 写路径走 IActorDispatchPort + 标准 EventEnvelope 构造(不再手拼) - 不新增 Core types / pipeline phase / docs/canon vocabulary LOC +827/-490 net +337 Studio tests 602/602 PASS + CLI 107 + workspace 9 + NyxID chat 72 = all PASS test_stability_guards.sh + architecture_guards.sh PASS ⟦AI:AUTO-LOOP⟧ * iter56 cluster-911 r2 fix: ImportLocalCatalog 移出 QueryPort 进 CommandPort omnibus r1 reject: - ImportLocalCatalogAsync 在 QueryPort 但实现 mutate state(违反"查询 port 只读") 修复: - 移到 IConnectorCatalogCommandPort + IRoleCatalogCommandPort - ConnectorService + RoleCatalogService 改走 _commandPort - 加 architecture guard 验证 Studio catalog query port 拒绝 mutate verb local PASS: test_stability_guards.sh + architecture_guards.sh + Studio 602/602 ⟦AI:AUTO-LOOP⟧
…ix predicate (#924) #921 Phase 9 r3 consensus(3/3 direct actor-type marker,无 resolver seam): - 加 IEventSourcingVersionDriftRecoverableActor Foundation marker - ProjectionScopeGAgentBase<TContext> 实现 marker(per consensus) - IEventSourcingBehaviorFactory.Create 接受 actorType - DefaultEventSourcingBehaviorFactory 按 marker type 启用 drift recovery - 删 Hosting actorId prefix recovery predicate + ShouldRecoverFromVersionDriftOnReplay - 加 test:marker recovery + domain fail-fast (projection-shaped actorId) + projection scope marker 继承 + host option 不加 IEventSourcingRecoveryPolicyResolver seam(over-built,per consensus) preserve #502/#503 projection scope drift recovery + domain fail-fast LOC +72/-47 net +25 dotnet build aevatar.slnx + dotnet test PASS test_stability_guards.sh + architecture_guards.sh + coverage_quality_guard.sh(line 88.7%/branch 72.6%)PASS ⟦AI:AUTO-LOOP⟧
…guard (#923) * iter56 cluster-920: workflow catalog query 端到端 async + sync-blocking guard #920 Phase 9 r2 consensus(3/3 unanimous): - catalog/detail/capabilities 改 sync → async end-to-end: - application ports - readmodel query adapter - HTTP query endpoints - WebSocket/SSE capability resolution - WorkflowStatusTool - WorkflowCatalogReadModelQueryPort 删 `.Result` sync-over-async reads - 新 architecture guard:tools/ci/architecture_guards.sh 加 workflow production query-port sync-blocking 验证 - Regression test:TaskCompletionSource readmodel reader 验证 catalog query 不 complete until async reader complete - 保留 WorkflowCatalogReadModelQueryPort(不删 readmodel port) - 不新增 actor / envelope / pipeline / sync reader LOC +417/-77 across 15 files dotnet build aevatar.slnx + dotnet test aevatar.slnx PASS test_stability_guards.sh + architecture_guards.sh PASS ⟦AI:AUTO-LOOP⟧ * iter56 cluster-920 r2 fix: 补 RegistryBackedWorkflowCatalogPort end-to-end coverage omnibus r1 APPROVE 但 codecov/patch fail(64.52%,11 lines miss in RegistryBackedWorkflowCatalogPort) 修复: - 加 WorkflowExecutionQueryApplicationServiceTests: - async catalog listing + deterministic sorting - workflow detail lookup with trimmed name - blank + missing detail paths - capabilities generation - 11 missed patch lines全部 hit local:line 88.8% / branch 72.6% test_stability_guards.sh + coverage_quality_guard.sh PASS ⟦AI:AUTO-LOOP⟧
#925 Phase 9 r1 consensus(3/3 一轮:删 runtime fallback,readmodel-only): - ProjectionWorkflowActorBindingReader 删 IActorRuntime / IAgentTypeVerifier 依赖 - 删 runtime existence check + type fallback + 合成 unbound binding - binding query 只 map WorkflowActorBindingDocument readmodel(per "查询走 readmodel" 条款) - 不动 binding readmodel/query interface - 不动 domain actor / runtime path LOC: ProjectionWorkflowActorBindingReader line 81.08%/branch 59.09% Tests:373/373 PASS test_stability + architecture + workflow_binding_boundary + query_projection_priming + build PASS ⟦AI:AUTO-LOOP⟧
…ers/Metadata bag (#922) * iter56 cluster-917: ChatRequestEvent.Telegram typed + 删 hot-path Headers/Metadata bag #917 Phase 9 r3 consensus(3/3 after reflector narrow): - 加 ChatRequestEvent.Telegram typed submessage(chatId/operation/wait/poll/login 等) - TelegramBridgeGAgent 不再用 Headers 当 control field source - RoleGAgent / ChatRuntime / StreamingProxy 用 typed LLM/tool contexts(不 merge Headers/Metadata) - 删除 hot-path Headers/Metadata bag reader - Workflow producers 填 typed Telegram/tool context fields 边界(per reflector r1): - 不动 docs/canon/* - 不加新 bridge inbox event / envelope kind / actor type / Projection phase - 不加 generic ControlMetadata/Any/第二个 bag LOC 21 files +808/-354 TelegramBridgeGAgent line-rate 89.7% test_stability_guards.sh + architecture_guards.sh PASS dotnet test aevatar.slnx PASS ⟦AI:AUTO-LOOP⟧ * iter56 cluster-917 r2 fix: Telegram numeric control field 改 optional + Has presence check omnibus r1 reject: - proto3 non-optional scalar default 0 → absent typed value 变成 0 不是 old default(8/1) - TelegramBridgeGAgent regression:absent poll_timeout_seconds → 1(clamp),应为 8;absent settle_polls_after_match → 0,应为 1 修复: - TelegramBridgeRequest 4 个 default-sensitive numeric field 改 optional: wait_timeout_ms, poll_timeout_seconds, settle_polls_after_match, timeout_ms - TelegramBridgeGAgent 用 Has* presence check 判 absent vs explicit 0 - absent → 走 old default(8/1) - explicit 0 → 走 0(用户明示) - 加 regression tests:absent → 默认,explicit 0 → 0 local PASS:test_stability + architecture + Telegram 25/25 + Telegram filter 31/31 ⟦AI:AUTO-LOOP⟧ * iter56 cluster-917 r4 fix: 完整 4/4 fields explicit 0 preservation omnibus r3 reject:r2 只覆盖 2/4 fields,wait_timeout_ms + timeout_ms 仍 fallback 修复: - wait_timeout_ms / timeout_ms 同样 presence-based,explicit 0 preserve - regression test 扩 4/4 fields(wait/poll/settle/timeout) local PASS:Telegram 25/25 + test_stability_guards.sh ⟦AI:AUTO-LOOP⟧ * iter56 cluster-917 r5 fix: 修 build + LLMCallModule producer + 全路径 regression omnibus r5 reject 3 blockers: 1. StreamingProxyGAgent build break(引用被删 constants) 2. LLMCallModule producer 用 TryParsePositiveInt32 不 accept "0" 3. regression test 没覆盖 workflow string "0" → typed proto presence 修复: - StreamingProxyGAgent 读 typed ChatRequestEvent.ToolContext(per consensus,删 stale constants) - LLMCallModule 接受 "0":wait_timeout_ms / telegram.timeout_ms / shared timeout promotion - "0" preserve typed proto presence(explicit 0) - 加 regression:workflow param "0" → typed presence,absent → no presence(走 default) local PASS: - dotnet build aevatar.slnx PASS - dotnet test --filter Telegram|StreamingProxy PASS - test_stability_guards.sh PASS ⟦AI:AUTO-LOOP⟧ * iter56 cluster-917 r6 fix: 补 codecov coverage 补 test 覆盖: - LLMCallModule.TryApplyTelegramParameter typed promotion + aliases + optional zero/invalid parse - TelegramBridgeGAgent typed send payload + connector params + EmitChatResponse + wait-reply controls + clamps + run/step command id local:line 88.7%/branch 72.7% PASS normalized patch:806/915 = 88.09%(>80% threshold) ⟦AI:AUTO-LOOP⟧ * test: cover PR 922 codecov gaps Add focused coverage for typed tool-context payload serialization, ChatRuntime routing merge, StreamingProxy typed lifecycle fields, and LLM Telegram parameter variants. ⟦AI:AUTO-LOOP⟧
…rs (#930) audit-iter-62 cluster-062-studio-workflow-obsolete-compat-shims(no design,直接 implement): - 删 AppScopedWorkflowService 的 ListAsync / GetAsync / SaveDraftAsync(public legacy) obsolete wrappers - 删 dead support:backend HTTP fallback / runtime/binding/artifact fallback dep / legacy DTO conversion helpers - 更新 DI + direct test callers 走 draft methods - 加 public-surface test 验证 obsolete methods 已删 不动 workflow draft semantics / storage / lifecycle "删除优于兼容" 落实 local PASS:dotnet build + test + test_stability + architecture + Studio/CLI tests ⟦AI:AUTO-LOOP⟧
iter15 rollup: 6 architecture-cleanup clusters | iter15 rollup:6 个架构清理 cluster
This is the iteration-level rollup of all iter15 auto-refactor clusters landed on
auto-refact-dev. Reviewing this PR is the human-gate point for the entire iteration.本 PR 是 iter15 自动重构所有 cluster 在
auto-refact-dev上的迭代级 rollup。审本 PR 即审整个 iteration 的人工把关点。Cluster ledger | 集群清单
ToolCallLoopmiddleware 持IsStreaming=true;新ChatStreamContentAggregatorhelper 用于 5 处非流式聚合场景_gate/_state/AttachmentState删除;remote audio chunk envelope 路径禁用直到 raw transport;setup/control envelopes 保留_responseEpochs字典从 provider 后台线程移走;actor turn 持 provider-response-id 映射 + cancel 抑制;新 typedprovider_response_idproto 字段TurnStreamingReplySink/SkillRunnerStreamingReplySink被动化;throttle/dedupe/final-flush 移入AgentRunGAgent+SkillRunnerGAgentrun-owned 状态WorkflowArtifactFactBuilder用 typedRoleId字段,不再用 actor id 前缀cluster-028/029 历史 controller 错误直接 PR 到 dev(已在 dev 中);#706/707/708/687 都正确 PR 到
auto-refact-dev(本 PR 涵盖)。Phase 9 meta-design (#701) | Phase 9 元设计 (#701)
cluster-025/026/027 触发 Phase 9 multi-solver design consensus,经 5 轮 solver + meta-judge 收敛,最终采纳 Auric 的架构愿景:
硬约束:一 actor 持一 stream、chunks 永不走 EventEnvelope、function calls 走 EventEnvelope、voice 和 text 用同一 pipeline、无新核心抽象。
cluster-025 boundary 决定 (Option A):remote setup/control envelopes 保留;remote audio chunk envelope relay 禁用直到 raw media transport 出现。
详见已关闭 design issues:#681 #682 #684 #701。
Skill-level improvements landed alongside | 同期落地的 skill 改进
spawn-codex.shprompt+log 双 file +--prompt-text自动 mktemp + SPAWN/DONE bannerauto-refact-dev(只有 rollup PR target dev)Verification per cluster | 各 cluster 验证
每个 cluster PR 都通过 Phase 8 multi-codex review (3 角色: architect / tests / quality),fix-retry 直到 3/3 或 2 approve + 1 non-blocking comment。各 PR 附本地+远程 CI 通过、test_stability_guards.sh 通过、architecture_guards.sh 通过的证据。
详见各 PR 的 round-by-round 评论。
Diff summary | diff 汇总
51 files changed, +3570 / -1803 (net +1767 productive code, mostly deletion-positive at production code level — large pluses are bilingual PR/issue artifacts + new comprehensive behavior tests + Phase 9 prompt files).
Audit trail | 审计追踪
.refactor-loop/runs/audit-iter-15.md.refactor-loop/runs/implement-cluster-*.md.refactor-loop/runs/v{1..5}-review/pr{687,706,707,708}/.refactor-loop/runs/phase9-issue701-r{1..5}-*.md🤖 Auto-loop / codex-refactor-loop iter15 (Phase 1 audit → Phase 9 design → Phase 2 implement → Phase 8 review → Phase 4 rollup)