Files
gaokao-volunteer-system/docs/ACTIVE_REMEDIATION_2026-06-13.md
Hermes 2893a45d8b
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
feat(6/19): 保留期门禁 + 支付失败持久化 + 文档校准
A1 删除/匿名化 180 天保留期门禁 (P0):
- admin/errors/codes.py + BIZ_ORDER_RETENTION_NOT_EXPIRED (E02002) -> HTTP 409
- admin/config.py + retention_days / GAOKAO_RETENTION_DAYS (默认 180)
- admin/routes/orders.py + _assert_retention_expired 守卫
- data/orders/deletion_service.py + RETENTION_GUARDED_STATUSES
- admin/tests/test_order_deletion.py + _expire_retention_window + 3 测试

B1 支付失败 webhook 持久化 (P1):
- data/payments/dao.py + failed_at/failure_reason/provider_trade_no/callback_payload
- data/payments/models.py + PaymentRecord 新字段
- data/payments/service.py handle_webhook 失败分支持久化
- data/payments/tests/test_webhook.py test_handle_webhook_persists_failed_status

A2 文档校准 (P1):
- README / PRD / ROADMAP / TECH_ARCHITECTURE 顶部对齐 6/19

B2 真相源分层 (P1):
- 6/13 整改板/执行板加历史快照前缀
- 新建 6/19 整改板/执行板
- CURRENT_STATE 顶部加 6/19 增量段 (在 6/13 真相源之上叠加)

dev-verify: 1175 passed (A1+B1+A2+B2) -> 1179 passed (+ T12-C),
coverage overall=85.05% / core=100%
2026-06-20 00:27:15 +08:00

316 lines
11 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.
# ACTIVE_REMEDIATION_2026-06-13
> ⚠ **历史快照2026-06-13 落盘版本,已被 6/19 当前版本取代)**
>
> 当前真相源已切换到 `docs/ACTIVE_REMEDIATION_2026-06-19.md`。
> 本文件保留仅为完整审计链可追溯;任何"当前仍然有效"判断以 6/19 版本为准。
最后更新: 2026-06-15
状态词: 当前仍然有效的问题清单(仅保留未解决项)
真相源: `docs/CURRENT_STATE.md`
来源基线:
- `reports/PRODUCT_PLANNING_TECH_ALIGNMENT_REVIEW_2026-06-13.md`
- 本轮复核与代码/文档真相校准结果
---
## 0. 使用规则(防止虚假完成和漂移)
本清单只保留“当前仍然有效”的问题。
以下类型不得再重复列为当前阻塞:
1. 已在代码中落地且已推送三仓的问题
2. 只属于历史评审快照、但已在后续修复的问题
3. 尚未进入当前版本范围、且已明确标注为后续版本(例如 T12 Web 自助 MVP的能力缺口
判断规则:
- 已落地 = 代码/配置/脚本/测试/文档已存在并已验证
- 已收尾 = 工作区干净 + main 已同步三仓
- 后续范围 = `CURRENT_STATE.md` 已明确声明“不属于 v2.1 当前完成范围”
---
## 1. 当前仍然有效的问题(只保留未解决项)
### A. 版本范围内已知但未完成的产品/合规缺口
#### A-1 用户端 Web 自助闭环未完成
严重度: P0面向 Web 自助产品时)
当前状态: 部分解决,仍未整体收口
范围归属: T12后续阶段
已完成:
- 前台公开入口 `/` / `/pricing` / `/checkout/{service_version}`
- 公开下单与 portal token 链路
- 支付后资料填写草稿/提交
- 站内状态页 / 报告查看 / PDF 下载最小闭环
- 后台订单列表/详情可见资料提交状态
仍缺:
- 前台套餐页更完整交互与产品化打磨
- 真实支付接入与回调验签的线上 acceptance
- `info_submitted -> serving` 自动处理主链
- 完整站内通知/交付产品化
- 自助购买后自动处理主链路的生产化闭环
说明:
- 当前不是“完全没做 T12”而是“本地 MVP 主链大部分已落地,但整体仍未到线上可验收完成”。
- 正确表述应为:`v2.1 完成了人工服务运营闭环T12 已形成本地 MVP 主链,但线上商业闭环仍未完成`
建议动作:
- 以 T12 为唯一主线推进,不在旧报告中分散描述
- 后续优先收 `自动处理主链``真实支付 acceptance`
#### A-2 支付、退款、对账闭环未完成
严重度: P0
当前状态: 部分解决,仍受外部前置阻塞
范围归属: T12 / 后续商业化主线
已完成:
- 支付单模型与 `mock` / `alipay_sim` / `alipay` provider 抽象
- `POST /api/public/payments/alipay/notify`
- `GET /portal/payment-return`
- 本地 RSA2 签名校验 / 金额校验 / 幂等防重
- refund 占位接口与 portal `refund_pending` 状态
仍缺:
- 真实商户主体 / 产品签约 / app_id
- 私钥与支付宝公钥在真实环境装载
- 备案域名与公网 `notify_url`
- 沙箱/生产真实支付 acceptance
- 对账任务与退款回写/异常补偿产品化
说明:
- 当前剩余问题不再是“支付域没建起来”,而是“真实 provider 线上验收与商业化配套未完成”。
建议动作:
- 保持 `docs/PAYMENT_PROVIDER_ONBOARDING.md` 为真实接入 runbook
- 在具备真实商户与域名后执行沙箱/生产 acceptance
#### A-3 自动交付主链未形成完整产品级服务
严重度: P1
当前状态: 部分解决
范围归属: T12 / delivery service 后续主线
已完成:
- `delivery_notifications` 事件表
- `report_ready` 事件自动落库
- `status / attempt_count / last_attempt_at / failure_reason` 追踪字段
- 站内查看 + PDF 下载最小交付闭环
- `DeliveryDispatcher` + `scripts/gaokao-delivery-dispatch.py`
- `ready -> sent` / 缺文件 `-> failed` 的最小执行链
- 站内通知发送器dispatch 时真实生成 `station_notice` 内容,并在 portal 状态页向用户展示“通知已发送”
- 真实邮件通知发送器:`SMTPDeliverySender` + `customer_email` 采集链 + `email` 通道 dispatch本地 stub SMTP 已验证)
- dispatcher/watchdog runbook + systemd/cron 样例(`docs/DELIVERY_RETENTION_OPS_RUNBOOK.md` / `deploy/systemd` / `deploy/cron`
仍缺:
- 自动重试调度 / 生产告警链watchdog/systemd/cron 样例已补,生产安装未完成)
- 面向用户的独立通知审计页
- 对账/退款与交付失败补偿联动
说明:
- 当前已不再是“报告生成=无交付状态”,但仍未达到完整 delivery service 产品级能力。
建议动作:
- 先把站内通知或邮件发送器做成唯一 MVP 主通道
- 再补失败重试与告警
#### A-4 合规基线已建立,但正式法务审定与执行工具仍未完结
严重度: P1
当前状态: 部分解决
范围归属: 产品/合规主线
已完成:
- `docs/LEGAL_PRIVACY_BASELINE.md`
- `docs/PRIVACY_POLICY_DRAFT.md`
- `docs/DATA_RETENTION_AND_DELETION.md`
- 服务条款草案、删除执行 SOP
- 前台资料提交同意字段落库
- 后台 `DELETE /api/orders/{id}?mode=delete|anonymize&reason=...` 最小执行入口
- 删除时自动清理报告 HTML/PDF并写入 `order_deletion_audits`
仍缺:
- 正式法务审定版本
- 前台/客服删除工单流程
- 目标生产主机上的自动清理实际安装/留痕(仓库已提供 runbook + systemd/cron 样例)
- 合规文本上线前最终校对
说明:
- 当前不再是“完全没有合规基线”,而是“文档基线 + 后台最小执行入口 + retention cleanup 脚本与调度样例已建,前台流程与生产安装留痕仍待完成”。
#### A-5 业务数据备份/恢复/密钥托管已形成基线,但生产化仍未完结
严重度: P1
当前状态: 部分解决
范围归属: 运维/可靠性主线
已完成:
- `docs/BACKUP_AND_RECOVERY_PLAN.md`
- `docs/KEY_MANAGEMENT_BASELINE.md`
- `docs/plans/P1-8-backup-restore-drill.md`
- `scripts/backup_snapshot.sh` 最小目录快照入口
- `scripts/backup_verify.sh` 本地恢复校验入口
- `scripts/backup_restore_smoke.py` 恢复副本最小服务 smoke
- `ops/cron/gaokao-backup.crontab.example`
- `ops/systemd/gaokao-backup*.service|timer` 定时接入口径示例
仍缺:
- 异机/异地备份落地
- 目标主机上的 cron/systemd 实际安装、日志与告警验收
- 密钥轮换的真实执行记录
说明:
- 当前不再是“只有文档没有验证”而是“已有本地快照、完整性校验、restore smoke 和定时接入口径样例,但生产化运维链未闭环”。
---
### B. 已完成范围内仍需继续增强的真实质量问题
#### B-1 crowd_db 27 省“结构覆盖”不等于“高质量覆盖”
严重度: P1
当前状态: 部分解决
事实:
- 27 省 JSON 文件已存在
- `risk_report` 已输出 `quality_level / quality_label`
- `gaokao-data-trace` human 输出已展示质量等级
- 低置信省份仍主要是“结构覆盖已完成,但推荐质量待增强”
风险:
- 若对外统一宣传“27省高质量反扎堆推荐”仍有误导风险
建议动作:
- 在 README / 产品文案中继续避免“27省高质量推荐全覆盖”表述
- `data.crowd_db.quality_summary` 已补 province-level summary后续可接产品文案/页面
- 继续提升非湖南省份高置信数据密度
#### B-2 本地验证环境已基本统一,仍待生产 runner 长期观察
严重度: P1
当前状态: 已解决(本地/CI 统一脚本门禁已落地)
已解决:
- requirements-admin / requirements-dev 已修正
- `scripts/dev-verify.sh` 已成为本地统一入口
- `.github/workflows/ci.yml` 已统一走 `scripts/dev-verify.sh`
- `scripts/check_coverage_gate.py` 已纳入 dev-verifycore coverage gate 与本地/CI 对齐
仍缺:
- 生产 runner / Python 3.12 长期观察(当前已通过 skip 兼容 SMTP stdlib 移除)
建议动作:
- 后续若迁移 Python 3.12+,将 SMTP stub 从 stdlib `smtpd/asyncore` 迁移到 `aiosmtpd`
#### B-3 历史评审文档仍可能被误读为当前阻塞
严重度: P2
当前状态: 部分解决
已解决:
- 对齐评审报告已加历史快照说明
- `CURRENT_STATE.md` 已建立
已解决:
- `docs/archive/2026-06-historical-snapshots/AUDIT_REPORT_2026-06-11.md` 已标注历史快照
- `docs/archive/2026-06-historical-snapshots/REMEDIATION_TASK_BOARD_2026-06-11.md` 已标注历史快照
- `reports/PROJECT_SYSTEM_REVIEW_2026-06-13.md` 已标注历史快照与真相源跳转
仍缺:
-
---
## 2. 明确不再重复追踪的问题(已解决)
以下问题已经修复,不应再出现在新的整改清单里:
1. PRD P2/P3 功能编号冲突
2. ROADMAP 中已落地功能仍未勾选
3. TECH_ARCHITECTURE 仍标“设计中”
4. FINAL_COMPLETION_REPORT 仍为“条件完成”
5. requirements 未声明 Jinja2 / WeasyPrint / cairocffi / ruff / mypy
6. CI 的 `--cov-fail-under=80` 与实际门槛冲突
7. GitHub origin 凭据阻塞发布
8. T1~T11 Goal 阻塞链问题
这些问题如果未来再次出现,应视为新回归,而不是沿用旧问题编号。
---
## 3. 推荐的单一后续主线
为了避免继续漂移,建议把后续工作只收敛到 3 条主线:
### 主线 1T12 Web 自助 MVP
目标:补齐“用户端自助下单/支付/资料填写/站内交付”闭环
### 主线 2合规与数据治理
目标:隐私政策 / 监护人同意 / 备份恢复 / 密钥托管
### 主线 3数据质量增强
目标:提升非湖南省份的 crowd_db 置信度与可解释性
不建议再做的事:
- 重复写“已完成能力”的审计报告
- 继续把历史快照问题当作当前阻塞
- 在 T12 未闭环前继续泛化更多高级功能
---
## 4. 最小执行板(当前仍值得做)
| ID | 任务 | 优先级 | 是否属于已完成阶段问题 |
| ---- | ------------------------------------------ | ------ | ---------------------- |
| X-01 | 为 T12 建立唯一实施板和验收报告模板 | P0 | 否(后续阶段) |
| X-02 | 建立支付域设计(订单/支付/退款/回调/对账) | P0 | 否(后续阶段) |
| X-03 | 建立 delivery service 设计 | P1 | 否(后续阶段) |
| X-04 | 新建 LEGAL_PRIVACY_BASELINE 文档 | P1 | 是(当前真实缺口) |
| X-05 | 新建 BACKUP_AND_RECOVERY_PLAN 文档 | P1 | 是(当前真实缺口) |
| X-06 | 增加 dev-verify.sh 一键验证脚本 | P1 | 是(当前真实缺口) |
| X-07 | 为历史报告补统一“历史快照”头注 | P2 | 是(当前真实缺口) |
| X-08 | 为 crowd_db 增加数据完整度等级与报告文案 | P1 | 是(当前真实缺口) |
---
## 5. 当前最准确的最终表述
> v2.1 已完成“人工服务运营增强系统”闭环,不应再被旧报告中的已修复问题干扰;当前真正仍有效的问题集中在 T12 Web 自助闭环、支付/交付、合规、备份恢复和多省高置信数据质量这五个方向。