Skip to content

iter56 cluster-935: agent run actor-owned admission + plain Task DispatchAsync#938

Merged
loning merged 3 commits into
auto-refact-devfrom
refactor/iter56-cluster-935-agent-run-actor-admission
May 24, 2026
Merged

iter56 cluster-935: agent run actor-owned admission + plain Task DispatchAsync#938
loning merged 3 commits into
auto-refact-devfrom
refactor/iter56-cluster-935-agent-run-actor-admission

Conversation

@loning
Copy link
Copy Markdown
Contributor

@loning loning commented May 24, 2026

摘要

iter56 cluster-935 — Phase 9 r5 unanimous(5 rounds + 1 reflector retry-fix narrowing,3/3 plain Task):

  • 删 dispatcher in-process admission(违反"中间层状态约束")
  • AgentRunGAgent(actor)承担 run admission:typed run_id + duplicate detection + stale rejection
  • IActorDispatchPort 用 plain Task DispatchAsync(无 receipt,CommandId/RunActorId 由 typed run_id 派生)
  • DispatchOutcome / DispatchPhase / dispatcher stale precheck
  • ConversationGAgent 保 rehydration stale cleanup
  • 不加新 actor type / envelope kind / Projection phase

边界

  • ACK 诚实:dispatcher 仅 handoff,无 receipt
  • 中间层无 admission 状态(per CLAUDE)
  • 不依赖外部仓库

影响范围

9 files changed,LOC +153 / -342 net -189

Coverage

  • AgentRunDispatcher 90% line
  • AgentRunGAgent 93.2% line

验证

  • dotnet build aevatar.slnx --nologo PASS
  • dotnet test aevatar.slnx --nologo --no-build PASS
  • bash tools/ci/test_stability_guards.sh PASS
  • bash tools/ci/architecture_guards.sh PASS
  • bash tools/docs/lint.sh PASS

Closes #935

🤖 Auto-loop / codex-refactor-loop iter56

⟦AI:AUTO-LOOP⟧

…atchAsync

#935 Phase 9 r5 consensus(5 rounds + reflector retry-fix,3/3 unanimous):

- 删 dispatcher in-process admission(local-only 不是 actor-owned 事实)
- AgentRunGAgent(actor)承担 run admission(typed run_id + duplicate detection + stale rejection)
- IActorDispatchPort 用 plain Task DispatchAsync(无 receipt,CommandId/RunActorId 由 typed run_id 派生)
- 删 DispatchOutcome / DispatchPhase / dispatcher stale precheck
- ConversationGAgent 保 rehydration stale cleanup
- 不加新 actor type / envelope kind / Projection phase

local PASS:dotnet build + test aevatar.slnx + test_stability + architecture + docs lint
Coverage:AgentRunDispatcher 90% line / AgentRunGAgent 93.2% line

⟦AI:AUTO-LOOP⟧
@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 24, 2026

📊 状态卡片 — reviewer 派出

维度
阶段 派出 codex(role=reviewer)
codex log review-pr938-omnibus-r1.log
工作目录 /Users/auric/aevatar
timeout 5400s(~90 min 上限)
上下文 omnibus r1 派出(actor admission + plain Task,9 files +153/-342)
下一步自动会做 1. 三 reviewer 完成 verdict marker 2. controller 计算 consensus 3. unanimous → auto-merge / reject → fix r<N+1>
是否需要人介入 ❌ 否(自动推进)

🤖 controller status banner

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 24, 2026

📊 状态卡片 — fix 派出

维度
阶段 派出 codex(role=fix)
codex log fix-pr938-r2.log
工作目录 /Users/auric/aevatar-wt-iter56-cluster-935-agent-run-actor-admission
timeout 5400s(~90 min 上限)
上下文 r1 reject 2 blockers(dispatcher execution-coupled + ADR-0021 rewrite)→ fix r2
下一步自动会做 1. fix r 完成 marker FIX_DONE:... 2. controller commit + push 3. 派 reviewer r<N+1>
是否需要人介入 ❌ 否(自动推进)

🤖 controller status banner

⟦AI:AUTO-LOOP⟧

@codecov
Copy link
Copy Markdown

codecov Bot commented May 24, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 83.52%. Comparing base (2c13487) to head (942aaa7).

@@               Coverage Diff                @@
##           auto-refact-dev     #938   +/-   ##
================================================
  Coverage            83.52%   83.52%           
================================================
  Files                  988      988           
  Lines                63644    63645    +1     
  Branches              8219     8220    +1     
================================================
+ Hits                 53157    53160    +3     
+ Misses                6927     6924    -3     
- Partials              3560     3561    +1     
Flag Coverage Δ
ci 83.52% <100.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...tations.Orleans/Actors/OrleansActorDispatchPort.cs 93.75% <100.00%> (+13.75%) ⬆️

... and 4 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

…stored + ADR-0027 supersede

omnibus r1 reject 2 blockers:
- OrleansActorDispatchPort 仍 execution-coupled(PropagateFailure + await HandleEvent)
- ADR-0021 rewrite 违反 immutability

修复:
- OrleansActorDispatchPort 改 stream/inbox handoff via IStreamProvider(不 PropagateFailure,不 await HandleEnvelopeAsync)
- 更新 Orleans dispatch tests 验证 handoff ACK + async downstream failure
- 还原 ADR-0021 原始内容
- 新增 ADR-0027 supersede ADR-0021 dispatcher return-value semantics
- 更新 canon doc 引用 ADR-0027 plain Task handoff

local PASS:test_stability + query_projection_priming + architecture + build + test

⟦AI:AUTO-LOOP⟧
@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 24, 2026

📊 状态卡片 — reviewer 派出

维度
阶段 派出 codex(role=reviewer)
codex log review-pr938-omnibus-r3.log
工作目录 /Users/auric/aevatar
timeout 5400s(~90 min 上限)
上下文 omnibus r3 verify r2 fix(stream handoff + ADR supersede)
下一步自动会做 1. 三 reviewer 完成 verdict marker 2. controller 计算 consensus 3. unanimous → auto-merge / reject → fix r<N+1>
是否需要人介入 ❌ 否(自动推进)

🤖 controller status banner

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 24, 2026

📊 codex 进展 review-pr938-omnibus-r3 (⏳ 进行中; 已跑 7 min)

- `OrleansActorDispatchPort.DispatchAsync` now hands off via `_streams.GetStream(actorId).ProduceAsync(envelope.Clone(), ct)` and no longer calls `grain.HandleEnvelopeAsync(...)` or sets `Runtime.Dispatch.PropagateFailure = true`.
- `docs/adr/0021-lark-reply-chain-completion-semantics.md` is byte-identical to base; new `docs/adr/0027-lark-reply-run-dispatcher-plain-task-handoff.md` explicitly supersedes ADR-0021 dispatcher return-value sections and preserves ADR-0021 as source of record for the remaining semantics.

Validation run on detached worktree at `6e0fd428`:

`dotnet test test/Aevatar.Foundation.Runtime.Hosting.Tests/Aevatar.Foundation.Runtime.Hosting.Tests.csproj --filter "FullyQualifiedName~OrleansActorTransportDispatchTests|FullyQualifiedName~OrleansDirectDispatchFailurePropagationTests" --nologo`

Result: passed, 7/7 tests.

REVIEW_DONE:938:omnibus:approve
⟦AI:AUTO-LOOP⟧
tokens used
116,073
Verified PR #938 head `6e0fd428`.

Both r1 blockers are fixed:

- `OrleansActorDispatchPort.DispatchAsync` now hands off via `_streams.GetStream(actorId).ProduceAsync(envelope.Clone(), ct)` and no longer calls `grain.HandleEnvelopeAsync(...)` or sets `Runtime.Dispatch.PropagateFailure = true`.
- `docs/adr/0021-lark-reply-chain-completion-semantics.md` is byte-identical to base; new `docs/adr/0027-lark-reply-run-dispatcher-plain-task-handoff.md` explicitly supersedes ADR-0021 dispatcher return-value sections and preserves ADR-0021 as source of record for the remaining semantics.

Validation run on detached worktree at `6e0fd428`:

`dotnet test test/Aevatar.Foundation.Runtime.Hosting.Tests/Aevatar.Foundation.Runtime.Hosting.Tests.csproj --filter "FullyQualifiedName~OrleansActorTransportDispatchTests|FullyQualifiedName~OrleansDirectDispatchFailurePropagationTests" --nologo`

Result: passed, 7/7 tests.

自动更新每 10 分钟;edit-in-place 不堆评论;codex 完成后此 comment 自动删除(per Auric "完成后删掉就好了 否则太占空间")。
🤖 controller progress reporter

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 24, 2026

📊 状态卡片 — test-add 派出

维度
阶段 派出 codex(role=test-add)
codex log test-add-pr938-r1.log
工作目录 /Users/auric/aevatar
timeout 5400s(~90 min 上限)
上下文 codecov/patch 80%→target test-add for OrleansActorDispatchPort 1 partial line
下一步自动会做 1. test-add 完成 marker TEST_ADD_DONE:... 2. controller 自动 commit + push 3. codecov 重测
是否需要人介入 ❌ 否(自动推进)

🤖 controller status banner

⟦AI:AUTO-LOOP⟧

…l branch(codecov 80%→100%)

⟦AI:AUTO-LOOP⟧
@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 24, 2026

📊 codex 进展 test-add-pr938-r1 (⏳ 进行中; 已跑 8 min)

+        var grainFactory = DispatchProxy.Create<IGrainFactory, SingleRuntimeActorGrainFactory>();
+
+        var act = () => new OrleansActorDispatchPort(grainFactory, null!);
+
+        act.Should().Throw<ArgumentNullException>()
+            .WithParameterName("streams");
+    }
+
+    [Fact]
     public async Task DispatchPortAsync_ShouldHandoffViaStreamProvider()
     {
         var grain = new RecordingRuntimeActorGrain();

tokens used
37,851
已补 narrow test 覆盖 `OrleansActorDispatchPort` 构造函数中 `streams == null` 的异常分支。

验证已通过:
`dotnet test test/Aevatar.Foundation.Runtime.Hosting.Tests/Aevatar.Foundation.Runtime.Hosting.Tests.csproj --filter "FullyQualifiedName~OrleansActor" --nologo`
结果:38 passed, 0 failed。

也执行了 `bash tools/ci/test_stability_guards.sh`,通过。

已提交并推送到同 branch:
`942aaa7f iter56 cluster-935 r1 test-add: cover OrleansActorDispatchPort partial branch(codecov 80%→100%)`

自动更新每 10 分钟;edit-in-place 不堆评论;codex 完成后此 comment 自动删除(per Auric "完成后删掉就好了 否则太占空间")。
🤖 controller progress reporter

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant