Commit d7035fc58f122bdc73462ebbfe57e02e077b2395

Authored by bboonnee
1 parent 8646516e

Validator/Planner skills: require real-state verification for cross-task data dependencies

Real incident (2026-08-06): the skill-content migration task and the skill
detail page bug fix were two separate tasks. Neither was asked to verify
that migrated content is actually reachable through the DB-backed lookup
the detail page uses. Both passed their own tests cleanly -- because both
only ever exercised the mechanism against seeded/mocked fixture data, never
checked whether the real producer's real output actually exists in the
real system. The result: the skill detail page returned "not found" for
all 12 real migrated skills, and nobody caught it until a human clicked
through the real console.

qa-task-validation (§8): passing unit tests against seeded fixtures proves
the mechanism is correct given valid input -- it does not prove that input
exists for real. When a feature reads data another task/process was
supposed to have already written, Validator must independently query the
real running system against a real (not newly-created) object.

project-sdd-planning (§10): when a task's acceptance depends on another
task's real output, the Benchmark must name a real, specific object as the
acceptance anchor, not just describe the mechanism.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
skills/project-sdd-planning/SKILL.md
@@ -233,7 +233,8 @@ SDD 达成条件: @@ -233,7 +233,8 @@ SDD 达成条件:
233 3. `acceptance_matrix` 覆盖 PRD 全量需求; 233 3. `acceptance_matrix` 覆盖 PRD 全量需求;
234 4. 每个接口至少包含成功 + 典型失败 + 并发失败场景; 234 4. 每个接口至少包含成功 + 典型失败 + 并发失败场景;
235 5. 每个流程至少有超时/重试/回滚条件; 235 5. 每个流程至少有超时/重试/回滚条件;
236 -6. Code Agent 约束包可被下游消费(不依赖自然语言推断)。 236 +6. Code Agent 约束包可被下游消费(不依赖自然语言推断);
  237 +7. 若本任务的验收依赖另一任务/流程已经产出的真实数据(而非本任务自己创建的数据),Benchmark 必须点名一个真实存在的具体对象作为验收锚点,不能只描述“机制应该正确”(真实教训 2026-08-06:Skill 内容迁移与详情页展示分属两个任务,谁都没被要求验证“真实迁移的内容能否被真实查到”,这条数据链路因此从未被真正接通过)。
237 238
238 ## 十一、质量门禁(给自审与下一轮) 239 ## 十一、质量门禁(给自审与下一轮)
239 240
skills/qa-task-validation/SKILL.md
@@ -156,6 +156,8 @@ metadata: @@ -156,6 +156,8 @@ metadata:
156 156
157 “服务进程存在”不等于功能通过;“接口 200”也不等于业务状态正确。必须核对最终可观察结果。 157 “服务进程存在”不等于功能通过;“接口 200”也不等于业务状态正确。必须核对最终可观察结果。
158 158
  159 +**“我方逻辑正确”不等于“上游数据真的存在”**:当被测功能读取的是另一个任务/流程本该早先写入的持久化数据(数据库行、注册表条目、索引文件——不是本次任务自己创建后立刻验证的临时数据)时,只用本任务自己 seed 的假数据跑通单测不构成集成证据——那只证明了机制在给定合法输入时是对的,没有证明这批合法输入在真实系统里真的存在。必须额外对着真实运行的系统/真实持久化存储,用一个真实存在(不是本次新建)的具体对象做一次端到端查证,确认生产者确实产出过、消费者确实能读到。真实教训(2026-08-06):一次 Skill 详情页 bug 修复只用手工 seed 的假 skill 行验证通过,全部测试绿灯,但因为从没有任何代码真的把已经真实迁移到磁盘的 12 个 Skill 写进数据库表,这个功能在真实系统里对所有真实 Skill 都返回“不存在”——两次独立的自动化验收(迁移那次和详情页那次)都没有发现,因为各自的验证范围都停在“自己负责的这一小段逻辑是对的”,没有人检查过跨任务的这条数据链路在真实系统里是否真的接通。
  160 +
159 ### 9. 非功能专项(按风险触发) 161 ### 9. 非功能专项(按风险触发)
160 162
161 - **安全:** 涉及认证、授权、输入处理、敏感数据或外部暴露面时,依据 OWASP ASVS/WSTG 的相关要求选择验证项;发现高危安全缺陷直接阻断。 163 - **安全:** 涉及认证、授权、输入处理、敏感数据或外部暴露面时,依据 OWASP ASVS/WSTG 的相关要求选择验证项;发现高危安全缺陷直接阻断。