对 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 未启动,按计划每阶段出报告后停止等待确认。
694 lines
30 KiB
Markdown
694 lines
30 KiB
Markdown
# 善缘丹阳 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首轮执行期间生成*
|