GRP-001 可追溯链
验证 ID 能否像 需求 → 设计 → 测试计划 那样在多个文档阶段中按顺序追溯。某个阶段中 ID 未被引用时,会报告为 warning。这是项目作用域规则,会跨越 include 加载的所有文档进行评估。
收集首阶段(chain[0])idColumn 中的 ID,并依次确认其后各阶段的 refColumn 是否引用了这些 ID。
在 需求 → 设计 → 测试 这样的流程中,「需求 ID 必定在设计中被引用,设计中出现的 ID 必定在测试中被引用」是一致性的最低条件。但当增加一项需求却忘了写设计,或忘了写测试计划时,文件分散后人眼无法追踪。本规则可机械化检测链中的缺失。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
chain | object[] | ✓ | 构成链的各阶段(至少 2 阶段)。数组顺序即验证顺序 |
idPattern | string | — | 仅将匹配此正则表达式的值视为 ID(不匹配的值将被忽略) |
chain 的各阶段
Section titled “chain 的各阶段”| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
stage | string | ✓ | 阶段名(将出现在错误信息中) |
files | string | ✓ | 表示该阶段文档的 glob |
idColumn | string | — | 该阶段定义 ID 的列名(首阶段必填) |
refColumn | string | — | 该阶段引用前一阶段 ID 的列名(第二阶段及以后必填) |
首阶段指定 idColumn,第二阶段及以后指定 refColumn。
docs/requirements.md:
| ID | Name || ------- | ------ || REQ-001 | Login || REQ-002 | Logout |
docs/design.md:
| Requirement | Detail || ----------- | ------------- || REQ-001 | Design login |REQ-002 未被 docs/design.md 的 Requirement 列引用,因此判定为违例。
docs/requirements.md line 4 warning REQ-002 defined in docs/requirements.md but not referenced in stage "Design" GRP-001docs/design.md:
| Requirement | Detail || ----------- | -------------- || REQ-001 | Design login || REQ-002 | Design logout |{ "rule": "grp001", "options": { "chain": [ { "stage": "Requirements", "files": "**/requirements.md", "idColumn": "ID" }, { "stage": "Design", "files": "**/design.md", "refColumn": "Requirement" }, { "stage": "Test", "files": "**/test-plan.md", "refColumn": "Covers" } ], "idPattern": "^REQ-\\d{3}$" }}3 阶段以上的链也能通过扩展 chain 数组直接表达。指定 idPattern 可以将表头样例行或表记不一致的行从 ID 集合中排除。
- TBL-006 文件间 ID 唯一性 — 验证 ID 在整个仓库中是否唯一
- REF-002 ID 的定义与引用 — 两个文件之间的 ID 引用验证(并非链式而是 1 对 1)
- GRP-002 循环引用 — 验证文档间链接中是否存在循环
- GRP-003 孤立文档 — 检测未被任何文档引用的文件