Skip to content

iter56 cluster-917: ChatRequestEvent.Telegram typed + 删 hot-path Headers/Metadata bag#922

Merged
loning merged 6 commits into
auto-refact-devfrom
refactor/iter56-cluster-917-workflow-llm-control-metadata
May 23, 2026
Merged

iter56 cluster-917: ChatRequestEvent.Telegram typed + 删 hot-path Headers/Metadata bag#922
loning merged 6 commits into
auto-refact-devfrom
refactor/iter56-cluster-917-workflow-llm-control-metadata

Conversation

@loning
Copy link
Copy Markdown
Contributor

@loning loning commented May 23, 2026

摘要

iter56 cluster-917 — Phase 9 r3 unanimous(3/3 after reflector r1 narrow):

核心:ChatRequestEvent.Telegram typed submessage + 删 hot-path Headers/Metadata bag

  • ChatRequestEvent.Telegram typed submessage:chatId / operation / wait / poll / login 等 control fields
  • TelegramBridgeGAgent 不再用 `Headers` 当 primary source for control reads
  • 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 narrowing constraint)

  • 不动 `docs/canon/*`
  • 不加 新 bridge inbox event / envelope kind / actor type / Projection phase
  • 不加 generic `ControlMetadata` / `Any` / 第二个 bag
  • 复用现有 typed contexts(per consensus)

影响范围

21 files changed,LOC +808 / -354

Coverage

  • TelegramBridgeGAgent line-rate 89.7%(超 80% threshold)
  • Root report line-rate 2.91% 是 coverlet 包了 full dependency closure,不代表本 PR coverage

验证

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

Closes #917

🤖 Auto-loop / codex-refactor-loop iter56

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 状态卡片 — reviewer 派出

维度
阶段 派出 codex(role=reviewer)
codex log review-pr922-omnibus-r1.log
工作目录 /Users/auric/aevatar
timeout 5400s(~90 min 上限)
上下文 omnibus r1 派出(typed Telegram + delete Headers bag,21 files +808/-354)
下一步自动会做 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 23, 2026

📊 状态卡片 — fix 派出

维度
阶段 派出 codex(role=fix)
codex log fix-pr922-r2.log
工作目录 /Users/auric/aevatar-wt-iter56-cluster-917-workflow-llm-control-metadata
timeout 5400s(~90 min 上限)
上下文 r1 reject(proto3 默认值变更:poll_timeout/settle_polls absent→0 而非 old 8/1 regression)→ fix r2 改 optional + has 判 absent
下一步自动会做 1. fix r 完成 marker FIX_DONE:... 2. controller commit + push 3. 派 reviewer r<N+1>
是否需要人介入 ❌ 否(自动推进)

🤖 controller status banner

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 状态卡片 — reviewer 派出

维度
阶段 派出 codex(role=reviewer)
codex log review-pr922-omnibus-r3.log
工作目录 /Users/auric/aevatar
timeout 5400s(~90 min 上限)
上下文 omnibus r3 派出 verify r2 fix(proto optional + Has presence)
下一步自动会做 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 23, 2026

📊 codex 进展 review-pr922-omnibus-r1 (⏳ 进行中; 已跑 9 min)

`TelegramBridgeRequest` is typed, and the hot-path `TelegramBridgeGAgent` no longer reads Telegram control values from `Headers`/`Metadata`. Tests also cover typed Telegram flow and legacy header non-routing, and local guards passed:

- `test_stability_guards.sh`: PASS
- `architecture_guards.sh`: PASS
- `TelegramBridgeGAgent` coverage: `line-rate="0.897"` in coverage XML

Reject reason: `poll_timeout_seconds` and `settle_polls_after_match` are non-optional proto3 scalar fields, so absent values arrive as `0`. In `TelegramBridgeGAgent`, that changes default wait-reply behavior: absent `poll_timeout_seconds` now clamps to `1` instead of defaulting to `8`, and absent `settle_polls_after_match` becomes `0` instead of defaulting to `1`. This is a behavior regression caused by the typed migration.

Reject verbatim demand: Make default-sensitive Telegram numeric control fields presence-aware, at minimum `poll_timeout_seconds` and `settle_polls_after_match`, and add regression coverage proving absent typed fields keep the old defaults while explicit `0` still has the intended explicit behavior.

REVIEW_DONE:922:omnibus:reject
⟦AI:AUTO-LOOP⟧
tokens used
88,316
Found one blocking issue.

`TelegramBridgeRequest` is typed, and the hot-path `TelegramBridgeGAgent` no longer reads Telegram control values from `Headers`/`Metadata`. Tests also cover typed Telegram flow and legacy header non-routing, and local guards passed:

- `test_stability_guards.sh`: PASS
- `architecture_guards.sh`: PASS
- `TelegramBridgeGAgent` coverage: `line-rate="0.897"` in coverage XML

Reject reason: `poll_timeout_seconds` and `settle_polls_after_match` are non-optional proto3 scalar fields, so absent values arrive as `0`. In `TelegramBridgeGAgent`, that changes default wait-reply behavior: absent `poll_timeout_seconds` now clamps to `1` instead of defaulting to `8`, and absent `settle_polls_after_match` becomes `0` instead of defaulting to `1`. This is a behavior regression caused by the typed migration.

Reject verbatim demand: Make default-sensitive Telegram numeric control fields presence-aware, at minimum `poll_timeout_seconds` and `settle_polls_after_match`, and add regression coverage proving absent typed fields keep the old defaults while explicit `0` still has the intended explicit behavior.

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

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 状态卡片 — fix 派出

维度
阶段 派出 codex(role=fix)
codex log fix-pr922-r4.log
工作目录 /Users/auric/aevatar-wt-iter56-cluster-917-workflow-llm-control-metadata
timeout 5400s(~90 min 上限)
上下文 r3 reject 2/4 fields 仍 fallback → fix r4 完整 4/4
下一步自动会做 1. fix r 完成 marker FIX_DONE:... 2. controller commit + push 3. 派 reviewer r<N+1>
是否需要人介入 ❌ 否(自动推进)

🤖 controller status banner

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 状态卡片 — reviewer 派出

维度
阶段 派出 codex(role=reviewer)
codex log review-pr922-omnibus-r5.log
工作目录 /Users/auric/aevatar
timeout 5400s(~90 min 上限)
上下文 omnibus r5 派出 verify 4/4 fields explicit 0 preservation
下一步自动会做 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 23, 2026

📊 codex 进展 fix-pr922-r4 (⏳ 进行中; 已跑 7 min)

 
         await agent.HandleEventAsync(Envelope(request), CancellationToken.None);
 
         var command = publisher.Sent.Should().ContainSingle().Subject.evt
             .Should().BeOfType<TelegramWaitForReplyCommand>().Subject;
+        command.WaitTimeoutMs.Should().Be(0);
         command.PollTimeoutSeconds.Should().Be(0);
         command.SettlePollsAfterMatch.Should().Be(0);
+        command.ConnectorParameters["timeout_ms"].Should().Be("0");
     }
 
     [Fact]

tokens used
84,173
Implemented explicit zero preservation for all 4 Telegram controls.

Changed:
- `wait_timeout_ms`: presence-based, explicit `0` preserved.
- `timeout_ms`: presence-based, explicit `0` forwarded to connector parameters.
- Regression test expanded to cover `wait_timeout_ms`, `poll_timeout_seconds`, `settle_polls_after_match`, and `timeout_ms`.

Verified:
- `dotnet test test/Aevatar.Workflow.Host.Api.Tests/Aevatar.Workflow.Host.Api.Tests.csproj --nologo --filter TelegramBridgeGAgentTests` passed: 25 passed, 0 skipped.
- `bash tools/ci/test_stability_guards.sh` passed.

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

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 状态卡片 — fix 派出

维度
阶段 派出 codex(role=fix)
codex log fix-pr922-r5.log
工作目录 /Users/auric/aevatar-wt-iter56-cluster-917-workflow-llm-control-metadata
timeout 5400s(~90 min 上限)
上下文 r5 reject 3 blockers(build break + LLMCallModule producer + regression coverage)→ fix r5
下一步自动会做 1. fix r 完成 marker FIX_DONE:... 2. controller commit + push 3. 派 reviewer r<N+1>
是否需要人介入 ❌ 否(自动推进)

🤖 controller status banner

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

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

- Presence checks exist for all 4.
- Absent `poll_timeout_seconds` / `settle_polls_after_match` regressions cover legacy `8/1`.
- Explicit `0` is preserved only for `poll_timeout_seconds` and `settle_polls_after_match`.
- `test_stability_guards.sh`: PASS.
- `architecture_guards.sh`: PASS.
- `dotnet test ... --filter Telegram --nologo`: PASS, 31/31.
- `dotnet test ... --filter ChatBridge --nologo`: no matching tests found in this project.

REVIEW_DONE:922:omnibus:reject
⟦AI:AUTO-LOOP⟧
tokens used
68,004
Reject.

Finding: r2 does not preserve explicit `0` for all 4 optional numeric fields. [TelegramBridgeGAgent.cs](/Users/auric/aevatar-wt-iter56-cluster-917-workflow-llm-control-metadata/src/workflow/extensions/Aevatar.Workflow.Extensions.Bridge/TelegramBridgeGAgent.cs:224) still maps explicit `wait_timeout_ms = 0` to `DefaultWaitReplyTimeoutMs`, and [TelegramBridgeGAgent.cs](/Users/auric/aevatar-wt-iter56-cluster-917-workflow-llm-control-metadata/src/workflow/extensions/Aevatar.Workflow.Extensions.Bridge/TelegramBridgeGAgent.cs:290) still maps explicit `timeout_ms = 0` to null / LLM fallback. The new regression test only covers explicit zero for `poll_timeout_seconds` and `settle_polls_after_match`, not all 4 fields.

Verified:
- Proto fields 12, 13, 14, 20 are `optional`.
- Presence checks exist for all 4.
- Absent `poll_timeout_seconds` / `settle_polls_after_match` regressions cover legacy `8/1`.
- Explicit `0` is preserved only for `poll_timeout_seconds` and `settle_polls_after_match`.
- `test_stability_guards.sh`: PASS.
- `architecture_guards.sh`: PASS.
- `dotnet test ... --filter Telegram --nologo`: PASS, 31/31.
- `dotnet test ... --filter ChatBridge --nologo`: no matching tests found in this project.

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

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

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

2. **BLOCKER**: 4/4 explicit-zero preservation is not complete across the producer path. Consumer-side `TelegramBridgeGAgent` is now presence-based for all 4 fields, but [LLMCallModule.cs](</tmp/aevatar-pr922/src/workflow/Aevatar.Workflow.Core/Modules/LLMCallModule.cs:465>) still parses `wait_timeout_ms` with `TryParsePositiveInt32`, and [LLMCallModule.cs](</tmp/aevatar-pr922/src/workflow/Aevatar.Workflow.Core/Modules/LLMCallModule.cs:506>) does the same for `telegram.timeout_ms` / `timeout_ms`. So workflow parameters containing `"0"` do not set proto presence for 2/4 fields.

3. **BLOCKER**: Regression coverage is incomplete. [TelegramBridgeGAgentTests.cs](</tmp/aevatar-pr922/test/Aevatar.Workflow.Host.Api.Tests/TelegramBridgeGAgentTests.cs:286>) covers manually constructed typed `TelegramBridgeRequest` with explicit zero, but it does not cover workflow parameter promotion from string `"0"` into typed proto presence, which is the path still broken above.

Verification:
- `bash /tmp/aevatar-pr922/tools/ci/test_stability_guards.sh`: PASS
- `bash /tmp/aevatar-pr922/tools/ci/architecture_guards.sh`: PASS
- `dotnet test --filter Telegram --nologo`: FAIL, compile errors CS0117 in `StreamingProxyGAgent.cs`

REVIEW_DONE:922:omnibus:reject
⟦AI:AUTO-LOOP⟧
tokens used
172,920
Findings:

1. **BLOCKER**: PR head does not compile under requested verification. `dotnet test --filter Telegram --nologo` exits `1` with CS0117 because [StreamingProxyGAgent.cs](</tmp/aevatar-pr922/agents/Aevatar.GAgents.StreamingProxy/StreamingProxyGAgent.cs:45>) still references `StreamingProxyRoomChatCommandEnvelopeFactory.AccessTokenHeader/PreferredRouteHeader/DefaultModelHeader`, but those constants were removed from the factory.

2. **BLOCKER**: 4/4 explicit-zero preservation is not complete across the producer path. Consumer-side `TelegramBridgeGAgent` is now presence-based for all 4 fields, but [LLMCallModule.cs](</tmp/aevatar-pr922/src/workflow/Aevatar.Workflow.Core/Modules/LLMCallModule.cs:465>) still parses `wait_timeout_ms` with `TryParsePositiveInt32`, and [LLMCallModule.cs](</tmp/aevatar-pr922/src/workflow/Aevatar.Workflow.Core/Modules/LLMCallModule.cs:506>) does the same for `telegram.timeout_ms` / `timeout_ms`. So workflow parameters containing `"0"` do not set proto presence for 2/4 fields.

3. **BLOCKER**: Regression coverage is incomplete. [TelegramBridgeGAgentTests.cs](</tmp/aevatar-pr922/test/Aevatar.Workflow.Host.Api.Tests/TelegramBridgeGAgentTests.cs:286>) covers manually constructed typed `TelegramBridgeRequest` with explicit zero, but it does not cover workflow parameter promotion from string `"0"` into typed proto presence, which is the path still broken above.

Verification:
- `bash /tmp/aevatar-pr922/tools/ci/test_stability_guards.sh`: PASS
- `bash /tmp/aevatar-pr922/tools/ci/architecture_guards.sh`: PASS
- `dotnet test --filter Telegram --nologo`: FAIL, compile errors CS0117 in `StreamingProxyGAgent.cs`

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

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 状态卡片 — reviewer 派出

维度
阶段 派出 codex(role=reviewer)
codex log review-pr922-omnibus-r7.log
工作目录 /Users/auric/aevatar
timeout 5400s(~90 min 上限)
上下文 omnibus r7 派出 verify 3 blockers fixed(build + LLMCallModule + regression)
下一步自动会做 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 23, 2026

📊 codex 进展 fix-pr922-r5 (⏳ 进行中; 已跑 12 min)

+            CancellationToken.None);
+
+        var absentRequest = ctx.Published.Select(x => x.evt).OfType<ChatRequestEvent>().Single();
+        absentRequest.Telegram.HasWaitTimeoutMs.Should().BeFalse();
+        absentRequest.Telegram.HasTimeoutMs.Should().BeFalse();
+    }
+
+    [Fact]
     public async Task LLMCallModule_TextMessageEndAndChatResponse_ShouldCompleteMatchingPendingStep()
     {
         var module = new LLMCallModule();

tokens used
108,152
Implemented the PR #922 r5 fixes.

Changed:
- `StreamingProxyGAgent` now reads access token, preferred route, and default model from typed `ChatRequestEvent.ToolContext`, removing stale constant references.
- `LLMCallModule` now accepts `"0"` for Telegram `wait_timeout_ms`, `telegram.timeout_ms`, and shared timeout promotion, preserving explicit proto presence.
- Added regression coverage for workflow parameter string `"0"` -> typed Telegram proto presence, and absent timeout -> no presence.

Verified:
- `dotnet build aevatar.slnx --nologo` passed
- `dotnet test aevatar.slnx --nologo --filter "Telegram|StreamingProxy"` passed
- `bash tools/ci/test_stability_guards.sh` passed

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

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 codex 进展 review-pr922-omnibus-r7 (⏳ 进行中; 已跑 9 min)


codex
Findings: none. The 3 r5 blockers are fixed at reviewed head `9a3d43a8`.

Verified:
- `dotnet build aevatar.slnx --nologo` PASS
- `dotnet test aevatar.slnx --nologo --filter 'Telegram|StreamingProxy'` PASS
- `bash tools/ci/test_stability_guards.sh` PASS
- `bash tools/ci/architecture_guards.sh` PASS

Note: local `origin/pr-922` still pointed at `67686f04`, but the requested worktree branch is at `9a3d43a8`; I reviewed that head.

REVIEW_DONE:922:omnibus:approve
⟦AI:AUTO-LOOP⟧
tokens used
145,950
Findings: none. The 3 r5 blockers are fixed at reviewed head `9a3d43a8`.

Verified:
- `dotnet build aevatar.slnx --nologo` PASS
- `dotnet test aevatar.slnx --nologo --filter 'Telegram|StreamingProxy'` PASS
- `bash tools/ci/test_stability_guards.sh` PASS
- `bash tools/ci/architecture_guards.sh` PASS

Note: local `origin/pr-922` still pointed at `67686f04`, but the requested worktree branch is at `9a3d43a8`; I reviewed that head.

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

@codecov
Copy link
Copy Markdown

codecov Bot commented May 23, 2026

Codecov Report

❌ Patch coverage is 96.01329% with 12 lines in your changes missing coverage. Please review.
✅ Project coverage is 83.52%. Comparing base (a3bca79) to head (5553b3c).
⚠️ Report is 2 commits behind head on auto-refact-dev.

Files with missing lines Patch % Lines
...low/Aevatar.Workflow.Core/Modules/LLMCallModule.cs 96.42% 1 Missing and 4 partials ⚠️
...low/Aevatar.Workflow.Core/Modules/ReflectModule.cs 87.50% 1 Missing and 1 partial ⚠️
...s/ToolProviders/AgentToolExecutionContextMapper.cs 98.75% 0 Missing and 1 partial ⚠️
src/Aevatar.AI.Core/AIGAgentBase.cs 80.00% 0 Missing and 1 partial ⚠️
src/Aevatar.AI.Core/Chat/ChatRuntime.cs 96.77% 0 Missing and 1 partial ⚠️
src/Aevatar.AI.Core/RoleGAgent.cs 83.33% 0 Missing and 1 partial ⚠️
....Core/Execution/WorkflowExecutionRuntimeContext.cs 87.50% 1 Missing ⚠️
@@                 Coverage Diff                 @@
##           auto-refact-dev     #922      +/-   ##
===================================================
+ Coverage            83.21%   83.52%   +0.30%     
===================================================
  Files                  991      991              
  Lines                63471    63678     +207     
  Branches              8211     8232      +21     
===================================================
+ Hits                 52820    53184     +364     
+ Misses                7107     6933     -174     
- Partials              3544     3561      +17     
Flag Coverage Δ
ci 83.52% <96.01%> (+0.30%) ⬆️

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

Files with missing lines Coverage Δ
...ication/Runs/WorkflowChatRequestEnvelopeFactory.cs 84.37% <ø> (-0.25%) ⬇️
...ion/WorkflowRequestMetadataRuntimeContextAccess.cs 92.59% <100.00%> (+1.28%) ⬆️
...ow/Aevatar.Workflow.Core/Modules/EvaluateModule.cs 65.02% <100.00%> (+0.98%) ⬆️
...orkflow/Aevatar.Workflow.Core/WorkflowRunGAgent.cs 83.07% <100.00%> (+0.60%) ⬆️
...s/ToolProviders/AgentToolExecutionContextMapper.cs 98.93% <98.75%> (-0.14%) ⬇️
src/Aevatar.AI.Core/AIGAgentBase.cs 82.55% <80.00%> (-2.03%) ⬇️
src/Aevatar.AI.Core/Chat/ChatRuntime.cs 89.45% <96.77%> (+0.27%) ⬆️
src/Aevatar.AI.Core/RoleGAgent.cs 82.47% <83.33%> (+0.57%) ⬆️
....Core/Execution/WorkflowExecutionRuntimeContext.cs 87.12% <87.50%> (-1.45%) ⬇️
...low/Aevatar.Workflow.Core/Modules/ReflectModule.cs 77.87% <87.50%> (+0.51%) ⬆️
... and 1 more

... and 8 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.

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 状态卡片 — fix 派出

维度
阶段 派出 codex(role=fix)
codex log fix-pr922-r6-codecov.log
工作目录 /Users/auric/aevatar-wt-iter56-cluster-917-workflow-llm-control-metadata
timeout 5400s(~90 min 上限)
上下文 codecov/patch fail → fix r6 补 coverage
下一步自动会做 1. fix r 完成 marker FIX_DONE:... 2. controller commit + push 3. 派 reviewer r<N+1>
是否需要人介入 ❌ 否(自动推进)

🤖 controller status banner

⟦AI:AUTO-LOOP⟧

loning added 5 commits May 24, 2026 03:44
…ers/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⟧
…+ 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⟧
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⟧
…ression

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⟧
补 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⟧
@loning loning force-pushed the refactor/iter56-cluster-917-workflow-llm-control-metadata branch from 9a3d43a to f8045a7 Compare May 23, 2026 19:44
@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 状态卡片 — fix 派出

维度
阶段 派出 codex(role=fix)
codex log fix-pr922-r6-codecov.log
工作目录 /Users/auric/aevatar
timeout 5400s(~90 min 上限)
上下文 r6 fix done(+216 coverage,patch 88%)+ rebased → CI re-run
下一步自动会做 1. fix r 完成 marker FIX_DONE:... 2. controller commit + push 3. 派 reviewer r<N+1>
是否需要人介入 ❌ 否(自动推进)

🤖 controller status banner

⟦AI:AUTO-LOOP⟧

@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 状态卡片 — fix 派出

维度
阶段 派出 codex(role=fix)
codex log fix-pr922-r7-deep-codecov.log
工作目录 /Users/auric/aevatar-wt-iter56-cluster-917-workflow-llm-control-metadata
timeout 5400s(~90 min 上限)
上下文 r6 仍 codecov 56% (vs local 88%) → r7 deep investigation Codecov per-file detail
下一步自动会做 1. fix r 完成 marker FIX_DONE:... 2. controller commit + push 3. 派 reviewer r<N+1>
是否需要人介入 ❌ 否(自动推进)

🤖 controller status banner

⟦AI:AUTO-LOOP⟧

Add focused coverage for typed tool-context payload serialization, ChatRuntime routing merge, StreamingProxy typed lifecycle fields, and LLM Telegram parameter variants.

⟦AI:AUTO-LOOP⟧
@loning loning force-pushed the refactor/iter56-cluster-917-workflow-llm-control-metadata branch from eb3b808 to 5553b3c Compare May 23, 2026 20:24
@loning
Copy link
Copy Markdown
Contributor Author

loning commented May 23, 2026

📊 状态卡片 — fix 派出

维度
阶段 派出 codex(role=fix)
codex log fix-pr922-r7-deep-codecov.log
工作目录 /Users/auric/aevatar
timeout 5400s(~90 min 上限)
上下文 r7 fix done(applied-12 coverage:typed tool context + ChatRuntime + StreamingProxy + LLMCallModule;local 83.25%)→ CI re-run
下一步自动会做 1. fix r 完成 marker FIX_DONE:... 2. controller commit + push 3. 派 reviewer r<N+1>
是否需要人介入 ❌ 否(自动推进)

🤖 controller status banner

⟦AI:AUTO-LOOP⟧

@loning loning merged commit b4070cc into auto-refact-dev May 23, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant