iter93 cluster-093: type card action workflow resume + LLM selection payloads#1005
Conversation
…control payloads (#1004) Phase 9 r1 consensus type-card-action-workflow-resume-and-llm-selection-payloads: - chat_activity.proto: add WorkflowResumeActionPayload + LlmSelectionActionPayload typed sub-messages on ActionElement / CardActionSubmission; arguments map demoted to open-extension-only. - FeishuCardHumanInteractionPort + LarkMessageComposer + TelegramMessageComposer: emit typed payload, keep adapter JSON compat at composer boundary. - NyxIdRelayTransport.BuildCardActionSubmission: map known callback JSON fields to typed sub-message. - ChannelConversationTurnRunner.ToInboundMessage + InboundMessage.Extra: workflow/LLM handoff via typed access; literal-key path becomes deprecated inbound fallback only. - ChannelCardActionRouting: consume typed WorkflowResumeActionPayload; literal-key rebuild path explicitly deprecated. - TextUserLlmOptionsRenderer: route LLM selection through typed payload. - Tests: Lark card round-trip (typed payload → relay → workflow resume); negative tests for missing/malformed typed payload. Closes #1004 ⟦AI:AUTO-LOOP⟧
🤖 Phase 8 Reviewer —
|
🤖 Phase 8 Reviewer —
|
🤖 Phase 8 Reviewer —
|
🔧 Phase 8 r1 评审 — 2/3 reject + 1 comment → fix r2 派出
🔧 fix r2 codex 派出。 ⟦AI:AUTO-LOOP⟧ |
📊 codex 进展 review-pr1005-architect-r1 (⏳ 进行中; 已跑 7 min)
|
📊 codex 进展 review-pr1005-quality-r1 (⏳ 进行中; 已跑 7 min)
|
📊 codex 进展 review-pr1005-tests-r1 (⏳ 进行中; 已跑 7 min)
|
…ply_preset + adapter callback emission tests - chat_activity.proto + ChannelCardActionRouting.TryBuildWorkflowResumeCommand + NyxIdRelayTransport.MapKnownPayloads + Lark/Telegram composer projection: add Refactor (iter93/cluster-093) Old/New self-doc blocks; old = workflow resume + LLM selection control in open arguments map; new = typed payload in repo-owned contract, arguments only for adapter/3p extension + inbound callback JSON compat. - ChannelConversationTurnRunnerTests: typed apply_preset behavior test (LlmSelection.PresetId → ApplyPresetAsync called with PresetId). - NyxIdRelayTransportTests: lp / llm_apply_preset action id maps to typed apply_preset with PresetId filled. - TelegramMessageComposerTests: ActionElement.LlmSelection projects into callback JSON v with llm_action/service_id/preset_id keys. ⟦AI:AUTO-LOOP⟧
🔧 Phase 8 r2 fix applied
👀 r2 reviewer 派出。 ⟦AI:AUTO-LOOP⟧ |
🤖 Phase 8 Reviewer —
|
🤖 Phase 8 Reviewer —
|
🤖 Phase 8 Reviewer —
|
✅ Phase 8 r2 集中评审
3/3 → auto-merge。 ⟦AI:AUTO-LOOP⟧ |
📊 codex 进展 review-pr1005-architect-r2 (⏳ 进行中; 已跑 5 min)
|
📊 codex 进展 review-pr1005-quality-r2 (⏳ 进行中; 已跑 5 min)
|
📊 codex 进展 review-pr1005-tests-r2 (⏳ 进行中; 已跑 5 min)
|
…d-await dispatch port Coverage-quality CI on r2 still failed 39 tests in Aevatar.GAgents.ChannelRuntime.Tests because production callers (SkillRunnerCommandPort, UserAgentCatalogCommandPort, DeviceCommandFacade, ChannelRegistrationCommandFacade, ChannelBotRegistrationStartupService, TurnStreamingReplySink, NyxLark/NyxTelegram ProvisioningService) still used IActorDispatchPort admission-only contract but tests expected old handled-await semantics. r3 fix: - New OrleansActorHandledDispatchPort + HandledActorCommandTargetDispatcher providing handled-await semantics on Orleans path (parallel to Local r2 LocalActorHandledDispatchPort). - Production callers (SkillRunner / UserAgentCatalog / DeviceCommand / ChannelRegistration / TurnStreamingReplySink / NyxLark+NyxTelegram Provisioning / AgentRunReplyGenerationExecutor) migrated to IHandledActorDispatchPort for the dispatch paths that must await committed state. - DI registration (Orleans + Device + NyxIdRelay) wires the handled port. - NyxIdRelayTransport content parsing tests updated to match typed card action payload schema (from #1005 typed payload migration). - Test files updated to assert against new admission ACK shape OR handled completion as appropriate per call site. 23 files: r2 7 fail + r3 39 fail全过本地。r1 5 fail + Script integration 不回归。 ⟦AI:AUTO-LOOP⟧
…rkflowResume payload r3 fixed 39/40, only Aevatar.AI.Tests.NyxIdChatEndpointsCoverageTests.HandleRelayWebhookAsync_ShouldDispatchCardAction_ToConversationActor_ForWorkflowResumeSubmit still failed. Test asserted cardAction.Arguments["actor_id"] but #1005 typed card action migration moved actor_id/run_id/step_id/approved from Arguments map to cardAction.WorkflowResume.ActorId/RunId/StepId/Approved typed payload. 1 file, test assertions updated to read typed payload. ⟦AI:AUTO-LOOP⟧
📊 codex 进展 hotfix-trunk-red-2026-05-25-r4 (⏳ 进行中; 已跑 7 min)Result: 1 passed. Final scan found no remaining old |
…DispatchAdmission contract (#1015) * hotfix(trunk-r2): restore Script integration test compatibility with DispatchAdmission contract r1 hotfix 修了 5 个 fail 但破了 7 个 Script integration test。r2 修法: - 加 LocalActorHandledDispatchPort 提供旧"handled-await"语义给 Script 路径(integration test 期望 Script Bind/Replay 完成后才返回) - IActorDispatchPort 区分 admission-only(default) vs handled-await(opt-in) - ServiceCollectionExtensions: Local + Scripting + ConfiguredConnectorRegistry 走 handled-await - RuntimeScriptCommandService + RuntimeScriptProvisioningService 显式 await handled - HybridServiceUpgradeContinuityTests 调整断言适配新 ACK shape - architecture_guards.sh 新 guard 防新增 admission-only 路径触发 Script lifecycle await 漏洞 9 files: r1 5 test + r2 7 test 全 pass(本地),不回归。 ⟦AI:AUTO-LOOP⟧ * hotfix(trunk-r3): migrate ChannelRuntime production callers to handled-await dispatch port Coverage-quality CI on r2 still failed 39 tests in Aevatar.GAgents.ChannelRuntime.Tests because production callers (SkillRunnerCommandPort, UserAgentCatalogCommandPort, DeviceCommandFacade, ChannelRegistrationCommandFacade, ChannelBotRegistrationStartupService, TurnStreamingReplySink, NyxLark/NyxTelegram ProvisioningService) still used IActorDispatchPort admission-only contract but tests expected old handled-await semantics. r3 fix: - New OrleansActorHandledDispatchPort + HandledActorCommandTargetDispatcher providing handled-await semantics on Orleans path (parallel to Local r2 LocalActorHandledDispatchPort). - Production callers (SkillRunner / UserAgentCatalog / DeviceCommand / ChannelRegistration / TurnStreamingReplySink / NyxLark+NyxTelegram Provisioning / AgentRunReplyGenerationExecutor) migrated to IHandledActorDispatchPort for the dispatch paths that must await committed state. - DI registration (Orleans + Device + NyxIdRelay) wires the handled port. - NyxIdRelayTransport content parsing tests updated to match typed card action payload schema (from #1005 typed payload migration). - Test files updated to assert against new admission ACK shape OR handled completion as appropriate per call site. 23 files: r2 7 fail + r3 39 fail全过本地。r1 5 fail + Script integration 不回归。 ⟦AI:AUTO-LOOP⟧ * hotfix(trunk-r4): update NyxIdChat webhook test assertion to typed WorkflowResume payload r3 fixed 39/40, only Aevatar.AI.Tests.NyxIdChatEndpointsCoverageTests.HandleRelayWebhookAsync_ShouldDispatchCardAction_ToConversationActor_ForWorkflowResumeSubmit still failed. Test asserted cardAction.Arguments["actor_id"] but #1005 typed card action migration moved actor_id/run_id/step_id/approved from Arguments map to cardAction.WorkflowResume.ActorId/RunId/StepId/Approved typed payload. 1 file, test assertions updated to read typed payload. ⟦AI:AUTO-LOOP⟧ * hotfix(trunk-r5): fix ScopeDraftRunActor query test after dev merge dev_sync_daemon 自动 merge auto-refact-dev 进 PR1015 后(含 dev 22 commits + PR1014 skill update) 引入 1 新 fail: - Aevatar.GAgentService.Integration.Tests.ScopeDraftRunActorQueryIntegrationTests.DraftRunEndpoint_ShouldExposeCompletedActorSnapshotViaActorQuery 调整 test assertion 适配新 DispatchAdmission + ScopeDraftRun actor snapshot path。 1 test file。 ⟦AI:AUTO-LOOP⟧ * hotfix(trunk-r6): WorkflowRunGAgent await RoleGAgent creation via handled dispatch dev merge 引入 1 fail: - "给定 WorkflowGAgent 加载了 YAML,当触发时应创建 3 个 RoleGAgent 子 Agent" 根因:DispatchAdmission contract 后 WorkflowGAgent.HandleAsync 通过 admission-only port 派 RoleGAgent 创建,test 期望 RoleGAgent 实际可用 → 切 handled port + await committed。 1 file。 ⟦AI:AUTO-LOOP⟧
Summary
chat_activity.proto:加WorkflowResumeActionPayload+LlmSelectionActionPayloadtyped sub-messagesargumentsmap 降级 open-extension-onlyNyxIdRelayTransport.BuildCardActionSubmission:known JSON → typed sub-messageChannelConversationTurnRunner+InboundMessage.Extra:workflow/LLM handoff typed access;literal-key 路径 deprecated inbound fallback onlyChannelCardActionRouting:消费 typedWorkflowResumeActionPayloadTextUserLlmOptionsRenderer:LLM selection 走 typed payload15 files: +547 / -81。
Phase 9 consensus
META_JUDGE_DONE:consensus:type-card-action-workflow-resume-and-llm-selection-payloadsCloses #1004
⟦AI:AUTO-LOOP⟧