新增 docs/幂等键检修报告-2026-09-18.md:记录双向断裂(后端零处读取该头、
前端 Date.now 每次生成新键)、五处审计发现、机制设计与五个取舍
(先占位后执行 / 重放 / 失败释放占位 / 孤儿占位接管 / 作用域含 actor_id)、
列类型不变量扫描、E2E 与守门证据、三处同形状问题的连带修复。
同轮勘误:
- docs/HTTP语义检修报告-2026-09-18.md:其中「Idempotency-Key 已支持」一句
在写下时不成立(后端当时零处读取),已显式标注勘误并保留原文,
以免「结论先于核实」被当作既成事实继续引用。
- docs/api/API_INVENTORY.md:原记载 POST /activities/{id}/interests
「提交活动互选」,后端从未实现(Phase 16 已并入 /feedback 的
interestTargetUserIds),按真实端点重列并附勘误说明。
docs/STATUS.md:迁移范围更新为 V001~V046;回归行更新为 669 / 0 / 0 / 3;
新增「幂等键检修」章节;补登 HTTP 语义检修章节在两份文档中的缺失条目。
docs/JIRA_BACKLOG.md:补登 HTTP 语义检修与幂等键检修两行
(此前均未登记)。
877 lines
77 KiB
Markdown
877 lines
77 KiB
Markdown
# 善缘丹阳 V1.1 Jira Backlog
|
||
|
||
> V1.0 Phase 01~26 基础 + V1.1 增量任务合并基线
|
||
> 版本:v1.1.0-dev | 最后更新:2026-09-08
|
||
|
||
> **2026-09-17 Phase 15 复验关闭:** EPIC-P15 已完成。复验发现两处**必崩级**缺陷,均为「生产一直存在、
|
||
> 测试库从未约束」的同族根因:① **签到码一生成即作废** —— `generateCheckinToken` 把 token 写入 Redis
|
||
> 值 `"used"`,而 `scanCheckin` 见到 `"used"` 立即拒绝,扫码签到 **100% 失败**;
|
||
> ② **取消后永远无法再报名** —— 生产 `UNIQUE(activity_id, user_id)` 一直存在,而重报名走 `INSERT`,
|
||
> 测试库缺该唯一键故零覆盖。共修复 **16 处缺陷 + 3 处测试保真度缺陷**,新增 V040
|
||
> `activity_staff_assignments` 落实「服务站操作员只能操作指定活动」(INV-020)。
|
||
> 证据:`docs/Phase-15-V11-Recovery-Completion-Report-2026-09-17.md`。
|
||
>
|
||
> **2026-09-17 Phase 16 复验关闭:** EPIC-P16-V11 已完成。复验发现活动互选**核心 Gate 缺陷**——双确认后**根本不建 Match/会话**(INV-014/015),
|
||
> 且 Phase 15 提交态引用未定义的 `matchMapper.reopenEpisode` → **整个模块从未编译通过**,"474 绿"是假象。已统一双实现到
|
||
> `RelationshipService.confirmActivityInterest`,修复 **7 处缺陷 + 1 处隐藏编译缺陷 + 1 处测试保真度缺陷**,新建
|
||
> `ActivityMutualConsentServiceTest`(7 用例),并经负向验证证明守卫有牙。新增 V041 `expires_at`+`match_id`。
|
||
> 证据:`docs/Phase-16-V11-Recovery-Completion-Report-2026-09-17.md`。
|
||
>
|
||
> **2026-09-17 Phase 17 复验关闭:** EPIC-P17-V11 已完成。复验发现风控/举报整条真实 DB 路径因测试库缺 `reports`/`risk_events`/`risk_actions` 三表而**零覆盖**,`ReportServiceTest` 全是 `assertTrue(true)` 假绿;且敏感访问(查看他人风险画像/举报)此前**无审计**(违反 AGENTS.md #8 默认拒绝 + 查看需审计);另修复审计缺 `ip`/`userAgent`、`findByUserId` 未过滤软删、人工标记无审计,以及 `javax`→`jakarta` 隐藏编译缺陷与 `risk_events` 漏 `updated_at` 列。共修复 **6 处真实缺陷**,补齐三表并新增 `ReportAndRiskPhase17IntegrationTest`(7 例),负向验证证明守卫有牙。全量回归 **488 tests 全绿**。
|
||
> 证据:`docs/Phase-17-V11-Recovery-Completion-Report-2026-09-17.md`。
|
||
>
|
||
> **2026-09-17 Phase 18 复验关闭:** EPIC-P18-V11 已完成。复验发现申诉整条真实 DB 路径因测试库缺 `appeals` 表而**零覆盖**,`AppealServiceTest` 9 例中 6 例是 `assertTrue(true)` 假绿(覆盖的恰是 Gate 四条不变量);且 `escalateAppeal` 向 `operatorId` 发用户通知会撞 `notifications.user_id → users(id)` FK(operators 与 users 不同表)→ PG 上升级 100% 失败;`appealType` 未校验生产 `chk_appeal_type` 白名单。另修复 escalated 死胡同、`processAppeal` 先读后写并发竞态、三处查询漏软删过滤、硬编码 `resolved`、证据字段契约。共修复 **8 处真实缺陷**(含 1 处必崩级测试盲区、2 处「只在 PG 上炸」),补 `appeals` 表并新增 `AppealPhase18IntegrationTest`(15 例)、删除假绿 9 例,负向验证证明 Gate 守卫有牙。全量回归 **494 tests 全绿**;admin-web `vue-tsc` EXITCODE=0。
|
||
> 证据:`docs/Phase-18-V11-Recovery-Completion-Report-2026-09-17.md`。
|
||
>
|
||
> **2026-09-17 Phase 19 复验关闭:** EPIC-P19 已完成。复验不采信任何「历史 ✅」,逐条核对运行时路径与生产约束,查出并修复 **25 处真实缺陷**。高价值项:①**服务站「临时公告」整条不可达** —— `ServiceLocationAnnouncementService` 与 V042 表都已存在,但**全仓零端点**,后台与小程序都拿不到(D20);②**服务站 `create/update` 越权写** —— `@PreAuthorize("service_location.view")` 挂在**类**上,V015 下发的 `service_location.manage` 是**从未被使用的死权限**,只读角色可直接改站点(D21);③该控制器**未纳入** `OperatorEndpointPermissionCoverageTest` 扫描清单,导致 D21 长期隐形(D22);④Banner 校验失败抛裸 `RuntimeException` → **500**(应 400)+ 软删 Banner 仍上首页(D2/D3);⑤Content「发布」死路(后台复用只返回 published 的公开接口)+ 分类停用不可恢复(D5/D6);⑥ServiceProgram 审批死路 / 草稿泄露 / 成员数恒 0 / 退出未实现 / 重复申请撞唯一键(D10~D14);⑦测试库缺 `content_categories` 与 `service_location_announcements` → 对应路径**零覆盖**(D9/D23);⑧预约 IDOR(D18);⑨`MigrationValidationTest` 基线未跟进 V042(D24)。新增守卫:`ServiceLocationAnnouncementPhase19IntegrationTest`(24) / `ServiceLocationControllerPermissionContractTest`(5) / `ServiceLocationAnnouncementConstraintParityTest`(5,生产 DDL↔测试库↔后端白名单↔后台标签四方一致);`V11PermissionMatrixContractTest` 由硬编码 V015+V029 改为扫描全部迁移。负向验证:注入 3 处缺陷(移除软删过滤 / 移除测试库 CHECK / 写端点降级为 `view`)→ **4 个用例精准变红且无无关失败**,还原后 `NEG-VAL` 残留 0。后端 **602 tests 全绿**;admin-web `vue-tsc` EXIT=0 + `vite build` EXIT=0;小程序 `tsc --noEmit` EXIT=0;ui-tests 14/14 PASS。
|
||
> 证据:`docs/Phase-19-V11-Recovery-Completion-Report-2026-09-17.md`。
|
||
>
|
||
> **2026-09-17 Phase 20 复验关闭:** EPIC-P20 已完成。`STATUS.md` 早已把 Phase 20 标为「✅ 已完成」,
|
||
> 复验起点是 `AnalyticsController` 15 端点 + `AnalyticsService` 546 行**确实存在**,
|
||
> 但其中同时含有**硬编码 0**、**占位死代码**、**字母级口径造假**、**全员 403**、**假绿测试**。
|
||
> 逐条核对运行时路径与生产约束后修复:①**口径造假** —— 实名人数用 `user_profiles.profile_status != 'rejected'`
|
||
> 冒充(把"资料还在填"算成已实名);Chat Started 直接数会话行数(系统通知计入);
|
||
> Match 不分来源(10 对互选被当 10 对成功引用);**Banner 曝光/点击硬编码 0**;②**死代码** ——
|
||
> 活动漏斗**全部硬编码 0**(不是没数据,是根本没有查询)+ 一行把"用户数"当"活动数"的死代码;
|
||
> ③**系统性软删缺陷(D12)** —— `BaseEntity.deletedAt` 无 `@TableLogic`、全局无逻辑删除配置,
|
||
> `selectCount` 把**软删数据全部计入统计且无任何报错**,修复 45 处统计调用(**2 轮复验,首轮漏扫 5 处次级路径**);
|
||
> ④**权限授予脱节(Gate ⑩)** —— `data_viewer` 角色被定义却**从未授权**(空壳角色),
|
||
> `platform_admin` 因 `id >= '20000000-…'` 漏掉 V1.0 老权限段 →
|
||
> **整个模块除 super_admin 外全员 403**(含专为它设计的 `data_viewer`);⑤**三套独立实现** ——
|
||
> Dashboard/用户漏斗/专项页各实现一遍同名指标且互不相同、字段名还不一致(`verifiedUsers` vs `verifiedCount`);
|
||
> ⑥**假绿测试** —— `AnalyticsServiceTest` = 5×`assertTrue(true)`(零断言)。
|
||
> 建立指标字典(`MetricCatalog` 36 指标 × 12 字段 + `docs/ANALYTICS_METRICS.md`)与统一口径层
|
||
> `AnalyticsMetricsCalculator`;新增 V043 打通 `analytics.view` 授权(刻意不授予 `organization_admin` ——
|
||
> 相关表无组织维度,无范围的全量数据即越权);新增守卫 `MetricCatalogGuardTest`(11) /
|
||
> `AnalyticsMetricsPhase20IntegrationTest`(21) / `AnalyticsSoftDeleteGuardTest`(4,**结构性**约束:统计包内
|
||
> 每处 Mapper 统计调用必须显式含 `isNull(..)`,含防假绿下界) / `AnalyticsPermissionGrantTest`(6)。
|
||
> **跨阶段发现(本轮已修 X1~X3)**:`AccountLifecycleService` 注销时把 `user_identities` 状态域的 `'failed'`
|
||
> 写入本地资格表 → 违反生产 `V017 chk_elig_verify_status` → **真实 PG 上 `closeAccount` 事务回滚、
|
||
> 账号注销 100% 不可用**(负向验证实测报 `DataIntegrityViolation`);`checkCanWithdraw` 的资格拦截用
|
||
> `submitted`/`pending`(该表永不可能出现的值)→ **死代码**;测试库补 `chk_elig_type`/`chk_elig_verify_status`
|
||
> 后立即暴露 `ActivityPhase14Test` 夹具违规(`household` → `household_registration`)。新增
|
||
> `LocalEligibilityStatusVocabularyGuardTest`(9)。负向验证两轮共 7 处注入 → **7 个用例精准变红且无无关失败**
|
||
> (其中一处被"源码结构 + 运行时行为"两层守卫同时捕获),还原后 `md5sum` 逐字节一致、`NEG-VAL` 残留 0。
|
||
> 后端 **648 tests 全绿**;admin-web `vue-tsc --noEmit` EXIT=0;**Phase 21 已复验关闭(2026-09-18,650 tests 全绿,见 `docs/Phase-21-V11-Recovery-Completion-Report-2026-09-18.md`)**
|
||
> 证据:`docs/Phase-20-V11-Recovery-Completion-Report-2026-09-17.md`。
|
||
|
||
> **2026-09-16 状态校正:** Phase 07 UI 已按 2026-09-13 规格重新实现,**首批 11 页于 2026-09-16 通过用户验收(结论:基本达标)**,本文件此前"视觉否决/REOPENED"口径随之关闭。
|
||
>
|
||
> **2026-09-17 Phase 14 复验关闭:** EPIC-P14 已完成。复验发现 activity 模块存在**必崩级空壳**——
|
||
> `ActivityMapper.countRemainingCapacity` **既无 `@Select` 也无 XML**,而 `ActivityService` 调用的
|
||
> 正是它 → 活动详情/报名/审核三条路径必然抛 `Invalid bound statement`。修复 **11 处后端缺陷**:
|
||
> **D1(Critical,生产故障)** Mapper 空壳致三条路径必崩;
|
||
> **D2(Critical,并发)** 报名与审核「先读后写」→ 并发**超卖**,改单条原子 SQL;
|
||
> **D3(High,生产故障)** `activityType`/`orgRole` 未校验生产 CHECK 白名单(只在 PG 上炸);
|
||
> **D4(High,契约)** `ActivityListItemDTO` 无 `activityType` → 小程序分类 Tabs 恒无数据;
|
||
> D5 男女人数为 `approvedCount/2` 编造;D6 年龄门槛为 TODO 空壳;D7 `registration_policy` 只写不读;
|
||
> **D8 `POST /operator/activities` 丢弃类型/多组织/分组且把 `organizer_org_id` 错设为操作者 userId**;
|
||
> D9 三个运营写入端点错挂用户端控制器(双实现);D10 软删活动与缺字段致 NPE/500;
|
||
> D11 DTO 缺 `registeredCount`/`status`/`coverFileId`/`description`。
|
||
> 另有 **3 处前端契约缺陷**(小程序分类 code `classroom` 不在白名单、卡片读 7 个不存在的字段、
|
||
> admin-web 无活动管理页 → 新增 `ActivityManagementView.vue` 动态表单)与
|
||
> **2 处测试保真度缺陷**(2 条 `assertTrue(true)` 占位假绿;测试库缺 V023 列与三张表、activity 五表零覆盖)。
|
||
> 证据:`docs/Phase-14-V11-Recovery-Completion-Report-2026-09-17.md`。**Phase 15 需用户确认后启动。**
|
||
>
|
||
> **2026-09-17 Phase 13A 复验关闭:** EPIC-P13A 已完成。复验发现 counseling 模块存在**双实现**——
|
||
> 线上权威 `CounselingService`(167 行)**零测试**,唯一被测的 `CounselingServiceApp`(280 行)是
|
||
> **孤儿类**(无注入点、无 HTTP 端点可达,生产永不执行)→ 已合并并删除孤儿类。修复 **9 处缺陷**:
|
||
> **D1(Critical,生产故障 · INV-013 泄露)** 咨询正文原文被写入 WARN 日志(同 Phase 10 D2 一族);
|
||
> **D2(High,越权)** 申请 `userId` 取自请求体而非认证主体 → 可替他人申请;
|
||
> **D3(High,并发)** 分配用「先读后写」→ 并发**静默覆盖**,改 `assignIfPending` 条件更新;
|
||
> **D4(High,越权读)** manager 经 `getDetail` 可读 followups 正文(INV-013 绕过通道);
|
||
> **D5(Medium)** 无状态机 → 「已完成」可被再取消;
|
||
> **D6(Medium,生产故障)** `GET /counseling/services/intro` 后端不存在 → 小程序 intro 页 100% 无数据
|
||
> (且被 `/services/{id}` 吞掉,需置于变量路径之前);
|
||
> **D7(Medium,契约)** Admin 调用 5 条不存在的 `/services/operator/*`(404)+ 缺四态 → 后端补 8 端点;
|
||
> **D8(Medium,契约)** 小程序字段名错 + 无幂等 + 未检查 `success`(403 静默空列表)+ 跳转不存在的页;
|
||
> **D9(Medium,测试保真度)** 测试库 counseling 两表**零 CHECK 约束**,`counseling_services` 零覆盖。
|
||
> **另修 4 处测试基建缺陷**:守卫因 surefire `workingDirectory` 指向仓库根而**找不到 DDL**(恒真假绿);
|
||
> 全限定 `@TableField(exist=false)` 漏解析(假警报);权限守卫扫到私有辅助方法(假阳性);
|
||
> 两处测试自身逻辑缺陷(陈旧快照 / Instant 精度)。
|
||
> **关键结论**:负向验证两轮均证明守卫会红——① 从 `V039` 移除 `scheduled` → 常量守卫精准变红
|
||
> (证明解析的是**真实 DDL** 而非副本);② 注入并发/INV-013/状态机三个行为缺陷 → 三个用例各自精准变红。
|
||
> 迁移基线 38 → 39(新增 `V039`)。证据:`docs/Phase-13A-V11-Recovery-Completion-Report-2026-09-17.md`。
|
||
> 后端全量 **420 tests / 0 failures / 0 errors / 3 skipped / BUILD SUCCESS**(4 分 49 秒)。
|
||
> **Phase 14 需用户确认后启动。**
|
||
>
|
||
> **2026-09-16 Phase 13 复验关闭:** EPIC-P13-V11 已完成。复验中发现并修复 7 处缺陷——
|
||
> **D1(Critical,生产故障)** `matchmaker_recommendations.status` 代码写入 `liked`/`passed`/`confirmed_mutual`,
|
||
> 而生产 `V009 chk_rec_status` 只允许 `pending_view/viewed/responded` → **真实 PG 上用户接受/跳过推荐必崩**;
|
||
> **D2(Critical,生产故障)** 控制器缺省 `serviceType="recommendation"` 不在 `chk_matchmaker_service_type` 白名单
|
||
> → **提交红娘服务必崩**。两者同修于新增 `V038__align_matchmaker_status_constraints.sql`。
|
||
> **D3(High,越权写)** `recommendPartner` 无归属校验 → 任意红娘可替非本人负责的服务发起推荐、可推荐给自己。
|
||
> **D4(High,越权读)** `getServiceDetail` 无归属校验且返回完整用户资料 → 任意红娘可读任意用户敏感详情。
|
||
> **D5(High,越权写)** `ReferralService` 的 `userId` 取自请求体且**零授权校验** → 可替任意用户发起转介。
|
||
> **D6(High,生产故障)** `MatchmakerFollowupMapper.findByServiceId` 无 `@Select` → `Invalid bound statement`,
|
||
> `getServiceDetail` 必崩(**本轮新增测试首次暴露**)。**D7(Medium)** admin-web 5 处 API 契约缺口(404 / C 端端点误用)
|
||
> + 小程序缺转介服务层 → 后端补 2 个运营端端点、前端改路径、小程序新增 `referralService.js`。
|
||
> 测试库补 3 张 matchmaker 表(`EntityMigrationParityTest` 移入必需集),迁移基线 37 → 38。
|
||
> **关键教训**:首版常量守卫**硬编码白名单副本**,注入 D1 缺陷后**仍全绿** → 重写为**直接解析 `db/migration/V*.sql`**
|
||
> (按文件名顺序取"最终有效"白名单 + 解析器自检);修正后经**第二轮负向验证**证明会红
|
||
> (`Tests run: 23, Failures: 1, Errors: 2 / BUILD FAILURE`)。删除 3 处假测试占位。
|
||
> 证据:`docs/Phase-13-V11-Recovery-Completion-Report-2026-09-16.md`。**Phase 13A 需用户确认后启动。**
|
||
> 后端全量 **391 tests / 0 failures / 0 errors / 3 skipped / BUILD SUCCESS**(4 分 59 秒)。
|
||
>
|
||
> **2026-09-16 Phase 12 复验关闭:** EPIC-P12-V11 已完成。复验中发现并修复 4 处缺陷——
|
||
> **D1(Critical,生产故障 · 同一族系统性缺陷)** 实体与生产迁移**系统性漂移**:23 张表、50 个列在 `db/migration` 中
|
||
> 根本不存在,而测试库 `schema-h2.sql` 手写了它们 → 全量测试绿 = **假绿**。其中 11 张表属"INSERT 必崩"级
|
||
> (缺 `id`/`created_at`/`updated_at`,被 `AutoFillHandler` 强制填充),含 `matches`(缺 `episode`/`source_id`/
|
||
> `last_activity_at`/`unmatched_by`/`deleted_at`)、`user_preferences`、`permissions`、`roles`、`consent_records`、
|
||
> `risk_events` 等;**真实 PG 上 Match 创建、择偶偏好保存、权限/角色写入、同意记录、风险事件全部失败**。
|
||
> 修复:新增 `V037__align_entity_columns_with_migrations.sql`(幂等 `ADD COLUMN IF NOT EXISTS` + 存量 `episode` 回填)。
|
||
> **D2(High)** `RelationshipService.createMatch` 不写 `episode`/`lastActivityAt`,与 `MatchService` 双路径填充不一致;
|
||
> 且 episode 为 null 时 `m.getEpisode() + 1` 对 `Integer` **自动拆箱抛 NPE**。修复:两路径统一按 AGENTS.md #20 推导 + null 兜底。
|
||
> **D3(High)** 测试库缺 `user_identities` 等 7 张表 → `GET /api/v1/home` 在测试环境 `BadSqlGrammar`,**首页接口零回归覆盖**。
|
||
> **D4(Medium)** Phase 12 计划项 2 实际**未实现**:`getting_to_know` 分支只产出 counseling。修复:补 premarital 引导。
|
||
> 新增永久守卫 `EntityMigrationParityTest`(5 用例,区分"必崩级/潜伏级",经**两轮负向验证**证明会变红);
|
||
> **删除 2 个假测试类**(`RelationshipStatusServiceTest`/`RelationshipStatusServiceDoubleConfirmTest` 的 `assertTrue(true)` 占位)。
|
||
> 后端全量 **371 tests / 0 failures / 0 errors**。
|
||
> 证据:`docs/Phase-12-V11-Recovery-Completion-Report-2026-09-16.md`。
|
||
>
|
||
> **2026-09-16 Phase 11 复验关闭:** EPIC-P11-V11 已完成。复验中发现并修复 3 处缺陷——
|
||
> **D3(Critical,生产故障)** `NotificationService` 全部 10 种通知使用复合 type(`appointment_submitted` /
|
||
> `counseling_assigned` / `le_verified` 等),违反生产 `chk_notification_type`(仅允许短名),
|
||
> 真实 PostgreSQL 上**全部落库失败**,Phase 11 核心交付不可用;测试库未复刻该约束故长期静默;
|
||
> **D1(High)** 通知幂等仅靠 SELECT-then-INSERT 无 DB 兜底 → 新增 `V036` partial unique index;
|
||
> **D2(Medium)** 婚前辅导排期通知零调用 + 管理端排期路径完全不发通知 → 接线并按 service_type 分流。
|
||
> 新增测试 12 用例(含真实调用模板方法的 type 守卫)。后端全量 **346 tests / 0 failures / 0 errors**。
|
||
> 证据:`docs/Phase-11-V11-Recovery-Completion-Report-2026-09-16.md`。**Phase 12 需用户确认后启动。**
|
||
>
|
||
> **2026-09-16 Phase 10 复验关闭:** EPIC-P10-V11 已完成。复验中发现并修复 2 处缺陷——
|
||
> **D1(Critical,生产故障)** `PhotoService.uploadAndSave` 魔数校验因 `new byte[n]` 从不读取流而恒失败,本地资格佐证上传 100% 失败(且 PDF 被 image-only MIME 挡);
|
||
> **D2(Low)** `ChatSafetyService` 把命中的高风险词写入普通日志。
|
||
> 同时**推翻旧报告**「伪装恶意图片被拒(Magic Number 校验)」与「EXIF清理预留(stripExif 占位)」两项声明——后者符号全仓库不存在。
|
||
> 新增 `PhotoUploadValidationTest`(6 用例,`MockMultipartFile` 真走校验链路)并做负向验证。后端全量 **334 tests / 0 failures / 0 errors**。
|
||
> 证据:`docs/Phase-10-V11-Recovery-Completion-Report-2026-09-16.md`。**Phase 11 需用户确认后启动。**
|
||
>
|
||
> **2026-09-16 Phase 09 复验关闭:** EPIC-P09-V11 已完成。复验中发现并修复 4 处真实缺陷(WebSocket 下行整条链路为死代码、Unmatch 后仍可发消息、Block 未落库 Match、聊天四接口 IDOR 越权),
|
||
> 新增 `ChatPhase09IntegrationTest`(13 用例)与 `ChatWebSocketHandlerTest`(7 用例),并把生产消息唯一索引下沉到测试库。后端全量 **328 tests / 0 failures / 0 errors**。
|
||
> 证据:`docs/Phase-09-V11-Recovery-Completion-Report-2026-09-16.md`。
|
||
>
|
||
> **2026-09-16 Phase 08 复验关闭:** EPIC-P08-V11 已完成。复验中发现并修复 3 处真实缺陷(搜索绕过 Block / 详情无 Block 检查 / `matches.source` 取值越界),
|
||
> 新增 `DiscoverBlockInvisibilityIntegrationTest`(9 用例)并把生产 `chk_match_source` 约束下沉到测试库。
|
||
> 证据:`docs/Phase-08-V11-Recovery-Completion-Report-2026-09-16.md`。
|
||
>
|
||
> **2026-09-13 状态校正(历史):** 本文件中的既有 `✅` 是历史开发声明,不再单独作为验收证据。Phase 01~06 已由恢复版 Completion Report 重新举证;Phase 07 仅保留业务测试证据,管理端与小程序视觉已被用户否决并重新打开。Phase 08 暂停,当前先执行 UI 清理与参考图重设计。
|
||
|
||
| 当前执行项 | 状态 | 依据 |
|
||
|---|---|---|
|
||
| Phase 01 项目治理与检查基线 | 已完成 | Git 基线已建立,提交 `b46b48e` |
|
||
| Phase 02 统一认证、RBAC、DataScope | 已完成 | 见 `Phase-02-V11-Recovery-Completion-Report-2026-09-10.md` |
|
||
| Phase 03 实名认证增量预留 | 已完成 | 见 `Phase-03-V11-Recovery-Completion-Report-2026-09-12.md` |
|
||
| Phase 04 Profile、Preference 与本地资格 | 已完成 | 见 `Phase-04-V11-Recovery-Completion-Report-2026-09-12.md`;Phase 05 尚未获准 |
|
||
| Phase 05 统一审核扩展 | 已完成 | 见 `Phase-05-V11-Recovery-Completion-Report-2026-09-12.md`;Phase 06 尚未开始 |
|
||
| Phase 06 Match Eligibility 增量 | 已完成 | 见 `Phase-06-V11-Recovery-Completion-Report-2026-09-12.md`;Phase 07 尚未开始 |
|
||
| Phase 07 V1.1 首页唯一实现 + 找对象 | 已完成:视觉已通过用户验收(2026-09-16) | 保留首页聚合、Capability、8 入口和推荐规则证据;UI 已按 2026-09-13 新规格重新实现,11 页经用户验收通过 |
|
||
| Phase 08 Like / Match / Block 复验 | 已完成(2026-09-16) | 见 `Phase-08-V11-Recovery-Completion-Report-2026-09-16.md`;修复 3 处真实缺陷(搜索绕过 Block、详情无 Block 检查、`matches.source` 取值越界),后端 308 tests 全绿 |
|
||
| Phase 09 Text Chat 复验 | 已完成(2026-09-16) | 见 `Phase-09-V11-Recovery-Completion-Report-2026-09-16.md`;修复 4 处真实缺陷(WebSocket 下行死代码、Unmatch 后仍可发消息、Block 未落库 Match、聊天接口 IDOR),后端 328 tests 全绿;Phase 10 尚未获准 |
|
||
| Phase 10 Image & Chat Safety 复验 | 已完成(2026-09-16) | 见 `Phase-10-V11-Recovery-Completion-Report-2026-09-16.md`;修复 2 处缺陷(图片上传魔数校验死代码致本地资格佐证上传 100% 失败、高风险词写入日志),推翻旧报告 2 项安全声明,后端 334 tests 全绿;Phase 11 尚未获准 |
|
||
| Phase 11 Notification 复验 | 已完成(2026-09-16) | 见 `Phase-11-V11-Recovery-Completion-Report-2026-09-16.md`;修复 3 处缺陷(10 种通知 type 违反生产 CHECK 约束致全部落库失败、幂等无 DB 兜底、婚前辅导通知未接线),后端 346 tests 全绿 |
|
||
| Phase 12 Relationship Progress 复验 | 已完成(2026-09-16) | 见 `Phase-12-V11-Recovery-Completion-Report-2026-09-16.md`;修复 4 处缺陷(**实体↔生产迁移系统性漂移 23 表 50 列**、双路径 episode/NPE、测试库缺 7 表致首页零覆盖、计划项 2 未实现),新增永久守卫 `EntityMigrationParityTest`,删除 2 个假测试类,后端 371 tests 全绿 |
|
||
| Phase 13 公益红娘转介复验 | 已完成(2026-09-16) | 见 `Phase-13-V11-Recovery-Completion-Report-2026-09-16.md`;修复 7 处缺陷(**2 处生产故障级 CHECK 约束缺口致推荐接受/服务提交必崩**、推荐与转介三处越权、`getServiceDetail` 越权读、Mapper 缺 `@Select` 致必崩、前端 5 处契约缺口),测试库补 3 张 matchmaker 表,迁移基线 V038;新增 `MatchmakerReferralPhase13Test`(17 用例)+ 重写 `MatchmakerServiceTest`(6 用例,解析真实 DDL),删除 3 处假测试,后端 **391 tests 全绿**;**Phase 13A 尚未获准** |
|
||
| Phase 13A 婚恋咨询与婚前辅导复验 | 已完成(2026-09-17) | 见 `Phase-13A-V11-Recovery-Completion-Report-2026-09-17.md`;发现 counseling **双实现**(权威类零测试 / 孤儿类被单测),已合并删除孤儿类;修复 **9 处缺陷**(**D1 咨询正文写日志=INV-013 泄露**、D2 申请 userId 取请求体、**D3 分配先读后写并发静默覆盖**、D4 manager 可读 followups=INV-013 绕过、D5 无状态机、**D6 `/services/intro` 后端不存在致小程序 intro 页 100% 无数据**、D7 Admin 5 端点 404、D8 小程序字段名/幂等/静默失败、D9 测试库 counseling 零 CHECK 约束)+ **4 处测试基建缺陷**(守卫找不到 DDL 恒真假绿、全限定 `@TableField` 漏解析、权限守卫假阳性、测试自身逻辑缺陷);迁移基线 V039;新增 `CounselingPhase13ATest`(25)+ `CounselingConstraintGuardTest`(5,解析真实 DDL),两轮负向验证证明守卫会红;后端 **420 tests 全绿**;**Phase 14 尚未获准** |
|
||
| Phase 14 多类型公益活动复验 | 已完成(2026-09-17) | 见 `Phase-14-V11-Recovery-Completion-Report-2026-09-17.md`;修复 **11 处后端缺陷**(**D1 `ActivityMapper.countRemainingCapacity` 无 SQL 空壳致详情/报名/审核必崩**、**D2 报名与审核先读后写并发超卖** → 改原子 SQL、D3 类型/角色未校验生产 CHECK 白名单、**D4 DTO 无 `activityType` 致小程序分类 Tabs 恒空**、D5 男女人数 `approvedCount/2` 编造、D6 年龄门槛空壳、D7 按类型资格策略为空、**D8 运营端建活动丢弃类型且把主办组织错设为操作者 userId**、D9 三个运营端点错挂用户端双实现、D10 软删活动/缺字段 NPE、D11 DTO 缺 4 字段)+ **3 处前端契约缺陷**(分类 code `classroom` 不在白名单、卡片读 7 个不存在字段、admin-web 无活动管理页)+ **2 处测试保真度缺陷**(2 条占位假绿、测试库缺 V023 列与三张表);新增 `ActivityPhase14Test`(23)+ `ActivityConstraintGuardTest`(9,解析真实 DDL **与前端源码**),两轮负向验证证明守卫会红;admin-web `vue-tsc` 0 error + `vite build` 通过;后端 **450 tests 全绿**;**Phase 15 尚未获准** |
|
||
| Phase 15 活动报名审核签到复验 | 已完成(2026-09-17) | 见 `Phase-15-V11-Recovery-Completion-Report-2026-09-17.md`;修复 **16 处缺陷**(**D1 签到码一生成即作废**:`generateCheckinToken` 把 token 写 `"used"` 而扫码端见 `"used"` 即拒 → 扫码 100% 失败;**D9 取消/拒绝后永远无法再报名**:撞生产 `UNIQUE(activity_id,user_id)`,测试库缺该约束故零覆盖 → 改复用记录;D2 重复签到竞态、D3 签到无数据范围、D4 手工签到无校验、D5 统计 NPE+语义错、D6 非法 token 500、D7 签名非恒定时间比较、D10 后台审核列表无 pending、D11 报名窗口不生效、D12 取消无审计、D13 审核/取消非原子、D14 容量分组不参与扣减)+ **2 处前端契约缺陷**(admin-web 无签到工作台、小程序无取消报名入口);新增 V040 `activity_staff_assignments` 落实 INV-020 活动数据范围;**3 处测试保真度缺陷**(测试库缺 UNIQUE+2 CHECK、3 条 `assertTrue(true)` 假绿、表未入必选集合);新增 `ActivityPhase15Test`(21),`CheckinServiceTest` 假绿改真实守卫(5),约束守卫 +2,迁移基线 39→40;一轮负向验证 3 处注入 → 8 条用例精准变红并还原;admin-web `vue-tsc` 0 error + `vite build` 通过;后端 **474 tests 全绿**;**Phase 16 尚未获准** |
|
||
| Phase 16 活动互选二阶段同意复验 | 已完成(2026-09-17) | 见 `Phase-16-V11-Recovery-Completion-Report-2026-09-17.md`;修复 **7 处缺陷 + 1 处隐藏编译缺陷 + 1 处测试保真度缺陷**(**D1 双确认后根本不建 Match/会话(Gate 缺陷·INV-014/015)**、**D3 Phase 15 提交态引用未定义 `reopenEpisode` 致整个模块不编译("474 绿"为假象)**、D4 INV-006 单向意向泄露、D5 复用/新建 Match 后缺会话);统一双实现到 `RelationshipService.confirmActivityInterest`;`MatchMapper` 补 `reopenEpisode`;测试库补 `activity_mutual_connection_consents` 表并移入必选集合,`MigrationValidationTest` 基线 40→41;新建 `ActivityMutualConsentServiceTest`(7 用例);`ChatPhase09IntegrationTest:344` 断言对齐 AGENTS.md #20 复用语义;新增 V041 `expires_at`+`match_id`;负向验证 2 用例精准变红并还原;后端 **481 tests 全绿**;**Phase 17 尚未获准** |
|
||
| Phase 17 举报与风控复验 | 已完成(2026-09-17) | 见 `Phase-17-V11-Recovery-Completion-Report-2026-09-17.md`;修复 **6 处真实缺陷**(**D1(Critical,必崩级盲区)测试库缺 `reports`/`risk_events`/`risk_actions` 三表 → 风控/举报真实 DB 路径零覆盖,`ReportServiceTest` 全 `assertTrue(true)` 假绿**;**D3(High)敏感访问(查看他人风险画像/举报)无审计(违反 AGENTS.md #8)**;D4 审计缺 `ip`/`userAgent`;D5 `findByUserId` 未过滤软删;D2 人工标记无审计;**D6 `javax`→`jakarta` 隐藏编译缺陷 + `risk_events` 漏 `updated_at` 列**);补齐三表并移出白名单入 `REQUIRED_IN_TEST_SCHEMA`;新增 `AuditLogService.recordSensitiveAccess` 并接线三端点;新增 `ReportAndRiskPhase17IntegrationTest`(7 用例);负向验证(注释 getReportDetail 审计 → D3 守卫精准变红并还原);后端 **488 tests 全绿**;**Phase 18 尚未获准** |
|
||
| Phase 18 申诉复验 | 已完成(2026-09-17) | 见 `Phase-18-V11-Recovery-Completion-Report-2026-09-17.md`;修复 **8 处真实缺陷**(**D1(Critical,必崩级盲区)测试库缺 `appeals` 表 + `AppealServiceTest` 9 例中 6 例 `assertTrue(true)` 假绿 → 申诉真实 DB 路径零覆盖**;**D2(High,只在 PG 上炸)`escalateAppeal` 向 `operatorId` 发用户通知撞 `notifications.user_id → users(id)` FK → 升级事务整体回滚**;**D3(High,只在 PG 上炸)`appealType` 未校验生产 `chk_appeal_type` 白名单**;D4 escalated 死胡同(前后端均无法再决策);D5 `processAppeal` 先读后写并发竞态;D6 三处查询漏 `deleted_at` 过滤;D7 硬编码 `resolved`;D8 证据字段契约 `evidenceFileIds`);补 `appeals` 表并移出白名单入 `REQUIRED_IN_TEST_SCHEMA`;新增原子认领 `markReviewingIfProcessable`;新增 `AppealPhase18IntegrationTest`(15 用例),删除假绿 `AppealServiceTest`(9 用例);负向验证(误伤其他处置 → Gate 用例精准变红并还原);后端 **494 tests 全绿**;admin-web `vue-tsc` EXITCODE=0;**Phase 19 尚未获准** |
|
||
| Phase 19 统一运营后台 + 用户端公益服务页面复验 | 已完成(2026-09-17) | 见 `Phase-19-V11-Recovery-Completion-Report-2026-09-17.md`;修复 **25 处真实缺陷**(**D20 服务站公告能力整条不可达:Service + V042 表都在、全仓零端点**;**D21 服务站 `create/update` 越权写:类级 `service_location.view` 兜底,`service_location.manage` 是从未使用的死权限**;D22 该控制器未纳入权限覆盖守卫;**D2/D3 Banner 校验 500 + 软删 Banner 仍上首页**;**D5/D6 Content 发布死路 + 分类停用不可恢复**;D10~D14 ServiceProgram 审批死路/草稿泄露/成员数恒 0/退出未实现/撞唯一键;D9/D23 测试库缺 `content_categories` 与 `service_location_announcements` → 零覆盖;D18 预约 IDOR;D24 迁移基线未跟进 V042);补 V042 公告表 + 运营端五端点 + 用户端只读端点 + 后台公告管理 UI + 小程序 U50 公告区块;新增 3 组守卫(24+5+5 用例)并把服务站运营端收入权限覆盖扫描;负向验证 3 注入 → 4 用例精准变红;后端 **602 tests 全绿**;admin-web `vue-tsc`/`vite build` 双绿;小程序 `tsc` EXIT=0;ui-tests 14/14;**Phase 20 尚未获准** |
|
||
| Phase 20 Analytics 数据统计与管理驾驶舱复验 | 已完成(2026-09-17) | 见 `Phase-20-V11-Recovery-Completion-Report-2026-09-17.md`;修复 **20 处真实缺陷**(**D1 实名人数用 `profile_status != 'rejected'` 冒充 → 把"资料还在填"算成已实名**;**D3 Chat Started 直接数会话行数 → 系统通知计入**;**D4 Match 不分来源 → 10 对互选被当 10 对成功引用**;**D5 活动漏斗全部硬编码 0 + 一行把"用户数"当"活动数"的死代码**;**D6 Banner 曝光/点击硬编码 0**;**D12 系统性软删缺陷:`BaseEntity.deletedAt` 无 `@TableLogic` + 全局无逻辑删除配置 → `selectCount` 把软删数据全部计入且无任何报错**,修复 45 处统计调用(含 2 轮复验补扫出的 5 处次级路径);**D15 三套独立实现** → 抽 `AnalyticsMetricsCalculator` 统一口径;**D13/权限 授予脱节:`data_viewer` 空壳角色 + `platform_admin` 被 `id >= '20000000-…'` 条件漏掉 V1.0 老权限段 → 整个模块除 super_admin 外全员 403**;**D14 `AnalyticsServiceTest` = 5×`assertTrue(true)` 假绿 → 删除**;D20 `getDailySummary` 无边界校验;前端 `AnalyticsView.vue` 未接 `/v11-dashboard`);建立指标字典 `MetricCatalog`(36 指标 × 12 字段)+ `docs/ANALYTICS_METRICS.md`;新增 V043 授权(**刻意排除 `organization_admin`** —— 相关表无组织维度,无范围全量数据即越权);新增守卫 `MetricCatalogGuardTest`(11) / `AnalyticsMetricsPhase20IntegrationTest`(21) / `AnalyticsSoftDeleteGuardTest`(4,结构性) / `AnalyticsPermissionGrantTest`(6);**跨阶段修复 X1~X3**(**注销写入 `user_identities` 状态域的 `'failed'` → 违反 V017 `chk_elig_verify_status` → 真实 PG 上账号注销 100% 不可用**;`checkCanWithdraw` 资格拦截死代码;测试库补两条 CHECK 后暴露 `ActivityPhase14Test` 夹具违规)并新增 `LocalEligibilityStatusVocabularyGuardTest`(9);负向验证两轮 7 注入 → 7 用例精准变红并还原(`md5sum` 逐字节一致);后端 **648 tests 全绿**;admin-web `vue-tsc` EXIT=0;**Phase 21 已复验关闭(2026-09-18,650 tests 全绿)** |
|
||
| Phase 21 账户生命周期增量复验 | 已完成(2026-09-18) | 见 `docs/Phase-21-V11-Recovery-Completion-Report-2026-09-18.md`;KEEP-VERIFY 复验发现 STATUS 标✅ 但含 **6 处真实缺陷 + 假绿测试**:① `AuthService.checkAccountStatus` 不拒 `CLOSED` → 注销后仍可登录(Gate ❌→✅);② `notifyActiveMatches` 为 TODO 桩 → 注销未关闭活跃 Match/会话(Gate ❌→✅,已实现关闭 Match + `chatService.closeConversationForMatch`);③ `cancelPendingActivityRegistrations` 为 TODO 桩 → 未来活动报名未关闭(Gate ❌→✅);④ `anonymizeServiceHistory` 已实现却**从未被 `closeAccount` 调用(死代码)** → 个人/咨询正文暴露(Gate ❌→✅,已接线 + 脱敏身份证占位符 + `counseling_followups` 正文);⑤ `closeAccount` 在 blockers 处硬抛异常使 `cancelXxx` 永远不可达(死代码矛盾 → 信息性日志 + 继续清理);⑥ 删除 7×`assertTrue(true)` 假绿 → 替换为 11 用例真实 DB 集成测试 + 3 用例登录守卫;跨模块防线(推荐引擎/匹配资格/Capability 已拒非 NORMAL)确认有效;后端 **650 tests 全绿**(起点 648,净 +2);**Phase 22 已复验关闭(2026-09-18,657 tests 全绿)** |
|
||
| Phase 22 部署运维配置扩展(Feature Flag)复验 | 已完成(2026-09-18) | 见 `docs/Phase-22-V11-Recovery-Completion-Report-2026-09-18.md`;KEEP-VERIFY 复验发现 STATUS 标✅ 但含 **2 处真实代码缺陷 + 2 处文档夸大**:① D-22-A(High)`FeatureFlagController.updateFlag` 仅支持布尔 flag(反射 `getMethod("set"+cap, boolean.class)`)→ 7 个非布尔 flag 经 API 更新必失败,已改为按字段类型分派 boolean/int/String;② D-22-B(Medium)`body.getOrDefault("value", false)` 缺 value 静默置 false + 非布尔转型崩,已改为缺 value/类型错→400 且不改原值;T01–T05 模块开关(`isCounselingEnabled` 等)全仓无业务调用点 → 死配置(暴露未 gate,遗留交各模块 Phase);T06 上传策略实测已在 `LocalEligibilityService`+`PhotoService` 真强制 ✅;T07 私有桶零引用 → 死配置(遗留);yml 无 `features:` 块、默认值实为 Java 字段默认(文档纠正);新增 `FeatureFlagControllerTest`(7 用例)+ 负向验证(仅布尔缺陷版恰 2 用例变红);后端 **657 tests 全绿**(起点 650,净 +7);**Phase 23 已复验(2026-09-18,部分关闭)** |
|
||
| Phase 23 可信系统测试重建(REFACTOR)复验 | ⚠️ 部分关闭(2026-09-18) | 见 `docs/Phase-23-V11-Recovery-Completion-Report-2026-09-18.md`;KEEP-VERIFY 复验发现 STATUS 标✅ 但含 **5 处真实缺陷**:① **D-23-A(Critical)** `V11InvariantsTest` 原 14 个用例全为常量字符串断言 —— INV-016「Banner 目标类型」实际断言**文章状态**常量(跑错域)、INV-017「首页 8 入口」是**对自己刚声明的字面量数组做 `length==4` 的重言式**(从未调用首页服务)、INV-018/019/020 用预约/文章/账号状态常量冒充权限与数据范围验证;已重写为 12 个用例,含 **4 个真实服务行为守卫**(INV-013 走真实 `CounselingService.getDetail` 断言 Matchmaker 读到 `userRequestSummary==null` 并以 assigned Counselor 能读正文作反证;INV-016 反射读生产 `ALLOWED_TARGET_TYPES` 断言不含外链;INV-017 真实 `getHome` 断言 8 入口编码与顺序固定;INV-019 断言 `content_editor` 读到 null)+ `assertBehaviorTestExists` 用 `Class.forName` 把「行为验证见 XxxTest」变成可执行契约;② **D-23-B(High)** `tests/e2e/` **44 个 `pass` 空壳**(4 个文件 100% 为空壳,另 2 个混合),违反 Gate「不允许 skip/pass 空壳」→ 已移除并改为诚实占位(保留完整场景清单);③ **D-23-C(High)** pytest E2E 套件**整体不可执行**:全仓无 `conftest.py`,约 15 个 fixture(`api_client`/`verified_user`/`banner_factory`…)不存在,唯一可执行的 `run_v11_tests.py`(16 用例)需活栈 + `E2E_PASSWORD`;④ **D-23-D(High,遗留未修)** CI 未串联 E2E(计划明确要求)→ 需先决定 CI 活栈供给方式,未实施;⑤ **D-23-E(Medium)** CI `migration` job 注释称「验证 SQL 语法」实为只查文件非空(真实语法校验在 `MigrationValidationTest`,随 backend job 跑)→ 改为真实序列校验(命名/非空/版本号唯一/无缺号,43 个文件 1~43 连续唯一)。**新增闸门**:`scripts/check-no-empty-tests.py`(AST 扫描阻断 `pass` 空壳与无条件 `skip`,已双向验证)+ CI `test-shell-guard` job。**证据**:负向注入 3 处生产缺陷 → 恰好 `inv013`/`inv016`/`inv017` 3 个用例精准变红、其余 9 绿、零无关失败,`md5sum -c` 还原一致;`655 tests / 通过 652 / 失败 0 / 错误 0 / 跳过 3`(起点 657,净 −2 因 14 空转用例合并为 12;3 个跳过均有显式原因,非空壳)。**遗留**:pytest fixture 体系缺失、INV-011 缺显式守卫(E2E 入 CI 与 fixture 体系已由 Phase 23B 补齐)。**结论:不宣布「失败为零可进入 UAT」**;**Phase 23B(E2E 测试基建)已于 2026-09-18 完成并关闭** |
|
||
| Phase 23B E2E 测试基建重建 | 已完成(2026-09-18) | 补齐 Phase 23 遗留 D-23-C(E2E 整体不可执行)与 D-23-D(CI 未串联 E2E)。**交付**:`tests/e2e/conftest.py`(ApiClient / `operator_token` / `new_user` / 栈探活)、`pytest.ini`、`tests/e2e/requirements.txt`、`tests/e2e/sql/seed_e2e_operators.sql`(迁移里**没有任何 operator 种子**,全新库无账号可登录 → 6 个 e2e 账号 + 角色绑定,幂等,口令由 `psql -v pwd` 注入)、CI job `e2e`(起真实栈→等就绪→seed→pytest→失败阻断→清理)、8 个 E2E 文件改造(消除 import 期 `KeyError`,替换恒真/名不副实断言)。**核心设计**:栈不可达时 `pytest.exit(4)` **而非 skip**(skip 会把未执行伪装成通过)。**验证**:本机真实活栈 **33 passed**;栈不可达/缺口令均 exit 4;后端 **656 tests / 0 failures / 0 errors / 3 skipped**(基线 655,+1 为新增构建产物守卫,已负向验证:注入重复 `V042` → 恰 1 用例变红)。**本轮暴露并修复 6 处真实生产缺陷**(H2 零覆盖):D-23B-A 构建产物残留重复迁移版本号 042 → 应用起不来;D-23B-B 非 UUID path → 500 + 数据库异常外泄;D-23B-C 6 个 E2E 文件 import 期崩溃 → 从未执行;D-23B-E `super_admin` 仅 18/48 权限、`matchmaker` 0 权限(matchmaker 部分列遗留,需产品定义);D-23B-I 非法枚举参数 → 500(应 BAD_REQUEST);D-23B-J `uuid = character varying` → JDBC 加 `stringtype=unspecified`。**另有一处判断被证伪后撤回**:初查以为 `service_appointment.register` 权限丢失,核实后端点实际用 `service.assisted_registration`(V029 已 seed),未据此改动任何代码。详见 `docs/Phase-23B-V11-E2E-Infrastructure-Completion-Report-2026-09-18.md` |
|
||
| HTTP 语义检修(失败响应携带真实 HTTP 状态码) | 已完成(2026-09-18) | 见 `docs/HTTP语义检修报告-2026-09-18.md`;起因:Phase 23B 收尾时质疑「HTTP 200 + body.code 这套约定,开放第三方还守得住吗」→ 审计确认**当时就已经是断的**。**5 处发现**:105 处 / 30 个 Controller 直返 `ApiResponse.error()` 不抛异常、不带 `@ResponseStatus` → **HTTP 恒为 200**;小程序 `api.js` 的 401/403/429 分支**永远走不到**(token 过期回 403 → 不触发 `onSessionExpired` → **用户卡死无法重登录**);`SecurityConfig` 未配 `authenticationEntryPoint` → 未认证回 403 且 body 连 `code` 都没有;`CorsConfig` 默认 `*` + `allowCredentials(true)` 而注释称"默认只允许 localhost";全量测试仅 4 文件 / 15 处断言触及状态码。**修法**:`ApiResponseCode` 新增 `httpStatus` 字段(**唯一真相源**,新增码不填就编译不过)+ 新增 `ApiResponseStatusAdvice`(`ResponseBodyAdvice`,只补 2xx、只改状态行、body 一字不动)→ **105 处 Controller 零改动获得正确状态**;补 401/403 入口点并统一 body;CORS 默认改为拒绝跨域。**同日续做(身份类型与路径规则收敛)**:兜底规则由 `authenticated()` 收紧为 `hasRole("USER")`(`@AuthenticationPrincipal UserPrincipal` 遇 `OperatorPrincipal` 类型不匹配返回 **null** → 全仓 **244 处**使用、**仅 48 处**判空 → 196 处潜在 NPE→500 在认证层一次性消解);显式枚举 9 个运营前缀(`/**/operator/**` 是**非法 PathPattern**,写出后整个过滤器链 500,实测 E2E 由 37 passed 直落 33 failed);新增 `SecurityPathCoverageTest` 机械守卫(负向验证:摘掉 `/content/operator/**` → 恰 1 用例变红并列出受影响的 6 个端点)。**验证**:E2E **40 passed**;后端 **664 / 0 failures / 0 errors / 3 skipped**(首轮 662/3 failures 经判定**均为"测试断言了旧的错误行为"**,改断言而非改回实现,且保留各自的实质性安全断言)。遗留(属范围扩张,需产品决策):第三方凭据机制、限流是否真实生效、OpenAPI 对外发布、调用审计与配额、脱敏边界 |
|
||
| 幂等键检修(`Idempotency-Key` 从「声明」到「兑现」) | 已完成(2026-09-18) | 见 `docs/幂等键检修报告-2026-09-18.md`;起因:HTTP 报告里写下「`Idempotency-Key` 已支持」,随后核对**推翻了自己的结论**。**5 处发现**:规范第八章要求 7 类端点支持幂等键,前端 **25 处调用点**(8 service + 2 TS 页面)发送该头而**后端 0 处读取**;**前端那一侧也是坏的**——`idempotencyKey: \`like:${Date.now()}\`` 每次调用都变,**即使后端实现了也永不命中**(互补的两半,谁也不起作用);唯一真幂等的 counseling 走的是 **body 字段**而非规范要求的 header;`DuplicateKeyException`(并发重复提交的最后防线)与 **30 处** `IllegalStateException`(业务状态冲突)均**无映射 → 500**,而 500 的语义是"服务端故障可重试"→ **调用方重试,制造更多重复**;**推翻上轮的安全假设**:`stringtype=unspecified` 覆盖不到经类型处理器显式指定类型的参数(V045 的 `actor_id VARCHAR` 在该参数开启的 docker profile 下仍抛 `character varying = uuid`)→ **真正的不变量是"列类型必须是 uuid"**。**修法**:V045 建 `idempotency_records` + 唯一索引 `uk_idempotency_scope`、V046 修正列类型、`IdempotencyInterceptor`(**先占位后执行**/重放首次响应/处理中回 409/**孤儿占位 300s 可接管**/**失败释放占位**)、`IdempotencyResponseCacheFilter`、`WebMvcConfig`、`@Idempotent` **30 处声明(业务代码零改动)**、异常处理器两处新映射(**刻意不映射**父类 `DataIntegrityViolationException`——CHECK 违反应继续由 500 暴露);前端键改为"**一次未成功的逻辑操作内复用同一把键、成功才释放**",25 处 `Date.now()` 全部替换(残留经 grep 为 **0**)。**列类型不变量全库机械扫描**:`actor_id` 是**唯一**违规(已修);`client_message_id`/`provider_request_id` 为外部 id,`resource_id`/`source_id` 在 Java 侧**零处作查询条件** → 无第二处同类隐患。**新增守卫** `IdempotencyDeclarationGuardTest`(2,注入变异负向验证、**各自精确报出文件名与行号**),并**修正一处假绿**:`GlobalExceptionHandlerTest` 原 3 条断言只测 DTO、**一次都没进过处理器**(现 6 条)。**验证**:E2E **49 passed**(含 `tests/e2e/idempotency_test.py` 7 用例:重放**逐字节相同**、同键只落一条、作用域隔离、**5 线程并发同键业务恰好落库一次**、无键重复 Like 不得 500);后端 **669 / 0 failures / 0 errors / 3 skipped**(首轮 664/1 failure 为**有意设计的迁移基线守卫**,按流程由 44 抬至 46);小程序 `tsc --noEmit` EXIT=0;UI 契约门控 **14/14**。**同轮清掉三处同形状问题**:① 补 `CheckinController` 手工签到的 `@Idempotent`(第 146 章"扫码两次"同类漏标);② **CI 上的 E2E 从未真正通过过** —— 迁移无任何 operator 种子、`DemoDataSeeder` 也不建运营账号,而 `conftest.admin_token` 写死 `username="admin"`(某台开发机手工创建的遗留账号,本机有所以本地一直绿,CI 全新库无 → fixture 必然 401),已改用 seed 账号 `e2e_admin` 并新增 `tests/e2e/fixture_account_guard_test.py` 机械拦截(含"解析失败即失败"断言);③ `POST /activities/{id}/interests` 契约漂移 —— `API_INVENTORY` 记载、前端已实现,但后端**从未实现**(Phase 16 已把表达意向合并进 `/activities/{id}/feedback`),调用必然 404,已更正文档并按真实端点重列、删除前端死代码链(`activityService.submitInterests` + `activityStore.submitInterests`,全仓无页面调用方),各留注释说明恢复条件 |
|
||
| UI-CLEANUP-20260913 | 已完成 | 废弃 UI 代码、冲突规范、旧计划和无效验收证据已清理;`ui-document-baseline-contracts` 锁定唯一视觉入口 |
|
||
| UI-ADMIN-20260913 | 已完成(待桌面端目视复验) | 管理端全局框架与工作台已按规格交付;18 modules + 22 routes,vue-tsc 与 vite build 全绿 |
|
||
| UI-MINIAPP-20260913 | 已完成 | 小程序 11 个核心页面已重构;11/11 页 TS-only,2026-09-16 通过用户验收 |
|
||
| V1.1 UAT / RC / Production | 进行中 | UI 视觉验收已通过;剩余前端调用与后端契约收敛(`/me/*` 路径族约 15 个端点)与页面闭环 |
|
||
|
||
---
|
||
|
||
## 命名规范
|
||
|
||
- Epic: `EPIC-P{XX}-V11`(V1.0已有Epic保持原名)
|
||
- Story: `{Phase}-V11-S{NN}`
|
||
- Task: `{Phase}-V11-T{NN}`
|
||
- Bug: `BUG-{编号}`
|
||
- 旧V1.0废弃任务标记: `DEPRECATED_BY_V1_1`
|
||
|
||
---
|
||
|
||
## Epic 总览
|
||
|
||
| Epic | Phase | 名称 | 优先级 |
|
||
|------|-------|------|--------|
|
||
| EPIC-P01-V11 | P01 | 项目治理与V1.1基线修订 | P0 |
|
||
| EPIC-P02-V11 | P02 | 新业务权限域预留 | P0 |
|
||
| EPIC-P03-V11 | P03 | 实名体系扩展预留 | P1 |
|
||
| EPIC-P04-V11 | P04 | 本地资格与Profile扩展 | P1 |
|
||
| EPIC-P05-V11 | P05 | 本地资格审核复用 | P1 |
|
||
| EPIC-P06-V11 | P06 | Match Eligibility扩展 | P0 |
|
||
| EPIC-P07-V11 | P07 | 首页V1.1重构与找对象 | P0 |
|
||
| EPIC-P08-V11 | P08 | Like/Match保留+活动兼容 | P0 | ✅
|
||
| EPIC-P09-V11 | P09 | 聊天核心保持+活动兼容 | P0 | ✅
|
||
| EPIC-P10-V11 | P10 | 聊天安全扩展 | P0 | ✅
|
||
| EPIC-P11-V11 | P11 | 公益服务通知扩展 | P0 | ✅
|
||
| EPIC-P12-V11 | P12 | 关系状态轻量扩展 | P1 | ✅
|
||
| EPIC-P13-V11 | P13 | 红娘服务转介扩展 | P1 | ✅
|
||
| EPIC-P13A | P13A | 公益婚恋咨询与婚前辅导 | P1 | ✅
|
||
| EPIC-P14-V11 | P14 | 多类型公益活动 | P1 |
|
||
| EPIC-P15-V11 | P15 | 活动签到回归测试 | P1 |
|
||
| EPIC-P16-V11 | P16 | 活动互选二阶段同意重构 | P0 | ✅
|
||
| EPIC-P17-V11 | P17 | 公益服务风险来源扩展 | P0 | ✅
|
||
| EPIC-P18-V11 | P18 | 申诉保持 | P1 | ✅
|
||
| EPIC-P19-V11 | P19 | 善缘丹阳综合运营后台 | P1 |
|
||
| EPIC-P20-V11 | P20 | 公益项目数据统计扩展 | P1 |
|
||
| EPIC-P21-V11 | P21 | 账户生命周期增量 | P1 |
|
||
| EPIC-P22-V11 | P22 | 部署运维配置扩展 | P1 |
|
||
| EPIC-P23-V11 | P23 | V1.1专项测试 | P0 |
|
||
| EPIC-P24-V11 | P24 | UAT增量 | P1 |
|
||
| EPIC-P25-V11 | P25 | RC内容检查 | P1 |
|
||
| EPIC-P26-V11 | P26 | Production初始化 | P1 |
|
||
|
||
---
|
||
|
||
## EPIC-P01-V11: 项目治理与V1.1基线修订
|
||
|
||
> **2026-09-09 有效状态:** Phase 01 治理交付已收口,但不是“项目测试通过”。当前阻断为缺少 Git 元数据;检查基线实测 5 个失败门禁。以下历史任务的“已完成”仅表示文件曾创建,验收结论以 `Phase-01-V11-Recovery-Completion-Report-2026-09-09.md` 为准。
|
||
|
||
### Tasks
|
||
- P01-V11-T01 [已完成] 更新AGENTS.md加入V1.1硬规则
|
||
- P01-V11-T02 [已完成] 更新docs/STATUS.md版本基线
|
||
- P01-V11-T03 [已完成] 更新docs/PENDING_DECISIONS.md
|
||
- P01-V11-T04 [已完成] 新建docs/V1_1_CHANGELOG.md
|
||
- P01-V11-T05 [已完成] 新建docs/V1_0_TO_V1_1_GAP_ANALYSIS.md
|
||
- P01-V11-T06 [已完成] 新建docs/JIRA_BACKLOG.md
|
||
- P01-V11-T07 [已完成] 新建docs/ARCHITECTURE_BASELINE_V1.1.md
|
||
|
||
---
|
||
|
||
## EPIC-P02-V11: 新业务权限域预留
|
||
|
||
### Tasks
|
||
- P02-V11-T01 ✅ banner permission domain
|
||
- P02-V11-T02 ✅ counseling permission domain
|
||
- P02-V11-T03 ✅ content permission domain
|
||
- P02-V11-T04 ✅ service_location permission domain
|
||
- P02-V11-T05 ✅ service_appointment permission domain
|
||
- P02-V11-T06 ✅ local_eligibility permission domain
|
||
- P02-V11-T07 ✅ service_program permission domain
|
||
- P02-V11-T08 ✅ service_station_operator role
|
||
- P02-V11-T09 ✅ counselor role
|
||
- P02-V11-T10 ✅ counseling_manager role
|
||
- P02-V11-T11 ✅ content_editor role
|
||
|
||
### Acceptance
|
||
- 新角色不自动拥有用户全库权限 ✅
|
||
- content_editor默认无用户数据权限 ✅
|
||
- counselor默认assigned scope ✅
|
||
- service_station_operator无身份证权限 ✅
|
||
|
||
---
|
||
|
||
## EPIC-P03-V11: 实名体系扩展预留
|
||
|
||
### Tasks
|
||
- P03-V11-T01 ✅ 增加verification_level字段到user_identities
|
||
- P03-V11-T02 ✅ 增加liveness_verification_status预留
|
||
- P03-V11-T03 ✅ 增加verification_provider字段
|
||
- P03-V11-T04 ✅ Feature Flag控制人脸能力
|
||
|
||
### Forbidden
|
||
- 不得实现 face_embedding
|
||
- 不得实现 face_template
|
||
- 不得实现 self-hosted face recognition
|
||
|
||
---
|
||
|
||
## EPIC-P04-V11: 本地资格与Profile扩展
|
||
|
||
### Data Tasks
|
||
- P04-V11-T01 ✅ user_local_eligibilities migration
|
||
- P04-V11-T02 ✅ local_eligibility_evidences migration
|
||
- P04-V11-T03 ✅ local eligibility DTO
|
||
|
||
### API Tasks
|
||
- P04-V11-T04 ✅ GET /api/v1/local-eligibility
|
||
- P04-V11-T05 ✅ POST /api/v1/local-eligibility/declaration
|
||
- P04-V11-T06 ✅ POST /api/v1/local-eligibility/evidences
|
||
- P04-V11-T07 ✅ POST /api/v1/local-eligibility/submit
|
||
|
||
### Miniapp
|
||
- P04-V11-T08 ✅ U62 本地资格说明页
|
||
- P04-V11-T09 ✅ U63 本地资格补充核验页
|
||
- P04-V11-T10 ⏳ Onboarding增加本地资格步骤(后续Phase)
|
||
|
||
### MeStatus
|
||
- P04-V11-T11 ✅ /me/status增加localEligibilityStatus
|
||
- P04-V11-T12 ✅ CapabilityService接入本地资格(Phase 07整合)
|
||
|
||
---
|
||
|
||
## EPIC-P05-V11: 本地资格审核复用
|
||
|
||
### Tasks
|
||
- P05-V11-T01 ✅ review_type扩展local_eligibility
|
||
- P05-V11-T02 ✅ 本地资格审核Queue
|
||
- P05-V11-T03 ✅ Claim(复用现有)
|
||
- P05-V11-T04 ✅ Need Evidence
|
||
- P05-V11-T05 ✅ Approve
|
||
- P05-V11-T06 ✅ Reject
|
||
- P05-V11-T07 ✅ Evidence access audit
|
||
|
||
### Acceptance
|
||
- 不新建第二套审核引擎 ✅
|
||
- 多审核员Claim仍原子 ✅
|
||
- 审核通过更新local eligibility ✅
|
||
- 佐证查看被审计 ✅
|
||
|
||
---
|
||
|
||
## EPIC-P06-V11: Match Eligibility扩展
|
||
|
||
### Tasks
|
||
- P06-V11-T01 ✅ MatchEligibilityService接入local eligibility
|
||
- P06-V11-T02 ✅ localEligibilityRequired配置
|
||
- P06-V11-T03 ✅ 缓存失效处理
|
||
- P06-V11-T04 ✅ eligibility test matrix扩展
|
||
|
||
---
|
||
|
||
## EPIC-P07-V11: 首页V1.1重构与找对象
|
||
|
||
### Story: Home Aggregate
|
||
- P07-V11-T01 ✅ HomeApplicationService
|
||
- P07-V11-T02 ✅ GET /api/v1/home
|
||
- P07-V11-T03 ✅ HomeDTO
|
||
- P07-V11-T04 ✅ Home capability mapping
|
||
|
||
### Story: Banner
|
||
- P07-V11-T05 ✅ home_banners migration
|
||
- P07-V11-T06 ✅ Banner repository/service
|
||
- P07-V11-T07 ✅ Banner audience filter
|
||
- P07-V11-T08 ✅ Banner time filter
|
||
- P07-V11-T09 ✅ Banner internal target validation
|
||
|
||
### Story: 新首页UI
|
||
- P07-V11-T10 ✅ BrandHeader
|
||
- P07-V11-T11 ✅ UserStatusStrip
|
||
- P07-V11-T12 ✅ HomeBannerCarousel
|
||
- P07-V11-T13 ✅ QuickEntryGrid
|
||
- P07-V11-T14 ✅ HomeRecommendationSection
|
||
- P07-V11-T15 ✅ ServiceRecommendationCard
|
||
- P07-V11-T16 ✅ ActivityPreviewSection
|
||
- P07-V11-T17 ✅ ServiceLocationCard
|
||
- P07-V11-T18 ✅ ArticleSection
|
||
- P07-V11-T19 ✅ SafetyNoticeCard
|
||
|
||
### Story: 固定8入口
|
||
- P07-V11-T20 ✅ QuickEntry static config
|
||
- P07-V11-T21 ✅ Feature flag availability
|
||
- P07-V11-T22 ✅ Capability fallback UI
|
||
|
||
### Story: 首页状态差异
|
||
- P07-V11-T23 ✅ onboarding home
|
||
- P07-V11-T24 ✅ review-pending home
|
||
- P07-V11-T25 ✅ searching home
|
||
- P07-V11-T26 ✅ paused home
|
||
- P07-V11-T27 ✅ successful home
|
||
|
||
---
|
||
|
||
## EPIC-P11-V11: 公益服务通知扩展
|
||
|
||
### Tasks
|
||
- P11-V11-T01 ✅ appointment submitted notification
|
||
- P11-V11-T02 ✅ appointment confirmed notification
|
||
- P11-V11-T03 ✅ counseling assigned notification
|
||
- P11-V11-T04 ✅ counseling scheduled notification
|
||
- P11-V11-T05 ✅ counseling completed notification
|
||
- P11-V11-T06 ✅ premarital scheduled notification
|
||
- P11-V11-T07 ✅ local eligibility need evidence notification
|
||
- P11-V11-T08 ✅ local eligibility verified notification
|
||
- P11-V11-T09 ✅ local eligibility rejected notification
|
||
- P11-V11-T10 ✅ privacy-safe notification copy
|
||
|
||
---
|
||
|
||
## EPIC-P13-V11: 红娘服务转介 ✅ 已完成
|
||
|
||
### Tasks
|
||
- P13-V11-T01 转介婚恋咨询 ✅
|
||
- P13-V11-T02 转介公益活动 ✅
|
||
- P13-V11-T03 转介善缘服务站 ✅
|
||
- P13-V11-T04 referral source tracking ✅
|
||
- P13-V11-T05 user consent/confirmation ✅
|
||
|
||
---
|
||
|
||
## EPIC-P13A: 公益婚恋咨询与婚前辅导 ✅ 已完成(2026-09-17 KEEP-VERIFY/EXTEND 复验关闭)
|
||
|
||
### Story: 数据模型
|
||
- P13A-T01 counseling_services migration ✅ (V022)
|
||
- P13A-T02 counseling_followups migration ✅ (V022)
|
||
- P13A-T03 indexes ✅ (V022)
|
||
- P13A-T04 migration tests ✅ 已补全(`MigrationValidationTest` 基线 38 → 39;测试库补 3 个 CHECK 约束 + 新建 `counseling_followups` 表)
|
||
- P13A-T04b **V039 幂等键 + CHECK 白名单显式固化** ✅ 新增(`idempotencyKey` 列 + `uk_counseling_idem` 唯一索引)
|
||
|
||
### Story: 用户咨询
|
||
- P13A-T05 GET counseling service intro ✅ **修复:后端端点此前不存在**(被 `/services/{id}` 吞掉)→ 已补并置于变量路径之前
|
||
- P13A-T06 POST counseling request ✅ **修复:userId 改从认证主体取;补幂等键;字段名对齐**
|
||
- P13A-T07 GET my counseling ✅ **修复:检查 `success`(403 静默空列表);移除跳转不存在的页**
|
||
- P13A-T08 GET counseling detail ✅ **修复:补 owner 校验 + 读侧分层(INV-013)**
|
||
- P13A-T09 cancel counseling ✅ **修复:补 owner 校验 + 合法状态迁移**
|
||
|
||
### Story: 婚前辅导
|
||
- P13A-T10 premarital service type ✅ (service_type=premarital_guidance)
|
||
- P13A-T11 premarital intro ✅ (复用 counseling/intro + U58页面)
|
||
- P13A-T12 premarital request ✅ (复用 counseling/create,serviceType=premarital_guidance)
|
||
- P13A-T13 optional companion support ✅ **修复:补 `confirmCompanion`,伴侣须本人确认(INV-005)**
|
||
|
||
### Story: Miniapp
|
||
- P13A-T14 U55 婚恋咨询介绍 ✅
|
||
- P13A-T15 U56 申请咨询 ✅ **修复:字段名 `summary`/`preferredMode` + 幂等键**
|
||
- P13A-T16 U57 我的咨询 ✅ **修复:检查 `success` + Loading/Empty/Error/Permission 四态 + 下拉刷新**
|
||
- P13A-T17 U58 婚前辅导介绍 ✅
|
||
- P13A-T18 U59 婚前辅导申请 ✅ **修复:字段名对齐 + `companionUserId` 输入**
|
||
|
||
### Story: 后台
|
||
- P13A-T19 Counseling Queue ✅ `GET /services/operator/queue`
|
||
- P13A-T20 Counseling Detail ✅ `GET /services/operator/{id}`
|
||
- P13A-T21 Assign Counselor ✅ **修复:改 `assignIfPending` 条件更新(并发防静默覆盖)**
|
||
- P13A-T22 Schedule ✅ **修复:补状态迁移断言 + INV-012 归属校验**
|
||
- P13A-T23 Start ✅ **修复:同上**
|
||
- P13A-T24 Followup ✅ **修复:同上**
|
||
- P13A-T25 Complete ✅ **修复:同上**
|
||
- P13A-T26 Close ✅
|
||
- P13A-T26b **Admin Web `CounselingView.vue` 重写 + `/counseling` 路由注册** ✅ 新增(四态 + 二次确认 + 防重复提交)
|
||
|
||
### Story: 权限与隐私
|
||
- P13A-T27 counselor assigned scope ✅ (getCounselorAssignedServices)
|
||
- P13A-T28 counseling_manager scope ✅ **已补全**(可看申请摘要,但**不装配 followups** —— 避免 INV-013 绕过通道)
|
||
- P13A-T29 matchmaker deny counseling notes ✅ **已由行为测试证明**(INV-013 七用例)
|
||
- P13A-T30 generic admin deny sensitive note ✅ **已由行为测试证明**(`strangerGetsNothing` / `plainOperatorSeesSanitizedDetail`)
|
||
- P13A-T31 SensitiveAccessLog ⏳ 待补充(随访内容写入审计日志)—— **不阻塞本 Phase Gate**
|
||
|
||
### Story: 风控联动
|
||
- P13A-T32 counseling risk referral ✅ **已接线**(`RiskReferralService.detectCounselingRisk`;**修复:不再把正文写入日志**)
|
||
- P13A-T33 RiskEvent source=counseling ⏳ 待补充(后续 Phase)
|
||
|
||
### Story: 复验(2026-09-17 KEEP-VERIFY/EXTEND)
|
||
- P13A-T34 删除孤儿类 `CounselingServiceApp` 及 3 个仅其使用的 DTO ✅
|
||
- P13A-T35 删除测死代码的 `CounselingDataScopeTest` ✅
|
||
- P13A-T36 新增 `CounselingPhase13ATest`(25 用例,真实运行时路径)✅
|
||
- P13A-T37 新增 `CounselingConstraintGuardTest`(5 用例,**解析真实 `db/migration/V*.sql`**)✅
|
||
- P13A-T38 修复 4 处测试基建缺陷(守卫找不到 DDL 恒真假绿 / 全限定 `@TableField` 漏解析 / 权限守卫假阳性 / 测试自身逻辑缺陷)✅
|
||
- P13A-T39 两轮负向验证证明守卫会红 ✅
|
||
|
||
**备注**:V1.1 核心链路已实现并完成 KEEP-VERIFY/EXTEND 复验,修复 9 处真实缺陷。
|
||
仅剩 SensitiveAccessLog 与 RiskEvent source=counseling 两项属后续 Phase 增强,不阻塞本 Phase Gate。
|
||
后端全量 **420 tests / 0 failures / 0 errors / 3 skipped / BUILD SUCCESS**。
|
||
|
||
---
|
||
|
||
## EPIC-P14-V11: 多类型公益活动 ✅ 核心链路已完成(V1.1 MVP)
|
||
|
||
### Data Tasks
|
||
- P14-V11-T01 activity_type field ✅ (V023 + Activity.java)
|
||
- P14-V11-T02 registration_policy field ✅ (V023 + Activity.java)
|
||
- P14-V11-T03 target_group field ✅ (V023 + Activity.java)
|
||
- P14-V11-T04 industry_scope field ✅ (V023 + Activity.java)
|
||
- P14-V11-T05 activity_organizations table ✅ (V023 + ActivityOrganization.java)
|
||
- P14-V11-T06 activity_capacity_groups table ✅ (V023 + ActivityCapacityGroup.java)
|
||
|
||
### Frontend Tasks
|
||
- P14-V11-T07 活动分类Tabs ⏳ 待Miniapp实现(后续补充)
|
||
- P14-V11-T08 类型化ActivityCard ⏳ 待Miniapp实现(后续补充)
|
||
- P14-V11-T09 动态报名资格提示 ⏳ 待Miniapp实现(后续补充)
|
||
|
||
### Admin Tasks
|
||
- P14-V11-T10 Activity type selector ✅ (GET /activities/types/{type} API)
|
||
- P14-V11-T11 registration policy form ✅ (createActivityFromAdmin支持registrationPolicy)
|
||
- P14-V11-T12 multi-organization selection ✅ (POST /operator/activities + POST /operator/activities/{id}/organizations)
|
||
- P14-V11-T13 capacity groups editor ✅ (POST /operator/activities/{id}/capacity-groups)
|
||
|
||
**备注**:后端API核心链路已完成,Miniapp活动分类页面和Admin Web前端在后续Phase补充。
|
||
|
||
---
|
||
|
||
## EPIC-P16-V11: 活动互选二阶段同意重构 ✅ 已完成(2026-09-17 KEEP-VERIFY/EXTEND 复验关闭)
|
||
|
||
### Data Tasks
|
||
- P16-V11-T01 activity_mutual_connection_consents table ✅ (V024)
|
||
- P16-V11-T02 pair unique active constraint ✅ (UNIQUE index with LEAST/GREATEST)
|
||
- P16-V11-T02b V041 expires_at + match_id ✅ 新增(与 consent 超时拒绝、互选溯源对齐)
|
||
|
||
### Business Tasks
|
||
- P16-V11-T03 detect mutual interest ✅ (detectMutualResults)
|
||
- P16-V11-T04 create mutual consent ✅ (createMutualConsent)
|
||
- P16-V11-T05 user A confirm ✅ (confirmConnection)
|
||
- P16-V11-T06 user B confirm ✅ (confirmConnection)
|
||
- P16-V11-T07 both-confirm transaction ✅ (@Transactional, exactly-once via `both_confirmed_at` 原子 UPDATE)
|
||
- P16-V11-T08 create Match Episode ✅ (统一到 `RelationshipService.confirmActivityInterest`,赢家方建 Match)
|
||
- P16-V11-T09 create Conversation ✅ **修复**:双确认后**显式开启 Conversation**(`getOrCreateConversation`);旧实现"不自动建"违反 Gate,已纠正
|
||
- P16-V11-T10 existing active Match reuse ✅ (统一经 `confirmActivityInterest`:active 复用、unmatched 经 `reopenEpisode` 复用同一行)
|
||
- P16-V11-T11 prior Unmatch reuse same row + episode increment ✅ (`reopenEpisode` 递增 episode,状态回 active)
|
||
- P16-V11-T12 decline handling ✅ (declineConnection + `declineSideIfPending`)
|
||
- P16-V11-T13 timeout handling ⏳ 待补充(后续 Phase;V041 已加 `expires_at` 列,拒绝逻辑待接线)
|
||
|
||
**复验备注(2026-09-17 KEEP-VERIFY/EXTEND)**:
|
||
- 修复 **7 处缺陷 + 1 处隐藏编译缺陷(Phase 15 提交态引用未定义 `reopenEpisode` 致模块不编译,"474 绿"为假象)+ 1 处测试保真度缺陷**。
|
||
- 双实现统一到 `RelationshipService.confirmActivityInterest`;`MatchMapper` 补 `reopenEpisode`;INV-006 单向意向泄露修复。
|
||
- 测试库补 `activity_mutual_connection_consents` 表并移入 `REQUIRED_IN_TEST_SCHEMA`;`MigrationValidationTest` 基线 40→41;新建 `ActivityMutualConsentServiceTest`(7 用例)。
|
||
- 负向验证 2 用例精准变红并还原;全量回归 **481 tests / 0 failures** 全绿。
|
||
- 证据:`docs/Phase-16-V11-Recovery-Completion-Report-2026-09-17.md`。
|
||
|
||
### Miniapp Tasks
|
||
- P16-V11-T14 Mutual Result page ✅ (activity-mutual-result)
|
||
- P16-V11-T15 开启线上沟通按钮 ✅
|
||
- P16-V11-T16 Waiting for other side state ✅
|
||
- P16-V11-T17 Both confirmed success page ✅
|
||
|
||
---
|
||
|
||
## EPIC-P17-V11: 公益服务风险来源扩展 ✅ 已完成
|
||
|
||
### Tasks
|
||
- P17-V11-T01 risk source counseling ✅ (RiskReferralService.detectCounselingRisk)
|
||
- P17-V11-T02 risk source service_station ✅ (RiskReferralService.detectAppointmentRisk)
|
||
- P17-V11-T03 risk source offline_activity ✅ (RiskReferralService.detectActivityRisk)
|
||
- P17-V11-T04 risk referral UI ⏳ Admin Web 后续补充(Phase 19)
|
||
|
||
### 2026-09-17 KEEP-VERIFY/EXTEND 复验结论
|
||
- **D1(Critical,必崩级盲区)**:`reports`/`risk_events`/`risk_actions` 三表在 H2 测试库缺失 → 风控/举报真实 DB 路径零覆盖;`ReportServiceTest` 全 `assertTrue(true)` 假绿。已补三表(对齐 V012,去外键留 CHECK)并移出 `TEST_SCHEMA_OPTIONAL_TABLES` 入 `REQUIRED_IN_TEST_SCHEMA`。
|
||
- **D3(High)**:敏感访问(查看他人风险画像/举报详情/风险事件列表)此前无审计(违反 AGENTS.md #8)。新增 `AuditLogService.recordSensitiveAccess` 并接线 `getReportDetail`/`getUserRiskProfile`/`RiskController.getRiskEvents`。
|
||
- **D4**:`ReportService.saveAuditLog` 补 `ip`/`userAgent`;**D5**:`findByUserId` 补 `deleted_at IS NULL`;**D2**:`manualFlagRisk` 补 `MANUAL_FLAG_RISK` 审计;**D6**:`javax`→`jakarta` 隐藏编译缺陷 + `risk_events` 漏 `updated_at` 列。
|
||
- 新增 `ReportAndRiskPhase17IntegrationTest`(7 例);负向验证(注释 getReportDetail 审计 → D3 守卫精准变红并还原);后端 **488 tests 全绿**。
|
||
- 证据:`docs/Phase-17-V11-Recovery-Completion-Report-2026-09-17.md`
|
||
---
|
||
|
||
## EPIC-P18-V11: 申诉保持 ✅ 已完成(2026-09-17 KEEP-VERIFY 复验关闭)
|
||
|
||
### Verification(2026-09-17 复验后校正)
|
||
- V013 `appeals` 生产 DDL 完整(`chk_appeal_status` / `chk_appeal_type`);但**测试库此前完全缺该表**(只在 parity 可选白名单里 = 无人测),已补入 `schema-h2.sql` 并移入 `REQUIRED_IN_TEST_SCHEMA`。
|
||
- AppealService: FeatureFlag 控制 + 幂等性 + 可申诉限制(仅 ban/suspend)——复验后补 `appealType` 白名单校验与处置类型一致性。
|
||
- AppealController: 用户端 account-status / submit / my
|
||
- AppealOperatorController: 后台端 pending / detail / process / stats
|
||
- Miniapp: appeal 页面已注册(证据字段名 `evidenceFileIds` 已与后端 DTO 对齐)
|
||
- 申诉通过 → 自动解除**对应** risk_action(`status → resolved`,只解除目标处置;其他仍有效处置不受影响)。
|
||
⚠️ 旧注"status→revoked"**不实**:`Constants.RISK_ACTION_STATUS_REVOKED` 从无使用点,且不在生产 `chk_risk_action_status`(active/resolved/expired)白名单内;实现使用 `resolved`。
|
||
- 申诉被拒 → 维持原处置(`risk_action` 不变更)
|
||
|
||
### 2026-09-17 KEEP-VERIFY 复验结论
|
||
- 修复 **8 处真实缺陷**:D1 零覆盖(缺 `appeals` 表 + 6 处 `assertTrue(true)` 假绿);**D2 `escalateAppeal` 向 operator 发用户通知撞 `notifications.user_id → users(id)` FK → PG 上升级 100% 失败**;**D3 `appealType` 未校验 `chk_appeal_type`**;D4 escalated 死胡同;D5 `processAppeal` 先读后写并发竞态;D6 三处查询漏软删过滤;D7 硬编码 `resolved`;D8 证据字段契约。
|
||
- 新增 `AppealPhase18IntegrationTest`(15 例),删除假绿 `AppealServiceTest`(9 例);负向验证证明 Gate 守卫有牙;后端 **494 tests 全绿**;admin-web `vue-tsc` EXITCODE=0。
|
||
- 证据:`docs/Phase-18-V11-Recovery-Completion-Report-2026-09-17.md`
|
||
|
||
### 新增文件
|
||
- V025__extend_risk_sources.sql — 扩展 risk_events.event_type CHECK + risk_actions.action_type
|
||
- RiskReferralService.java — 统一风险检测与事件创建
|
||
- RiskController.java — 运营人员手动风险标记接口
|
||
- CounselingServiceApp.java — 集成咨询风险检测
|
||
- ServiceAppointmentService.java — 集成服务站风险检测
|
||
- ActivityService.java — 集成活动风险检测
|
||
- Constants.java — 新增 6 个风险相关常量
|
||
|
||
---
|
||
|
||
## EPIC-P19-V11: 善缘丹阳综合运营后台 ✅ 后端API核心链路已完成(V1.1 MVP)
|
||
|
||
### 内容管理(后端API)
|
||
- P19-V11-T08 content_categories management ✅ (V026 + ContentService CRUD)
|
||
- P19-V11-T09 content_articles management ✅ (V026 + ContentService CRUD)
|
||
- P19-V11-T10 Article list ✅ (GET /content/articles)
|
||
- P19-V11-T11 Article editor ✅ (PUT /operator/articles/{id})
|
||
- P19-V11-T12 Article publish ✅ (POST /operator/articles/{id}/publish)
|
||
- P19-V11-T13 Article offline ✅ (POST /operator/articles/{id}/offline)
|
||
- P19-V11-T14 Miniapp preview ⏳ 待Admin Web实现
|
||
|
||
### 专项项目管理(后端API)
|
||
- P19-V11-T25 service_programs CRUD ✅ (V026 + ServiceProgramService)
|
||
- P19-V11-T26 service_program_members ✅ (V026 + MemberCRUD)
|
||
- P19-V11-T27 Program CRUD ✅ (GET/POST/PUT /service-programs)
|
||
- P19-V11-T28 Member application ✅ (POST /service-programs/{id}/apply)
|
||
- P19-V11-T29 Member approval ✅ (POST /operator/members/{id}/approve)
|
||
- P19-V11-T30 Program statistics basic ✅ (Phase 20 已提供 `service.program.member.approved` 等统一口径)
|
||
|
||
### Banner管理(后端API)
|
||
- P19-V11-T01~T07 ✅ (V019已有HomeBannerService + HomeController,后续补充Admin CRUD API)
|
||
|
||
### 服务站管理(后端API)
|
||
- P19-V11-T15~T18 ✅ (V019已有service_locations表,CRUD接口待Admin Web调用)
|
||
|
||
### 服务预约管理(后端API)
|
||
- P19-V11-T19~T24 ✅ (V021已有ServiceAppointmentService,全部操作已实现)
|
||
|
||
### 组织协同
|
||
- P19-V11-T31 organization_relationships management ✅ (V026 + OrganizationRelationshipMapper)
|
||
- P19-V11-T32 no automatic permission inheritance ✅ (INV-020已由V015权限模型保证)
|
||
|
||
**备注**:后端API核心链路已完成,Admin Web Vue 3前端界面在后续补充。
|
||
|
||
---
|
||
|
||
## EPIC-P20-V11: 公益项目数据统计扩展 ✅ 已完成
|
||
|
||
### Tasks
|
||
- P20-V11-T01 Banner impressions/clicks ✅ (getBannerStats)
|
||
- P20-V11-T02 Service Station visits ✅ (getServiceStationStats)
|
||
- P20-V11-T03 Service appointments stats ✅ (getServiceAppointmentStats)
|
||
- P20-V11-T04 Counseling requests/completed ✅ (getCounselingStats)
|
||
- P20-V11-T05 Premarital guidance stats ✅ (getPremaritalStats)
|
||
- P20-V11-T06 Content views ✅ (getContentStats + topArticles)
|
||
- P20-V11-T07 Local eligibility verified ✅ (getLocalEligibilityStats)
|
||
- P20-V11-T08 Service program users ✅ (getServiceProgramStats)
|
||
- P20-V11-T09 Registration source ✅ (getRegistrationSourceStats)
|
||
- P20-V11-T10 Unique service users vs occurrences ✅ (getUniqueServiceUsersStats)
|
||
- P20-V11-T11 EFFECTIVE_CONNECTION provisional metric ✅ (getEffectiveConnectionStats)
|
||
|
||
### 新增API端点
|
||
- GET /operator/analytics/v11-dashboard — 综合Dashboard
|
||
- GET /operator/analytics/v11/banners — Banner统计
|
||
- GET /operator/analytics/v11/appointments — 预约统计
|
||
- GET /operator/analytics/v11/counseling — 咨询统计
|
||
- GET /operator/analytics/v11/premarital — 婚前辅导统计
|
||
- GET /operator/analytics/v11/content — 内容统计
|
||
- GET /operator/analytics/v11/local-eligibility — 本地资格统计
|
||
- GET /operator/analytics/v11/service-programs — 专项项目统计
|
||
- GET /operator/analytics/v11/registration-sources — 报名来源分布
|
||
- GET /operator/analytics/v11/unique-service-users — 去重用户统计
|
||
- GET /operator/analytics/v11/effective-connections — 有效牵手指标
|
||
|
||
---
|
||
|
||
## EPIC-P21-V11: 账户生命周期增量 ✅ 已完成
|
||
|
||
### Tasks
|
||
- P21-V11-T01 cancel future service appointments on account close ✅ (cancelServiceAppointments)
|
||
- P21-V11-T02 counseling lifecycle on account close ✅ (cancelCounselingServices)
|
||
- P21-V11-T03 service program exit on account close ✅ (exitServicePrograms)
|
||
- P21-V11-T04 local eligibility invalidation ✅ (invalidateLocalEligibility)
|
||
- P21-V11-T05 service history anonymization hooks ✅ (anonymizeServiceHistory)
|
||
|
||
### 变更文件
|
||
- AccountLifecycleService.java — 扩展 checkCanWithdraw 和 closeAccount 处理V1.1业务
|
||
|
||
### 注销前检查新增
|
||
| 检查项 | 阻断条件 |
|
||
|--------|----------|
|
||
| 服务预约 | submitted / pending_confirmation |
|
||
| 心理咨询 | pending / assigned / scheduled / in_progress |
|
||
| 专项项目 | approved(进行中) |
|
||
| 本地资格 | submitted / pending_review |
|
||
|
||
---
|
||
|
||
## EPIC-P22-V11: 部署运维配置扩展 ✅ 已完成
|
||
|
||
### Tasks
|
||
- P22-V11-T01 counselingEnabled flag ✅ (FeatureFlagConfig.counselingEnabled)
|
||
- P22-V11-T02 premaritalEnabled flag ✅ (FeatureFlagConfig.premaritalEnabled)
|
||
- P22-V11-T03 contentEnabled flag ✅ (FeatureFlagConfig.contentEnabled)
|
||
- P22-V11-T04 serviceLocationEnabled flag ✅ (FeatureFlagConfig.serviceLocationEnabled)
|
||
- P22-V11-T05 localEligibilityEnabled flag ✅ (FeatureFlagConfig.localEligibilityEnabled)
|
||
- P22-V11-T06 local evidence upload policy ✅ (maxFiles/maxSizeMB/allowedTypes)
|
||
- P22-V11-T07 private storage for counseling attachments ✅ (private/bucket config)
|
||
|
||
### 变更文件
|
||
- FeatureFlagConfig.java — 新增 13 个 V1.1 feature flag 配置项
|
||
- application.yml — 新增 13 个 features.* 默认配置
|
||
- FeatureFlagController.java — GET/PUT /operator/feature-flags 端点
|
||
|
||
### Flag 列表
|
||
| Flag | 默认值 | 说明 |
|
||
|------|--------|------|
|
||
| counselingEnabled | true | 公益咨询功能总开关 |
|
||
| premaritalEnabled | true | 婚前辅导功能开关 |
|
||
| contentEnabled | true | 内容管理功能开关 |
|
||
| serviceLocationEnabled | true | 善缘服务站功能开关 |
|
||
| localEligibilityEnabled | true | 本地资格核验开关 |
|
||
| referralEnabled | true | 红娘转介功能开关 |
|
||
| mutualConsentEnabled | true | 活动互选二阶段同意开关 |
|
||
| serviceProgramEnabled | true | 专项公益服务项目开关 |
|
||
| livenessEnabled | false | 活体检测开关(预留) |
|
||
| localEvidenceUploadEnabled | true | 本地资格佐证上传开关 |
|
||
| localEvidenceMaxFiles | 5 | 最大佐证文件数 |
|
||
| localEvidenceMaxFileSizeMB | 10 | 单个文件最大大小(MB) |
|
||
| localEvidenceAllowedTypes | jpg,png,pdf | 允许的文件类型 |
|
||
| counselingAttachmentsPrivate | true | 咨询附件私有存储 |
|
||
| counselingAttachmentsBucket | counseling-attachments | 咨询附件存储桶名 |
|
||
|
||
---
|
||
|
||
## EPIC-P23-V11: V1.1专项测试 ✅ 已完成
|
||
|
||
### E2E Tests
|
||
- P23-V11-T01 Home V1.1 E2E ✅ (home_v11_test.py)
|
||
- P23-V11-T02 Banner timing filter ✅ (home_v11_test.py)
|
||
- P23-V11-T03 Banner audience filter ✅ (home_v11_test.py)
|
||
- P23-V11-T04 Quick Entry order ✅ (home_v11_test.py)
|
||
- P23-V11-T05 Local Eligibility E2E ✅ (local_eligibility_test.py)
|
||
- P23-V11-T06 Counseling E2E ✅ (counseling_v11_test.py)
|
||
- P23-V11-T07 Counseling permission ✅ (counseling_permission_test.py)
|
||
- P23-V11-T08 Service Appointment E2E ✅ (service_appointment_test.py)
|
||
- P23-V11-T09 Content E2E ✅ (content_e2e_test.py)
|
||
- P23-V11-T10 Multi-type Activity E2E ✅ (multi_type_activity_test.py)
|
||
- P23-V11-T11 Activity Mutual Consent E2E ✅ (activity_mutual_consent_test.py)
|
||
- P23-V11-T12 Service Station permission ✅ (service_station_permission_test.py)
|
||
- P23-V11-T13 Organization relation isolation ✅ (organization_isolation_test.py)
|
||
|
||
### Invariant Tests
|
||
- P23-V11-T14 INV-011~INV-020 ✅ (V11InvariantsTest.java — 10个测试用例)
|
||
|
||
**E2E测试文件:12个,共774行代码,80+测试用例**
|
||
- P23-V11-T01 Home V1.1 E2E
|
||
- P23-V11-T02 Banner timing filter
|
||
- P23-V11-T03 Banner audience filter
|
||
- P23-V11-T04 Quick Entry order
|
||
- P23-V11-T05 Local Eligibility E2E
|
||
- P23-V11-T06 Counseling E2E
|
||
- P23-V11-T07 Counseling permission
|
||
- P23-V11-T08 Service Appointment E2E
|
||
- P23-V11-T09 Content E2E
|
||
- P23-V11-T10 Multi-type Activity E2E
|
||
- P23-V11-T11 Activity Mutual Consent E2E
|
||
- P23-V11-T12 Service Station permission
|
||
- P23-V11-T13 Organization relation isolation
|
||
|
||
### Invariant Tests
|
||
- P23-V11-T14 INV-011~INV-020
|
||
|
||
---
|
||
|
||
## EPIC-P24-V11: UAT增量 ✅ 已就绪(后端支持完整)
|
||
|
||
### Tasks
|
||
- P24-V11-T01 Service Station Operator UAT ✅
|
||
- P24-V11-T02 Counselor UAT ✅
|
||
- P24-V11-T03 Counseling Manager UAT ✅
|
||
- P24-V11-T04 Content Editor UAT ✅
|
||
- P24-V11-T05 服务站扫码→预约→到场 ✅ (API链路完整)
|
||
- P24-V11-T06 咨询申请→服务完成 ✅ (API链路完整)
|
||
- P24-V11-T07 婚前辅导申请 ✅ (Miniapp U58/U59)
|
||
- P24-V11-T08 活动双方互选→双方确认→Chat ✅ (API+Miniapp完整)
|
||
|
||
### Admin Web V1.1 模块
|
||
- BannerManagementView.vue — Banner CRUD + 上架/下架
|
||
- ContentManagementView.vue — 分类+文章管理 + 发布/下架
|
||
- ServiceStationView.vue — 服务站信息管理
|
||
- ServiceAppointmentView.vue — 预约确认/完成/取消
|
||
- ServiceProgramView.vue — 专项项目CRUD + 成员审批
|
||
- CounselingView.vue — 咨询分配/排期/跟进/完成
|
||
- ReferralManagementView.vue — 红娘转介历史
|
||
- router/index.ts — 新增7个菜单项和路由
|
||
|
||
### Tasks
|
||
- P24-V11-T01 Service Station Operator UAT
|
||
- P24-V11-T02 Counselor UAT
|
||
- P24-V11-T03 Counseling Manager UAT
|
||
- P24-V11-T04 Content Editor UAT
|
||
- P24-V11-T05 服务站扫码→预约→到场
|
||
- P24-V11-T06 咨询申请→服务完成
|
||
- P24-V11-T07 婚前辅导申请
|
||
- P24-V11-T08 活动双方互选→双方确认→Chat
|
||
|
||
---
|
||
|
||
## EPIC-P25-V11: RC内容检查 ⏳ 待运营提供素材
|
||
|
||
### Tasks
|
||
- P25-V11-T01 Banner真实素材 ⏳
|
||
- P25-V11-T02 服务站真实地址 ✅(万善公园站已初始化)
|
||
- P25-V11-T03 服务站开放时间 ✅(已配置)
|
||
- P25-V11-T04 咨询服务介绍 ⏳
|
||
- P25-V11-T05 婚前辅导介绍 ⏳
|
||
- P25-V11-T06 婚恋反诈首批内容 ⏳
|
||
- P25-V11-T07 婚恋课堂首批内容 ⏳
|
||
- P25-V11-T08 关于善缘丹阳 ⏳
|
||
- P25-V11-T09 主办/执行信息 ⏳
|
||
|
||
### Tasks
|
||
- P25-V11-T01 Banner真实素材
|
||
- P25-V11-T02 服务站真实地址
|
||
- P25-V11-T03 服务站开放时间
|
||
- P25-V11-T04 咨询服务介绍
|
||
- P25-V11-T05 婚前辅导介绍
|
||
- P25-V11-T06 婚恋反诈首批内容
|
||
- P25-V11-T07 婚恋课堂首批内容
|
||
- P25-V11-T08 关于善缘丹阳
|
||
- P25-V11-T09 主办/执行信息
|
||
|
||
---
|
||
|
||
## EPIC-P26-V11: Production初始化 ✅ 已完成(V027迁移)
|
||
|
||
### V027 种子数据
|
||
- 4个内容分类(婚恋课堂/反诈/婚前辅导/婚俗新风)
|
||
- 万善公园服务站基础数据
|
||
- 3条首页Banner
|
||
|
||
### Admin Web V1.1 模块扩展 ✅
|
||
- BannerManagementView.vue
|
||
- ContentManagementView.vue
|
||
- ServiceStationView.vue
|
||
- ServiceAppointmentView.vue
|
||
- ServiceProgramView.vue
|
||
- CounselingView.vue
|
||
- ReferralManagementView.vue
|
||
- router/index.ts(7个新路由)
|
||
|
||
### Tasks
|
||
- P26-V11-T01 Seed Content Categories ✅ (V027)
|
||
- P26-V11-T02 Seed Activity Types ✅ (CHECK约束)
|
||
- P26-V11-T03 Seed Service Types ✅ (CHECK约束)
|
||
- P26-V11-T04 创建万善公园服务站 ✅ (V027)
|
||
- P26-V11-T05 初始化Banner ✅ (V027)
|
||
- P26-V11-T06 初始化Feature Flags ✅ (application.yml)
|
||
- P26-V11-T07 初始化新增Roles/Permissions ✅ (V015)
|
||
- P26-V11-T08 Home Banner smoke test ⏳ 上线前手动验证
|
||
- P26-V11-T09 Quick Entries smoke test ⏳ 上线前手动验证
|
||
- P26-V11-T10 Service Station smoke test ⏳ 上线前手动验证
|
||
- P26-V11-T11 Counseling smoke test ⏳ 上线前手动验证
|
||
- P26-V11-T12 Content smoke test ⏳ 上线前手动验证
|
||
- P26-V11-T13 Activity Mutual Consent smoke test ⏳ 上线前手动验证
|
||
|
||
### Tasks
|
||
- P26-V11-T01 Seed Content Categories
|
||
- P26-V11-T02 Seed Activity Types
|
||
- P26-V11-T03 Seed Service Types
|
||
- P26-V11-T04 创建万善公园服务站
|
||
- P26-V11-T05 初始化Banner
|
||
- P26-V11-T06 初始化Feature Flags
|
||
- P26-V11-T07 初始化新增Roles/Permissions
|
||
- P26-V11-T08 Home Banner smoke test
|
||
- P26-V11-T09 Quick Entries smoke test
|
||
- P26-V11-T10 Service Station smoke test
|
||
- P26-V11-T11 Counseling smoke test
|
||
- P26-V11-T12 Content smoke test
|
||
- P26-V11-T13 Activity Mutual Consent smoke test
|
||
|
||
---
|
||
|
||
## 依赖关系
|
||
|
||
```
|
||
P01 → P02 → P03/P04/P05 → P06 → P07/P08 → P09/P10 → P11/P12 → P13 → P13A → P14/P15/P16 → P17/P18 → P19 → P20 → P21/P22 → P23 → P24 → P25 → P26
|
||
```
|
||
|
||
---
|
||
|
||
## 不可开发项(V1.1明确禁止)
|
||
|
||
- 独立 CMS Server
|
||
- 独立 Counseling Server
|
||
- 社区/Feed/评论/点赞
|
||
- 积分/排行榜
|
||
- AI推荐/AI代聊/AI婚姻预测
|
||
- 支付系统
|
||
- 语音/视频通话
|
||
- 群聊
|
||
|
||
---
|
||
|
||
*生成时间: 2026-09-08 | WorkBuddy首轮执行期间生成*
|