docs(scheduler): 回写 M1–M7 实现状态与 5 处实现期偏差

- 里程碑表补提交号与验收结果
- 记下与设计稿的偏差:M3 拆分、a.mu 移除、interceptCh 删除、
  M0 伪时钟未做(用阻塞 provider 替代)、工具执行临界区由结构保证
This commit is contained in:
JianFeeeee
2026-09-13 00:48:20 +08:00
parent f11de37bf2
commit 6bd3313a22

View File

@ -445,6 +445,31 @@ go build ./... && go vet ./...
go test -race -count=1 ./internal/agent/... ./internal/plugin/... ./internal/sdk/...
```
### 实现状态2026-09-13 完成)
| 里程碑 | 提交 | 验收结果 |
|---|---|---|
| M1 | `9a58878` | ✅ agent 全量 + `-race`;新增 `task_test.go` 4 项 |
| M2 | `7082a50` | ✅ 新增 `scheduler_test.go` 6 组(含 O1/K1 |
| M3a+M3b | `c69a1f1` | ✅ 新增 `task_lifecycle_test.go` 5 项、`scheduler_preempt_test.go` 5 项 |
| M4 | `7565248` | ✅ 新增 `scheduler_critical_test.go` 3 项 |
| M5 | `a971fc8` | ✅ 新增 `scheduler_starvation_test.go` 4 项 |
| M6 | `4e4e0ad` | ✅ 新增 `task_terminal_test.go` 3 项 |
| M7 | `f11de37` | ✅ 新增 `scheduler_e2e_test.go` 3 项(压力/可观测/端到端) |
实现期与设计的差异(均已回写本文档):
1. **M3 拆为 M3a/M3b**:真正挂起要求帧跨 `prepare→run→finish`,否则 `processInput`
会在挂起返回后继续提交。
2. **`a.mu` 整体移除**:它原本只包住整轮 `process()`(同一 goroutine
移除后所有任务状态由 schedulerLoop 独占(不变量 I2/I3 可落地)。
3. **`interceptCh` 被删除**M3b 起中断一律走 `pendingInterrupts`,旧的
“同行注入 + 三处 drain + 批次放弃” 已无写入者属死代码M4 清理)。
4. **v1 未做 M0 的伪时钟**:所有抢占测试用“单次调用阻塞到 ctx 取消”的
provider 达到确定性,无需注入时钟。时序型判据(老化式提升)留待需要时。
5. **工具执行中不可抢占是被结构保证的**:让位检查只在 step 之间;
不需要在 step 内部再判一次。
---
## 15. 开放问题(后续版本)