Add leader progress ledger, replan cap, and mailbox with actor attribution (Q2 WP2) #43

Merged
weichen merged 1 commits from feature/q2-leader-mailbox-wp2 into main 2026-10-08 00:36:38 +00:00
Owner

Why

Q2 WP2(拓扑库):leader 拓扑需要进度账本 + 重规划上限(验收一 leader 项),mailbox 拓扑需要运行内消息原语,且验收三要求「mailbox 消息不能把挂起的权限批准掉」。

What

  • leader 进度账本:每轮委派后记 progress/stuck(同题重复且无新事实 = stuck);连续 2 轮 stuck 触发重规划(一次性指令并入下轮 leader 任务书 + 事件);Replans 触顶(默认 3,RunOptions.MaxReplans 可调)走 finalize 降级收口(与 Q23 轮次上限同款,不裸失败)。
  • mailbox:PostMessage 运行内点对点/广播消息(run 锁保护,执行中 ErrRunBusy,挂起与回合间隙可投递);随 RunState 持久化(diskRunState.mailbox);步骤/leader 任务书启动时取走并入「## 邮箱消息」段,只投递一次。
  • 验收三双防线:① 构造性——投递路径永不触 Respond/gate,消息只进 prompt 面;② RespondDecision.Actor 归属——非 human actor 的 choice 决议在 permission/confirmation/quality_review 门上一律拒绝(noteAndKeepHold + [blocked] 备注 + 事件)。
  • 修复:initLeaderState 读取 max_replans 元数据;diskRunState 持久化 Mailbox。

Evidence

  • conformance:TestLeaderLedgerStuckTriggersReplan / TestLeaderReplanCapFinalizes / TestMailboxDeliveredAfterHoldIntoNextStep / TestMailboxCannotApprovePermission / TestPostMessageGuards(SELF,本地)
  • 全套 GOWORK=off go test ./... -count=1 + -race 绿(SELF);CI 为权威(GATE)

Refs

  • Q2 计划:modules/documents docs/proposals/2026-10-07-agent-stack-q2q3-plans.md WP2
  • 任务卡:Dev 仓 .task/feature-agent-stack-q2.md
## Why Q2 WP2(拓扑库):leader 拓扑需要进度账本 + 重规划上限(验收一 leader 项),mailbox 拓扑需要运行内消息原语,且验收三要求「mailbox 消息不能把挂起的权限批准掉」。 ## What - **leader 进度账本**:每轮委派后记 progress/stuck(同题重复且无新事实 = stuck);连续 2 轮 stuck 触发重规划(一次性指令并入下轮 leader 任务书 + 事件);Replans 触顶(默认 3,RunOptions.MaxReplans 可调)走 finalize 降级收口(与 Q23 轮次上限同款,不裸失败)。 - **mailbox**:`PostMessage` 运行内点对点/广播消息(run 锁保护,执行中 ErrRunBusy,挂起与回合间隙可投递);随 RunState 持久化(diskRunState.mailbox);步骤/leader 任务书启动时取走并入「## 邮箱消息」段,只投递一次。 - **验收三双防线**:① 构造性——投递路径永不触 Respond/gate,消息只进 prompt 面;② RespondDecision.Actor 归属——非 human actor 的 choice 决议在 permission/confirmation/quality_review 门上一律拒绝(noteAndKeepHold + [blocked] 备注 + 事件)。 - 修复:initLeaderState 读取 max_replans 元数据;diskRunState 持久化 Mailbox。 ## Evidence - conformance:TestLeaderLedgerStuckTriggersReplan / TestLeaderReplanCapFinalizes / TestMailboxDeliveredAfterHoldIntoNextStep / TestMailboxCannotApprovePermission / TestPostMessageGuards(SELF,本地) - 全套 `GOWORK=off go test ./... -count=1` + `-race` 绿(SELF);CI 为权威(GATE) ## Refs - Q2 计划:modules/documents docs/proposals/2026-10-07-agent-stack-q2q3-plans.md WP2 - 任务卡:Dev 仓 .task/feature-agent-stack-q2.md
weichen added 1 commit 2026-10-08 00:35:15 +00:00
Add leader progress ledger, replan cap, and mailbox with actor attribution (Q2 WP2)
ci / vet-and-test (pull_request) Successful in 24s
ci / docker-checkout-hostgateway (pull_request) Successful in 0s
6d76111a16
Why: Q2 acceptance requires leader runs to detect stuck delegation loops and
cap replans instead of spinning to the turn limit, and a mailbox primitive
whose messages can never resolve a pending permission approval (acceptance 3).

Evidence: squad conformance tests (leader_mailbox_conformance_test.go):
ledger stuck->replan, replan cap finalize, mailbox delivery after hold,
mailbox-cannot-approve-permission (structural + actor second defense),
post guards; full suite green with -race.

Impact: LeaderState gains Progress/StuckTurns/Replans/MaxReplans/ReplanNote
(persisted in leader.json); RunState gains Mailbox (persisted in
runstate.json); RespondDecision gains Actor - non-human actors are rejected
on choice gates; step briefs and leader task briefs include pending mail.

Refs: Q2 plan WP2 (2026-10-07-agent-stack-q2q3-plans.md); task card
.task/feature-agent-stack-q2.md
weichen merged commit 01d5b96cda into main 2026-10-08 00:36:38 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: weichen/Agent-Squad#43