Files
danyang-match/docs/JIRA_BACKLOG.md
T
WorkBuddy fd7195ecb0 fix(safety): Phase 10 复验 —— 修复图片上传魔数校验死代码(生产故障)/ 高风险词写入日志
对 Phase 10(Image & Chat Safety)执行 KEEP-VERIFY 复验:不采信历史 ✅,逐条核对
图片私有访问、类型/大小/魔数校验、审核与水印、风险识别/举报/违规处理、日志脱敏。
Gate 判定通过,发现并修复 2 处缺陷,并推翻旧报告 2 项安全声明。

D1(Critical,生产故障)图片上传的类型与魔数校验整条是死代码
  - PhotoService.uploadAndSave 用 `header = new byte[Math.min(12, stream.available())]`
    仅分配零值缓冲,从不调用 stream.read(...) → validateMagicNumber 对任何文件都收到
    12 个 0x00 → 恒返回 false → 恒抛"无效的图片文件头"。
  - 影响链(已确认线上触发):小程序 local-eligibility-supplement.ts 以
    photoType='local_eligibility' 调 POST /photos/upload → 本地资格佐证上传 100% 失败。
  - 次生问题:isAllowedMimeType(image-only 白名单)在 local_eligibility 分支之后
    无条件执行,即使魔数修好,application/pdf 仍被挡,而 FeatureFlagConfig
    的 localEvidenceAllowedTypes 明确允许 pdf;另有未 mark 的 stream.reset() 无效调用。
  - 测试为何没发现:PhotoServiceTest 只对 validateMagicNumber 传手写字节做单测,
    从不经过 uploadAndSave,该路径缺陷完全无覆盖。
  - 修复:改用 try(InputStream){ header = s.readNBytes(12); } 真正读取;
    MIME 校验按 photoType 分流(local_eligibility 走自己的白名单含 pdf);
    魔数校验仅对图片执行、PDF 跳过;移除死 reset();上传用全新流与校验流隔离;
    generateFileKey 重载按 Content-Type 推断扩展名,PDF 不再拿到误导性 .jpg key。

D2(Low)高风险词写入普通日志
  - ChatSafetyService.scanContent 把命中的高风险词原样写入 log.warn,
    与同文件 CONTACT 分支"只记 pattern 不记内容"矛盾,且违反本阶段 Gate。
  - 修复:改为 log.warn("Chat content matched HIGH_RISK keyword (blocked)")。

推翻的旧声明(docs/Phase-10-Completion-Report.md)
  - 「伪装恶意图片被拒(Magic Number校验)」不成立:该校验运行时恒失败,
    连合法图片也一律被拒(fail-closed 到不可用),安全属性并非由它提供。
  - 「EXIF清理预留(PhotoService.stripExif占位)」不存在:全仓库无该符号。
    且 getUploadToken 客户端直传路径服务端无法介入清理 EXIF。
  - 已在旧报告顶部加状态注记,指向本次复验报告。

测试
  - 新增 PhotoUploadValidationTest(6 用例),用 MockMultipartFile 真正走一遍
    uploadAndSave:合法 JPEG/PNG 通过且确实调用 putObject、伪造 Content-Type 被魔数挡、
    PDF 佐证不被 image-only 挡且 key 以 .pdf 结尾、非法 MIME 被拒、超大被拒。
  - 负向验证:临时把魔数守卫改为 if(false && ...) → 恰好 spoofedContentTypeRejectedByMagic
    一个用例变红,其余 5 个仍绿;随后还原并 grep 确认无 NEGATIVE-CHECK-TEMP 残留。
  - 全量回归(离线容器 danyang-match-backend-test,mvn -o test):
    334 tests / 0 failures / 0 errors / 3 skipped / BUILD SUCCESS(基线 328,+6)。

登记 gap(不自动实现,待产品确认)
  - 图片水印:全仓库无实现;主计划未列硬需求,仅"开发执行计划修订版"提"高级动态水印"。
  - EXIF 清理:旧声明不存在;客户端直传路径服务端无法介入,需改为接收侧重编码。
  - 直传凭证路径(getUploadToken)无服务端内容校验且不落 DB 记录 → 后续 getSignedUrl
    归属校验会查不到 UserPhoto 行,属契约层缺口,超出本阶段安全 Gate 范围。
  - 违规自动升级:ChatSafetyService 注释明确属 Phase 17 范围,当前 high 仅拦截不落库。

文档:新增 Phase-10-V11-Recovery-Completion-Report-2026-09-16.md;
旧报告加状态注记;主计划 Phase 10 复选框置 ✅;STATUS / JIRA_BACKLOG 同步(334 tests)。

Phase 11 未启动,按计划每阶段出报告后停止等待确认。
2026-09-16 21:00:52 +08:00

694 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 善缘丹阳 V1.1 Jira Backlog
> V1.0 Phase 01~26 基础 + V1.1 增量任务合并基线
> 版本:v1.1.0-dev | 最后更新:2026-09-08
> **2026-09-16 状态校正:** Phase 07 UI 已按 2026-09-13 规格重新实现,**首批 11 页于 2026-09-16 通过用户验收(结论:基本达标)**,本文件此前"视觉否决/REOPENED"口径随之关闭。
>
> **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 尚未获准 |
| 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: 公益婚恋咨询与婚前辅导 ✅ 核心链路已完成(V1.1 MVP)
### Story: 数据模型
- P13A-T01 counseling_services migration ✅ (V022)
- P13A-T02 counseling_followups migration ✅ (V022)
- P13A-T03 indexes ✅ (V022)
- P13A-T04 migration tests ⏳ 待补全
### Story: 用户咨询
- P13A-T05 GET counseling service intro ✅
- P13A-T06 POST counseling request ✅
- P13A-T07 GET my counseling ✅
- P13A-T08 GET counseling detail ✅
- P13A-T09 cancel counseling ✅
### 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 ✅ (companionUserId 字段)
### Story: Miniapp
- P13A-T14 U55 婚恋咨询介绍 ✅
- P13A-T15 U56 申请咨询 ✅
- P13A-T16 U57 我的咨询 ✅
- P13A-T17 U58 婚前辅导介绍 ✅
- P13A-T18 U59 婚前辅导申请 ✅
### Story: 后台
- P13A-T19 Counseling Queue ✅ (getPendingQueue)
- P13A-T20 Counseling Detail ✅ (getCounselingDetail)
- P13A-T21 Assign Counselor ✅
- P13A-T22 Schedule ✅
- P13A-T23 Start ✅
- P13A-T24 Followup ✅
- P13A-T25 Complete ✅
- P13A-T26 Close ✅
### Story: 权限与隐私
- P13A-T27 counselor assigned scope ✅ (getCounselorAssignedServices)
- P13A-T28 counseling_manager scope ⏳ 待补充(Admin Web Phase 19)
- P13A-T29 matchmaker deny counseling notes ✅ (常量隔离,INV-013)
- P13A-T30 generic admin deny sensitive note ⏳ 待补充(Admin Web Phase 19)
- P13A-T31 SensitiveAccessLog ⏳ 待补充(随访内容写入审计日志)
### Story: 风控联动
- P13A-T32 counseling risk referral ⏳ 待补充(后续 Phase)
- P13A-T33 RiskEvent source=counseling ⏳ 待补充(后续 Phase)
**备注**:V1.1 MVP 核心链路已实现,Admin Web 前端、高级权限细分、风控联动在后续 Phase 补充。
---
## 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: 活动互选二阶段同意重构 ✅ 核心链路已完成(V1.1 MVP)
### Data Tasks
- P16-V11-T01 activity_mutual_connection_consents table ✅ (V024)
- P16-V11-T02 pair unique active constraint ✅ (UNIQUE index with LEAST/GREATEST)
### 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)
- P16-V11-T08 create Match Episode ✅ (existing RelationshipService.confirmActivityInterest)
- P16-V11-T09 create Conversation ✅ (not auto-created, per INV-015)
- P16-V11-T10 existing active Match reuse ✅ (hasActiveMatch check)
- P16-V11-T11 prior Unmatch new episode ✅ (findLatestMatch + priorUnmatchExists)
- P16-V11-T12 decline handling ✅ (declineConnection)
- P16-V11-T13 timeout handling ⏳ 待补充(后续Phase)
### 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)
---
## EPIC-P18-V11: 申诉保持 ✅ 已验证(V1.0基础保持不变)
### Verification
- V013 appeals 表结构完整(ban_appeal / suspend_appeal)
- AppealService: FeatureFlag 控制 + 幂等性 + 可申诉限制(仅 ban/suspend)
- AppealController: 用户端 account-status / submit / my
- AppealOperatorController: 后台端 pending / detail / process / stats
- Miniapp: appeal 页面已注册
- 申诉通过 → 自动解除对应 risk_action(status→revoked)
- 申诉被拒 → 维持原处置
### 新增文件
- 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 Analytics
### 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首轮执行期间生成*