Files
crawler-plugin/docs/plans/01-similarasin.md
T
huangzd1997 42bbf4904e
Build Backend JAR / build (push) Has been cancelled
feat-admin-ui-interaction
2026-08-30 22:09:22 +08:00

702 lines
65 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 01 Similar ASIN 性能与资源优化
> 对应总览任务:1-20
> 计划来源:`docs/plans/00-plan-overview.md`;仓库当前没有 `docs/specs/`,本模块计划根据现有代码审计结果生成。
## 模块目标
在保持 Coze 回传、结果文件格式和旧任务兼容性的前提下,降低重复 JSON、chunk 读写、图片下载/解码和结果组装的内存、CPU、数据库及网络成本。
## 模块级执行规则
- 开发阶段单线程串行执行,不并行实现多个任务;完成一个任务的测试、实现、验证和 commit 后才能进入下一个任务。
- 每个任务严格按“先写全部测试 → 运行确认 RED → 实现 → 运行确认 GREEN → lint/format → commit”执行。
- 每个普通任务至少包含 8 个语义化测试;涉及 I/O、数据库、HTTP、Redis、RustFS、文件或 UI 时,测试必须同时覆盖 mock 依赖和真实集成/启动调用。
- 禁止纯 echo、硬编码成功、空实现、跳过真实依赖调用或仅以 import 成功作为验收。
## 任务 1:建立 Similar ASIN 性能基线夹具:1000/5000 行、图片开关、chunk 数与 payload 大小采样
**所属模块**Similar ASIN 性能与资源优化
**依赖**:无
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“建立 Similar ASIN 性能基线夹具:1000/5000 行、图片开关、chunk 数与 payload 大小采样”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_001_payload_chunk_image_normal_default_path` — 使用正常输入验证“建立 Similar ASIN 性能基线夹具:1000/5000 行、图片开关、chunk 数与 payload 大小采样”的默认成功路径和主输出。
2. `test_task_001_payload_chunk_image_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_001_payload_chunk_image_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_001_payload_chunk_image_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_001_payload_chunk_image_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_001_payload_chunk_image_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_001_payload_chunk_image_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_001_payload_chunk_image_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 2:将解析载荷改为单一规范行集合,消除 items/groups/allItems 重复数据结构
**所属模块**Similar ASIN 性能与资源优化
**依赖**1
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将解析载荷改为单一规范行集合,消除 items/groups/allItems 重复数据结构”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_002_parsed_payload_normal_default_path` — 使用正常输入验证“将解析载荷改为单一规范行集合,消除 items/groups/allItems 重复数据结构”的默认成功路径和主输出。
2. `test_task_002_parsed_payload_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_002_parsed_payload_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_002_parsed_payload_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_002_parsed_payload_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_002_parsed_payload_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_002_parsed_payload_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_002_parsed_payload_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 3:保留旧 payload 读取兼容逻辑,并验证新旧结构均可恢复全量行
**所属模块**Similar ASIN 性能与资源优化
**依赖**2
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“保留旧 payload 读取兼容逻辑,并验证新旧结构均可恢复全量行”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_003_payload_normal_default_path` — 使用正常输入验证“保留旧 payload 读取兼容逻辑,并验证新旧结构均可恢复全量行”的默认成功路径和主输出。
2. `test_task_003_payload_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_003_payload_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_003_payload_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_003_payload_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_003_payload_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_003_payload_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_003_payload_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 4:解析接口改为只返回固定数量预览行,完整行仅保存在后端任务载荷
**所属模块**Similar ASIN 性能与资源优化
**依赖**3
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“解析接口改为只返回固定数量预览行,完整行仅保存在后端任务载荷”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_004_preview_normal_default_path` — 使用正常输入验证“解析接口改为只返回固定数量预览行,完整行仅保存在后端任务载荷”的默认成功路径和主输出。
2. `test_task_004_preview_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_004_preview_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_004_preview_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_004_preview_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_004_preview_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_004_preview_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_004_preview_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 5:为预览行数量增加配置边界、空文件和超限输入校验
**所属模块**Similar ASIN 性能与资源优化
**依赖**4
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“为预览行数量增加配置边界、空文件和超限输入校验”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_005_preview_row_count_normal_default_path` — 使用正常输入验证“为预览行数量增加配置边界、空文件和超限输入校验”的默认成功路径和主输出。
2. `test_task_005_preview_row_count_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_005_preview_row_count_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_005_preview_row_count_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_005_preview_row_count_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_005_preview_row_count_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_005_preview_row_count_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_005_preview_row_count_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 6:将分组数据改为索引/范围引用,避免 groups 嵌套复制完整行对象
**所属模块**Similar ASIN 性能与资源优化
**依赖**5
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将分组数据改为索引/范围引用,避免 groups 嵌套复制完整行对象”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_006_group_normal_default_path` — 使用正常输入验证“将分组数据改为索引/范围引用,避免 groups 嵌套复制完整行对象”的默认成功路径和主输出。
2. `test_task_006_group_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_006_group_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_006_group_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_006_group_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_006_group_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_006_group_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_006_group_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 7:限制单文件大小、最大行数和最大字段长度,防止解析任务无界增长
**所属模块**Similar ASIN 性能与资源优化
**依赖**6
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“限制单文件大小、最大行数和最大字段长度,防止解析任务无界增长”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_007_file_size_row_count_normal_default_path` — 使用正常输入验证“限制单文件大小、最大行数和最大字段长度,防止解析任务无界增长”的默认成功路径和主输出。
2. `test_task_007_file_size_row_count_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_007_file_size_row_count_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_007_file_size_row_count_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_007_file_size_row_count_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_007_file_size_row_count_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_007_file_size_row_count_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_007_file_size_row_count_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 8:将 WorkbookFactory 输入解析改为受控读取,并验证超大 Excel 的失败提示
**所属模块**Similar ASIN 性能与资源优化
**依赖**7
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将 WorkbookFactory 输入解析改为受控读取,并验证超大 Excel 的失败提示”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_008_workbook_excel_normal_default_path` — 使用正常输入验证“将 WorkbookFactory 输入解析改为受控读取,并验证超大 Excel 的失败提示”的默认成功路径和主输出。
2. `test_task_008_workbook_excel_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_008_workbook_excel_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_008_workbook_excel_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_008_workbook_excel_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_008_workbook_excel_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_008_workbook_excel_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_008_workbook_excel_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 9:将 chunk 查询从单行分页改为批量 keyset 分页,保持低内存读取
**所属模块**Similar ASIN 性能与资源优化
**依赖**8
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将 chunk 查询从单行分页改为批量 keyset 分页,保持低内存读取”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_009_chunk_normal_default_path` — 使用正常输入验证“将 chunk 查询从单行分页改为批量 keyset 分页,保持低内存读取”的默认成功路径和主输出。
2. `test_task_009_chunk_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_009_chunk_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_009_chunk_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_009_chunk_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_009_chunk_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_009_chunk_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_009_chunk_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 10:为 chunk 结果建立按 row key 的批量索引,消除跨 chunk 线性扫描
**所属模块**Similar ASIN 性能与资源优化
**依赖**9
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“为 chunk 结果建立按 row key 的批量索引,消除跨 chunk 线性扫描”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_010_chunk_row_key_normal_default_path` — 使用正常输入验证“为 chunk 结果建立按 row key 的批量索引,消除跨 chunk 线性扫描”的默认成功路径和主输出。
2. `test_task_010_chunk_row_key_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_010_chunk_row_key_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_010_chunk_row_key_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_010_chunk_row_key_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_010_chunk_row_key_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_010_chunk_row_key_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_010_chunk_row_key_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 11:将 Coze 结果合并的重复检测从 O(n²) 改为 HashSet/稳定 row key
**所属模块**Similar ASIN 性能与资源优化
**依赖**10
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将 Coze 结果合并的重复检测从 O(n²) 改为 HashSet/稳定 row key”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_011_merge_row_key_normal_default_path` — 使用正常输入验证“将 Coze 结果合并的重复检测从 O(n²) 改为 HashSet/稳定 row key”的默认成功路径和主输出。
2. `test_task_011_merge_row_key_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_011_merge_row_key_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_011_merge_row_key_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_011_merge_row_key_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_011_merge_row_key_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_011_merge_row_key_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_011_merge_row_key_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 12:扩展 Coze 结果缓冲覆盖范围,减少频繁读写完整 chunk payload
**所属模块**Similar ASIN 性能与资源优化
**依赖**11
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“扩展 Coze 结果缓冲覆盖范围,减少频繁读写完整 chunk payload”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_012_payload_chunk_normal_default_path` — 使用正常输入验证“扩展 Coze 结果缓冲覆盖范围,减少频繁读写完整 chunk payload”的默认成功路径和主输出。
2. `test_task_012_payload_chunk_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_012_payload_chunk_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_012_payload_chunk_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_012_payload_chunk_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_012_payload_chunk_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_012_payload_chunk_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_012_payload_chunk_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 13:为 chunk 合并增加单次最大行数与 payload 字节上限
**所属模块**Similar ASIN 性能与资源优化
**依赖**12
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“为 chunk 合并增加单次最大行数与 payload 字节上限”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_013_payload_row_count_chunk_normal_default_path` — 使用正常输入验证“为 chunk 合并增加单次最大行数与 payload 字节上限”的默认成功路径和主输出。
2. `test_task_013_payload_row_count_chunk_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_013_payload_row_count_chunk_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_013_payload_row_count_chunk_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_013_payload_row_count_chunk_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_013_payload_row_count_chunk_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_013_payload_row_count_chunk_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_013_payload_row_count_chunk_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 14:图片 DB cache 改为批量读取缩略图,并只更新实际命中的 last_used_at
**所属模块**Similar ASIN 性能与资源优化
**依赖**13
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“图片 DB cache 改为批量读取缩略图,并只更新实际命中的 last_used_at”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_014_image_normal_default_path` — 使用正常输入验证“图片 DB cache 改为批量读取缩略图,并只更新实际命中的 last_used_at”的默认成功路径和主输出。
2. `test_task_014_image_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_014_image_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_014_image_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_014_image_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_014_image_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_014_image_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_014_image_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 15:将图片缓存访问时间更新改为异步批量刷新,减少逐图 UPDATE
**所属模块**Similar ASIN 性能与资源优化
**依赖**14
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将图片缓存访问时间更新改为异步批量刷新,减少逐图 UPDATE”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_015_image_cache_normal_default_path` — 使用正常输入验证“将图片缓存访问时间更新改为异步批量刷新,减少逐图 UPDATE”的默认成功路径和主输出。
2. `test_task_015_image_cache_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_015_image_cache_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_015_image_cache_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_015_image_cache_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_015_image_cache_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_015_image_cache_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_015_image_cache_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 16:图片预取改为短预算 best-effort,超时后直接回退 URL
**所属模块**Similar ASIN 性能与资源优化
**依赖**15
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“图片预取改为短预算 best-effort,超时后直接回退 URL”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_016_image_prefetch_normal_default_path` — 使用正常输入验证“图片预取改为短预算 best-effort,超时后直接回退 URL”的默认成功路径和主输出。
2. `test_task_016_image_prefetch_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_016_image_prefetch_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_016_image_prefetch_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_016_image_prefetch_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_016_image_prefetch_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_016_image_prefetch_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_016_image_prefetch_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 17:优化图片解码采样、像素上限和 JPEG 质量搜索,降低 CPU 与堆峰值
**所属模块**Similar ASIN 性能与资源优化
**依赖**16
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“优化图片解码采样、像素上限和 JPEG 质量搜索,降低 CPU 与堆峰值”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_017_image_decode_quality_normal_default_path` — 使用正常输入验证“优化图片解码采样、像素上限和 JPEG 质量搜索,降低 CPU 与堆峰值”的默认成功路径和主输出。
2. `test_task_017_image_decode_quality_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_017_image_decode_quality_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_017_image_decode_quality_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_017_image_decode_quality_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_017_image_decode_quality_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_017_image_decode_quality_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_017_image_decode_quality_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 18:统一图片 spool 生命周期,确保超时、取消和异常路径删除临时文件
**所属模块**Similar ASIN 性能与资源优化
**依赖**17
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“统一图片 spool 生命周期,确保超时、取消和异常路径删除临时文件”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_018_image_normal_default_path` — 使用正常输入验证“统一图片 spool 生命周期,确保超时、取消和异常路径删除临时文件”的默认成功路径和主输出。
2. `test_task_018_image_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_018_image_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_018_image_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_018_image_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_018_image_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_018_image_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_018_image_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 19:将 Coze 请求/响应及 Python 回传日志改为采样、截断和 DEBUG 级别
**所属模块**Similar ASIN 性能与资源优化
**依赖**18
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将 Coze 请求/响应及 Python 回传日志改为采样、截断和 DEBUG 级别”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_019_logging_normal_default_path` — 使用正常输入验证“将 Coze 请求/响应及 Python 回传日志改为采样、截断和 DEBUG 级别”的默认成功路径和主输出。
2. `test_task_019_logging_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_019_logging_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_019_logging_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_019_logging_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_019_logging_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_019_logging_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_019_logging_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 20:完成 Similar ASIN 端到端压测、JFR/GC 分析与结果文件兼容回归
**所属模块**Similar ASIN 性能与资源优化
**依赖**19
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“完成 Similar ASIN 端到端压测、JFR/GC 分析与结果文件兼容回归”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。
### 测试用例(必须先写,确认 RED)
1. `test_task_020_asin_normal_default_path` — 使用正常输入验证“完成 Similar ASIN 端到端压测、JFR/GC 分析与结果文件兼容回归”的默认成功路径和主输出。
2. `test_task_020_asin_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_020_asin_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_020_asin_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_020_asin_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_020_asin_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_020_asin_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_020_asin_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 similarasin 服务、Coze 客户端、图片嵌入器、结果 workbook 组装链路。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 模块完成 Gate
- 20 个任务全部有对应 commit,任务状态均更新为 `done` 前不得开始下一个模块。
- 运行模块定向测试、项目全量测试和 lint/format;真实依赖调用、异常降级和资源释放均有记录。
- 运行模块对应的性能基准,记录吞吐、P95/P99 延迟、峰值堆、GC、CPU、DB QPS、Redis/RustFS QPS 和临时磁盘。