فهرست منبع

docs(tdd): 部署回执 45b29e5f8 → testing(2026-11-12 07:26,实际线上 ceeecd9c7 为其后代,JAR 字节码含 /api/admin/ 收口 + create 角色守卫)

zxyj-langgraph 1 روز پیش
والد
کامیت
7a34da05a4
1فایلهای تغییر یافته به همراه50 افزوده شده و 0 حذف شده
  1. 50 0
      docs/tdd/orchestration/report-deploy-2026-11-12-45b29e5f8.md

+ 50 - 0
docs/tdd/orchestration/report-deploy-2026-11-12-45b29e5f8.md

@@ -0,0 +1,50 @@
+# 部署回执:45b29e5f8 → testing(2026-11-12 07:26)
+
+## 结论
+
+**目标提交 45b29e5f8(S-cfc-153 admin.article.create RED转GREEN:JwtInterceptor 收口 /api/admin/ 前缀 + create 增加 admin 角色守卫)的改动已真实运行在 testing 环境。**
+
+testing 当前线上版本为 **`ceeecd9c7`**(部署链路于 2026-11-12 07:26:12 写入 state,代码源为
+`6338e8f7b` 纯净 worktree 构建 + auto-bump 产物回写),该提交是 `45b29e5f8` 的**后代**
+(`git merge-base --is-ancestor 45b29e5f8 ceeecd9c7` → 成立),即 45b29e5f8 的全部改动已在线上。
+目标改动仅涉及后端 `JwtInterceptor.java`(LOGIN_REQUIRED_PATHS 追加 `/api/admin/`)与
+`AdminArticleController.java`(create 增加 role 守卫),已随本轮部署链路真实构建进线上 JAR,
+**无需降级重部署**。
+
+## 证据
+
+| 项 | 值 |
+|----|----|
+| 目标提交 | `45b29e5f892b7438540b29b32ccc71b308c82eb5`(feat(S-cfc-153): admin.article.create RED转GREEN,2026-11-12 06:36,仅改 `JwtInterceptor.java` +10/-4 与 `AdminArticleController.java` +8/-1) |
+| 线上提交 | `ceeecd9c763c56fc5479e8a375f3a1b36930f629`(07:26:12 写入 state,auto-bump 产物提交) |
+| 构建源提交 | `6338e8f7b`(纯净 worktree 构建,45b29e5f8 为其祖先);auto-bump 仅回写 `cfc-web` 版本/CHANGELOG 产物文件,不改后端源码 |
+| 祖先关系 | `git merge-base --is-ancestor 45b29e5f8 ceeecd9c7` → 成立 |
+| 源码一致性 | `git diff 45b29e5f8..ceeecd9c7 -- cfc-backend/.../JwtInterceptor.java cfc-backend/.../AdminArticleController.java` → 0 行(字节一致) |
+| JAR 内容校验 | 线上 JAR 内 `BOOT-INF/classes/com/etotem/cfc/config/JwtInterceptor.class` 常量池含 `/api/admin/` 路径(LOGIN_REQUIRED_PATHS);`AdminArticleController.class` 的 `create(Map, Long, String)` 字节码含 `ldc "admin"` + role equals + `Result.error("无权限")` 拒绝路径 → 证实 45b29e5f8 的角色守卫已打进线上包 |
+| 部署时间轴 | 07:20:01 链路开始 → 07:21:12 后端构建成功 → 07:23:14 前端构建成功 (v1.0.2387) → 07:25:27 H5 构建成功 → 07:25:33 安装新 JAR + 启动 PID=371446 → 07:26:10 健康检查通过 → 前端/H5 产物部署 → 07:26:12 auto-bump 提交推送 + 写入 state |
+| 部署 state | `/home/iwt/.cfc-deploy-state`: `last_commit=ceeecd9c7...` `backend_jar_md5=7a5caac85636c00a7ea2778bc6a97ac5` |
+| 线上 JAR | `/sc-data/springboot/cfc/cfc-backend-1.0.0.jar`,md5 `7a5caac85636c00a7ea2778bc6a97ac5`,与 state 一致 |
+| 运行进程 | PID 371446,`java -Xms512m -Xmx1024m -jar /sc-data/springboot/cfc/cfc-backend-1.0.0.jar`,启动于 2026-11-12 07:25:33 |
+| 回滚 | 本轮启动健康检查一次通过(07:26:10),未触发回滚 |
+
+## 健康回执(回执出具时直连探测)
+
+| 目标 | 探测 | 结果 |
+|------|------|------|
+| 后端(部署基线) | `POST http://localhost:9082/api/admin/foods/list` | 401(无 token 预期) |
+| 后端(目标行为) | `POST http://localhost:9082/api/admin/articles/create` | 401(匿名被 JwtInterceptor 拦截,B-142-1 整族鉴权门生效) |
+| 登录端点(PUBLIC_PATHS 例外) | `POST http://localhost:9082/api/admin-auth/login` | 200(不受 /api/admin/ 收口影响) |
+| 管理端 | `http://localhost/admin/`(Host: cfc.iwintrue.com) | 200 |
+| 小程序 H5 | `http://localhost/frontend/`(Host: cfc.iwintrue.com) | 200 |
+
+## 说明
+
+- 按编排要求,本次**未创建/修改** `.workbuddy/tasks.json`,未写 `last_deployed`;
+  `--deploy-done testing --commit <sha>` 由编排侧在主分支目录统一落盘。
+- 部署链路:`/home/iwt/cfc-deploy-251.sh`(origin/cfclub 更新检测 → 纯净 worktree 构建 →
+  JAR 校验 → 停旧进程 → 装新 JAR → 启动健康检查 → 前端/H5 产物部署 → 最终验证);
+  本轮由该脚本实例于 07:20:01–07:26:12 完成,互斥锁单实例执行。
+- 45b29e5f8 为**后端**改动,以线上 JAR 内 `JwtInterceptor.class` 的 `/api/admin/` 路径常量与
+  `AdminArticleController.create` 的角色守卫字节码为主要验证口径;本轮部署 JAR md5 与 state 一致。
+- 线上 commit `ceeecd9c7` 为 auto-bump 产物提交(`6338e8f7b` 之后仅版本号/CHANGELOG 变更),
+  后端源码与 45b29e5f8 一致,属目标提交的后代。