feat(M10-A): 完成统一通知中心与投递闭环

This commit is contained in:
Codex
2026-08-11 09:17:18 +08:00
parent 41b9cf7349
commit 5d70114bab
46 changed files with 1724 additions and 74 deletions
+9
View File
@@ -98,6 +98,14 @@ MYSQL_DATABASE=<以项目实际数据库名为准>
- 直订回调当前统一使用 `X-Third-Party-Signature` HMAC-SHA256 入口;取得真实平台授权后由专用适配器按厂商协议替换,不得降低验签要求。
- 券码只保存 SHA-256 和脱敏显示值,不得写入日志、回调摘要或后台列表。
## 通知渠道网关
- 站内信无需外部配置;门店 Webhook 使用后台登记的 `notification_url`,只接受不含用户名和密码的 HTTPS 地址。
- 微信订阅消息、企业微信和云喇叭分别使用 `QIPAI_NOTIFICATION_WECHAT_GATEWAY_URL``QIPAI_NOTIFICATION_WECOM_GATEWAY_URL``QIPAI_NOTIFICATION_CLOUD_SPEAKER_GATEWAY_URL`;仅配置非空 HTTPS 网关的渠道才启用。
- 对应 Bearer 凭据使用同名前缀的 `*_GATEWAY_TOKEN`,真实值只写 `/etc/qipai/qipai.secrets` 或 Git 忽略的本地配置,不进入数据库、日志和前端包。
- `QIPAI_NOTIFICATION_HTTP_TIMEOUT_MS` 默认 10000,服务端限制为 100–60000 毫秒;每次请求携带投递 ID 和幂等键,非 2xx 响应进入有限指数退避,达到上限转为失败并等待人工补发。
- 微信订阅消息必须先由登录顾客写入明确授权;撤销授权或处于门店本地静默时段时只记录 `SUPPRESSED`,人工补发不能绕过授权或静默拦截。
## 配置加载优先级
1. `/etc/qipai/qipai.secrets`
@@ -121,4 +129,5 @@ MYSQL_DATABASE=<以项目实际数据库名为准>
- 2026-06-22M05-D 增加门店收款账户、`profitShareReceivers` 环境映射、分账授权状态和非生产 Mock 门禁。
- 2026-08-10:总纲升级为 V5.6;同步最新源码接管、M09-A-RECOVERY 完成证据和 M06-C-R1 固定执行游标,既有凭据与配置位置不变。
- 2026-08-11:总纲升级为 V5.7;增加中文 Git 提交门禁并将当前游标推进至 M09-D2,既有凭据与配置位置不变。
- 2026-08-11M10-A 增加通知渠道 HTTPS 网关、Bearer 凭据、超时、订阅授权、静默时段与有限重试配置;未登记任何真实渠道凭据。
- 2026-08-10M06-C-R1 增加门锁烟测 subtype 变量,确保实物 `CtrlDevice` 始终携带 14/15;未增加任何仓库内明文凭据。
+11 -11
View File
@@ -1,10 +1,10 @@
# 当前开发成果基线
> V5.0 首次核验日期:2026-06-16
> audited_commit: `60264cb`
> audited_worktree: M09-D4 已完成工程(随本次中文工程提交固化)
> audited_at: `2026-08-11T15:10:00+08:00`
> next_engineering_target: 按 V5.7 固定队列执行 M09-REGRESSION,完成商品域全链路对账与模块验收
> audited_commit: `41b9cf7`
> audited_worktree: M10-A 已完成工程(随本次中文工程提交固化)
> audited_at: `2026-08-11T09:08:00+08:00`
> next_engineering_target: 按 V5.7 固定队列执行 M10-B,完成可由明细复算的统计报表
> 事实源:当前工作区、Git 历史、状态文档、Windows/WSL 检查脚本。
## 总体结论
@@ -13,10 +13,10 @@
|---|---|---|---|
| 总纲版本 | V5.7 已成为当前权威总纲,V5.6 及更早版本仅作历史基线 | 根目录 `V5.7.md` 的增量控制层与第 30 章固定队列 | 必须按 V5.7 游标开发,不得回退到历史队列 |
| Git 远端 | `origin=ssh://git@git.txyundm.cn:2222/panda/qipai.git`,分支 `main` | `git rev-list main...origin/main``0 0` | 本地与远端同步 |
| 正式后端 | 已完成 Fastify、迁移兼容、outbox/worker、多应用租户、身份/RBAC/门店范围及 M03-M08 业务 APIM09-A/B/C 已完成保洁收口,M09-D1/D2/D3 已完成商品目录、库存、订单支付和寄存取出安全生命周期;M09-D4 新增登录态顾客门店目录接口 | `backend/src/products/**``backend/src/inventory/**``backend/src/routes/{products,inventory,product-orders,product-storages}.ts``database/migrations/202608110{7,8,9}_m09d*``backend/tests/product-*.test.mjs``backend/tests/inventory-*.test.mjs` | M09-D4 Windows 全量 71.6 秒通过;MySQL 8.4.10 完成 217 up、159 verify、199 down 往返清理探针,进入 M09-REGRESSION |
| 后台管理端 | 已建立 Vue3 + Vite + TypeScript + Element Plus 权限路由工程;13 个业务入口按路由懒加载;新增商品运营工作台统一目录、库存、商品订单与寄存,并按各域 read/manage capability 独立加载和控制写操作 | `admin/src/router.ts``admin/src/components/ProductOperationsPanel.vue``admin/src/api.ts``backend/src/routes/admin-auth.ts` | M09-D4 生产构建导航测试通过;桌面/平板/手机响应式样式和一次性领取码提示已纳入静态门禁 |
| 正式后端 | 已完成 Fastify、迁移兼容、outbox/worker、多应用租户、身份/RBAC/门店范围及 M03-M09 业务 APIM10-A 新增统一通知模板、路由、接收人解析、顾客订阅授权/站内信、HTTPS 渠道、幂等投递、有限重试、失败人工补发、门店时区静默与递归脱敏,并将房间订单支付退款、保洁、设备、商品订单和寄存事件接入 outbox | `backend/src/notifications/notification-service.ts``backend/src/routes/notifications.ts``backend/src/tasks/worker.ts``database/migrations/2026081110_m10a_notification_center.*.sql` | Windows 全量 76.7 秒通过;MySQL 8.4.10 完成 229 up、165 verify、209 down 往返清理探针,进入 M10-B |
| 后台管理端 | 已建立 Vue3 + Vite + TypeScript + Element Plus 权限路由工程;14 个业务入口按路由懒加载;通知中心支持按门店查看模板、事件路由和投递状态,筛选渠道/失败原因并对终态失败记录人工补发 | `admin/src/router.ts``admin/src/components/NotificationCenterPanel.vue``admin/src/api.ts``backend/src/routes/admin-auth.ts` | 生产构建导航测试通过;通知中心分块约 6.4 KiB gzip桌面/平板/手机响应式样式纳入静态门禁 |
| 微信小程序 | 已纳管微信原生模板,并完成顾客端房间订单、充值、权益、保洁等主体链路;M09-D4 新增门店商品选购、购物车、商品订单取消、整单寄存、部分取出、换码与取消寄存页面 | `miniapp/pages/goods/*``miniapp/pages/store/detail``miniapp/pages/profile/*``miniapp/utils/api.js``scripts/check-m09-d4-product-experience.mjs` | 商品领取码只保留页面内存并可复制后隐藏,不调用本地持久化;生产商品支付入口仍沿用服务端后续真实微信支付接线边界 |
| 数据库迁移 | 已形成 M01-B 至 M09-D3 连续 up/down/verify 计划;M09-D3 新增 4 张寄存记录、明细、事件与事件项流水表及 4 个不可变触发器;M09-D1 崩溃重试会先按依赖撤销 D3/D2,迁移 runner 继续按 marker/checksum 增量执行并由数据库命名锁串行化 | `database/migrations/2026081109_m09d3_product_storage.{up,down,verify}.sql``backend/src/db/migration-runner.ts``backend/tests/mysql-migration-roundtrip.test.mjs` | WSL MySQL 8.4.10 已完成 217 up、159 verify、199 down 的 up/verify/down/up/verify一次性凭证、部分取出、并发全量取出单赢家、取消/过期、隔离和不可变流水通过 |
| 数据库迁移 | 已形成 M01-B 至 M10-A 连续 up/down/verify 计划;M10-A 新增模板、路由、订阅、投递、不可变尝试 5 张表,使用生成作用域键保证 `NULL` 门店下的全局配置唯一,并在 M09-D1 崩溃重试按依赖撤销 | `database/migrations/2026081110_m10a_notification_center.{up,down,verify}.sql``backend/src/db/migration-runner.ts``backend/tests/mysql-migration-roundtrip.test.mjs` | WSL MySQL 8.4.10 已完成 229 up、165 verify、209 down 的 up/verify/down/up/verify订阅拦截、脱敏、幂等扇出、失败重试、人工审计和不可变尝试通过 |
| M00 部署脚本 | 已有菜单、状态、HTTPS、Certbot、EMQX、备份检查模板 | `setup.sh``scripts/setup/``deploy/` | PARTIAL,生产未执行 |
| 发布清单 dry-run | 可基于当前 HEAD 输出 `deployed=false` 的 release manifest,记录后端/后台/迁移尚未生成而跳过 | `scripts/setup/deploy-business.sh --dry-run .``scripts/dev/windows/check-release-manifest.ps1` | 可在 M00 验证结构;真实构建与生产发布待 M01/M09 后接入 |
| 参考资料 | 已有清单、脱敏日志、页面/接口/表结构摘要 | `docs/reference-*``docs/db-schema-inventory.md` | PARTIAL,仍需按模块迁移正式实现 |
@@ -26,7 +26,7 @@
## 状态校准
- `docs/module-status.md` 中 M00 仍为 `PARTIAL` 是正确的:生产 Ubuntu 初始化、部署与运维验收尚未执行;后端、后台和小程序源码已在后续模块建立。
- M01-M04 与 M07 已具备模块工程验收;M05、M06、M08 因真实厂商/硬件/生产条件保持 `PARTIAL`M09-A/B/C/D1/D2/D3/D4、M06-C/E-R1、M06-R-REGRESSION 与 M08-D-R1 已完成,当前进入 M09-REGRESSIONM10 尚未进入
- M01-M04、M07、M09 已具备模块工程验收;M05、M06、M08 因真实厂商/硬件/生产条件保持 `PARTIAL`M10-A 内部工程已完成,真实渠道凭据保持外部阻塞,当前进入 M10-B
- 任何“目录存在”只能证明骨架存在,不能证明模块完成。
## Git 历史敏感信息核验
@@ -37,6 +37,6 @@
## 下一步
1. 完成 M09-D4 中文提交、push远端标题校验。
2. 执行 M09-REGRESSION,对商品目录、库存、订单支付、退款、寄存数量、权限和界面逐单对账,补模块级缺陷与验收证据
3. M06-G 真实硬件、真实微信与团购联调继续等待外部条件,不阻断内部主队列。
1. 完成 M10-A 中文提交、push远端标题与 SHA 校验。
2. 执行 M10-B,统一报表口径、门店时区边界、明细复算、筛选和导出
3. 真实通知网关、M06-G 硬件、微信与团购联调继续等待外部条件,不阻断内部主队列。
+5 -2
View File
@@ -58,6 +58,8 @@
> 2026-08-11 M09-REGRESSION:当前伴随工程新增商品订单逐单对账,只读聚合订单明细、成功支付/退款、库存不可变流水及订单来源寄存余额,九项账实检查可直接定位金额、数量、占用、销售和寄存漂移;运营端同步展示支付、退款与不可变事件。回归修正 `platform.manage` 在库存/商品订单路由和服务层的空门店范围放行,并将已校验分页整数安全内联,解决 MySQL 8.4 预处理 `LIMIT/OFFSET` 参数兼容问题。Windows 全量与 MySQL 8.4.10 的 217 up、159 verify、199 down 往返通过,M09 内部工程完成,游标进入 M10-A。
> 2026-08-11 M10-A:当前伴随工程完成统一通知中心。5 张新表覆盖模板、事件路由、微信订阅授权、投递快照和不可变尝试;房间订单/支付退款、保洁任务、设备告警、商品订单和寄存事件统一写 outbox。worker 执行幂等扇出、门店时区静默、递归脱敏、有限指数退避和终态失败人工补发,人工尝试保留操作人;顾客可管理订阅授权、读取/已读站内信。站内信、门店 HTTPS Webhook 与按环境启用的微信订阅/企微/云喇叭网关适配器已接线,未配置渠道明确失败。Vue 后台第 14 个懒加载入口可维护模板/路由并追踪投递。Windows 全量 76.7 秒与 MySQL 8.4.10 的 229 up、165 verify、209 down 往返及清理探针通过,游标进入 M10-B。
| ID | 功能 | 模块子阶段 | 状态 | 最近提交 | 测试/验收证据 | 阻塞原因 | 下一步 |
|---|---|---|---|---|---|---|---|
| ENV-001 | 固定 Windows 工作区 | M00-A/M00-B | DONE | 远端 HEAD | 已确认 `D:\qipai`Git 根、main 分支、固定 origin 和 push 校验通过。 | - | 后续每模块继续复检。 |
@@ -66,6 +68,7 @@
| WSL-001 | WSL 隔离辅助验证 | M00-C | PARTIAL | `a690e85` | WSL 基础脚本已执行通过;本地 MQTT 服务级核验通过;认证/ACL 冒烟脚本入口、配置自检、可选 TLS/遗嘱/重复消息探测入口已生成;V5.0 点名的 WSL EMQX 检查/启动/停止入口已补齐。 | 正式后端/后台尚未生成,无法执行完整 Linux 构建;MQTT 本地账号未配置,认证/ACL/TLS/遗嘱/幂等未验收;生产 EMQX 不由 WSL 脚本管理。 | M01/M09 生成项目后在 WSL 原生临时副本执行完整构建;配置本地 MQTT 最小权限账号后执行冒烟和可选探测。 |
| API-001 | 固定 HTTPS API 域名 | M00-E/M01/M08/M10 | PARTIAL | `1192dcb` | 已新增 Windows 检查脚本、Ubuntu 菜单检查和固定域名 Nginx 模板;M01-A 健康接口、编译和本地 HTTP 检查通过;M01-B 的连接池、迁移 CLI、旧表兼容读取、整数分转换已通过契约测试,并在 WSL MySQL 8.4.9 的空库和脱敏旧库副本完成 `up/verify/down/up/verify`,异常退出清理后临时库与账号均为 0。 | DNS/HTTPS 生产验证、Ubuntu 24.04 生产运行时、业务接口和鉴权未验收。 | 进入 M02 身份与权限;后续在 M10 接入生产域名、证书和 Nginx 真实验收。 |
| ASYNC-001 | MySQL outbox 与轻量任务 worker | M01-C | DONE | `2b90d1f` | outbox/任务迁移、幂等键、`FOR UPDATE SKIP LOCKED` 领取、租约恢复、指数退避、人工补偿状态和 PM2 worker 已实现;Windows 契约测试与 WSL MySQL 8.4.9 往返迁移、重复入队、重启后领取验证通过。 | 具体通知、订单、设备、退款和统计 handler 在对应业务模块接入。 | M02 起按业务事务写入 outbox/任务并注册真实 handler。 |
| NTF-001 | 全场景通知提醒 | M10-A | PARTIAL | M10-A 当前工程 | 模板/路由、角色/用户/顾客/Webhook 接收人、订阅授权、站内信、HTTPS 渠道、投递快照、幂等、有限重试、失败人工补发、门店时区静默、递归脱敏和不可变尝试已完成;订单、支付退款、保洁、设备、商品与寄存事件接入统一 outbox,后台可维护和追踪。 | 真实微信订阅、企微和云喇叭网关凭据及生产回执为 `BLOCKED_EXTERNAL`。 | 取得渠道条件后执行小流量真实投递与回执对账;内部队列继续 M10-B。 |
| TLS-001 | Nginx 与证书自动化 | M00-E/M10 | PARTIAL | `4cb3ab6` | 已生成 Nginx 模板、Certbot 命令说明和菜单第 4 项检查,可检查模板、站点启用、TLS、健康端点、证书文件、续期配置和 `certbot.timer`。 | 证书申请/续期 dry-run、80/443 生产验证未执行。 | 在生产 Ubuntu 执行证书签发、续期 dry-run 和 Nginx 安装记录。 |
| WXNET-001 | 微信合法域名与真机验证 | M00-E/M08/M10 | PARTIAL | `4ac2c96` | 小程序配置继续固定 `https://api.txyundm.cn/app-api``scripts/check-miniapp-m08-a.mjs` 已检查不存在 localhost、127.0.0.1 和 HTTP API。 | 微信后台合法域名和真机体验版未验证。 | M08-A 后续补真机登录、上传/下载、下单和设备接口冒烟;M10 做生产验收。 |
| OPS-001 | 固定 `/opt/apps` 目录 | M00-D/M10 | PARTIAL | `292ab7f` | `scripts/setup/init-layout.sh` 已生成目录布局、uploads 目录和 manifestWSL 检查脚本通过,未在生产 Ubuntu 执行。 | 生产操作未执行。 | 由管理员在 Ubuntu 菜单执行并记录结果。 |
@@ -85,8 +88,8 @@
| CLN-005 | 保洁驳回/免清洁 | M08-B/M09 | PARTIAL | `eb838f5` | 已支持管理侧驳回、批量驳回和保洁员驳回补做;已新增 `POST /admin-api/cleaning/tasks/:taskId/exempt`,后台任务列表提供免清洁按钮、批量免清洁和 `EXEMPT` 筛选,仓储将可处理任务置为 `EXEMPT`、奖励归零并移除未结算协作者;待结算候选继续只取 `COMPLETED` 且未结算任务,免清洁任务不进入结算;管理统计 summary、门店明细、每日趋势和统计导出均新增免清洁数量,便于核对不结算口径。 | 真实商户现场执行仍待继续。 | 继续 M08-B/M09,补现场验收记录和更完整运营管理界面。 |
| PRD-001 | 商品目录与门店售卖 | M09-D1/M09-D4 | DONE | `93af128``e91b979` | 分类、商品、SKU、门店上架、履约方式、销售开关/人工暂停及最多 8 段每周营业时段已实现;M09-D4 新增登录态顾客门店目录,小程序与运营后台复用同一商品主数据。 | - | M10 按通知和统计需求复用商品主数据。 |
| INV-001 | 库存策略与不可变流水 | M09-D1/M09-D2 | DONE | `93af128``1a3ea7b` | TRACKED/UNLIMITED 策略、入库、调整、盘点、损耗、批量锁定/释放/扣减已实现;M09-D2 已把订单创建、支付、取消、超时和退款接入稳定业务号与同事务库存变更。请求指纹、版本 CAS、数量边界和不可变流水保证并发回调只扣一次、重复释放/返库幂等且不出现负库存。 | - | M09-D3 寄存数量已使用独立账本,不回写已完成订单项快照。 |
| GOODS-102 | 商品订单与支付库存闭环 | M09-D2/M09-D4 | DONE | `1a3ea7b``e91b979` + M09-REGRESSION 当前工程 | 商品订单与支付单分离,订单项与状态事件不可变;小程序与 Vue 运营端已接入完整状态处置,逐单对账覆盖金额、成功支付/退款、库存占用/销售余额并显示原始流水。 | 真实微信商品支付入口仍缺生产商户条件。 | M10-A 将商品订单与退款事件接入统一通知中心;真实支付纳入 BLOCKED_EXTERNAL。 |
| GOODS-104 | 商品寄存与安全取出 | M09-D3/M09-D4 | DONE | `60264cb``e91b979` + M09-REGRESSION 当前工程 | 寄存状态、商品快照、一次性哈希领取码、部分取出自动轮换、并发防超领、审计与 outbox 已完成;逐单对账验证订单来源寄存总量、剩余量与明细聚合一致。 | - | M10-A 消费既有寄存 outbox 并接入通知重试。 |
| GOODS-102 | 商品订单与支付库存闭环 | M09-D2/M09-D4 | DONE | `1a3ea7b``e91b979``41b9cf7` + M10-A 当前工程 | 商品订单与支付单分离,订单项与状态事件不可变;小程序与 Vue 运营端已接入完整状态处置,逐单对账覆盖金额、成功支付/退款、库存占用/销售余额并显示原始流水;状态、支付和退款事件已进入统一通知 outbox。 | 真实微信商品支付入口仍缺生产商户条件。 | M10-B 复用明细完成商品收入与退款报表;真实支付纳入 BLOCKED_EXTERNAL。 |
| GOODS-104 | 商品寄存与安全取出 | M09-D3/M09-D4 | DONE | `60264cb``e91b979``41b9cf7` + M10-A 当前工程 | 寄存状态、商品快照、一次性哈希领取码、部分取出自动轮换、并发防超领、审计与 outbox 已完成;逐单对账验证订单来源寄存总量、剩余量与明细聚合一致M10-A worker 已消费寄存事件并按路由投递。 | - | M10-B 保持寄存数量与商品订单收入分离。 |
| STAFF-001 | 员工账号 | M02-D/M08 | PARTIAL | `93f06d2` | 已实现创建员工、分配角色/门店、禁用、备注、重置会话和审计;管理员小程序已展示员工概况,Vue 后台可按角色/状态搜索并完成完整生命周期管理,权限变化即时撤销活动会话。 | 真实员工微信绑定和生产账号生命周期验收待补。 | M10 以真实员工账号验证绑定、门店切换、禁用和重新登录。 |
| BKG-002 | 后台用户管理 | M02-D/M08 | PARTIAL | `0511008` | 已实现分页筛选、注册/登录时间、状态、角色、门店范围、手机号/IP 脱敏及会员/STAFF 分栏;租户管理员可为同租户有效 STAFF 设置唯一登录名和强密码,更新凭据会撤销其活动会话且不返回密码哈希。 | 尚缺平台级跨租户用户视图和真实生产数据验收。 | M10 以生产平台/租户账号复验跨租户用户视图、凭据重置和审计。 |
| TEN-001 | 多门店支持 | M02/M03 | PARTIAL | `15139b3` | 门店 CRUD 与门店管理员数据范围已实现;跨门店写操作在 Windows 和 WSL MySQL 实测被拒绝。 | 地图选店、前端切换与完整订单数据范围待后续阶段。 | M03-C 接入地图选店,M04 起业务资源继承门店范围。 |
+8 -8
View File
@@ -3,16 +3,16 @@
```yaml
execution_cursor:
current_module: M10
current_stage: M10-A
current_stage: M10-B
stage_status: TODO
last_completed_stage: M09-REGRESSION
next_stage: M10-B
last_engineering_commit: `e91b979`
pending_engineering_commit: "M09-REGRESSION 已完成工程(随本次中文工程提交固化)"
last_completed_stage: M10-A
next_stage: M10-C
last_engineering_commit: `41b9cf7`
pending_engineering_commit: "M10-A 已完成工程(随本次中文工程提交固化)"
last_push_verified: true
base_branch: main
blocked_reason: "M08-A 真机合法域名、真实微信支付和实物开门验证缺微信后台/商户/硬件现场条件;M08-B 可独立工程内容已完成,真实商户凭据、微信后台配置、生产小额转账和实物硬件结果保持 BLOCKED_EXTERNALM08-C 可独立工程内容已完成,真实美团/抖音/快手商家授权与真机验券保持 BLOCKED_EXTERNAL,已按规则旁路进入 M08-D。M06-G 真实硬件联调仍缺生产 MQTT 账号/ACL、DeviceID、控制箱、门锁、插座和现场配线。"
updated_at: 2026-08-11T08:30:00+08:00
updated_at: 2026-08-11T09:08:00+08:00
```
| 模块 | 状态 | 最近提交 | 最近开发日志 | 备注 |
@@ -26,6 +26,6 @@ execution_cursor:
| M06 设备、MQTT 与真实硬件联动 | PARTIAL | `da5751f` | docs/devlogs/2026-06-24-M06-E-智慧插座.md | M06-C/E-R1 已按原件校正控制箱、Sub-1G 与智慧插座 Wire/事件/脱敏;M06-R 已通过 Windows 后端全量、MQTT fixture、四项静态检查的中文/空格路径回归及 WSL MySQL 8.4.10 完整往返。M06-G 仍缺生产 MQTT 账号/ACL、DeviceID 和实物配线,保持 BLOCKED_EXTERNAL。 |
| M07 会员、余额、充值、优惠券和套餐营销 | DONE | `ed0d455` | docs/devlogs/2026-06-24-M07-D-会员管理.md | M07-A 已完成现金/赠送双余额账本;M07-B 已完成充值优惠;M07-C 已完成优惠券/套餐权益底表和冻结、确认、退回的可靠补偿核销服务;M07-D 已完成会员画像、订单、消费、余额、充值、优惠券和套餐聚合查询。 |
| M08 微信原生小程序完整业务 | PARTIAL | `3faf868` | docs/devlogs/2026-08-10-M08-D-Vue平台后台.md | M08-A/B/C/D 功能切片与 M08-D-R1 架构返工已完成;12 个权限路由按领域懒加载,最大 JS 分块 217,195 B,三档响应式门禁通过。真实微信、团购和硬件现场验收按 BLOCKED_EXTERNAL 保持 PARTIAL。 |
| M09 保洁任务、结算、商品和库存 | DONE | `e91b979` + M09-REGRESSION 已完成工程 | docs/devlogs/2026-08-11-M09-REGRESSION-商品全链路对账.md | M09-A/B/C 与 M09-D1/D2/D3/D4 均已完成并推送。模块回归新增商品订单金额、支付退款、库存不可变流水和订单来源寄存的逐单对账,修正库存分页 MySQL 8.4 预处理兼容及 `platform.manage` 权限一致性;Windows 全量和 MySQL 8.4 往返通过,游标进入 M10-A。 |
| M10 部署、域名、验收和运维闭环 | TODO | M09-REGRESSION 当前工程 | docs/devlogs/2026-08-11-M09-REGRESSION-商品全链路对账.md | 下一步实现通知中心。 |
| M09 保洁任务、结算、商品和库存 | DONE | `41b9cf7` | docs/devlogs/2026-08-11-M09-REGRESSION-商品全链路对账.md | M09-A/B/C 与 M09-D1/D2/D3/D4 及模块回归均已完成并推送;逐单金额、支付退款、库存、寄存和权限闭环通过。 |
| M10 部署、域名、验收和运维闭环 | PARTIAL | M10-A 当前工程 | V5.7.md | M10-A 已完成统一通知事件、模板/路由、接收人解析、订阅授权、站内信、HTTPS 渠道适配器、幂等投递、有限重试、失败人工补发、静默时段、脱敏和后台追踪;Windows 全量 76.7 秒与 MySQL 8.4.10 的 229 up、165 verify、209 down 往返通过。下一步执行 M10-B 统计报表。 |