项目计划检查·依赖与日期
一份排期表发出去之后最尴尬的事,是被人一眼看出「任务 A 要等 B,B 又要等 A」。
本工具在计划发布前,把任务清单的结构性问题扫一遍。
执行原则
- 先跑后判。 先跑脚本拿到清单,原样引用其中的行号与任务名;不要凭印象补写或夸大命中项。
- 只查结构。 只判断日期、依赖、责任人、里程碑是否齐备自洽;不要估算工期、做资源平衡或排关键路径。
- 只读不改。 只读输入文件、只输出建议;不要回写或替用户修改排期表。
- 依赖按名匹配。 依赖关系按任务名精确匹配,改名会中断引用;不要在任务名不一致时强行推断依赖指向。
- 零命中直说。 命中为 0 就直接说明未发现问题;不要为了显得有用而编造问题。
何时使用
CRITICAL: 只要用户提出「看看排期/计划有没有问题 / 任务依赖对不对」,就必须使用本 skill,即使看起来可以用别的方式解决。
- 项目启动前,任务清单写完想确认排期没有结构性问题。
- 用户给出任务/排期 CSV,问「帮我看看这个计划有没有问题」。
- 周会前复核排期变更。
何时不该使用
| ✅ 使用 | ❌ 不用(改用什么) |
|---|---|
| 排期发版前查日期倒挂、依赖成环、依赖指向不存在的任务 | 要算工期、排关键路径、做资源平衡 → 本包不做 |
| 查任务缺负责人、缺单侧日期、清单里有没有里程碑 | 要生成排期或给出调整后的计划 → 本包只报不改 |
| 任务名唯一且一致的 CSV 清单 | 任务名重复或依赖按序号引用 → 依赖按名匹配会失效,先统一命名 |
| 周会前复核排期变更 | 要看迭代速度、承诺达成与阻塞 → 改用 sprint-health-lint |
易混淆场景
| 用户说的 | 实际意图 | 正确路由 |
|---|---|---|
| 「这个计划什么时候能做完?」 | 要工期或交付日期 | 本包不做工期估算;只报告日期与依赖层面的问题 |
| 「帮我把计划重新排一下」 | 要改后方案 | 只给补正建议,不回写排期表 |
| 「依赖写了 A,为什么报不存在?」 | 任务名不一致 | 说明依赖按任务名精确匹配,改名会中断引用 |
| 「我们这个迭代健康吗」 | 要看速度与承诺 | 改用 sprint-health-lint,本包只看排期结构 |
怎么用
python3 scripts/plan_lint.py 计划.csv
python3 scripts/plan_lint.py 计划.csv --long-days 45 # 自定义「工期过长」阈值
python3 scripts/plan_lint.py 计划.csv --json
python3 scripts/plan_lint.py --sample
- 交付模板:排期检查报告模板。
输入格式
列名自动识别(大小写、空格差异兼容):
| 角色 | 候选关键词 |
|---|---|
| 任务名(必要) | 任务 / 任务名 / 工作项 / 事项 / 活动 / task |
| 负责人 | 负责人 / 责任人 / 执行人 / owner |
| 开始日期 | 开始 / 起始 / 计划开始 / start |
| 结束日期 | 结束 / 完成 / 截止 / end / due |
| 依赖 | 依赖 / 前置 / 依赖任务 / predecessor |
| 里程碑 | 里程碑 / milestone / 节点 |
- 日期支持
YYYY-MM-DD、YYYY年M月D日。 - 依赖列可写多个前置任务,用
;;、,,|/分隔。
检查项与规则码
| 规则码 | 含义 | 严重度 |
|---|---|---|
DATE_ORDER |
开始日期晚于结束日期 | 高 |
DEP_UNKNOWN |
依赖的任务名不存在 | 高 |
DEP_CYCLE |
依赖成环(互相等待) | 高 |
NO_OWNER |
任务缺负责人 | 中 |
BAD_DATE |
日期无法解析 | 中 |
MISSING_DATE |
缺开始或结束日期(只有单侧) | 中 |
BAD_ROW |
行缺任务名 | 中 |
LONG_TASK |
单任务工期过长(默认 >60 天) | 低 |
ZERO_DURATION |
工期为 0 天 | 低 |
NO_MILESTONE |
清单里没有任何里程碑 | 低 |
输出示例(节选)
任务行数:7
问题合计 5 项:高 2 · 中 1 · 低 2
结论:存在硬伤(日期倒挂/依赖成环/依赖缺失),先修再发
—— 高风险 ——
[DATE_ORDER] 日期倒挂:需求评审(第 2 行)
· 说明:开始 2026-10-20 晚于结束 2026-10-15
[DEP_UNKNOWN] 依赖的任务不存在:数据迁移 → 数据库割接(第 8 行)
—— 中风险 ——
[NO_OWNER] 任务缺负责人:前后端开发(第 4 行)
设计边界
- 纯标准库 Python,只读,无网络请求,无
subprocess/eval;输入按 UTF-8(含 BOM)读取。 - 只做结构性与完整性检查(日期、依赖、责任人),不做工期估算、资源平衡、关键路径计算。
- 依赖关系仅按任务名匹配:任务名必须唯一且一致,改名会中断引用。
- 样例为构造的演示数据,人名与项目均为虚构。