| Name |
Last commit
|
Last update |
|---|---|---|
| backend | ||
| backend-nest | ||
| docs | ||
| frontend | ||
| img | ||
| openspec | ||
| public/img | ||
| scripts/contract | ||
| .gitignore | ||
| DESIGN.md | ||
| PRODUCT.md | ||
| README.md | ||
| skills-lock.json |
scripts/contract/compare.mjs 对目标服务重放全部端点,与 Java 录制的快照逐字段比对,差异精确到字段路径。 此前每验证一个模块都要临时写一次比对脚本,现在一条命令即可, 且比人工核对更细——首次运行就发现了下面这个人工绝对会漏的问题。 两条比对规则,区分对待: - 对象字段顺序:排序后比较。消费方按名字取值,顺序无语义;且 Java 的 Map.of 迭代顺序取决于 JVM 启动时的随机哈希种子,实测重启前后会变,本就不是稳定契约。 - 数组元素顺序:严格保持。顺序即业务语义(列表排序、分页), 若一并排序,"本该倒序却写成正序"这类真缺陷会被掩盖,比对就从保障变成掩护。 响应头差异用显式白名单放行,理由写在代码里: - content-type:Java 自身也不统一,部分接口带 charset 部分不带,前端无感 - set-cookie:Java 在已认证 GET 后下发删除 CSRF cookie 的指令,属框架副作用,不予复现 修复:NestJS 缺少 Spring Security 默认的安全响应头 X-Content-Type-Options、X-Frame-Options、X-XSS-Protection、 Cache-Control/Pragma/Expires 六个头此前完全缺失。 这些头由 Spring Security 开箱提供,换框架后不会自动出现, 缺了功能完全正常、任何人工测试都发现不了,但防点击劫持、防 MIME 嗅探、 防敏感数据被缓存三道防线同时消失。补齐后认证端点比对 3/3 一致。 当前全量比对:9 项一致、22 项待实现(尚未迁移的五个业务模块,均返回 404)。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
| Name |
Last commit
|
Last update |
|---|---|---|
| backend | Loading commit data... | |
| backend-nest | Loading commit data... | |
| docs | Loading commit data... | |
| frontend | Loading commit data... | |
| img | Loading commit data... | |
| openspec | Loading commit data... | |
| public/img | Loading commit data... | |
| scripts/contract | Loading commit data... | |
| .gitignore | Loading commit data... | |
| DESIGN.md | Loading commit data... | |
| PRODUCT.md | Loading commit data... | |
| README.md | Loading commit data... | |
| skills-lock.json | Loading commit data... |