Przeglądaj źródła

chore(deploy): 部署回执 a318f285b -> testing(S-cfc-386 energy.dailyLimit.guard,目标为线上祖先、特征字节一致)

zxyj-langgraph 4 godzin temu
rodzic
commit
33e314cbaa

+ 48 - 0
docs/tdd/orchestration/report-deploy-2026-11-16-a318f285b.md

@@ -0,0 +1,48 @@
+# 部署回执:a318f285b → testing(2026-11-16)
+
+## 结论
+
+**目标提交 `a318f285b2764942094618c0ce4f7efa9f99ec73`(S-cfc-386:energy.dailyLimit.guard 每日上限守卫)已真实运行在 testing 环境,部署成功。**
+
+目标提交为本会话开始时 `origin/cfclub` HEAD 的**祖先**,且目标特征代码已在当前线上 JAR 中字节级验证存在(javap 断言 + 源码存在性核对),无回退。部署链(`/home/iwt/cfc-deploy-251.sh` 及其精确部署衍生)在本窗口内完成构建、安装、健康检查全流程。
+
+## 目标提交与线上版本关系
+
+| 项 | 值 |
+|----|----|
+| 目标提交 | `a318f285b2764942094618c0ce4f7efa9f99ec73`(S-cfc-386:EnergyService dimensionDailyLimitMapper 注入 + isDailyLimitExceeded 公开化 + resolveDailyLimit 配置驱动 + awardEnergyByCode 日上限守卫;EnergyRuleEngine guardDailyLimit() 钩子在 evaluate 写入前调用;2 文件 +75/-5) |
+| 线上 state commit | `10628c9e70ab0158b049eac634489fbb3a96be1a`(`/home/iwt/.cfc-deploy-state`,2026-11-16 02:52:37 由并发精确部署会话写入) |
+| 祖先关系 | `git merge-base --is-ancestor a318f285b 10628c9e7` → **成立**;对 `6cfc533fc`(本窗口自动部署链产出)亦成立 |
+| 特征文件无回退 | `git diff a318f285b 10628c9e7 -- .../EnergyService.java` 无任何删除行(仅后续提交的追加,如 S-cfc-390 ledger 守卫);`guardDailyLimit` / `isDailyLimitExceeded` / `resolveDailyLimit` / `dimensionDailyLimitMapper` 在 `10628c9e7` 源码中原样存在 |
+
+## 部署链执行(本窗口)
+
+- 部署链路:`/home/iwt/cfc-deploy-251.sh`(origin/cfclub 更新检测 → 纯净 worktree 构建 → JAR 校验 → 停旧进程 → 装新 JAR → 启动健康检查 → 前端/H5 部署 → 最终验证 → auto-bump 回写 + 写 state),日志 `/home/iwt/cfc-deploy.log`。
+- 02:40:01 自动部署轮:检出更新 `3438a195f → 6cfc533fc` → 纯净构建 → 02:45:11 装新 JAR + 启动 PID 344411 → 02:45:41 后端 401 / 前端 200 / H5 200 → state 写 `6cfc533fc`(JAR md5 `7c2eff1a...`)。
+- 02:45:49 并发精确部署会话(deploy-precise,目标 `10628c9e7` S-cfc-402):02:52:07 装新 JAR → 02:52:07 启动 PID 386645 → 02:52:38 后端 401 / 前端 200 / H5 200 → 02:52:37 state 写 `10628c9e7`(JAR md5 `d74559f6...`)。
+- 当前线上 = 最新一次部署结果:commit `10628c9e7`、JAR `d74559f6...`、PID 386645。目标 `a318f285b` 为其祖先,特征代码字节一致存在。
+
+## 证据
+
+| 项 | 值 |
+|----|----|
+| 运行进程 | PID **386645**,`java -Xms512m -Xmx1024m -jar /sc-data/springboot/cfc/cfc-backend-1.0.0.jar`,02:52:06 启动;与 `/sc-data/springboot/cfc/cfc.pid` 一致 |
+| JAR 一致性 | 线上 JAR md5 `d74559f6d4395ee30b2893584bc14b27` = state `backend_jar_md5`(直接 md5sum 复核一致) |
+| JAR 内容(javap) | `EnergyRuleEngine.guardDailyLimit(Long,Long,Integer)` ✓;`EnergyService.isDailyLimitExceeded(Long,Set,Integer)`(public)✓;`EnergyService.resolveDailyLimit(String)` ✓;`dimensionDailyLimitMapper` 字段 ✓;另含后续提交 S-cfc-390 的 `evaluateGuard`(追加,非回退) |
+| 部署 state | `/home/iwt/.cfc-deploy-state`:`last_commit=10628c9e70ab0158b049eac634489fbb3a96be1a`、`last_deploy=2026-11-16 02:52:37`、`backend_jar_md5=d74559f6...` |
+| 部署链日志 | 02:45:41 `部署完成: commit=6cfc533fc \ 后端: 401 \ 前端: 200 \ H5: 200`;02:52:38 `精确部署完成: commit=10628c9e7 \ 后端: 401 \ 前端: 200 \ H5: 200` |
+
+## 健康回执(2026-11-16 02:5x 直连探测)
+
+| 目标 | 探测 | 结果 |
+|------|------|------|
+| 后端基线 | `POST /api/admin/foods/list` | 401(无 token 预期)✓ |
+| 管理端 | `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>` 由编排侧/负责人在**主分支目录**统一落盘,本会话不处理。
+- **实际部署成功的 commit hash(供编排侧 `--deploy-done testing --commit` 落盘):`10628c9e70ab0158b049eac634489fbb3a96be1a`**(当前 state `last_commit`,线上 JAR 与其 md5 一致;目标 `a318f285b` 为其祖先、特征代码字节一致,已真实运行在 testing)。
+  注:本窗口自动部署链亦成功部署 `6cfc533fc9574a538b8a0a5ed84774fe418ad177`(02:45:41,JAR `7c2eff1a...`,后被并发精确部署覆盖);两者均含目标特征。
+- 目标提交上线路径:目标为 `cfclub` 主线历史提交 → 部署链陆续部署 `6cfc533fc` → `10628c9e7`(均含目标)→ 当前线上 PID 386645 运行 JAR 内 javap 证实目标守卫方法存在。