Files
danyang-match/docs/JIRA_BACKLOG.md

79 KiB
Raw Permalink Blame History

善缘丹阳 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 私有桶零引用 → 死配置(遗留);「features: 块不存在」为误判(2026-09-18 二次修正:application-dev.yml/application-docker.yml 均有该块且实际生效,仅基础 application.yml 无);另 AppController#getConfig 硬编码第二份 features(D-22-E 遗留);新增 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.py7 用例:重放**逐字节相同**、同键只落一条、作用域隔离、**5 线程并发同键业务恰好落库一次**、无键重复 Like 不得 500);后端 **669 / 0 failures / 0 errors / 3 skipped**(首轮 664/1 failure 为**有意设计的迁移基线守卫**,按流程由 44 抬至 46);小程序tsc --noEmitEXIT=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 通过用户验收
批 2/3 收尾(2026-09-19) 基本完成 E2E 互选 8 + 预约 8 场景真实实现(本机 65 passed)+ INV-011 显式守卫;隐私设置接真实落库(V047)、5 死开关 + 2 死配置移除(产品裁定)、PUT /feature-flags 真持久化(V048)、5 个无 SQL Mapper 方法补齐;Task 3.3 四项 + 红娘服务拦截接线全部完成(互选 expires_at 写入接线、随访审计 recordSensitiveAccess、随访正文风险检测、Onboarding 本地资格确认已实现并回写;checkCanWithdraw 红娘 blocker 首次生效 + terminateActiveMatchmakerServices 竞态兜底);数据保留流程已落地(产品 2026-09-19 确认保留期下限 36 个月:V049 users.closed_at + DataRetentionService 人工审核清除 + 守卫 5 用例 + 隐私政策 §3.3 / PIA §8 同步修订);仅余:CI 全绿实测(需 GitHub Actions 环境;本机已模拟 CI 序列 65/65,2026-09-20)
V1.1 UAT / RC / Production 进行中 /me/* 契约已收敛(2026-09-16);当前停在 Phase 24(UAT)启动门前 —— 启动需用户确认,前置收尾见 docs/superpowers/plans/2026-09-18-phase23-closeout-and-uat-readiness.md

命名规范

  • 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 ✅(业务+UI 已通过用户验收 2026-09-16)
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 ⚠️ 部分关闭(E2E 场景实现与 Deployment/Ops 复验列为遗留)
EPIC-P24-V11 P24 UAT增量 P1 ⏳ 待用户确认启动
EPIC-P25-V11 P25 RC内容检查 P1 ⏳ 待运营素材
EPIC-P26-V11 P26 Production初始化 P1 ⏳ Smoke 待上线前手动

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 本地资格步骤 —— 2026-09-19 复核确认已实现:首页 onboarding 消息/动作覆盖 not_declared / needs_evidence,动作「声明本地资格」路由至 /pages/local-eligibility/local-eligibility (pages/index/index.ts buildOnboardingMessage / buildOnboardingActions / handleQuickAction), eligStatus 取自 /me/status 的 localEligibilityStatus(该字段断言守卫见 MeStatusLocalEligibilityGuardTest); 同轮清除语义错位的死状态 isVerified(WXML/WXSS 零引用,实名判定是 userState.verified)

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首轮执行期间生成