You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

5.4 KiB

N03 SDD W3 最终独立复审报告

复审对象

  • 变更:n03-skill-cloud
  • 基线:df7238b
  • 复审焦点:W3-N-I1 修复及其对 W3-I1、W3-I2 的回归影响。
  • 工作区对象:docs/openapi-rc.json、docs/verify_openapi.py,并核对 SkillCloudController 和权限测试中的既有修复。
  • 环境:JDK 17(D:\java\jdk)、Maven 3.9.7(D:\maven\apache-maven-3.9.7\bin\mvn.cmd)。
  • 前轮报告:changes/n03-skill-cloud/.superpowers/sdd/reviews/W3-wave-rereview.md。

Verdict

PASS

W3-N-I1 已关闭。两个既有 cancel operationId 已恢复,静态 OpenAPI 不再受无关历史契约变更影响;Skill Cloud 三个 operationId 的冲突检查仍有效。W3-I1、W3-I2 保持关闭。W3 代码可以进入收尾和提交阶段。

该 PASS 仅针对 W3/N-I1 代码与契约修复,不代表完整项目回归通过。完整 mvn test 仍有 2 failures + 9 errors,变更最终关闭或 TO-11 前仍需修复或正式豁免。

N-I1 关闭证据

既有 cancel 契约已恢复

当前 docs/openapi-rc.json:

  • POST /interviews/{interviewId}/cancel:operationId = cancel
  • POST /profile/me/deletion/cancel:operationId = cancel

对三个 Git 状态进行了全量 operationId 对比:

df7238b -> HEAD
新增:
/skills/word-cloud    getWordCloud
/skills/match         getMatch
/skills/learning-path getLearningPath

HEAD -> 当前工作区
仅:
/skills/match         getMatch -> getSkillMatch

df7238b -> 当前工作区
仅三个新增 Skill Cloud operationId,其中 /skills/match 为 getSkillMatch

因此:

  • 两个历史 cancel 值已恢复,没有再次被改名为 cancelInterview 或 cancelAccountDeletion。
  • 除三个 Skill Cloud operationId 外,没有其他 operationId 在基线 df7238b 到当前工作区之间发生变化。
  • docs/verify_openapi.py 已移除全文档唯一性要求,只对三个 Skill Cloud operationId 逐个执行全文档“恰好出现于对应路径”的断言。
  • 历史重复值 cancel 不再阻断校验,但 Skill Cloud 的新 operationId 仍不能与其他 operation 冲突。

结论:N-I1 已关闭。

W3-I1 保持关闭

当前契约与运行时测试保持一致:

  • /skills/word-cloud -> getWordCloud
  • /skills/match -> getSkillMatch
  • /skills/learning-path -> getLearningPath

SkillCloudControllerTest 在运行时 /v3/api-docs 上校验三个 operationId 的精确值及其唯一归属;docs/verify_openapi.py 对静态 OpenAPI 执行同等约束。前轮的 getMatch 重复冲突没有回退。

结论:W3-I1 保持关闭。

W3-I2 保持关闭

401 契约未回退:

  • 运行时匿名请求和非法 JWT 均返回 code=401、message=not authenticated、timestamp=""。
  • 响应不包含 requestId 或 data。
  • SkillCloudAuthorizationIntegrationTest 同时覆盖匿名和 Bearer invalid-token。
  • 静态 OpenAPI 中三个 Skill Cloud 接口的 401 均引用 UnauthorizedResponse,示例与运行时一致。
  • docs/verify_openapi.py 继续校验 401 schema、精确响应字段和示例内容。

结论:W3-I2 保持关闭。

独立验证结果

静态 OpenAPI 校验

命令:

python docs\verify_openapi.py

结果:

paths: 129
All checks passed!

通过。

T2-T9 指定测试组

命令:

$env:JAVA_HOME='D:\java\jdk'
& 'D:\maven\apache-maven-3.9.7\bin\mvn.cmd' '-Dtest=SkillTaxonomyMigrationTest,SkillCloudSeedDataIntegrationTest,SkillTaxonomyRepositoryTest,SkillCloudQueryServiceTest,SkillMatchServiceTest,SkillLearningPathServiceTest,SkillCloudControllerTest,SkillCloudAuthorizationIntegrationTest,SkillCloudEndToEndIntegrationTest' test

结果:

Tests run: 73, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
Total time: 54.628 s

通过。

打包

命令:

$env:JAVA_HOME='D:\java\jdk'
& 'D:\maven\apache-maven-3.9.7\bin\mvn.cmd' -DskipTests package

结果:

BUILD SUCCESS
Total time: 2.387 s

通过。

项目级 blocker

完整回归命令:

$env:JAVA_HOME='D:\java\jdk'
& 'D:\maven\apache-maven-3.9.7\bin\mvn.cmd' test

结果:

Tests run: 1395, Failures: 2, Errors: 9, Skipped: 0
BUILD FAILURE
Total time: 01:50 min

失败项:

  • CareerProgressServiceTest.fullAggregation_returnsCorrectSummaries:期望 1,实际 0,时间依赖问题。
  • JobReviewDimensionControllerTest.listReviews_shouldReturnDimensionScores:期望 200,实际 500,旧 Mock 签名问题。
  • JobReviewDimensionServiceTest.listReviews_shouldReturnDimensionScoresWithoutN1:返回结果 null 导致 NPE,旧 Repository stub 问题。
  • LocalResumeStorageServiceTest:8 项错误,Windows JUnit 临时目录清理阶段异常。

Skill Cloud 目标测试在完整套件中均通过,但完整 mvn test 未全绿。上述 2 failures + 9 errors 仍是项目级 blocker;在修复或正式豁免前,不得声称完整回归通过,也不得进入最终变更关闭或 TO-11。

收尾结论

  • W3-N-I1:关闭
  • W3-I1:保持关闭
  • W3-I2:保持关闭
  • 是否允许 W3 代码收尾:允许
  • 是否允许最终变更关闭:不允许,完整 mvn test 仍有 2 failures + 9 errors,需修复或正式豁免。
  • 提交范围要求:仓库中存在与本复审无关的暂存、修改和未跟踪文件;W3 收尾提交时必须只包含 N03 范围内的文件,避免混入无关变更。