diff --git a/.task/feature-agent-stack-q1.md b/.task/feature-agent-stack-q1.md index 32fddaf0..6ba3fe63 100644 --- a/.task/feature-agent-stack-q1.md +++ b/.task/feature-agent-stack-q1.md @@ -23,7 +23,8 @@ - 增量一(2026-10-07):WP1+WP2 落地并合入(Agent-Squad #23 → Backend #79 → Dev pin)。内容:① 新 `squad/graph.go`——compileGraph(每轮从权威 Steps 现场编译)+ nextLayer + 写集冲突检测;Needs 声明依赖(未知/自引用/环 fail-closed),未声明保持现状(相邻 Parallel 同层、非 Parallel 依赖紧邻前一步),依赖满足含 failed(降级继续),空 status 等同 pending;② `StepSpec.Writes` 写集,同层相交强制串行;③ advance 重写为 superstep 推进(并行段复用 runParallel、串行段逐 runOneStep、单成员组照常动态调整、图错误/死锁 fail-closed、层边界 EvPhase 事件)。过程中修复四处语义陷阱(空 status、Parallel 组后锚点、单成员组动态调整、failed 依赖满足),全部有注释。验证:五个模块 vet+test 全 ok;兼容网(engine/leader/recovery/r2/intent/evaluator)原样全绿;graph 新测 7 例。 - 增量二(2026-10-07):WP3 落地并合入(Agent-Squad #24 → Backend #80 → Dev pin)。内容:① `StepSpec.AttemptID`——进入 running 落盘 runID/stepID/N 并作为 ExecutionID,瞬态重试共享同一 AttemptID;② `recoverInterrupted`(HitlAuto)产物校验——running 崩溃且交付物全部在盘 = 副作用实际发生过,按该 attempt 判定完成(合并产物+事件注记)不再重跑,缺失才走原一次重试。验证:全套件绿含三新测——TestAttemptIDFormat(形态)、**TestKilledAtSuperstepBoundarySideEffectsOnce(Q1 验收第一条实证:杀进程后恢复,已完成步骤执行次数逐一相等零重跑、running 步骤按 attempt 判定完成)**、TestInterruptedMissingProductsRetries(产物缺失 auto 一次重试不无限重放)。 - 增量三(2026-10-07):WP4+WP6+WP7 落地并合入(Agent-Squad #25 → Backend #81 → Dev pin)。内容:① 新 `squad/runstore.go`——Store 端口 + FileStore 收编现状文件态(低层语义逐字不变),runState/engineDeps 携带端口,构造与全部加载点改道;② `Checkpoint` 三档(sync 默认/async 串行写/on_exit 最终快照,RunOptions.CheckpointMode),superstep 序号+图结构指纹+全量步骤快照;③ **图连续性校验(WP1 图版本裁定落点)**——Resume 比对最新检查点指纹,崩溃期间图形态被改则拒绝恢复并提示重新规划;④ 新 `squad/termination.go`——四个硬编码停止条件集中注册 + And/Or 组合原语;⑤ 关账:Q23 leader 达上限裸失败→按现有产出走 finalize 降级收口、Q26 人工 retry 累计加预算有界(RepairBudgetGranted 落盘,超限拒绝)、Q6 SweepExpired 死代码接进 serve 周期扫描与 SweepWakeups 并列。验证:全套件绿含新测(边界快照与 latest 一致、async/on_exit 两档、指纹分支拒绝、And/Or 真值表、追加达上限被拒、leader 上限测试按 Q23 改述);既有恢复/leader/engine 套件原样通过。 -- 待办增量四:WP5 SQLite 收编(SQLiteStore + platform 双真相源合一 + X6 修 RunInProcess 绕过 Executor 端口 + 验收第三条「文件 run 与 SQLite 不再双记步骤状态」)。 +- 增量四(2026-10-07):WP5 落地并合入(Agent-Squad #26 → Backend #82 → Dev pin),**Q1 七个工作包全部落地**。内容:① 端口可实现性修正——`runState`/`hitlGate` 导出为 `RunState`/`HitlGate`(WP4 埋的缺陷:外部包无法实现带未导出类型的端口);② `SQLiteStore`(adapters/sqlite/runstore.go)——squad.Store 的 SQLite 实现(squad_run_state/gate/checkpoint/leader 四表与平台既有 23 表同库),Options.Store 接线,leader 持久化与 superstep 检查点改道端口;③ PrepareWorkspace 不再直写 run 级 JSON(st.save 经端口统一落盘);④ **X6**——`RunInProcess` 签名改 squad.Executor(执行走端口,nil fail-closed),cli/测试调用方改脚本执行器注入(并修掉共享指针跨步骤串味的真实陷阱);⑤ **单库挂载**——serve 的 assemble 先开 orchestration.db,引擎直接用 plat.RunStore() 并复用同一连接挂平台,运行状态与编排状态同一个 SQLite 文件。验证:五个模块全绿(TestSQLiteStoreRoundTrip 全链路、**TestEngineRunsOnSQLiteStore 验收第三条实证**、squad 全套件原样绿)。 +- 待办:Dev pin PR(本批)→ Q1 验收收尾闭卡。 ## 需求分析 @@ -72,9 +73,9 @@ ## 结果与验证(完成后填写) -- 结果: -- 验证:<结论摘要 PASS/FAIL/SKIP/NOT_RUN 逐项;逐条证据由 make evidence 写入上方证据表> -- 影响与剩余项: +- 结果:Q1 七个工作包全部落地。WP1 图模型与 Needs 调度(每轮现场编译、写集冲突串行、兼容映射、failed 视为满足);WP2 superstep 推进(并行段复用、单成员组动态调整、fail-closed 图错误/死锁);WP3 attempt id 幂等(runID/stepID/N、running 崩溃产物齐全按 attempt 判定完成);WP4 Store 端口与三档检查点(FileStore 收编、图连续性校验拒绝结构变化恢复);WP5 SQLite 收编(SQLiteStore、单库挂载、X6);WP6 Termination 收编(Q23 降级收口/Q26 追加上限/And-Or 原语);WP7 interrupt/resume 形态对齐(SweepExpired 接进周期循环)。合入链共 10 个 PR:Agent-Squad #23/#24/#25/#26、Backend #79/#80/#81/#82、Dev #237/#238/#239(本批 pin PR 见下)。 +- 验证:验收三条均 PASS——① 「superstep 边界杀进程副作用次数=1」:TestKilledAtSuperstepBoundarySideEffectsOnce(杀进程后恢复,已完成步骤执行次数逐一相等、running 步骤按 attempt 判定完成零重跑)+ TestInterruptedMissingProductsRetries(缺失才一次重试);② 「写同一工件的步骤不并行」:图层写集冲突串行化断言(graph_test)+ superstep 事件序;③ 「文件 run 与 SQLite 不再双记步骤状态」:TestEngineRunsOnSQLiteStore(run 级 JSON 不落盘、状态经端口读回、检查点入库、第二引擎同库可用)+ TestSQLiteStoreRoundTrip。证据:squad/adapters/backend 各仓 CI 在各自 merge 前 success(GATE);Dev 分支多次 check-pins/make test exit=0(收据入卡);既有兼容网(engine/leader/recovery/r2/intent/evaluator)全程原样通过。 +- 影响与剩余项:行为变化两处(均有意且有文档):leader 达上限从裸失败改为降级收口(Q23);人工 retry 追加有界(Q26)。平台 daemon run-native 签名变化(stream→Executor,属内部命令)。剩余项转后续:黑板可回放增量与 Reads 读集(Q2);拓扑库(Q2);platform 的 task 队列本身翻译成 squad run(更深的产品合一,Q 系列/EXT 范畴);leader.json 在 SQLite 下的 leader 模式端到端(Store 已实现 SaveLeader/LoadLeader,leader 模式回归在 FileStore 上证明)。下一步按总案推进:库分期三兄弟(N1/I1/Q1)全部完成——后续 N2/N3/Q2/Q3/I2 与 MS1 下游按 RDM 总案排期。 ## 合入与清理