Files
workbuddy_skills/session-mechanism/references/taskgraph.md
T

76 lines
3.4 KiB
Markdown
Raw Normal View History

# 任务图规范(防干等的核心件)
> 任务图**细则档**:本档给**写法、算法、模板**。**架构层判据 ⇒ `references/architecture.md`**;原技能存档 ⇒ `references/collab-detail.md §3`。
## 1 为什么需要它
**没有显式依赖图 ⇒ 三个必然浪费**:
1. **该并行的没并行**(不知道谁不依赖谁)
2. **在非关键路径上花时间**(不知道谁决定总工期)
3. **有活没人干、或有人干着等前置**(看不出"可派未派"和"干等")
## 2 文件格式
`任务图.json`(路径在配置 `taskgraph` 指定):
```json
{
"goal": "一句话说清要达成什么",
"updated": "YYYY-MM-DDTHH:MM",
"rules": {
"dispatch": "只派依赖已满足的节点;优先关键路径;一条线只挂一个",
"domain": "域锁按节点涉及的文件/子目录声明;禁止整工作区粗域",
"handoff": "收口即派(+1~2 分钟)",
"waste": "可派集合非空 ∧ 无棒在跑 ⇒ 可派未派 ⇒ 立即派"
},
"critical_path": ["N5", "N8", "N9"],
"nodes": [
{ "id": "N1", "title": "做什么", "line": "line-a", "deps": [],
"status": "done", "evidence": "可核对的产物/读数(⛔ 不写自述)" },
{ "id": "N5", "title": "做什么", "line": "line-a", "deps": ["N1"],
"status": "blocked", "blocker": "卡在哪、缺什么" },
{ "id": "N8", "title": "做什么", "line": "line-b", "deps": ["N5"],
"status": "todo" }
]
}
```
**字段口径**:
| 字段 | 口径 |
|---|---|
| `status` | `todo` / `running` / `blocked`(依赖已满足但技术卡住) / `done` |
| `deps` | **只有前置 `done` 才解除阻塞**;`blocked` **不解除**(它本身要人干) |
| `evidence` | **必须可核对**(文件 / rc / 端口 / 数据对照)—— 这是"真成果"的判据 |
| `critical_path` | 从目标倒推的**最长依赖链**(决定总工期) |
## 3 程序怎么算(`collabd.py` 内 `taskgraph()`)
```
for 每个未 done 节点:
未满足的前置 = [d for d in deps if nodes[d].status != 'done']
未满足为空 ⇒ ready(可派)
未满足非空 ⇒ waiting(并记录"等谁")
waste = ready 非空 ∧ 没有任何棒在跑 ∧ 无锁 ← 🔴 可派未派=浪费
```
⇒ 输出进实时状态;`waste` 时写 `READY.md` 喊出来。
## 4 四条派活规则(写死在 `rules`,程序与人都照它)
1. **只派 `ready` 节点** ⇒ 能并行的**立刻并行**
2. **优先 `critical_path` 上的节点** ⇒ 非关键路径**押后不拖工期**
3. **一条线同时只挂一个**,**多条线可同时挂**
4. **收口即派(+3~4 分钟)** ⇒ ⛔ 不要 +5~8 分钟空窗(🔴 2026-10-01 用户口径:基准 = 收口 + **3~4 分钟**)
## 5 关键路径单线化 ⇒ 必须拆
若关键路径上**只有一个执行主体**,总工期 = 该主体的串行时间之和 ⇒ **必拆**:
- 把节点**拆成更小的可独立验证步骤**
- 把**不涉及该主体特有资源**的部分**并行出去**(给别的线)
- 例(真实):`N5 20090 通路常驻` 曾被拆成「① 能起 ② 能保持 ③ 掉线自愈」,其中"自愈策略"可交别的线并行
## 6 维护纪律
- **状态变了就改**(谁做的谁改;主会话判定后改)—— 任务图过期比没有更糟
- **`evidence` 只写可核对的东西**;⛔ 不写"已完成""跑通了"这类自述
- **节点粒度**:**一个节点 = 一个会话能在一轮里做完并给出读数**的事