38 KiB
你必须按照目前的md文件详细执行我们的代码修改计划,且必须时刻关注,维护本次md文档,确保该文档能始终保持最新,和我们代码库保持完全一致,除非用户要求,否则默认禁止打补丁,禁止兼容层,我们需要的是简洁干净可扩展的系统,我们这个系统目前没有人用,可以一次性全量,彻底,不留遗留的修改,并且需要一次性完成所有,禁止停下,禁止自己停止任务,一次性完成所有内容。
全系统真实行为级测试替换执行主计划
版本: v1.0
仓库: /Users/earth/Desktop/waoowaoo
最后更新: 2026-02-25
定位: 用真实“行为结果断言”替换结构级/字符串级测试,覆盖全系统功能回归链路
1: 项目目标
1.1 为什么要做
当前系统历史回归集中在“链路行为错了但结构没变”的问题:
- 编辑角色/场景后字段未正确回写。
- 上传参考图后没有按参考图生成。
- 三视图后缀、locale、meta、referenceImages 在 route -> task -> worker 过程中丢失。
- 前端状态看起来正常,但真实任务状态或写库结果错误。
现有部分测试仍是结构级(例如检查源码里是否包含 apiHandler、submitTask、maybeSubmitLLMTask,或者仅检查 TASK_TYPE -> queue 映射),这类测试无法拦截真实业务回归。
1.2 需要达到的目标
把测试体系升级为“行为级为主、结构级为辅”:
- 每个关键功能都必须有“输入 -> 执行 -> 输出/副作用”的断言。
- 断言必须检查具体值(写入字段值、payload 值、response 值),不接受只断言“被调用了”。
- route、task type、worker handler 三层都要有行为级覆盖矩阵。
- 外部 API 全 fake,不走真实高成本调用。
1.3 本次扫描结论(基于当前仓库)
- API 路由文件覆盖面:
src/app/api/**/route.ts(全量 catalog 已维护)。 - Worker 文件覆盖面:
src/lib/workers/handlers/*.ts+src/lib/workers/*.worker.ts。 tests/**/*.test.ts实际数量:71。src/lib/workers/handlers/*.ts文件数量:43(含 helper/shared/re-export 文件)。handlers目录中export async function handle...入口函数数量:26(这是 worker 行为测试的主覆盖对象)。- 计数口径说明:
- helper/shared/prompt-utils 文件不计入“handler 入口数”。
- 仅 re-export 的别名文件(如
modify-asset-image-task-handler.ts、image-task-handlers.ts)不单独计入口径。
- 已有结构级测试(需替换/下沉,已替换项会在阶段状态中标记):
tests/integration/api/contract/direct-submit-routes.test.tstests/integration/api/contract/llm-observe-routes.test.tstests/integration/api/contract/crud-routes.test.tstests/integration/api/contract/task-infra-routes.test.tstests/integration/chain/{text,image,video,voice}.chain.test.tstests/unit/worker/video-worker.test.ts(已替换为行为断言)tests/unit/worker/voice-worker.test.ts(已替换为行为断言)tests/unit/optimistic/sse-invalidation.test.ts(已替换为行为断言)tests/unit/optimistic/task-target-state-map.test.ts(已替换为行为断言)
- 已落地的行为级样板(保留并扩展):
tests/unit/worker/reference-to-character.test.tstests/unit/worker/asset-hub-image-suffix.test.tstests/unit/worker/modify-image-reference-description.test.tstests/integration/api/specific/characters-post-reference-forwarding.test.tstests/contracts/requirements-matrix.test.ts
1.4 修改前后的预计区别
修改前:
- 大量“永远绿灯”风险:结构级测试通过但真实业务错误。
- 关键回归(参考图链路、提示词后缀、写回字段)无法稳定拦截。
修改后:
- 结构级测试只做守卫,不作为回归主防线。
- 行为级测试覆盖 route 入参、task payload、worker 分支、DB 写回、返回值契约。
- 新增或修改功能时,必须补行为级用例,否则 guard 失败。
1.5 规模预估
- 预计新增/重写测试文件: 45-70 个
- 预计修改文件: 25-40 个
- 预计新增代码: 9,000-16,000 行(以测试与守卫脚本为主)
- 预计执行阶段: 8 个阶段
2: 阶段+具体代码修改地方以及需要修改的内容
状态图例
✅ 已完成
🔄 正在执行
⏸ 待执行
⚠️ 问题
阶段1: 基线与约束固化
✅ Phase 1.1: 盘点路由、task type、worker 入口并建立 catalog。
修改位置:
/Users/earth/Desktop/waoowaoo/tests/contracts/route-catalog.ts/Users/earth/Desktop/waoowaoo/tests/contracts/task-type-catalog.ts
✅ Phase 1.2: requirements matrix 存在性校验落地,阻断“文档写了但文件不存在”。
修改位置:
/Users/earth/Desktop/waoowaoo/tests/contracts/requirements-matrix.ts/Users/earth/Desktop/waoowaoo/tests/contracts/requirements-matrix.test.ts
✅ Phase 1.3: 定义“行为级测试判定标准”并加入守卫。
要改内容:
- 新增
/Users/earth/Desktop/waoowaoo/tests/contracts/behavior-test-standard.md - 新增
/Users/earth/Desktop/waoowaoo/scripts/guards/test-behavior-quality-guard.mjs硬性规则: - 禁止只断言
toHaveBeenCalled() - 必须断言具体 payload/data 字段值或返回值
- 禁止在 contract/chain 目录内读取源码文本做契约主断言
✅ Phase 1.3.a: 后端 Worker 单元测试硬规范已写入本主计划(本文件第 3 章)。
当前状态:
- 规范文本已固化
- 自动化守卫脚本已落地(Phase 1.3 完成)
⚠️ Phase 1.4: 历史结构级测试较多,改造期间可能出现“同名文件语义变化”导致误解。
处理策略:
- 每次改造完成后,在本文件执行日志记录“此文件已由结构级改为行为级”。
阶段2: API 契约从结构级替换为行为级
依赖关系:
- Phase 2 可先行推进(route 行为契约)。
- Phase 3 与 Phase 4 依赖 Phase 2 的 route 输入输出基线稳定。
✅ Phase 2.1: 重写 direct-submit contract 为真实调用断言。
重写文件:
/Users/earth/Desktop/waoowaoo/tests/integration/api/contract/direct-submit-routes.test.ts必须断言:- 未登录 401
- 参数缺失 400(错误码一致)
- 正常请求返回
{ taskId, async: true } submitTask入参包含type/targetType/targetId/payload/locale
✅ Phase 2.2: 重写 llm-observe contract 为真实调用断言。
重写文件:
/Users/earth/Desktop/waoowaoo/tests/integration/api/contract/llm-observe-routes.test.ts必须断言:maybeSubmitLLMTask入参正确透传displayMode/flow/meta不丢失- 越权请求被拒绝
✅ Phase 2.3: 重写 crud contract 为真实行为断言(已补齐 asset-hub + novel-promotion 写回断言)。
重写文件:
/Users/earth/Desktop/waoowaoo/tests/integration/api/contract/crud-routes.test.ts必须断言:- PATCH 后数据库字段值确实变化
- DELETE 后实体不存在
- 无权限用户无法操作他人资源
✅ Phase 2.4: 重写 task-infra contract 为真实行为断言(已补 SSE 终态事件序列断言)。
重写文件:
/Users/earth/Desktop/waoowaoo/tests/integration/api/contract/task-infra-routes.test.ts必须断言:- dismiss 后任务状态变化
- task-target-state 与任务终态一致
- SSE 事件序列含终态事件
⏸ Phase 2.5: 扩展 route specific 测试,补关键历史回归点。
新增/扩展:
/Users/earth/Desktop/waoowaoo/tests/integration/api/specific/reference-to-character-api.test.ts/Users/earth/Desktop/waoowaoo/tests/integration/api/specific/characters-post-reference-forwarding.test.ts(已完成,继续扩展)/Users/earth/Desktop/waoowaoo/tests/integration/api/specific/characters-post.test.ts
阶段3: Worker 决策测试全量行为化
依赖关系:
- Phase 3 依赖 Phase 2(route 契约稳定后再固化 worker 结果断言)。
✅ Phase 3.1: 关键历史 bug 已有行为级样板落地。
已完成文件:
/Users/earth/Desktop/waoowaoo/tests/unit/worker/reference-to-character.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/asset-hub-image-suffix.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/modify-image-reference-description.test.ts
✅ Phase 3.2: 把“失败快照类”worker 测试升级为“结果断言类”。
优先重写:
/Users/earth/Desktop/waoowaoo/tests/unit/worker/image-task-handlers-core.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/script-to-storyboard.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/episode-split.test.ts必须断言:- 具体生成参数(referenceImages/aspectRatio/resolution)
- 具体写库字段值(description/imageUrl/imageUrls/selectedIndex)
- 关键分支(character/location/storyboard)均触发
✅ Phase 3.3: 新增核心 handler 行为测试文件(按模块拆分,已全部落地)。
新增文件:
/Users/earth/Desktop/waoowaoo/tests/unit/worker/character-image-task-handler.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/location-image-task-handler.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/panel-image-task-handler.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/panel-variant-task-handler.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/story-to-script.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/screenplay-convert.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/voice-design.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/voice-analyze.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/analyze-novel.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/analyze-global.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/character-profile.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/clips-build.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/asset-hub-ai-design.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/asset-hub-ai-modify.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/llm-proxy.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/shot-ai-tasks.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/shot-ai-variants.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/shot-ai-prompt-appearance.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/shot-ai-prompt-location.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/shot-ai-prompt-shot.test.ts当前进度:- 已完成:
character-image-task-handler、location-image-task-handler、panel-image-task-handler、panel-variant-task-handler、story-to-script、screenplay-convert、voice-design、voice-analyze、analyze-novel、analyze-global、character-profile、clips-build、asset-hub-ai-design、asset-hub-ai-modify、llm-proxy、shot-ai-tasks、shot-ai-variants、shot-ai-prompt-appearance、shot-ai-prompt-location、shot-ai-prompt-shot - 待完成: 无(Phase 3.3 范围内)
⚠️ Phase 3.3.a: 边界说明(避免误算)。
不纳入“handler 入口测试清单”的文件:
llm-stream.ts(stream context/callback helper)modify-asset-image-task-handler.ts(re-export 别名)image-task-handlers.ts(re-export 聚合)
✅ Phase 3.4: worker 入口层行为测试替换 routing-only 断言。
重写文件:
/Users/earth/Desktop/waoowaoo/tests/unit/worker/video-worker.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/worker/voice-worker.test.ts必须断言:- 任务类型分发到正确 handler
- handler 结果被正确回传与封装
- 失败分支日志与错误码一致
⚠️ Phase 3.5: 避免“mock 自己返回答案”造成假安全。
硬要求:
- 每个测试至少 1 个断言检查具体字段值(不是调用次数)
- 对 DB update/create 入参做
objectContaining(data: ...)断言
阶段4: Chain 测试从队列映射升级为端到端行为链路
依赖关系:
- Phase 4 依赖 Phase 2 + Phase 3(先稳定 route 和 handler 行为,再做链路端到端)。
✅ Phase 4.1: 重写 image chain(enqueue + worker 消费 + 持久化写回断言已落地)。
重写文件:
/Users/earth/Desktop/waoowaoo/tests/integration/chain/image.chain.test.ts覆盖链路:- route -> submitTask -> queue -> image worker -> DB 回写 示例断言:
- 任务状态从 queued -> processing -> completed
- 目标实体 imageUrl/imageUrls 有值且结构正确
✅ Phase 4.2: 重写 text chain(enqueue + worker 消费 + 结果级边界断言已落地)。
重写文件:
/Users/earth/Desktop/waoowaoo/tests/integration/chain/text.chain.test.ts覆盖链路:- analyze/story/script/reference-to-character 全链路关键节点
✅ Phase 4.3: 重写 video chain(enqueue + video worker 消费 + lip-sync 持久化断言已落地)。
重写文件:
/Users/earth/Desktop/waoowaoo/tests/integration/chain/video.chain.test.ts覆盖链路:- generate-video/lip-sync 任务执行结果与状态持久化
✅ Phase 4.4: 重写 voice chain(enqueue + voice worker 消费 + 关键参数透传断言已落地)。
重写文件:
/Users/earth/Desktop/waoowaoo/tests/integration/chain/voice.chain.test.ts覆盖链路:- voice-design/voice-generate 的实体写回与任务状态
⏸ Phase 4.5: 固化外部 fake 层,保证零真实外网请求。
使用/扩展:
/Users/earth/Desktop/waoowaoo/tests/helpers/fakes/llm.ts/Users/earth/Desktop/waoowaoo/tests/helpers/fakes/media.ts/Users/earth/Desktop/waoowaoo/tests/helpers/fakes/providers.ts
阶段5: 前端状态回归测试行为化
✅ Phase 5.1: 替换源码字符串检查为 hook 真实行为测试。
重写文件:
/Users/earth/Desktop/waoowaoo/tests/unit/optimistic/sse-invalidation.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/optimistic/task-target-state-map.test.ts必须断言:- 给定事件序列时 query invalidation 实际触发条件正确
- target state map 在 queued/processing/completed/failed 下输出正确
✅ Phase 5.2: 现有 optimistic mutation 行为测试保留并扩展。
文件:
/Users/earth/Desktop/waoowaoo/tests/unit/optimistic/asset-hub-mutations.test.ts/Users/earth/Desktop/waoowaoo/tests/unit/optimistic/project-asset-mutations.test.ts
阶段6: 覆盖矩阵升级为“行为测试矩阵”
✅ Phase 6.1: 新增 route 行为覆盖矩阵。
新增:
/Users/earth/Desktop/waoowaoo/tests/contracts/route-behavior-matrix.ts要求:- 117 个 route 每个都映射到至少 1 条行为级 caseId + test 文件
✅ Phase 6.2: 新增 task type 行为覆盖矩阵。
新增:
/Users/earth/Desktop/waoowaoo/tests/contracts/tasktype-behavior-matrix.ts要求:- 37 个 TASK_TYPE 每个都映射 worker 行为测试 + chain 行为测试
✅ Phase 6.3: 新增矩阵守卫脚本。
新增:
/Users/earth/Desktop/waoowaoo/scripts/guards/test-behavior-route-coverage-guard.mjs/Users/earth/Desktop/waoowaoo/scripts/guards/test-behavior-tasktype-coverage-guard.mjs
⚠️ Phase 6.4: 矩阵维护成本高。
策略:
- 优先通过脚本自动校验文件存在与 caseId 唯一性
- 每次新增 route/tasktype 必须更新矩阵,否则 CI 失败
阶段7: CI 门禁与执行策略
✅ Phase 7.1: 新增行为级门禁命令。
修改:
/Users/earth/Desktop/waoowaoo/package.json新增脚本:test:behavior:unittest:behavior:apitest:behavior:chaintest:behavior:guardstest:behavior:full
⏸ Phase 7.2: PR workflow 强制执行行为级全量门禁。
修改:
/Users/earth/Desktop/waoowaoo/.github/workflows/test-regression-pr.yml
✅ Phase 7.3: 失败诊断脚本已接入(保留)。
文件:
/Users/earth/Desktop/waoowaoo/scripts/test-regression-runner.sh
阶段8: 收口与冻结
⏸ Phase 8.1: 删除/降级旧结构级测试(仅保留轻量守卫,不计入行为覆盖率)。
目标:
- contract/chain 中不再有“只读源码字符串”的主断言
⏸ Phase 8.2: 建立“新增功能必须附行为测试”的提交流程。
落地:
- PR 模板加检查项
- guard 失败提示明确指出缺失 case
✅ Phase 8.3: 冻结基线并发布“行为级测试开发规范”。
新增:
/Users/earth/Desktop/waoowaoo/docs/testing/behavior-test-guideline.md
⚠️ Phase 8.4: 不可达目标声明。
说明:
- “100% 无 bug”不可证明;可达目标是“100% 关键功能链路行为覆盖 + 关键字段结果断言 + 变更自动门禁”。
阶段9: Billing 与并发测试纳入总蓝图
🔄 Phase 9.1: billing 现有测试纳入“行为级总体覆盖说明”,避免遗漏域。
覆盖现状:
tests/unit/billing/*.test.tstests/integration/billing/*.integration.test.tstests/concurrency/billing/ledger.concurrency.test.ts
⏸ Phase 9.2: 明确 billing worker/ledger 行为级断言增强点。
新增/重写方向:
- 计费写账一致性(usage->ledger)字段级断言
- 异常重试/幂等行为断言
- 并发写入冲突场景断言
⏸ Phase 9.3: 将 billing 与 concurrency 纳入 test:behavior:full 报告维度。
要求:
- 输出 billing/concurrency 独立通过率
- 与 route/worker/chain 覆盖率同级展示
3: 后端 Worker 单元测试硬规范(强制)
3.1 必须覆盖的测试类型
每个 worker handler 必须至少包含三类用例:
- 失败路径:参数缺失/格式错误时,抛出正确错误信息。
- 成功路径:正常输入时,副作用结果正确(数据库写入/关键调用参数/返回值)。
- 关键分支:
if/else分支每条至少 1 个用例。
3.2 Mock 规范
必须 Mock:
prisma等数据库访问。- LLM/图像生成/视觉分析等 AI 调用。
- COS/上传等文件存储。
- 外部 HTTP 请求。
- 一切需要网络的依赖。
不能 Mock:
- 待测业务逻辑函数本身。
- 项目内业务常量(例如
CHARACTER_PROMPT_SUFFIX),必须直接 import 使用。
3.3 断言规范(最高优先级)
每个 it() 必须断言“结果”,不能只断言“过程”。
必须断言:
- 数据库
update/create的具体字段值(如description、imageUrl、imageUrls)。 - AI/生成函数收到的核心参数(如
prompt必含内容)。 - 图像生成相关关键参数(如
referenceImages、aspectRatio、resolution)。
弱断言限制:
toHaveBeenCalled()不能作为唯一主断言。toHaveBeenCalledTimes(N)仅在“次数本身有业务意义”时使用。
3.4 测试数据规范
- 数据必须能触发目标分支(例如“有参考图/无参考图”分别建用例)。
- 关键业务字段必须使用有语义的固定值。
- 无关透传字段可用占位值(如
task-1)。
禁止模式:
- “自己给答案自己验证”:mock 返回值与断言目标完全同源。
- 正确做法:mock AI 返回值,断言该值被写入到
prisma.update({ data })的具体字段。
3.5 it() 结构模板(强制推荐)
it('[条件] -> [预期结果]', async () => {
// 1. 准备 mock(仅覆盖本场景差异)
// 2. 构造 job/payload(只给本场景关键字段)
// 3. 执行 handler
// 4. 断言:
// a. DB data 字段
// b. 核心调用参数(prompt/referenceImages/aspectRatio)
// c. 返回值关键字段(如 success)
})
3.6 命名规范
统一格式:[条件] -> [预期结果]
示例:
没有 extraImageUrls -> 不调用分析,description 不更新有 extraImageUrls -> AI 分析结果写入 descriptionAI 调用失败 -> 主流程成功且 description 不被污染缺少必填参数 -> 抛出包含字段名的错误信息
3.7 一条 bug 一条测试(强制)
- 每修复一个 bug,必须新增至少一条对应回归测试。
- 测试名必须可追溯该 bug 场景(例如“防止 XXX 回归”)。
- 未补测试不得标记该 bug 任务完成。
执行日志(必须持续追加)
格式:
-
[YYYY-MM-DD HH:mm] 状态变更: <Phase/任务> <旧状态> -> <新状态>
-
[YYYY-MM-DD HH:mm] 修改文件: <绝对路径列表>
-
[YYYY-MM-DD HH:mm] 运行命令: <命令>
-
[YYYY-MM-DD HH:mm] 结果: <通过/失败 + 摘要>
-
[YYYY-MM-DD HH:mm] 问题: <若有>
-
[2026-02-25 21:59] 状态变更: Phase 3.1 ⏸ -> ✅
-
[2026-02-25 21:59] 修改文件: /Users/earth/Desktop/waoowaoo/tests/unit/worker/reference-to-character.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/asset-hub-image-suffix.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/modify-image-reference-description.test.ts, /Users/earth/Desktop/waoowaoo/src/lib/workers/handlers/reference-to-character.ts
-
[2026-02-25 21:59] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/unit/worker/reference-to-character.test.ts tests/unit/worker/asset-hub-image-suffix.test.ts tests/unit/worker/modify-image-reference-description.test.ts
-
[2026-02-25 21:59] 结果: 关键历史回归点(后缀失效/参考图描述不更新)已行为级可测
-
[2026-02-25 21:59] 问题: 无
-
[2026-02-25 22:00] 状态变更: Phase 1.2 ⏸ -> ✅
-
[2026-02-25 22:00] 修改文件: /Users/earth/Desktop/waoowaoo/tests/contracts/requirements-matrix.ts, /Users/earth/Desktop/waoowaoo/tests/contracts/requirements-matrix.test.ts
-
[2026-02-25 22:00] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/contracts/requirements-matrix.test.ts
-
[2026-02-25 22:00] 结果: 阻断不存在测试路径引用(已修复
crud-asset-hub-routes.test.ts错误引用) -
[2026-02-25 22:00] 问题: 无
-
[2026-02-25 22:10] 状态变更: Phase 1.3.a ⏸ -> ✅
-
[2026-02-25 22:10] 修改文件: /Users/earth/Desktop/waoowaoo/SYSTEM_BEHAVIOR_LEVEL_TEST_MASTER_PLAN.md
-
[2026-02-25 22:10] 运行命令: 文档更新(无测试执行)
-
[2026-02-25 22:10] 结果: 已将后端 Worker 单元测试硬规范(覆盖/Mock/断言/命名/一 bug 一测试)固化为主计划强制章节
-
[2026-02-25 22:10] 问题: 自动化守卫脚本仍待实现(Phase 1.3)
-
[2026-02-25 22:20] 状态变更: 文档校正(扫描计数与范围修正)
-
[2026-02-25 22:20] 修改文件: /Users/earth/Desktop/waoowaoo/SYSTEM_BEHAVIOR_LEVEL_TEST_MASTER_PLAN.md
-
[2026-02-25 22:20] 运行命令: rg --files/rg -n 扫描 tests 与 handlers
-
[2026-02-25 22:20] 结果: 已修正 test 文件数=51、handlers 文件数=43、handler 入口数=26;补齐 Phase 3.3 遗漏 handler;新增 Phase 依赖关系与 Phase 9(billing/concurrency)
-
[2026-02-25 22:20] 问题: Phase 1.3 自动守卫脚本尚未实现
-
[2026-02-25 23:05] 状态变更: Phase 2.1 🔄 -> ✅, Phase 2.2 ⏸ -> ✅
-
[2026-02-25 23:05] 修改文件: /Users/earth/Desktop/waoowaoo/tests/integration/api/contract/direct-submit-routes.test.ts, /Users/earth/Desktop/waoowaoo/tests/integration/api/contract/llm-observe-routes.test.ts
-
[2026-02-25 23:05] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/integration/api/contract/direct-submit-routes.test.ts tests/integration/api/contract/llm-observe-routes.test.ts
-
[2026-02-25 23:05] 结果: 两类 contract 测试已由结构级改为行为级并通过,覆盖 16 个 direct-submit routes 与 22 个 llm-observe routes
-
[2026-02-25 23:05] 问题: 无
-
[2026-02-25 23:06] 状态变更: Phase 2.3 ⏸ -> 🔄, Phase 2.4 ⏸ -> 🔄
-
[2026-02-25 23:06] 修改文件: /Users/earth/Desktop/waoowaoo/tests/integration/api/contract/crud-routes.test.ts, /Users/earth/Desktop/waoowaoo/tests/integration/api/contract/task-infra-routes.test.ts
-
[2026-02-25 23:06] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/integration/api/contract/crud-routes.test.ts tests/integration/api/contract/task-infra-routes.test.ts
-
[2026-02-25 23:06] 结果: 已替换为真实 route 调用断言;crud 完成鉴权行为覆盖,task-infra 完成鉴权/参数/核心成功路径,后续补 DB 写回与 SSE 终态序列
-
[2026-02-25 23:06] 问题: 无
-
[2026-02-25 23:06] 状态变更: Phase 3.2 🔄 -> ✅, Phase 3.4 ⏸ -> ✅
-
[2026-02-25 23:06] 修改文件: /Users/earth/Desktop/waoowaoo/tests/unit/worker/image-task-handlers-core.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/episode-split.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/script-to-storyboard.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/video-worker.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/voice-worker.test.ts
-
[2026-02-25 23:06] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/unit/worker/script-to-storyboard.test.ts tests/unit/worker/video-worker.test.ts tests/unit/worker/voice-worker.test.ts tests/unit/worker/image-task-handlers-core.test.ts tests/unit/worker/episode-split.test.ts
-
[2026-02-25 23:06] 结果: worker 测试已升级为结果级断言,覆盖失败路径、成功路径、关键分支与关键写库字段
-
[2026-02-25 23:06] 问题: 无
-
[2026-02-25 23:07] 状态变更: Phase 4.2 ⏸ -> 🔄, Phase 4.3 ⏸ -> 🔄, Phase 4.4 ⏸ -> 🔄
-
[2026-02-25 23:07] 修改文件: /Users/earth/Desktop/waoowaoo/tests/integration/chain/image.chain.test.ts, /Users/earth/Desktop/waoowaoo/tests/integration/chain/text.chain.test.ts, /Users/earth/Desktop/waoowaoo/tests/integration/chain/video.chain.test.ts, /Users/earth/Desktop/waoowaoo/tests/integration/chain/voice.chain.test.ts
-
[2026-02-25 23:07] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/integration/chain/image.chain.test.ts tests/integration/chain/text.chain.test.ts tests/integration/chain/video.chain.test.ts tests/integration/chain/voice.chain.test.ts
-
[2026-02-25 23:07] 结果: chain 测试已由映射断言升级为 addTaskJob enqueue 行为断言(校验 queue 选择 + jobId/priority)
-
[2026-02-25 23:07] 问题: route->worker->DB 端到端链路仍待补
-
[2026-02-25 23:08] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/integration/api/contract tests/integration/chain tests/unit/worker
-
[2026-02-25 23:08] 结果: 16 个测试文件全部通过,117/117 测试通过
-
[2026-02-25 23:09] 修改文件: /Users/earth/Desktop/waoowaoo/tests/integration/api/contract/crud-routes.test.ts
-
[2026-02-25 23:09] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/integration/api/contract/crud-routes.test.ts
-
[2026-02-25 23:09] 结果: 新增 CRUD 结果级断言(PATCH 写入字段值、DELETE 删除调用与越权 403),从“仅鉴权检查”升级为“含写库行为检查”
-
[2026-02-25 23:09] 问题: novel-promotion 侧 CRUD 的字段级断言仍待扩展
-
[2026-02-25 23:09] 修改文件: /Users/earth/Desktop/waoowaoo/tests/integration/api/contract/task-infra-routes.test.ts
-
[2026-02-25 23:09] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/integration/api/contract/task-infra-routes.test.ts
-
[2026-02-25 23:09] 结果: 新增 SSE replay 成功路径断言(
text/event-stream、last-event-id回放、channel 订阅行为) -
[2026-02-25 23:09] 问题: SSE 终态事件的 completed/failed 序列断言仍待补
-
[2026-02-25 23:10] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/integration/api/contract tests/integration/chain tests/unit/worker
-
[2026-02-25 23:10] 结果: 16 个测试文件全部通过,120/120 测试通过
-
[2026-02-25 23:11] 状态变更: Phase 1.3 🔄 -> ✅
-
[2026-02-25 23:11] 修改文件: /Users/earth/Desktop/waoowaoo/tests/contracts/behavior-test-standard.md, /Users/earth/Desktop/waoowaoo/scripts/guards/test-behavior-quality-guard.mjs, /Users/earth/Desktop/waoowaoo/package.json
-
[2026-02-25 23:11] 运行命令: node scripts/guards/test-behavior-quality-guard.mjs && npm run check:test-coverage-guards
-
[2026-02-25 23:11] 结果: 行为级质量守卫已接入(拦截源码字符串契约 + 弱断言),并纳入
check:test-coverage-guards -
[2026-02-25 23:11] 问题: 无
-
[2026-02-25 23:12] 修改文件: /Users/earth/Desktop/waoowaoo/tests/integration/api/contract/direct-submit-routes.test.ts, /Users/earth/Desktop/waoowaoo/tests/integration/api/contract/llm-observe-routes.test.ts
-
[2026-02-25 23:12] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/integration/api/contract/direct-submit-routes.test.ts tests/integration/api/contract/llm-observe-routes.test.ts
-
[2026-02-25 23:12] 结果: 两个 contract 测试新增
toHaveBeenCalledWith(objectContaining(...))强断言,通过行为质量守卫 -
[2026-02-25 23:12] 问题: 无
-
[2026-02-25 23:13] 状态变更: Phase 5.1 ⏸ -> ✅
-
[2026-02-25 23:13] 修改文件: /Users/earth/Desktop/waoowaoo/tests/unit/optimistic/sse-invalidation.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/optimistic/task-target-state-map.test.ts
-
[2026-02-25 23:13] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/unit/optimistic/sse-invalidation.test.ts tests/unit/optimistic/task-target-state-map.test.ts
-
[2026-02-25 23:13] 结果: 两个 optimistic 结构级测试已替换为行为级(SSE 终态 invalidation 与 target-state overlay 合并规则)
-
[2026-02-25 23:13] 问题: 无
-
[2026-02-25 23:16] 状态变更: Phase 3.3 ⏸ -> 🔄
-
[2026-02-25 23:16] 修改文件: /Users/earth/Desktop/waoowaoo/tests/unit/worker/shot-ai-tasks.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/voice-design.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/asset-hub-ai-design.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/asset-hub-ai-modify.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/shot-ai-prompt-appearance.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/shot-ai-prompt-location.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/shot-ai-prompt-shot.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/shot-ai-variants.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/llm-proxy.test.ts
-
[2026-02-25 23:16] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/unit/worker/shot-ai-tasks.test.ts tests/unit/worker/voice-design.test.ts tests/unit/worker/asset-hub-ai-design.test.ts tests/unit/worker/asset-hub-ai-modify.test.ts tests/unit/worker/shot-ai-prompt-appearance.test.ts tests/unit/worker/shot-ai-prompt-location.test.ts tests/unit/worker/shot-ai-prompt-shot.test.ts tests/unit/worker/shot-ai-variants.test.ts tests/unit/worker/llm-proxy.test.ts
-
[2026-02-25 23:16] 结果: 新增 9 个 worker 行为测试文件(20 条用例+5 条用例),覆盖 shot-ai 分发、prompt 修改链路、asset-hub ai 设计/修改、voice-design、llm-proxy 显式失败
-
[2026-02-25 23:16] 问题: 无
-
[2026-02-25 23:16] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/unit/worker
-
[2026-02-25 23:16] 结果: worker 套件通过,17 文件 / 48 测试通过
-
[2026-02-25 23:17] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/unit/optimistic tests/unit/worker tests/integration/api/contract tests/integration/chain
-
[2026-02-25 23:17] 结果: 全回归分组通过,31 文件 / 155 测试通过
-
[2026-02-25 23:25] 修改文件: /Users/earth/Desktop/waoowaoo/tests/unit/worker/story-to-script.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/screenplay-convert.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/analyze-novel.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/analyze-global.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/voice-analyze.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/clips-build.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/character-profile.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/character-image-task-handler.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/location-image-task-handler.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/panel-image-task-handler.test.ts, /Users/earth/Desktop/waoowaoo/tests/unit/worker/panel-variant-task-handler.test.ts
-
[2026-02-25 23:25] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/unit/worker/story-to-script.test.ts tests/unit/worker/screenplay-convert.test.ts tests/unit/worker/analyze-novel.test.ts tests/unit/worker/analyze-global.test.ts tests/unit/worker/voice-analyze.test.ts tests/unit/worker/clips-build.test.ts tests/unit/worker/character-profile.test.ts tests/unit/worker/character-image-task-handler.test.ts tests/unit/worker/location-image-task-handler.test.ts tests/unit/worker/panel-image-task-handler.test.ts tests/unit/worker/panel-variant-task-handler.test.ts
-
[2026-02-25 23:25] 结果: 新增 11 个 worker handler 行为测试文件,覆盖剩余未落地入口(文本链路 + 图片链路),失败路径/成功路径/关键分支断言全部落地
-
[2026-02-25 23:25] 问题: 首轮运行出现 5 个断言问题(重试分支 mock 泄漏与断言过窄),已在同轮修复
-
[2026-02-25 23:26] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/unit/worker
-
[2026-02-25 23:26] 结果: worker 套件通过,28 文件 / 76 测试通过
-
[2026-02-25 23:26] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/unit/optimistic tests/unit/worker tests/integration/api/contract tests/integration/chain
-
[2026-02-25 23:26] 结果: 全回归分组通过,42 文件 / 183 测试通过
-
[2026-02-25 23:27] 状态变更: Phase 3.3 🔄 -> ✅
-
[2026-02-25 23:27] 运行命令: npm run check:test-coverage-guards
-
[2026-02-25 23:27] 结果: 覆盖守卫通过(behavior quality / route=117 / taskType=37)
-
[2026-02-25 23:27] 问题: 无
-
[2026-02-25 23:27] 运行命令: rg "export async function handle" src/lib/workers/handlers -l + tests/unit/worker import 对账
-
[2026-02-25 23:27] 结果: 26/26 handler 入口均存在对应 worker 行为测试文件引用
-
[2026-02-25 23:27] 问题: 无
-
[2026-02-25 23:46] 修改文件: /Users/earth/Desktop/waoowaoo/tests/integration/api/contract/crud-routes.test.ts, /Users/earth/Desktop/waoowaoo/tests/integration/api/contract/task-infra-routes.test.ts
-
[2026-02-25 23:46] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/integration/api/contract/crud-routes.test.ts tests/integration/api/contract/task-infra-routes.test.ts
-
[2026-02-25 23:46] 结果: CRUD 合同新增 novel-promotion 写回断言(select-character-image / select-location-image / clips PATCH),task-infra 新增 SSE channel 终态事件序列断言(processing -> completed)
-
[2026-02-25 23:46] 问题: 无
-
[2026-02-25 23:46] 修改文件: /Users/earth/Desktop/waoowaoo/tests/integration/chain/image.chain.test.ts, /Users/earth/Desktop/waoowaoo/tests/integration/chain/text.chain.test.ts, /Users/earth/Desktop/waoowaoo/tests/integration/chain/video.chain.test.ts, /Users/earth/Desktop/waoowaoo/tests/integration/chain/voice.chain.test.ts
-
[2026-02-25 23:46] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/integration/chain/image.chain.test.ts tests/integration/chain/text.chain.test.ts tests/integration/chain/video.chain.test.ts tests/integration/chain/voice.chain.test.ts
-
[2026-02-25 23:46] 结果: 4 个 chain 文件由“仅 queue 映射”升级为“queue payload -> worker 消费 -> 结果/写回断言”
-
[2026-02-25 23:46] 问题: 无
-
[2026-02-25 23:47] 修改文件: /Users/earth/Desktop/waoowaoo/tests/contracts/route-behavior-matrix.ts, /Users/earth/Desktop/waoowaoo/tests/contracts/tasktype-behavior-matrix.ts, /Users/earth/Desktop/waoowaoo/scripts/guards/test-behavior-route-coverage-guard.mjs, /Users/earth/Desktop/waoowaoo/scripts/guards/test-behavior-tasktype-coverage-guard.mjs, /Users/earth/Desktop/waoowaoo/package.json, /Users/earth/Desktop/waoowaoo/tests/contracts/task-type-catalog.ts, /Users/earth/Desktop/waoowaoo/docs/testing/behavior-test-guideline.md
-
[2026-02-25 23:47] 运行命令: BILLING_TEST_BOOTSTRAP=0 npx vitest run tests/unit/optimistic tests/unit/worker tests/integration/api/contract tests/integration/chain && npm run check:test-coverage-guards
-
[2026-02-25 23:47] 结果: 分组回归通过(42 文件 / 191 测试),覆盖门禁通过(behavior quality + route 117 + taskType 37 + behavior matrices)
-
[2026-02-25 23:47] 问题: 无
-
[2026-02-25 23:51] 运行命令: npm run test:behavior:full
-
[2026-02-25 23:51] 结果: 行为级全链路命令通过(guards + unit + api + chain);unit=39 文件/107 测试,api=4 文件/93 测试,chain=4 文件/12 测试
-
[2026-02-25 23:51] 问题: unit 辅助测试阶段出现本地 Redis 连接拒绝日志(127.0.0.1:6380)但不影响用例通过,后续可按需优化为静默 mock
4: 验证策略
4.1 可量化验收目标(全部必须达成)
- Route 行为覆盖率:
117/117(每个 route 至少 1 个行为级用例)。 - TASK_TYPE 行为覆盖率:
37/37(每个 task type 至少 1 个 worker 行为用例 + 1 个 chain 行为用例)。 - 结构级 contract/chain 主断言占比:
0%(不得再以源码字符串匹配作为主断言)。 - 关键回归场景覆盖:
100%(参考图链路、后缀链路、编辑写回链路、task state 链路)。 - 外部真实调用次数:
0(测试环境必须全 fake)。 - PR 门禁:
100%执行test:behavior:full,任一缺失即失败。 - Worker 用例规范符合率:
100%(每个 worker 测试文件均满足 3.1~3.7 规则)。 - Billing + Concurrency 维度通过率:
100%(纳入统一验收报告)。
4.2 核心验证命令
npm run test:guardscross-env BILLING_TEST_BOOTSTRAP=0 vitest run tests/unit/workercross-env BILLING_TEST_BOOTSTRAP=0 vitest run tests/unit/helperscross-env BILLING_TEST_BOOTSTRAP=1 vitest run tests/integration/apicross-env BILLING_TEST_BOOTSTRAP=1 vitest run tests/integration/chainnpm run test:pr
4.3 用例质量验证(防假绿灯)
每个新增行为测试必须至少满足两条:
- 断言具体业务字段值(例如
description/imageUrls/locale/meta/referenceImages)。 - 覆盖至少一个历史回归分支。
- 覆盖一个失败分支(权限/参数/模型未配置)。
- 不使用“mock 自己返回结果并直接断言调用次数”的空测试模式。
5: 备注
- 本文档是“行为级测试替换计划”,与
SYSTEM_REGRESSION_COVERAGE_MASTER_PLAN.md并行存在;冲突时以“行为级优先”原则执行。 - 本计划默认不引入兼容层与静默回退,错误必须显式暴露。
- 新接手模型必须先阅读本文件,再执行代码修改;执行后必须回写执行日志。
- 如果出现“测试通过但线上仍回归”,优先审计断言是否为结果级而不是调用级。