# W2-T5 聚焦修复独立复审报告 - **评审对象**:T5 I-1 聚焦修复工作区差异(基于 `e3eecfe`) - **前次评审**:`changes/n03-skill-cloud/.superpowers/sdd/reviews/W2-T5.md`,结论 `FAIL` - **复审范围**:仅检查 `SkillCloudItem.java`、`SkillCloudQueryService.java`、`SkillCloudQueryServiceTest.java` 及其对既有行为的影响 - **结论**:**PASS** - **剩余阻断项**:无 ## Finding 关闭状态 ### [I-1] 响应项遗漏技能来源标识:已关闭 修复已同时补齐 DTO 字段和 Service 映射: - `D:\1\zhi\zhilai\mydreamjob-server\src\main\java\com\mydreamjob\skill\dto\SkillCloudItem.java:11-12` - 新增 `sourceType` - 新增 `sourceCode` - `D:\1\zhi\zhilai\mydreamjob-server\src\main\java\com\mydreamjob\skill\SkillCloudQueryService.java:102-117` - `toItem(...)` 在 `nameEn` 后依次映射 `projection.sourceType()` 和 `projection.sourceCode()`(第 109-110 行) - 热度来源仍独立映射为 `heatSourceCode`、`heatElementId`、`heatProxy`(第 114-116 行) 字段语义未混淆:技能自身来源是 `sourceType/sourceCode`,O*NET Importance 来源是 `heatSourceCode/heatElementId/heatProxy`。 ### 双来源测试与可证伪性:已关闭 `D:\1\zhi\zhilai\mydreamjob-server\src\test\java\com\mydreamjob\skill\SkillCloudQueryServiceTest.java:198-236` 同时锁定两类来源: - O*NET 技术来源:第 219-220 行精确断言 - `sourceType = "O*NET"` - `sourceCode = "15-1254.00|React|2.E.7.h"` - ESCO 技能来源:第 232-234 行精确断言 - `sourceType = "ESCO"` - `sourceCode = "http://data.europa.eu/esco/skill/3cd569a2-4f88-4c1e-9995-8dce8c5e51a7"` - 来源隔离:第 235 行额外断言 JavaScript 的 `heatSourceCode = "15-1254.00"`,与 ESCO `sourceCode` 明显不同。 因此: - 若 `sourceType` 或 `sourceCode` 映射被遗漏并传为 `null`,上述精确断言会失败。 - 若二者被交换,O*NET 与 ESCO 的精确值断言会失败。 - 若技能来源与热度来源混用,React 的完整 O*NET 三元组断言及 JavaScript 的 URI/SOC 对照断言会失败。 ## 原有行为回归 独立执行指定环境与命令: ```powershell $env:JAVA_HOME='D:\java\jdk' & 'D:\maven\apache-maven-3.9.7\bin\mvn.cmd' '-Dtest=SkillTaxonomyMigrationTest,SkillCloudSeedDataIntegrationTest,SkillTaxonomyRepositoryTest,SkillCloudQueryServiceTest' test ``` 结果: ```text Tests run: 24, Failures: 0, Errors: 0, Skipped: 0 BUILD SUCCESS ``` Surefire 分类计数: - `SkillTaxonomyMigrationTest`:2 - `SkillCloudSeedDataIntegrationTest`:8 - `SkillTaxonomyRepositoryTest`:6 - `SkillCloudQueryServiceTest`:8 已核验原有行为: - 全量查询、连续排名:`SkillCloudQueryServiceTest.java:62-81` - 热度降序、同热度名称排序、null heat 末位:`SkillCloudQueryServiceTest.java:84-107` - 同值排序的 `skillId` 稳定性:`SkillCloudQueryServiceTest.java:109-145` - 分类过滤及缺省分类:`SkillCloudQueryServiceTest.java:166-179` - 合法空分类返回空列表:`SkillCloudQueryServiceTest.java:181-196` - 必填/正整数/未知节点/跨行业职位/跨职位分类校验:`SkillCloudQueryServiceTest.java:238-264` - provenance 字段映射:`SkillCloudQueryServiceTest.java:198-236` 本次修复没有改变排序、过滤、校验或热度来源映射逻辑,仅扩展响应字段与测试断言。 ## 变更范围 自 `e3eecfe` 起,T5 实现差异仅包含: - `SkillCloudQueryService.java` - `SkillCloudItem.java` - `SkillCloudQueryServiceTest.java` 共 `20 insertions, 3 deletions`。未修改 V35/V36、Repository、安全配置或应用配置;未发现 T6/T7/T8 的 Controller、匹配度 Service、学习路径 Service 或权限配置实现。 ## 非阻断备注 - **M-1 仍为 Minor**:设计文档中的 `heatSource` 嵌套形态与当前三个扁平热度来源字段尚未统一,按前次评审要求留待 T8 明确 OpenAPI 和接口文档。 - **M-2 仍为 Minor**:Service 层未单独断言无 heat 技能的 `sourceType/sourceCode`;Repository 层已在该场景断言 Figma 保留来源(`SkillTaxonomyRepositoryTest.java:183-188`),且 Service 映射无条件执行,不构成阻断。 ## 最终裁决 `PASS`。I-1 已关闭,指定联合回归全部通过,未发现新的 Critical 或 Important 问题;T5 可进入后续任务门禁。