harness: 无关契约束的结构问题不应阻塞其它束/delta 的 claim/new-sprint
- Dominant language
- TypeScript
- Stars
- 0
- Forks
- 0
- Avg merge
- 1h 7m
- Merged PRs (30d)
- 969
Description
## 问题
\`auditSignoff\`(\`.harness/scripts/lib/design-signoff.ts\`)的规则①(束内结构完整性:缺文件 / 空 covers / 时间戳 / 正文自称不可签核)对 \`bundles\` 数组做**无条件全量扫描**,与本次 \`new-sprint\`/\`claim\` 请求的 featureIds 无关。
实例:phase-01 的 \`plan-control\` 束当前 \`status: confirmed\` 但 \`covers: []\`(TW-P0-3 对应 feature 尚未生成,属预期过渡态),触发「空 covers 的束不成立」FAIL。这条 FAIL 对 phase-01 下**任何** feature 的 \`new-sprint\`/\`claim\` 都生效——包括与 \`plan-control\` 毫无依赖关系的 \`skill-office-docs-node-runtime\`(design-delta,自身已签核,F972 已生成)。
## 根因
契约束切分的判据是「不变量互相依赖的才同束」(见 \`.harness/instructions/contract-design.md\` 第一节)——独立能力域本该互不阻塞。但门控实现把「束内结构完整性」这条本该局部生效的检查,和「跨束一致性复核覆盖度」这条天然该全量生效的检查,混进了同一个无差别循环,导致一个束的过渡态问题变成 phase 级单点故障。
## 修复方向
仅在 \`mode === "gate"\` 且 \`featureIds\` 非空时(即 \`new-sprint\`/\`claim\` 的真实调用场景),把规则①的检查范围收窄到「覆盖了本次请求的至少一个 featureId 的束」。\`featureIds.length === 0\`(\`verify-uc-coverage\` 的结构性全量扫描)与 \`mode === "audit"\`(\`doctor\` 的全阶段健康报告)维持现状不变。规则③(一致性复核覆盖度)不动——它是天然的跨束检查。
Closes 需求见本 issue;实现 + 反证测试见对应 PR。
Contributor guide
No contributing guide indexed for this repository
Research direction
Start in .harness/scripts/lib/design-signoff.ts and read the first section of .harness/instructions/contract-design.md. Trace auditSignoff in gate and audit modes, then exercise new-sprint/claim with featureIds and verify-uc-coverage without them. Done means unrelated bundles no longer block targeted requests, while full scans and cross-bundle coverage checks remain unchanged.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 68/100