P2 fix(harness): consent-items-single-source 扫描器不覆盖 apps/api/scripts —— 种子脚本可以悄悄漂离单一事实源
- Dominant language
- TypeScript
- Stars
- 0
- Forks
- 0
- Avg merge
- 1h 7m
- Merged PRs (30d)
- 969
Description
## 盲区
`apps/api/tests/skill/consent-items-single-source.test.ts`(#533 的门控,钉住「同意项只有一处定义」)扫描范围是 `apps/api/src` + `packages/contracts/src`,**不覆盖 `apps/api/scripts/`**。
## 已真实发生过一次
`apps/api/scripts/seed-fullstack-smoke.ts` 给种子线程种录音授权时写的是字面量 `["record", "transcript", "ai_analysis"]`(三项)。#533 把同意项裁成四项后,这处字面量**没有跟着变**,也**没有任何门控告诉任何人**——直到 `fullstack-smoke` 的 CI 在步骤 7「会话内录音」上超时,实测追出 `403 CONSENT_NOT_COMPLETED`,才发现种子脚本只答得出 3/4。
⇒ **这处字面量对现有扫描器不可见**,发现它完全靠一次端到端 CI 失败加人工排查,不是靠机械门控。
## 建议
把 `consent-items-single-source.test.ts` 的扫描范围扩到 `apps/api/scripts/`(或者单独扫种子/fixture 目录),让「同一事实两处声明」的门控覆盖到测试基础设施本身,不只覆盖生产代码。
## 关联
- #533(同意项收敛为单一事实源)
- PR #585(本盲区的发现现场;已被人类批量关闭,修复以新 PR 重新提交,见 #533 后续)
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with apps/api/tests/skill/consent-items-single-source.test.ts and inspect how it scans apps/api/src and packages/contracts/src. Extend the scan to apps/api/scripts, then run the focused consent-items single-source test. Done means the existing seed-fullstack-smoke.ts literal is covered and duplicate consent-item declarations fail the gate.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- testing
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 76/100