From 76a152bccfbb722f06f100a369e951aa9ea0445e Mon Sep 17 00:00:00 2001 From: WorkBuddy Date: Sat, 19 Sep 2026 19:39:02 +0800 Subject: [PATCH] =?UTF-8?q?docs(status):=20=E6=89=B9=202/3=20=E6=94=B6?= =?UTF-8?q?=E5=B0=BE=E5=AE=8C=E6=88=90=E7=99=BB=E8=AE=B0=20=E2=80=94?= =?UTF-8?q?=E2=80=94=20=E5=85=A8=E9=87=8F=E5=9B=9E=E5=BD=92=20712/0/0/3=20?= =?UTF-8?q?=E5=AE=9E=E6=B5=8B=E3=80=81=E6=9D=83=E5=A8=81=E8=A1=8C=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=EF=BC=88=E6=89=B9=201~3=20done,=20awaiting=20user=20g?= =?UTF-8?q?o=EF=BC=89=E3=80=81Phase=2021=20=E9=81=97=E7=95=99=E8=A1=8C?= =?UTF-8?q?=E6=B8=85=E5=81=BF=E7=8A=B6=E6=80=81=E3=80=81rc.16=20=E5=AE=9A?= =?UTF-8?q?=E7=A8=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 后端基线 700 → 712:MeStatusLocalEligibilityGuardTest(2) + 互选 expires_at 接线守卫(+2, 负向恰 2 红) + 随访审计与风险守卫(4) + 红娘注销拦截守卫(4),全部真实落库守卫 - 批 3 仅余:数据保留流程(待产品决策)、E2E 入 CI 的 GitHub Actions 实测绿 - UI 契约门禁 18/18;本机 E2E 65 passed --- docs/STATUS.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/STATUS.md b/docs/STATUS.md index 07e975d..e2f03ba 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -1,8 +1,8 @@ # 项目状态跟踪 — STATUS.md -> **2026-09-19 当前有效结论:`V1.1 RECOVERY PHASE 01~22 CLOSED / PHASE 23 CLOSEOUT IN PROGRESS (E2E SCENARIOS + INV-011 GUARD DONE, 65 E2E PASSED LOCAL) / HORIZONTAL HARDENING DONE (HTTP SEMANTICS + IDEMPOTENCY + PORT/ENTRY GUARDS) / UI REDESIGN ACCEPTED BY USER / 678+ TESTS GREEN / STOPPED BEFORE PHASE 24 (UAT) — AWAITING USER GO`。** +> **2026-09-19 当前有效结论:`V1.1 RECOVERY PHASE 01~22 CLOSED / PHASE 23 CLOSEOUT: BATCH 1-3 DONE (E2E SCENARIOS + INV-011 + CODE-LEVEL DEBTS CLEARED, 712 TESTS GREEN) / HORIZONTAL HARDENING DONE / UI REDESIGN ACCEPTED BY USER / STOPPED BEFORE PHASE 24 (UAT) — AWAITING USER GO`。** > -> 阶段 0(在途收口)、阶段 1(小程序 C 组 + discover 筛选重设计)、阶段 2(管理端 Vue 新框架适配)、阶段 3(CapabilityService 独立化)、阶段 4(双端总验收)全部完成。三端构建通过、**13/13 契约全绿**(阶段 4 验收时点值;当前 UI 契约门禁为 **18/18**)、核心 11 页面**全部 TS-only(11/11)**。**UI 重设计首批 11 页已于 2026-09-16 通过用户验收(结论:基本达标)**;`/me/*` 前后端契约同轮收敛,17 个 404 调用已恢复。**Phase 08(Like / Match / Block)、Phase 09(Text Chat)、Phase 10(Image & Chat Safety)、Phase 11(Notification)、Phase 12(Relationship Progress)、Phase 13(公益红娘转介)、Phase 13A(婚恋咨询与婚前辅导)、Phase 14(多类型公益活动)、Phase 15(活动报名、审核与签到)、Phase 16(活动互选与双方开启沟通确认)、Phase 17(举报与风控)、Phase 18(申诉)、Phase 19(统一运营后台 + 用户端公益服务页面)、Phase 20(Analytics 数据统计与管理驾驶舱)复验已关闭**,十四轮共修复 130+ 处真实缺陷(含 3 处隐藏编译缺陷),并各自补齐测试保真度与守卫。**Phase 21、22 复验已关闭(2026-09-18)**;**Phase 23 为「部分关闭」(2026-09-18)** —— 已清除 44 个 `pass` 空壳与 14 个只断言常量的假不变量测试,新增 4 个经负向注入验证的真实行为守卫与空壳阻断闸门,后端回归 655 全绿;但 **E2E 进入 CI 因需「活栈供给方式」基础设施决策而列为遗留,故不宣布「失败为零可进入 UAT」**。**Phase 23B(E2E 测试基建重建,33→49 passed)、HTTP 语义检修(失败响应携带真实状态码)、幂等键检修(`Idempotency-Key` 30 端点落地,V045/V046)均已于 2026-09-18 完成**,后端全量回归 **669 / 0 failures / 0 errors / 3 skipped**。**管理端入口已收敛到 `/admin/` 子路径(vite base + router base + 三处 nginx 接线),staging 端口 13521;UI 契约门禁 18/18 全绿(第 15~18 项为 2026-09-19 新增)。Phase 24(UAT)启动需用户确认。** **2026-09-19 收尾推进(批 2/3)**:Phase 23 Task 2.1(互选 8 + 预约 8 场景真实实现,本机 E2E **65 passed**,负向注入 2 轮精准变红)与 Task 2.2(INV-011 显式行为守卫 9 用例 + 两次负向注入)完成;批 3 处置 Phase 21/22 遗留——隐私设置接真实落库(**V047** 补列 + upsert 修复,守卫 8 用例含解析小程序源码的契约守卫)、5 个死开关 + 2 个私有桶死配置移除(产品裁定)、`PUT /feature-flags` 真持久化(**V048** `feature_flag_overrides`,守卫 11 用例)、补 5 个「只有声明无 SQL」的 Mapper 方法并新增 Mapper 绑定守卫。回归基线 **678**(2026-09-19 实测;此后新增守卫,静态 @Test 计 700,批 3 代码项完成后统一复测)。 +> 阶段 0(在途收口)、阶段 1(小程序 C 组 + discover 筛选重设计)、阶段 2(管理端 Vue 新框架适配)、阶段 3(CapabilityService 独立化)、阶段 4(双端总验收)全部完成。三端构建通过、**13/13 契约全绿**(阶段 4 验收时点值;当前 UI 契约门禁为 **18/18**)、核心 11 页面**全部 TS-only(11/11)**。**UI 重设计首批 11 页已于 2026-09-16 通过用户验收(结论:基本达标)**;`/me/*` 前后端契约同轮收敛,17 个 404 调用已恢复。**Phase 08(Like / Match / Block)、Phase 09(Text Chat)、Phase 10(Image & Chat Safety)、Phase 11(Notification)、Phase 12(Relationship Progress)、Phase 13(公益红娘转介)、Phase 13A(婚恋咨询与婚前辅导)、Phase 14(多类型公益活动)、Phase 15(活动报名、审核与签到)、Phase 16(活动互选与双方开启沟通确认)、Phase 17(举报与风控)、Phase 18(申诉)、Phase 19(统一运营后台 + 用户端公益服务页面)、Phase 20(Analytics 数据统计与管理驾驶舱)复验已关闭**,十四轮共修复 130+ 处真实缺陷(含 3 处隐藏编译缺陷),并各自补齐测试保真度与守卫。**Phase 21、22 复验已关闭(2026-09-18)**;**Phase 23 为「部分关闭」(2026-09-18)** —— 已清除 44 个 `pass` 空壳与 14 个只断言常量的假不变量测试,新增 4 个经负向注入验证的真实行为守卫与空壳阻断闸门,后端回归 655 全绿;但 **E2E 进入 CI 因需「活栈供给方式」基础设施决策而列为遗留,故不宣布「失败为零可进入 UAT」**。**Phase 23B(E2E 测试基建重建,33→49 passed)、HTTP 语义检修(失败响应携带真实状态码)、幂等键检修(`Idempotency-Key` 30 端点落地,V045/V046)均已于 2026-09-18 完成**,后端全量回归 **669 / 0 failures / 0 errors / 3 skipped**。**管理端入口已收敛到 `/admin/` 子路径(vite base + router base + 三处 nginx 接线),staging 端口 13521;UI 契约门禁 18/18 全绿(第 15~18 项为 2026-09-19 新增)。Phase 24(UAT)启动需用户确认。** **2026-09-19 收尾推进(批 2/3,已全部完成)**:Phase 23 Task 2.1(互选 8 + 预约 8 场景真实实现,本机 E2E **65 passed**,负向注入 2 轮精准变红)与 Task 2.2(INV-011 显式行为守卫 9 用例)完成;批 3 处置 Phase 21/22 遗留——隐私设置接真实落库(**V047** 补列 + upsert 修复,守卫 8 用例含解析小程序源码的契约守卫)、5 个死开关 + 2 个私有桶死配置移除(产品裁定)、`PUT /feature-flags` 真持久化(**V048**,守卫 11 用例)、补 5 个「只有声明无 SQL」的 Mapper 方法并新增绑定守卫;**Task 3.3 四项 + 红娘服务拦截接线完成**(P16-T13 `expires_at` 写入接线、P13A-T31 随访审计、P13A-T33 随访正文风险检测、P04-T10 确认 Onboarding 本地资格早已实现、`checkCanWithdraw` 红娘 blocker 首次生效 + 注销竞态兜底),各项均带真实落库守卫并经负向注入验证。**全量回归 712 / 0 failures / 0 errors / 3 skipped(BUILD SUCCESS,2026-09-19 实测)**;UI 契约门禁 **18/18**。批 3 仅余:数据保留流程(待产品决策)、E2E 入 CI 的 GitHub Actions 实测绿。 最后更新: 2026-09-18 — 分支 `main`(`feat-ui-v11` 保留为冗余锚点) @@ -22,7 +22,7 @@ | 阶段 3 CapabilityService 独立化 | 已完成 | New `capability` 模块:CapabilityService(getCapabilities + 公共判断方法)+ CapabilityController(GET /api/v1/capabilities);HomeApplicationService 完全委托 | | 阶段 4 双端总验收 | **已完成**(2026-09-14) | 三端构建全绿 + 13/13 契约全绿 + 源码健康检查通过;验收报告见 docs/superpowers/plans/2026-09-14-phase4-acceptance-report.md | | Flyway 迁移 | V001~V048 | V028~V048 已纳入 STATUS;V037 为 Phase 12 新增(实体列与生产迁移对齐,23 表 50 列);V038 为 Phase 13 新增(`matchmaker_recommendations.status` + `matchmaker_services.service_type` 的 CHECK 白名单扩展);V039 为 Phase 13A 新增(counseling 幂等键 + 三个 CHECK 白名单显式固化);V042 为 Phase 19 新增(`service_location_announcements` 服务站临时公告表);V043 为 Phase 20 新增(授予 `data_viewer` / `platform_admin` 的 `analytics.view`);V045 为幂等键检修新增(`idempotency_records` 通用幂等表 + 唯一索引 `uk_idempotency_scope`);V046 修正其 `actor_id` 列类型(VARCHAR → uuid);V047 为批 3 隐私设置新增(`allow_activity_invitation` / `show_last_online` 补列,键集与默认值以小程序源码为准,默认值不对称:`show_last_online` 默认 FALSE);V048 为批 3 Flag 持久化新增(`feature_flag_overrides`,`updated_by` 为 uuid 类型) | -| Backend 全量回归 | **已清偿**(最新实测:2026-09-19 **678 / 0 failures / 0 errors / 3 skipped / BUILD SUCCESS**,基线 669 → INV-011 守卫 +9;此后批 3 又新增隐私/Flag/Mapper 守卫,静态 @Test 计 700,批 3 代码项完成后统一复测) | 离线容器(`danyang-match-backend-test`)`mvn -o test` 实测;**2026-09-18 幂等键检修订正后为 669**(HTTP 语义检修 664 → 幂等检修 +5:`GlobalExceptionHandlerTest` 3→6、新增 `IdempotencyDeclarationGuardTest` 2)。历史:2026-09-17 Phase 20 为 648;含 `CanonicalRouteContractTest`、`ChatContractJsonTest`、`MeRouteContractTest`、`DiscoverBlockInvisibilityIntegrationTest`、`ChatPhase09IntegrationTest`、`ChatWebSocketHandlerTest`、`PhotoUploadValidationTest`、`NotificationPhase11IntegrationTest`、`NotificationTemplateTypeGuardTest`、`NotificationPrivacyCopyTest`、`EntityMigrationParityTest`、`RelationshipProgressPhase12Test`、`HomePremaritalGuidancePhase12Test`、`MatchmakerReferralPhase13Test`、`MatchmakerServiceTest`、`ReportAndRiskPhase17IntegrationTest`、`AppealPhase18IntegrationTest`(Phase 18 新增 15 例:申诉真实落库+审计、仅 ban/suspend 可申诉、幂等、**Gate A 通过只解除目标处置**、**Gate B 拒绝维持原处置**、原子认领唯一赢家、二次处理被拒、escalate 后可再决策、appealType 白名单/一致性/缺省推导、证据字段映射、软删过滤、Feature Flag 关闭拦截)、`MetricCatalogGuardTest`(11)、`AnalyticsMetricsPhase20IntegrationTest`(21)、`AnalyticsSoftDeleteGuardTest`(4)、`AnalyticsPermissionGrantTest`(6)、`LocalEligibilityStatusVocabularyGuardTest`(9)、`ApiResponseCodeHttpStatusTest`(6)、`SecurityPathCoverageTest`(2)、`IdempotencyDeclarationGuardTest`(2) | +| Backend 全量回归 | **已清偿**(最新实测:2026-09-19 **712 / 0 failures / 0 errors / 3 skipped / BUILD SUCCESS**;基线 700 → 批 3 收尾 +12:`MeStatusLocalEligibilityGuardTest` 2、`ActivityMutualConsentServiceTest` +2(P16-T13 expires_at 接线守卫,负向验证恰 2 红)、`CounselingFollowupAuditAndRiskGuardTest` 4(随访审计+风险检测)、`MatchmakerWithdrawBlockerGuardTest` 4(红娘注销拦截)) | 离线容器(`danyang-match-backend-test`)`mvn -o test` 实测;**2026-09-18 幂等键检修订正后为 669**(HTTP 语义检修 664 → 幂等检修 +5:`GlobalExceptionHandlerTest` 3→6、新增 `IdempotencyDeclarationGuardTest` 2)。历史:2026-09-17 Phase 20 为 648;含 `CanonicalRouteContractTest`、`ChatContractJsonTest`、`MeRouteContractTest`、`DiscoverBlockInvisibilityIntegrationTest`、`ChatPhase09IntegrationTest`、`ChatWebSocketHandlerTest`、`PhotoUploadValidationTest`、`NotificationPhase11IntegrationTest`、`NotificationTemplateTypeGuardTest`、`NotificationPrivacyCopyTest`、`EntityMigrationParityTest`、`RelationshipProgressPhase12Test`、`HomePremaritalGuidancePhase12Test`、`MatchmakerReferralPhase13Test`、`MatchmakerServiceTest`、`ReportAndRiskPhase17IntegrationTest`、`AppealPhase18IntegrationTest`(Phase 18 新增 15 例:申诉真实落库+审计、仅 ban/suspend 可申诉、幂等、**Gate A 通过只解除目标处置**、**Gate B 拒绝维持原处置**、原子认领唯一赢家、二次处理被拒、escalate 后可再决策、appealType 白名单/一致性/缺省推导、证据字段映射、软删过滤、Feature Flag 关闭拦截)、`MetricCatalogGuardTest`(11)、`AnalyticsMetricsPhase20IntegrationTest`(21)、`AnalyticsSoftDeleteGuardTest`(4)、`AnalyticsPermissionGrantTest`(6)、`LocalEligibilityStatusVocabularyGuardTest`(9)、`ApiResponseCodeHttpStatusTest`(6)、`SecurityPathCoverageTest`(2)、`IdempotencyDeclarationGuardTest`(2) | | 路由/字段契约收敛 | **已完成**(2026-09-15) | 字段:会话 `target*` + `sentAt` + `relationStatus`(commit `687a156`);路径:采用 2026-09-14 canonical(`/likes` `/passes` `/blocks` `/matches`,缘分保留 `/relations/fate/*`),旧路径与 `success` 桩实现已移除;裁决由 `CanonicalRouteContractTest` 锁定 | | `/me/*` 路径族 | **已完成**(2026-09-16) | 小程序按 REST 规范(§16 / §22-§40 / §80 / §83-§84)调用 `/me/*`,后端此前**无 `/me` 基路径**致 17 个调用 404。新增 `MeController` 委托既有 service 暴露规范路径,旧路径全部保留,小程序三条历史写法(`/me/privacy-settings`、`/me/photos/{id}/main`、`/me/appeals`)一并兼容;由 `MeRouteContractTest` 锁定 | | Admin Web | **验证通过** | 2026-09-14 阶段 4:vue-tsc ✅、vite build ✅ 11.68s;18 modules 齐全;壳层+工作台通过参考图 QA | @@ -30,7 +30,7 @@ | UI 契约测试 | **18/18 通过**(2026-09-19) | 统一执行器 `scripts/run-ui-contracts.mjs`,**已接入 CI**(job `ui-contracts`);历史:2026-09-16 为 13 项,此后新增端口一致性与 `/admin/` 子路径守卫(14 项);2026-09-19 连补 4 项(15~18)—— WXML 结构(两页多 `` 实际编译失败)、私有方法调用(`this._x()` 无定义致所有请求 Promise 永不 settle)、组件 WXSS 违规选择器、api.js 请求层行为契约 | | Git 工作区 | **已清零** | 阶段 0~4 共 24+ commit 可追溯;`git status --porcelain` 0 行 | | 核心待清债务 | 0 项 | 已全部清偿:3 页 JS→TS 迁移、backend 全量回归(420 tests)、DevTools 真机截图留档(2026-09-14)、`/me/*` 路径族收敛(2026-09-16)、实体↔生产迁移漂移修复(V037/V038/V039,2026-09-16/17) | -| UAT / RC / Production | **Phase 01~22 复验关闭;Phase 23 收尾进行中;停在 Phase 24(UAT)门前** | 后端 **678+ / 0 failures / 0 errors / 3 skipped**;E2E 本机活栈 **65 passed**;UI 契约门禁 **18/18**;管理端入口收敛至 `/admin/` 子路径(staging 13521);HTTP 语义 + 身份收敛 + 幂等键三轮横向加固完成。**Phase 24 启动需用户确认** | +| UAT / RC / Production | **Phase 01~22 复验关闭;Phase 23 收尾批 1~3 完成;停在 Phase 24(UAT)门前** | 后端 **712 / 0 failures / 0 errors / 3 skipped**;E2E 本机活栈 **65 passed**;UI 契约门禁 **18/18**;管理端入口收敛至 `/admin/` 子路径(staging 13521)。**Phase 24 启动需用户确认** | > **下一阶段计划(唯一)**:`docs/superpowers/plans/2026-09-18-phase23-closeout-and-uat-readiness.md` > —— 批 1 快速收尾(ui-tests 接入 CI)/ 批 2 Phase 23 剩余(E2E 实现 + CI 串联,**需基础设施决策**)/ @@ -57,7 +57,7 @@ | 1.1.0-rc.13 | 2026-09-18 | Phase 21 复验关闭(账户生命周期,6 处缺陷:CLOSED 可登录、注销 TODO 桩 ×2、匿名化死代码等)+ Phase 22 复验关闭(Feature Flag,D-22-A/B 修复;T01~T05 死配置如实登记);全量回归 **657 tests** 全绿 | | 1.1.0-rc.14 | 2026-09-18 | Phase 23 **部分关闭**(44 个 `pass` 空壳清除、4 个真实 INV 行为守卫、空壳阻断闸门);Phase 23B E2E 基建重建(conftest + seed + CI e2e job,本机活栈 33 passed);全量回归 **655 tests** 全绿 | | 1.1.0-rc.15 | 2026-09-18 | HTTP 语义检修(105 处错误响应携带真实状态码,回归 664)→ 身份收敛(运营身份禁入用户端 + PathPattern 守卫)→ 幂等键检修(`Idempotency-Key` 30 端点落地,V045/V046,前端 25 处调用点修正,E2E 49 passed);admin 端口收敛 13520(vite / 文档 / 生产 compose 三处一致);全量回归 **669 / 0 / 0 / 3** 全绿 | -| 1.1.0-rc.16 | 2026-09-19 | 批 2/3 收尾推进:E2E 互选 8 + 预约 8 场景真实实现(本机活栈 **65 passed**,负向注入 2 轮)+ INV-011 显式守卫(9 用例);隐私设置接真实落库(V047)+ 5 死开关/2 死配置移除(产品裁定)+ `PUT /feature-flags` 真持久化(V048)+ 5 个无 SQL Mapper 方法补齐并新增绑定守卫;管理端入口收敛 `/admin/` 子路径 + staging 13521;UI 契约门禁 **14→18**(WXML 结构 / WXSS 选择器 / api.js 行为 / miniapp 请求层,并修复小程序 P0 请求层崩溃);回归基线 **678**(静态 @Test 700,批 3 完成后复测) | +| 1.1.0-rc.16 | 2026-09-19 | 批 2/3 收尾完成:E2E 互选 8 + 预约 8 场景真实实现(本机活栈 **65 passed**,负向注入 2 轮)+ INV-011 显式守卫(9 用例);隐私设置接真实落库(V047)+ 5 死开关/2 死配置移除(产品裁定)+ `PUT /feature-flags` 真持久化(V048)+ 5 个无 SQL Mapper 方法补齐;**Task 3.3 四项 + 红娘服务拦截接线**(互选 `expires_at`、随访审计、随访风险检测、Onboarding 确认、注销 blocker 接线 + 竞态兜底);管理端入口收敛 `/admin/` 子路径 + staging 13521;UI 契约门禁 **14→18**(WXML 结构 / WXSS 选择器 / api.js 行为 / miniapp 请求层,并修复小程序 P0 请求层崩溃);全量回归 **712 / 0 / 0 / 3** 全绿(B-9 命令实测) | | 1.1.0-rc.16 | 2026-09-18 | 管理端入口收敛(承接 rc.15 的端口收敛):staging admin 端口 3001 → **13521**(保持「生产 + 1」,同步 `run-uat.sh` 默认入口);管理端产物改为 **`/admin/` 子路径部署**(vite 构建 base + router history base + 三处 nginx 接线统一为「不剥离前缀」转发);**修复生产 nginx `/admin/` 的假成功**——原 `alias` 指向 `nginx:alpine` 自带默认页目录,访问返回 200 + nginx 欢迎页(比 404 更难发现),已改为 `upstream admin_web` + `proxy_pass` 并以真实两跳容器实测;补修 `run-uat.sh` 被截断的尾部(原文件语法不完整、无法运行)并把 `ADMIN_URL` 接到管理端可达性实测;品牌资源引用统一走 `src/brand.ts` 的 `BASE_URL` 拼接(原 5 处写死根路径,子路径下会裂图),favicon 由不存在的 `/favicon.svg` 改为存在的品牌标;UI 门控 **14/14 绿**,新增端口/入口断言 6 条(全部经负向注入验证) | | 1.1.0-rc.17 | 2026-09-19 | **小程序 WXML 结构缺陷修复 + 补第 15 项门禁**:微信开发者工具报 `service-history.wxml` `get tag end without start`,实测 **2 个页面**各多一个 ``(`service-history` / `service-program`,单行压缩写法,已随更早提交入库)→ 修复后 86 个 WXML 结构全部自洽。**根因是门禁覆盖盲区**:既有 14 项全是「源码内容/清单断言」,没有一条会解析 WXML,故 14 绿与「小程序能不能编译」无关。新增 `scripts/lib/wxml-structure.mjs`(引号状态机扫描器)+ `scripts/check-wxml-structure.mjs`(CLI)+ `ui-tests/wxml-structure-contracts.mjs`(守卫,含 3 组内置自检样例,其中正向样例**故意在属性值内放 `>`** —— 早期用懒惰正则实现时此处是假阳性来源)。`MIN_GUARDS` 14 → 15。负向验证三项:注入「多余闭合 / 未闭合」→ **退出 1 且只报坏文件**;`UI_GUARDS_MIN=99` → 正确拒绝报绿;CLI 直扫坏目录 → 退出 1。基线 **PASS 15/15**。**未跑**:微信开发者工具真实编译(本机无该环境),仅以结构判据断言 | | 1.1.0-rc.18 | 2026-09-19 | **小程序两处运行期/编译期缺陷 + 再补 3 项门禁(15 → 18)**。① **P0 运行期崩溃**:`utils/api.js` 成功回调把 `releaseIdempotencyKey` 误写成 `this._releaseIdempotencyKey`(多一个下划线),且调用位于 `resolve()` **之前** → 抛错使 **每一个成功请求的 Promise 永不 settle** → 所有页面永远停在 loading + `App.onError` 刷屏。修复方式不仅是改名:改为**先 `resolve` 再释放**且释放自身 try/catch 兜底 —— 收尾动作不允许挡在响应路径上。② 组件 `recommend-card/index.wxss` 使用标签选择器 `.compact-like image`(组件 wxss 只允许类选择器)→ 改为 `.compact-like__icon` 并同步 WXML 类名。③ 新增门禁:`wxml-structure-contracts`(第 15)、`miniapp-self-method-contracts`(第 16,判据先自证假阳性 —— 首版正则漏认 `this._x = 值` 形式误报 3 个页面)、`wxss-component-selector-contracts`(第 17)、`miniapp-api-client-behavior`(第 18,**桩掉 `wx.request` 真跑 api.js** 的成功/失败/幂等键释放/收尾容错 4 组行为断言)。负向验证:注入「未定义私有方法」「标签选择器」「多余闭合标签」均精准变红且合法样例不被误报;`UI_GUARDS_MIN=99` 拒绝报绿。基线 **PASS 18/18**。**未验证**:微信开发者工具真实编译与真机渲染(本机无该环境) | @@ -476,7 +476,7 @@ MinIO: localhost:9003 (凭证由本地环境变量提供) | 跨模块防线(既有) | ✅ 推荐引擎 / 匹配资格 / Capability 已拒绝非 `NORMAL`(含 `CLOSED`) | | 后端全量回归 | **650 tests / 0 failures(起点 648,净 +2)** | | 报告 | `docs/Phase-21-V11-Recovery-Completion-Report-2026-09-18.md` | -| 遗留(2026-09-19 更新) | ① 红娘服务进行中拦截:**原「数据模型无 `matchmaker_services` 表」判定已被实测推翻**(表由 V009 创建,Mapper/Service 均在)——属**接线缺陷**(`checkCanWithdraw` 硬编码 0 + `notifyMatchmaker` 空转),无需产品裁定,待接线清偿;② 数据保留"配置+人工审核"删除流程属产品决策未实现;③ ~~隐私设置接口仍为 TODO 桩~~ **已关闭(2026-09-19)**:V047 补列 + upsert 修复 + 桩改委托 `PrivacyService` 真实读写,守卫 8 用例(含解析小程序源码的契约守卫),负向验证通过 | +| 遗留(2026-09-19 更新) | ① 红娘服务进行中拦截:~~原「数据模型无 `matchmaker_services` 表」判定~~(已被实测推翻,表由 V009 创建)→ **已接线清偿**:`checkCanWithdraw` 接真实计数(blocker 首次生效)+ `terminateActiveMatchmakerServices` 竞态兜底(不发通知,规避 notifications→users FK),守卫 4 用例;② 数据保留"配置+人工审核"删除流程属产品决策未实现(**批 3 唯一余项**);③ ~~隐私设置接口仍为 TODO 桩~~ **已关闭(2026-09-19)**:V047 补列 + upsert 修复 + 桩改委托 `PrivacyService` 真实读写,守卫 8 用例 | ### Phase 22 — 部署运维配置扩展(Feature Flag)✅(KEEP-VERIFY 复验关闭,2026-09-18) | 项 | 复验结论 |