Files
dsh_ai1net_server/归档/技能包快照/session-mechanism-20261004/references/taskgraph.md
T
admin c1b5e4d966 chore(工作区): 全量入库 + 补齐 .gitignore(以工作区为准)
- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次)
- .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…),
  目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪
- .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/)
- .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*)
- .gitignore 补:备份件(*.bak-*)
- 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
2026-10-10 23:13:22 +08:00

77 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 任务图规范(防干等的核心件)
> 任务图**细则档**:本档给**写法、算法、模板**。**架构层判据 ⇒ `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` 只写可核对的东西**;⛔ 不写"已完成""跑通了"这类自述
- **节点粒度**:**一个节点 = 一个会话能在一轮里做完并给出读数**的事