s0-g09-freeze-release-notes-20260426.md 6.1 KB

S0 / G-09 Phase 2 冻结批 — 发布说明

  • 发布 HEAD:42a563bc
  • 冻结时间:2026-04-26
  • 风险等级:P2 / release_ready_with_notes
  • 目标库:aidopdev @ 123.60.180.165(当前 AiDOPWarehouse 唯一目标实例)

1. 发布范围(Included)

# 范围 关键提交
1 A2 Department / Location / Material / Supplier 引用删除保护 + UI 回归 ddfbfada / b4cebf39 / 14555f59 / 56690005
2 SRM schema mismatch 修复(SuppMaster.SupplierNumber 真实列) 50359ac3
3 B2-1 Material/Routing scope 校验 9cb551ca
4 B2-2 LocationShelf.Location scope 校验 + 历史 0/0 降级 92f1f209(spec b031e135)
5 B2-3 Employee.Department scope 校验 + 历史 0/0 降级 92f1f209(spec b031e135)
6 BUG-S0-ORG-TYPE-001 前端 org id string 化(22 页面 + 默认值收敛) b1c491f9 / 1d03994f
7 G-09 Phase 2 small/mid(监控模块 module codes 配置化、watch 去重、AdoS8ExceptionType CodeFirst 注册等) 5656a88d / a4ebd3fd / 034f31df / 89ab0ba9 / 57c7a8e9 / fcbaac35 / c70c3085 / f60d3b63 / 9b7e038d / 5a3c68e8 / 0c684a62
8 F-CLEAN-1 退役 ShowInSidebar SeedData 写路径(Entity/DB 列保留) 1708f79c
9 HEALTH-1 e2e dev 服务健康预热 fail-fast 42a563bc

2. 不包含范围(Out of Scope)

  • B2-4 WorkCenterCode scope —— 升级为字段建模任务,需业务签字;不按普通 scope guard 推进
  • C2 / C3 —— 业务签字未完成,禁止落地
  • S2-B sidebar 方案 X —— 已弃案(前端 view-model 已正确建模,无需后端 cell 合并)
  • S2-F cell-data 多 metric 主链 —— 暂缓,无真实业务驱动
  • dev 测试残留清理(B2-DEV-CLEAN-1 / DEV-CLEAN-G09-CELL/SCENE) —— 不随发布自动执行;需独立 dev DELETE 授权
  • 历史数据迁移 —— 不在本冻结批;上线后按 [B2 Downgrade] 日志频次评估

3. 目标环境口径

  • AiDOPWarehouse 当前目标库 = aidopdev @ 123.60.180.165(Database.json L15 唯一未注释行)
  • aidopcore @ 106.14.73.46 是 AiDOPCore 产品 schema(ado_md_* / ado_s8_alert_* / ado_s8_incident_* / ado_s8_rule_*),不是本项目目标库,不可作为本项目核验对象
  • 当前 AiDOPWarehouse 没有独立生产实例;如未来启用独立生产实例,必须重新执行 TARGET-CLARIFY-N 后再发布

4. 测试证据(HEAD 42a563bc)

测试 结果 备注
tests/e2e/smoke.spec.ts PASS 1/1 HEALTH-1 gate stdout: Web=200 API=301
tests/e2e/s0/srm-fix-regression.spec.ts PASS 2/2 Supplier 删除被 SRM 引用 → 409 / S01006;Material Routing 引用 → 409
tests/e2e/s0/b2-shelf-scope.spec.ts PASS 4/4 happy / NotFound→S01011 / ScopeMiss→S01012 / Update ScopeMiss reject
tests/e2e/s0/b2-employee-scope.spec.ts PASS 4/4 同上
tests/e2e/s8/g01-watch-mapping.spec.ts PASS(前批已验证) TESTG09 自带 seed + cleanup
HEALTH-1 正负路径 PASS 服务正常时 gate 通过;故意指向占空端口时 globalSetup throws + 修复提示
TESTB2 残留 0 shelf=0 / employee=0
TESTG09 残留 0 exceptions alive=0 / rules=0
show_in_sidebar=1 计数 0 F-CLEAN-1 兼容性确认
ado_s8_exception_type schema aligned 与 Entity AdoS8ExceptionType 完全对齐(19 列 / PK / 1 UNIQUE / 1 普通索引 / utf8mb4_general_ci)

5. 发布步骤

  1. 拉取并部署到 HEAD 42a563bc
  2. 重启 API 服务(旧进程不感知新 scope 校验器)—— bash /home/yy968/work/New9S/restart_aidop.sh 或等价部署流程
  3. 启动 / 验证 Web 服务(默认 8888)
  4. 发布后 smoke:pnpm -C Web exec playwright test tests/e2e/smoke.spec.ts --reporter=list
  5. 建议复跑核心回归:
    • pnpm -C Web exec playwright test tests/e2e/s0/srm-fix-regression.spec.ts --reporter=list
    • pnpm -C Web exec playwright test tests/e2e/s0/b2-shelf-scope.spec.ts --reporter=list
    • pnpm -C Web exec playwright test tests/e2e/s0/b2-employee-scope.spec.ts --reporter=list
  6. 观察 API 日志中 [B2 Downgrade] 警告频次

6. 发布风险与观察项

  1. B2 scope guard 上线后,非 0/0 跨 scope 历史数据在 Update 时(即使不改 Department/Location 引用)会被 S01012 InvalidReferenceScope 拒绝。
  2. 当前 aidopdev 真实业务影响面 = 0:跨 scope 行全部为历史测试 fixture(SH_001_* / SH_ORPHAN_* / EMP_TEST_*)。
  3. 历史 0/0 origin 的记录在 Update 时(且引用值未改)走降级路径,会产生 [B2 Downgrade] 结构化警告日志(INFO 级),不阻断业务。频次过高 → 评估数据迁移。
  4. dev 测试残留仍是清理债(B2-DEV-CLEAN-1 等),不随发布自动执行。
  5. srm-fix-regression.spec.ts 仍硬编码依赖样本 Supp=10001875 + SRM refs=390;后续 HEALTH-2 可加 sample-integrity 前置 assert。
  6. 未来若启用独立生产库,必须重做 TARGET-CLARIFY-N 与 4 项目标环境只读核验后再发布。

7. 回滚建议

  • 若 B2 scope guard 导致真实业务 Update 大面积失败([B2 Downgrade] 高频 / 用户连续报 S01012):
    1. 优先:暂停涉及 LocationShelf / Employee 的 Update 操作
    2. 回滚 API 至冻结批前的 commit(1708f79c 为 F-CLEAN-1 之后、B2-FIX-1 之前;或更早视部署窗口)
    3. 不建议直接改生产数据绕过 scope guard
    4. 回滚后保留失败请求样本(含 dto.CompanyRefId / FactoryRefId / Department/Location 值),用于评估是否为历史数据迁移问题
  • 若仅观察到 [B2 Downgrade] 但无用户投诉:不需要回滚,按观察项 6 评估迁移即可

8. 禁止事项

  • 不在发布过程中执行任何历史数据修复 SQL(INSERT / UPDATE / DELETE / ALTER)
  • 不执行 dev 清理 SQL —— 需 B2-DEV-CLEAN-1 单独授权
  • 不启用 B2-4 / C2 / C3 —— 暂缓项,需业务签字
  • 不把 aidopcore 当作本项目目标库 —— aidopcore 是 AiDOPCore 产品 schema
  • 不跳过 API 重启 —— 旧进程不感知新检查器,会导致部署后行为不一致
  • 不执行 CodeFirst / migration / seed 在生产或目标库