Files
gaokao-volunteer-system/docs/CURRENT_STATE.md

394 lines
24 KiB
Markdown
Raw Normal View History

# CURRENT_STATE
最后更新: 2026-06-26
状态词: 本地验证完成v2.1 主链与 6/20/6/21 增量仍成立crowd_db 全国 31 省口径全部达 high当前 live 基线为 31 high / 0 usable / 0 skeletoncrowd_db 质量门槛已硬化为综合判定,防静默升级;本地服务启动 + integration/user_simulation E2E 已复跑通过;新增 30 组分段样例复核入口 E2E 已通过30 组中 26 组公开支持省份已完成完整用户全链路模拟)
feat(cli): add order delegation + doctor self-check (phase 3) docs-only + cli: extend scripts/gaokao-cli with two thin wrappers without changing data/rules, data/majors_catalog, or rules/_truth. - gaokao-cli order <subcommand> delegates argv to data.orders.cli.main with the 'order' prefix stripped, so callers can use the unified command face without changing the existing orders parser. - gaokao-cli doctor <json?> returns a single self-check payload that reuses RuleLoader + MajorsCatalogLoader (no new dependencies, no gaokato/ scaffolding). Truth-root or catalog-root failures degrade gracefully with structured {error, ok=false} sections instead of raising. - tests/test_cli_doctor_phase3.py covers: help text, order delegation to list subcommand, doctor ok-path, doctor failure-path. Also re-aligns docs/ACTIVE_EXECUTION_BOARD_2026-06-17.md (new) + docs/CURRENT_STATE.md (single execution口径) + rules/majors source- of-truth index files so design-phase numbering no longer drifts from execution-phase numbering. Pre-existing 2026-06-16 optimization board and 2026-06-17 phase2 plan are demoted to historical snapshots. P0_P1_P2 remediation plan §4 historical cards get a red warning banner so they are not re-read as current pending. Verification: - focused: 4 passed - dev-verify: 770 passed, 1 failed (alipay_sim E2E failure pre-existed this commit; caused by an uncommitted upstream edit in admin/routes/web_public.py that rewires payment_return -> /portal/{token}/payment-success while the E2E still asserts /portal/{token}/status; out of scope for this commit and intentionally not touched.)
2026-06-17 18:05:16 +08:00
本轮增量(当前工作区,基于 HEAD `dbb8fb7` 继续深度升级):
- crowd_db 当前 live 基线已实测为 `31 high / 0 usable / 0 skeleton`
- `data/crowd_db/*.json` 实存 31 个文件;`loader.py` 已支持全国 31 省级行政区
- `python -m data.crowd_db.quality_summary --human` 已确认最后 4 省(新疆 / 广西 / 西藏 / 宁夏)已落地并进入 high
- `pytest -q data/crowd_db/tests/test_score_distribution.py data/crowd_db/tests/test_subject_requirements.py data/crowd_db/tests/test_program_type.py data/crowd_db/tests/test_crowd_db_data_quality.py data/crowd_db/tests/test_provenance_query.py``57 passed`
- 2026-06-26 新增深度接入:`广西` / `宁夏` 已补 `score_distribution`(官方一分一档/一分段统计 + 本科线)
- 当前 `score_distribution` 覆盖已达 **31/31 省**;其中 `新疆 / 西藏` 已补齐官方最低控制分数线级别接入,但两省暂未检索到公开一分一段表
- 本轮本地验证附加证据:`GAOKAO_SKIP_INSTALL=1 bash scripts/dev-verify.sh` => `1302 passed, 3 skipped``scripts/integration_test.py` => `overall PASS``scripts/user_simulation.py` => `overall PASS`
- 新增 30 组分段样例 E2E`reports/score_range_e2e_2026_06_26.json` => `review_start 30/30 通过`,且对 6 组公开支持省份样例做了 `公开下单 -> portal status` 深层抽样,结果 `6/6 通过`
- 新增 30 组完整全链路样例 E2E`reports/score_range_fullchain_e2e_2026_06_26.json` => 在 30 组样例中,`26` 组属于当前公开下单支持省份,已全部走通 `下单 -> 支付模拟 -> payment-success -> portal info 提交 -> portal status -> review/start -> review/action(full_plan/cwb)`,结果 `26/26 通过`;其余 `4` 组因不在 `_public_supported_provinces()` 中按契约跳过完整下单链路
- 新增 100 分数真实用户验证:`reports/SCORE_RANGE_FULLCHAIN_100_VALIDATION_2026-06-26.md` => 全量入口 `100/100` 通过、公开支持省份完整主链路 `87/87` 通过、非公开支持省份合同边界 `13/13` 正确阻断;`scripts/dev-verify.sh` 已纳入 `12` 例 smoke E2E 回归
- 当前工作区未提交修改:`data/crowd_db/xinjiang.json``data/crowd_db/xizang.json``data/crowd_db/tests/test_score_distribution.py``docs/CURRENT_STATE.md``docs/CROWD_DB_NATIONALIZATION_SOURCE_OF_TRUTH.md``reports/score_range_e2e_2026_06_26.json``scripts/score_range_fullchain_e2e.py``reports/score_range_fullchain_e2e_2026_06_26.json``scripts/score_range_fullchain_100_e2e.py``reports/score_range_fullchain_100_cases_2026_06_25.json``reports/score_range_fullchain_100_batches_2026_06_26.json``reports/score_range_fullchain_100_batches_2026_06_26.csv``reports/score_range_fullchain_100_e2e_smoke_2026_06_26.json``reports/score_range_fullchain_100_e2e_2026_06_26.json``reports/score_range_fullchain_100_e2e_boundary_2026_06_26.json``reports/SCORE_RANGE_FULLCHAIN_100_VALIDATION_2026-06-26.md``reports/SCORE_RANGE_FULLCHAIN_100_EXEC_SUMMARY_2026-06-26.md``tests/test_score_range_fullchain_100_script.py``tests/test_score_range_fullchain_e2e_typing.py``tests/test_dev_verify_entrypoint.py`
真相源优先级:
1. 本文件
2. `reports/STRICT_SYSTEM_REVIEW_2026-06-24.md`6/24 最新严格系统复审汇总版149 passed, 1 warning当前建议作为最新审查结论
3. `reports/STRICT_SYSTEM_REVIEW_2026-06-23.md`6/23~6/24 历史滚动审查过程稿,保留发现/修复轨迹)
4. `docs/CROWD_DB_NATIONALIZATION_SOURCE_OF_TRUTH.md`(全国高信任建设当前口径与批次真相)
5. `docs/ACTIVE_REMEDIATION_2026-06-20.md`6/20 当前整改清单,**取代 6/19 历史快照**
6. `docs/ACTIVE_EXECUTION_BOARD_2026-06-20.md`6/20 当前执行板,**取代 6/19 历史快照**
7. `docs/ACTIVE_REMEDIATION_2026-06-19.md`**已降级为历史快照**
8. `docs/ACTIVE_EXECUTION_BOARD_2026-06-19.md`**已降级为历史快照**
9. `docs/plans/2026-06-23-national-high-trust-crowd-db-plan.md`(全国高信任建设详细计划)
10. `docs/plans/2026-06-19-production-readiness-remediation-plan.md`6/19 整改计划)
11. `reports/PRODUCTION_STRICT_REVIEW_2026-06-19.md`6/19 复审报告)
12. `docs/plans/2026-06-17-phase2-majors-catalog-implementation-plan.md`Phase 2 已收口快照)
13. `docs/DESIGN_RULES_TRUSTED_CLI_2026-06-16.md`设计快照Phase 编号需与执行口径消歧)
14. `docs/PROJECT_PLANNING_REALIGNMENT_2026-06-16.md`(历史规划/实现漂移审计)
15. `docs/RULES_SOURCE_OF_TRUTH.md`(规则真相源索引;待补建)
16. `docs/MAJOR_DATA_SOURCE_OF_TRUTH.md`(专业目录真相源索引)
17. `docs/CLI_API_MAPPING.md`CLI/API 映射索引)
18. `docs/P0_P1_P2_REMEDIATION_PLAN_2026-06-14.md`历史整改板§4 卡片以 §2.1 状态归一为准)
19. `docs/FRONTEND_UI_AUDIT_2026-06-16.md` / `docs/FRONTEND_UI_EXECUTION_BOARD_2026-06-16.md`
20. `docs/ACTIVE_REMEDIATION_2026-06-13.md`**已降级为历史快照**
21. `docs/ACTIVE_EXECUTION_BOARD_2026-06-13.md`**已降级为历史快照**
22. `product/PRD.md` / `product/ROADMAP.md` / `docs/IMPLEMENTATION_PLAN_v2.md`
23. `docs/PRODUCTION_DEPLOYMENT_CHECKLIST_2026-06-15.md`
24. `reports/PRODUCT_PLANNING_TECH_ALIGNMENT_REVIEW_2026-06-13.md`(历史评审快照)
---
## 0. 6/20 增量段(叠加在 6/19 真相源之上)
feat(ops 6/20 v2.1.3): 生产加固 + L-A 送审前修复 + crowd_db 质量契约 ## 实现内容 (6 项改动) 1. **admin /health 端点增强** — 主键契约 status:ok 保持 + checks 子对象 - db_writable: connect + CREATE TEMP TABLE + INSERT + SELECT + DROP - disk_writable: 在 ops_alert_log_path 目录创建临时文件 + 删除 - settings_valid: 复用 is_jwt_secret_secure 判断 2. **_enforce_jwt_secret_policy** — prod env 使用 dev 默认 JWT / 长度<32 → fail-closed 3. **_enforce_default_admin_password_policy** — prod env 用 admin123 / 长度<10 / 字符类<3 → fail-closed 4. **L-A R7: admin UI footer** — dashboard.html (592 行) + ui.py 内联 admin/orders/new 模板加 footer 隐私政策 + 数据删除 + 服务说明链接, 与 portal _render_footer_links() 同口径 5. **L-A R1+R4: LEGAL_PRIVACY_BASELINE 文档同步** - §6 移除孤儿 'admin' consent_channel 值 (代码侧从未实际产生) - §7 已具备/尚缺 重写, 显式归到 6/20 增量 6. **Q-A: tests/test_crowd_db_data_quality.py** — 8 个测试锁住 - 27 省总数 + 仅湖南 high + 其它 26 省 ≤ usable - 高考生源大省 (广东/江苏/北京/上海/山东/河南/四川/湖北) 不在 high 集合 - data_year=2025 (6/25 后需显式更新) ## 测试 - 4/4 RED → GREEN (admin/tests/test_health.py: JWT/admin password 拒绝 dev 默认值) - 8/8 GREEN (data/crowd_db/tests/test_crowd_db_data_quality.py: 数据质量契约) - 3 回归修复 (test_app.py + test_routes.py + test_health.py 适配新 /health checks 字段) - 31/31 GREEN (admin/tests/test_app.py + test_routes.py + test_health.py) ## 报告 - reports/LA_LEGAL_PRIVACY_PRE_AUDIT_2026-06-20.md (363 行, 9 风险 0 阻塞) - reports/QA_CROWD_DB_NON_HUNAN_DENSITY_AUDIT.md (45 行, CRITICAL 文档失真已规避) ## 文件 M CHANGELOG.md (v2.1.3) M admin/config.py (2 个 _enforce_*_policy + load_settings post-load) M admin/routes/health.py (3 个 _check_* + checks 子对象) M admin/routes/ui.py (admin/orders/new 模板加 footer) M admin/static/dashboard.html (footer 块) M admin/tests/test_app.py (适配 checks 字段 + regex 兼容) M admin/tests/test_health.py (4 个新测试) M admin/tests/test_routes.py (适配 checks 字段) M docs/CURRENT_STATE.md (0.3-0.5 增量段) M docs/LEGAL_PRIVACY_BASELINE.md (§6 清理 + §7 重写) + data/crowd_db/tests/test_crowd_db_data_quality.py (8 tests) + reports/LA_LEGAL_PRIVACY_PRE_AUDIT_2026-06-20.md + reports/QA_CROWD_DB_NON_HUNAN_DENSITY_AUDIT.md
2026-06-20 18:36:23 +08:00
6/20 落地了 1 项 P1 整改 + 端到端本地 acceptance 步骤 + 1 项合规补录统一化
- 生产加固 + L-A 送审前修复 + crowd_db 质量契约 + 真相源分层。**本节是当前唯一增量**
### 0.1 T12-D retention cleanup conn ownership 修复P1
- 现象: `retention_cleanup.run_cleanup(apply=True)` 一次命中 ≥ 2 笔终端态订单时,第二笔起全部 `sqlite3.ProgrammingError: Cannot operate on a closed database`
- 根因: `OrdersDAO.__exit__` 不区分连接所有权,对外部 service 传入的 `self._conn``close()``deletion_service.anonymize_order` 把 service 持有的连接包成 `OrdersDAO(self._conn)` 走 with-block第一笔执行完就把连接关掉
- 修复: `OrdersDAO.__init__` 新增 `owns_conn: bool = False` 参数;`__exit__` 仅在 `owns_conn=True` 时 close`connect()` classmethod 创建的连接自动设 `owns_conn=True`(保持原行为);外部 service 包成 DAO 走 with-block 默认不 close
- 回归测试: `tests/test_retention_cleanup.py::test_retention_cleanup_apply_anonymizes_multiple_old_orders_in_sequence` 锁住多订单连续 anonymize 契约
- 端到端 smoke 实测: 4 笔订单2 笔旧 terminal + 1 笔 fresh pending + 1 笔 paid-in-window→ dry-run 报 2 candidates / 0 anonymizedapply 真把 2 笔匿名化pending/paid-in-window 严格不动deletion log 1 条被裁share events 2 条被裁
- runbook §8 新增 T12-D 本地端到端 acceptance 步骤 + 部署前 checklist + 历史 bug 背景
- 验证: 6 个 retention 测试 + 205 个直接相关子集全过ruff + mypy 通过
### 0.2 A-2 admin/外部渠道补录同意审计统一化P1
- 现象: `admin/routes/orders.py:543-590` `create_order` 路径不收任何 consent 字段
grep `consent` 0 命中),直接违反 `LEGAL_PRIVACY_BASELINE §6`
portal 路径早已自动落 `consent_channel=portal / consent_operator=guardian`
- 修复: `CreateOrderRequest.consent: ConsentInfo` 必填;`consent_method` 白名单
`verbal_chat / phone_recording / screenshot / written_form / self_declared`
- 落地: `Order` 模型 + DAO + schema 增量加 `consent_method / consent_given_at`
(冗余避免 join创建订单后同步写 `order_intakes` 记录(独立 `IntakeStore.for_db`
- `consent_channel` = source
- `consent_operator` 严格按基线白名单 `self / guardian / admin_import`:
- `web` 渠道: `guardian`(与 `intake_store.save` 默认值一致)
- 其他渠道: `admin_import`(后台代录,同意来源是渠道商)
- 验证: 25 个 admin orders + alias 测试全过ruff + mypy 通过;端到端 smoke 通过
- 测试: 4 个参数化 missing_consent_block + 3 个 audit 字段校验 + 1 个白名单校验
- 1 个 detail 返回值 + 1 个 update test_create_order_returns_masked_payload
feat(ops 6/20 v2.1.3): 生产加固 + L-A 送审前修复 + crowd_db 质量契约 ## 实现内容 (6 项改动) 1. **admin /health 端点增强** — 主键契约 status:ok 保持 + checks 子对象 - db_writable: connect + CREATE TEMP TABLE + INSERT + SELECT + DROP - disk_writable: 在 ops_alert_log_path 目录创建临时文件 + 删除 - settings_valid: 复用 is_jwt_secret_secure 判断 2. **_enforce_jwt_secret_policy** — prod env 使用 dev 默认 JWT / 长度<32 → fail-closed 3. **_enforce_default_admin_password_policy** — prod env 用 admin123 / 长度<10 / 字符类<3 → fail-closed 4. **L-A R7: admin UI footer** — dashboard.html (592 行) + ui.py 内联 admin/orders/new 模板加 footer 隐私政策 + 数据删除 + 服务说明链接, 与 portal _render_footer_links() 同口径 5. **L-A R1+R4: LEGAL_PRIVACY_BASELINE 文档同步** - §6 移除孤儿 'admin' consent_channel 值 (代码侧从未实际产生) - §7 已具备/尚缺 重写, 显式归到 6/20 增量 6. **Q-A: tests/test_crowd_db_data_quality.py** — 8 个测试锁住 - 27 省总数 + 仅湖南 high + 其它 26 省 ≤ usable - 高考生源大省 (广东/江苏/北京/上海/山东/河南/四川/湖北) 不在 high 集合 - data_year=2025 (6/25 后需显式更新) ## 测试 - 4/4 RED → GREEN (admin/tests/test_health.py: JWT/admin password 拒绝 dev 默认值) - 8/8 GREEN (data/crowd_db/tests/test_crowd_db_data_quality.py: 数据质量契约) - 3 回归修复 (test_app.py + test_routes.py + test_health.py 适配新 /health checks 字段) - 31/31 GREEN (admin/tests/test_app.py + test_routes.py + test_health.py) ## 报告 - reports/LA_LEGAL_PRIVACY_PRE_AUDIT_2026-06-20.md (363 行, 9 风险 0 阻塞) - reports/QA_CROWD_DB_NON_HUNAN_DENSITY_AUDIT.md (45 行, CRITICAL 文档失真已规避) ## 文件 M CHANGELOG.md (v2.1.3) M admin/config.py (2 个 _enforce_*_policy + load_settings post-load) M admin/routes/health.py (3 个 _check_* + checks 子对象) M admin/routes/ui.py (admin/orders/new 模板加 footer) M admin/static/dashboard.html (footer 块) M admin/tests/test_app.py (适配 checks 字段 + regex 兼容) M admin/tests/test_health.py (4 个新测试) M admin/tests/test_routes.py (适配 checks 字段) M docs/CURRENT_STATE.md (0.3-0.5 增量段) M docs/LEGAL_PRIVACY_BASELINE.md (§6 清理 + §7 重写) + data/crowd_db/tests/test_crowd_db_data_quality.py (8 tests) + reports/LA_LEGAL_PRIVACY_PRE_AUDIT_2026-06-20.md + reports/QA_CROWD_DB_NON_HUNAN_DENSITY_AUDIT.md
2026-06-20 18:36:23 +08:00
### 0.3 生产加固6/20 v2.1.3
- **`/health` 端点增强**: 主键契约 `status: "ok"` 不变;增 `checks` 子对象
覆盖 `db_writable` / `disk_writable` / `settings_valid` 三项 readiness 指标
- **JWT secret fail-closed**: `_enforce_jwt_secret_policy``load_settings()`
post-load 校验中调用prod env 使用 dev 默认 JWT / 长度 < 32 → RuntimeError
- **admin password fail-closed**: `_enforce_default_admin_password_policy` 同样接入
post-load 校验prod env 使用 `admin123` 默认值 / 密码 < 10 字符 / 字符类 < 3 → RuntimeError
- 验证: 4 个 health/config 测试全过dev-verify 全量通过
### 0.4 L-A 送审前修复6/20 v2.1.3
- **R1**: `docs/LEGAL_PRIVACY_BASELINE.md` §6 移除 `consent_channel` 列表里
的孤儿 `admin` 渠道值(代码侧从未实际产生);增注释说明移除原因
- **R4**: `docs/LEGAL_PRIVACY_BASELINE.md` §7 "已具备/尚缺" 重写,显式归到 6/20 增量
- **R7**: admin 后台 dashboard.html (592 行) + ui.py 内联 orders/new 模板加 footer
隐私政策 + 数据删除说明 + 服务说明链接;与 portal 前台 `_render_footer_links()`
同口径
### 0.5 crowd_db 数据质量契约6/20 v2.1.3 Q-A 闭环)
> **⚠ 历史快照2026-06-20~25**:以下数字为 6/20~6/24 阶段的中间状态,**不再代表当前真相**。
> 当前真相以本文件顶部为准:`31 high / 0 usable / 0 skeleton`。
feat(ops 6/20 v2.1.3): 生产加固 + L-A 送审前修复 + crowd_db 质量契约 ## 实现内容 (6 项改动) 1. **admin /health 端点增强** — 主键契约 status:ok 保持 + checks 子对象 - db_writable: connect + CREATE TEMP TABLE + INSERT + SELECT + DROP - disk_writable: 在 ops_alert_log_path 目录创建临时文件 + 删除 - settings_valid: 复用 is_jwt_secret_secure 判断 2. **_enforce_jwt_secret_policy** — prod env 使用 dev 默认 JWT / 长度<32 → fail-closed 3. **_enforce_default_admin_password_policy** — prod env 用 admin123 / 长度<10 / 字符类<3 → fail-closed 4. **L-A R7: admin UI footer** — dashboard.html (592 行) + ui.py 内联 admin/orders/new 模板加 footer 隐私政策 + 数据删除 + 服务说明链接, 与 portal _render_footer_links() 同口径 5. **L-A R1+R4: LEGAL_PRIVACY_BASELINE 文档同步** - §6 移除孤儿 'admin' consent_channel 值 (代码侧从未实际产生) - §7 已具备/尚缺 重写, 显式归到 6/20 增量 6. **Q-A: tests/test_crowd_db_data_quality.py** — 8 个测试锁住 - 27 省总数 + 仅湖南 high + 其它 26 省 ≤ usable - 高考生源大省 (广东/江苏/北京/上海/山东/河南/四川/湖北) 不在 high 集合 - data_year=2025 (6/25 后需显式更新) ## 测试 - 4/4 RED → GREEN (admin/tests/test_health.py: JWT/admin password 拒绝 dev 默认值) - 8/8 GREEN (data/crowd_db/tests/test_crowd_db_data_quality.py: 数据质量契约) - 3 回归修复 (test_app.py + test_routes.py + test_health.py 适配新 /health checks 字段) - 31/31 GREEN (admin/tests/test_app.py + test_routes.py + test_health.py) ## 报告 - reports/LA_LEGAL_PRIVACY_PRE_AUDIT_2026-06-20.md (363 行, 9 风险 0 阻塞) - reports/QA_CROWD_DB_NON_HUNAN_DENSITY_AUDIT.md (45 行, CRITICAL 文档失真已规避) ## 文件 M CHANGELOG.md (v2.1.3) M admin/config.py (2 个 _enforce_*_policy + load_settings post-load) M admin/routes/health.py (3 个 _check_* + checks 子对象) M admin/routes/ui.py (admin/orders/new 模板加 footer) M admin/static/dashboard.html (footer 块) M admin/tests/test_app.py (适配 checks 字段 + regex 兼容) M admin/tests/test_health.py (4 个新测试) M admin/tests/test_routes.py (适配 checks 字段) M docs/CURRENT_STATE.md (0.3-0.5 增量段) M docs/LEGAL_PRIVACY_BASELINE.md (§6 清理 + §7 重写) + data/crowd_db/tests/test_crowd_db_data_quality.py (8 tests) + reports/LA_LEGAL_PRIVACY_PRE_AUDIT_2026-06-20.md + reports/QA_CROWD_DB_NON_HUNAN_DENSITY_AUDIT.md
2026-06-20 18:36:23 +08:00
- 新增 `data/crowd_db/tests/test_crowd_db_data_quality.py` (CROWD_DB_DATA_QUALITY
§7 承诺的锁死文件,仓库此前缺失)
- ~~27 省总数 (23 省 + 4 直辖市)~~ → 已升级为 **31 省** (23 省 + 4 直辖市 + 4 自治区)
- ~~当前真实状态2026-06-25 实测7 high / 20 usable / 0 skeleton~~ → **已升级为 31 high / 0 usable / 0 skeleton**
- ~~high 白名单:湖南/广东/江苏/山东/河北/浙江/福建~~ → **当前 31 省全部 high7 省 S 级 + 24 省 A 级)**
feat(ops 6/20 v2.1.3): 生产加固 + L-A 送审前修复 + crowd_db 质量契约 ## 实现内容 (6 项改动) 1. **admin /health 端点增强** — 主键契约 status:ok 保持 + checks 子对象 - db_writable: connect + CREATE TEMP TABLE + INSERT + SELECT + DROP - disk_writable: 在 ops_alert_log_path 目录创建临时文件 + 删除 - settings_valid: 复用 is_jwt_secret_secure 判断 2. **_enforce_jwt_secret_policy** — prod env 使用 dev 默认 JWT / 长度<32 → fail-closed 3. **_enforce_default_admin_password_policy** — prod env 用 admin123 / 长度<10 / 字符类<3 → fail-closed 4. **L-A R7: admin UI footer** — dashboard.html (592 行) + ui.py 内联 admin/orders/new 模板加 footer 隐私政策 + 数据删除 + 服务说明链接, 与 portal _render_footer_links() 同口径 5. **L-A R1+R4: LEGAL_PRIVACY_BASELINE 文档同步** - §6 移除孤儿 'admin' consent_channel 值 (代码侧从未实际产生) - §7 已具备/尚缺 重写, 显式归到 6/20 增量 6. **Q-A: tests/test_crowd_db_data_quality.py** — 8 个测试锁住 - 27 省总数 + 仅湖南 high + 其它 26 省 ≤ usable - 高考生源大省 (广东/江苏/北京/上海/山东/河南/四川/湖北) 不在 high 集合 - data_year=2025 (6/25 后需显式更新) ## 测试 - 4/4 RED → GREEN (admin/tests/test_health.py: JWT/admin password 拒绝 dev 默认值) - 8/8 GREEN (data/crowd_db/tests/test_crowd_db_data_quality.py: 数据质量契约) - 3 回归修复 (test_app.py + test_routes.py + test_health.py 适配新 /health checks 字段) - 31/31 GREEN (admin/tests/test_app.py + test_routes.py + test_health.py) ## 报告 - reports/LA_LEGAL_PRIVACY_PRE_AUDIT_2026-06-20.md (363 行, 9 风险 0 阻塞) - reports/QA_CROWD_DB_NON_HUNAN_DENSITY_AUDIT.md (45 行, CRITICAL 文档失真已规避) ## 文件 M CHANGELOG.md (v2.1.3) M admin/config.py (2 个 _enforce_*_policy + load_settings post-load) M admin/routes/health.py (3 个 _check_* + checks 子对象) M admin/routes/ui.py (admin/orders/new 模板加 footer) M admin/static/dashboard.html (footer 块) M admin/tests/test_app.py (适配 checks 字段 + regex 兼容) M admin/tests/test_health.py (4 个新测试) M admin/tests/test_routes.py (适配 checks 字段) M docs/CURRENT_STATE.md (0.3-0.5 增量段) M docs/LEGAL_PRIVACY_BASELINE.md (§6 清理 + §7 重写) + data/crowd_db/tests/test_crowd_db_data_quality.py (8 tests) + reports/LA_LEGAL_PRIVACY_PRE_AUDIT_2026-06-20.md + reports/QA_CROWD_DB_NON_HUNAN_DENSITY_AUDIT.md
2026-06-20 18:36:23 +08:00
- 所有 confidence ∈ [0, 1]
fix(crowd_db): 高信任数据系统性修复 — 契约硬化+真相单一化+防漂移 review 发现数据本身真实达标(7 high / 20 usable / 0 skeleton), 但代码/文档/测试/元数据 4 层出现严重脱节,存在静默升级风险与 合规假象回归漏洞。 Phase 1: 契约硬化(P0) - risk_report.py 新增 _classify_score_bands + _compute_quality_level - 质量等级判定从"仅看 confidence"升级为综合门槛 (conf + sr + recs + alts + 三层分数带),对齐 plan §4 - 新增 low 等级区分"已脱离骨架但未达可用" - _load_provenance_metadata 改为优先 load_province 取完整数据 - finding_to_risk_dict 不再二次规范化已规范化数据 - quality_summary.py 增加 low 等级统计 - SCHEMA.md §6 同步完整门槛定义 Phase 2: 测试加固(P0) - 新增 test_high_trust_thresholds.py 锁死 high/usable 完整门槛 (plan §9.2 要求的"防静默升级"测试) - 修复 test_crowd_db_data_quality.py 等级枚举支持 low - 修复 test_risk_report.py 硬编码日期脆弱性 Phase 3: 真相源单一化(P0) - CURRENT_STATE.md §0.5 清除 6/20 旧文案"4 high + 3 usable + 20 skeleton" - 改为引用顶部状态词 + 历史轨迹仅供审计 - NATIONALIZATION §4 清除"当前 high 已扩展为 5 省"矛盾文案 - 顶部状态词从"Phase 0 收口中"升级为"已完成" Phase 4: 元数据状态对齐(P1) - hunan.json / sichuan.json trusted_sources.kind province_official_pending_review -> province_official - 同步更新 quality_note 说明已完成 2025 年度复核 - 消除"状态 high/usable 但 kind=pending_review"的矛盾 Phase 5: 防漂移机制(P1) - 新增 scripts/check_crowd_db_consistency.py 跨文档+数据+测试白名单一致性检查(5 项检查) - dev-verify.sh 接入 crowd_db quality summary 打印 验证: - ruff: All checks passed - mypy: Success, no issues in 16 source files - pytest crowd_db/: 148 passed, 2 skipped - pytest 全量: 1283 passed, 2 skipped (无回归) - consistency check: high=7 usable=20 low=0 skeleton=0 Refs: docs/plans/2026-06-23-national-high-trust-crowd-db-plan.md §4/§9
2026-06-25 07:41:11 +08:00
- 所有 data_year = 2025 (待 2026 录取数据正式公布后显式更新)
feat(ops 6/20 v2.1.3): 生产加固 + L-A 送审前修复 + crowd_db 质量契约 ## 实现内容 (6 项改动) 1. **admin /health 端点增强** — 主键契约 status:ok 保持 + checks 子对象 - db_writable: connect + CREATE TEMP TABLE + INSERT + SELECT + DROP - disk_writable: 在 ops_alert_log_path 目录创建临时文件 + 删除 - settings_valid: 复用 is_jwt_secret_secure 判断 2. **_enforce_jwt_secret_policy** — prod env 使用 dev 默认 JWT / 长度<32 → fail-closed 3. **_enforce_default_admin_password_policy** — prod env 用 admin123 / 长度<10 / 字符类<3 → fail-closed 4. **L-A R7: admin UI footer** — dashboard.html (592 行) + ui.py 内联 admin/orders/new 模板加 footer 隐私政策 + 数据删除 + 服务说明链接, 与 portal _render_footer_links() 同口径 5. **L-A R1+R4: LEGAL_PRIVACY_BASELINE 文档同步** - §6 移除孤儿 'admin' consent_channel 值 (代码侧从未实际产生) - §7 已具备/尚缺 重写, 显式归到 6/20 增量 6. **Q-A: tests/test_crowd_db_data_quality.py** — 8 个测试锁住 - 27 省总数 + 仅湖南 high + 其它 26 省 ≤ usable - 高考生源大省 (广东/江苏/北京/上海/山东/河南/四川/湖北) 不在 high 集合 - data_year=2025 (6/25 后需显式更新) ## 测试 - 4/4 RED → GREEN (admin/tests/test_health.py: JWT/admin password 拒绝 dev 默认值) - 8/8 GREEN (data/crowd_db/tests/test_crowd_db_data_quality.py: 数据质量契约) - 3 回归修复 (test_app.py + test_routes.py + test_health.py 适配新 /health checks 字段) - 31/31 GREEN (admin/tests/test_app.py + test_routes.py + test_health.py) ## 报告 - reports/LA_LEGAL_PRIVACY_PRE_AUDIT_2026-06-20.md (363 行, 9 风险 0 阻塞) - reports/QA_CROWD_DB_NON_HUNAN_DENSITY_AUDIT.md (45 行, CRITICAL 文档失真已规避) ## 文件 M CHANGELOG.md (v2.1.3) M admin/config.py (2 个 _enforce_*_policy + load_settings post-load) M admin/routes/health.py (3 个 _check_* + checks 子对象) M admin/routes/ui.py (admin/orders/new 模板加 footer) M admin/static/dashboard.html (footer 块) M admin/tests/test_app.py (适配 checks 字段 + regex 兼容) M admin/tests/test_health.py (4 个新测试) M admin/tests/test_routes.py (适配 checks 字段) M docs/CURRENT_STATE.md (0.3-0.5 增量段) M docs/LEGAL_PRIVACY_BASELINE.md (§6 清理 + §7 重写) + data/crowd_db/tests/test_crowd_db_data_quality.py (8 tests) + reports/LA_LEGAL_PRIVACY_PRE_AUDIT_2026-06-20.md + reports/QA_CROWD_DB_NON_HUNAN_DENSITY_AUDIT.md
2026-06-20 18:36:23 +08:00
- 防止"27 省 crowd_db 均为高置信强推荐数据"合规假象回归
- **历史轨迹**仅供审计6/20 基线为 4 high + 3 usable + 20 skeleton6/23 升级到 5 high6/24 升级到 7 high / 20 usable / 0 skeleton6/25 升级到 31 high / 0 usable / 0 skeleton
fix(crowd_db): 高信任数据系统性修复 — 契约硬化+真相单一化+防漂移 review 发现数据本身真实达标(7 high / 20 usable / 0 skeleton), 但代码/文档/测试/元数据 4 层出现严重脱节,存在静默升级风险与 合规假象回归漏洞。 Phase 1: 契约硬化(P0) - risk_report.py 新增 _classify_score_bands + _compute_quality_level - 质量等级判定从"仅看 confidence"升级为综合门槛 (conf + sr + recs + alts + 三层分数带),对齐 plan §4 - 新增 low 等级区分"已脱离骨架但未达可用" - _load_provenance_metadata 改为优先 load_province 取完整数据 - finding_to_risk_dict 不再二次规范化已规范化数据 - quality_summary.py 增加 low 等级统计 - SCHEMA.md §6 同步完整门槛定义 Phase 2: 测试加固(P0) - 新增 test_high_trust_thresholds.py 锁死 high/usable 完整门槛 (plan §9.2 要求的"防静默升级"测试) - 修复 test_crowd_db_data_quality.py 等级枚举支持 low - 修复 test_risk_report.py 硬编码日期脆弱性 Phase 3: 真相源单一化(P0) - CURRENT_STATE.md §0.5 清除 6/20 旧文案"4 high + 3 usable + 20 skeleton" - 改为引用顶部状态词 + 历史轨迹仅供审计 - NATIONALIZATION §4 清除"当前 high 已扩展为 5 省"矛盾文案 - 顶部状态词从"Phase 0 收口中"升级为"已完成" Phase 4: 元数据状态对齐(P1) - hunan.json / sichuan.json trusted_sources.kind province_official_pending_review -> province_official - 同步更新 quality_note 说明已完成 2025 年度复核 - 消除"状态 high/usable 但 kind=pending_review"的矛盾 Phase 5: 防漂移机制(P1) - 新增 scripts/check_crowd_db_consistency.py 跨文档+数据+测试白名单一致性检查(5 项检查) - dev-verify.sh 接入 crowd_db quality summary 打印 验证: - ruff: All checks passed - mypy: Success, no issues in 16 source files - pytest crowd_db/: 148 passed, 2 skipped - pytest 全量: 1283 passed, 2 skipped (无回归) - consistency check: high=7 usable=20 low=0 skeleton=0 Refs: docs/plans/2026-06-23-national-high-trust-crowd-db-plan.md §4/§9
2026-06-25 07:41:11 +08:00
- 详细质量分布与升级轨迹见 `docs/CROWD_DB_NATIONALIZATION_SOURCE_OF_TRUTH.md`
feat(ops 6/20 v2.1.3): 生产加固 + L-A 送审前修复 + crowd_db 质量契约 ## 实现内容 (6 项改动) 1. **admin /health 端点增强** — 主键契约 status:ok 保持 + checks 子对象 - db_writable: connect + CREATE TEMP TABLE + INSERT + SELECT + DROP - disk_writable: 在 ops_alert_log_path 目录创建临时文件 + 删除 - settings_valid: 复用 is_jwt_secret_secure 判断 2. **_enforce_jwt_secret_policy** — prod env 使用 dev 默认 JWT / 长度<32 → fail-closed 3. **_enforce_default_admin_password_policy** — prod env 用 admin123 / 长度<10 / 字符类<3 → fail-closed 4. **L-A R7: admin UI footer** — dashboard.html (592 行) + ui.py 内联 admin/orders/new 模板加 footer 隐私政策 + 数据删除 + 服务说明链接, 与 portal _render_footer_links() 同口径 5. **L-A R1+R4: LEGAL_PRIVACY_BASELINE 文档同步** - §6 移除孤儿 'admin' consent_channel 值 (代码侧从未实际产生) - §7 已具备/尚缺 重写, 显式归到 6/20 增量 6. **Q-A: tests/test_crowd_db_data_quality.py** — 8 个测试锁住 - 27 省总数 + 仅湖南 high + 其它 26 省 ≤ usable - 高考生源大省 (广东/江苏/北京/上海/山东/河南/四川/湖北) 不在 high 集合 - data_year=2025 (6/25 后需显式更新) ## 测试 - 4/4 RED → GREEN (admin/tests/test_health.py: JWT/admin password 拒绝 dev 默认值) - 8/8 GREEN (data/crowd_db/tests/test_crowd_db_data_quality.py: 数据质量契约) - 3 回归修复 (test_app.py + test_routes.py + test_health.py 适配新 /health checks 字段) - 31/31 GREEN (admin/tests/test_app.py + test_routes.py + test_health.py) ## 报告 - reports/LA_LEGAL_PRIVACY_PRE_AUDIT_2026-06-20.md (363 行, 9 风险 0 阻塞) - reports/QA_CROWD_DB_NON_HUNAN_DENSITY_AUDIT.md (45 行, CRITICAL 文档失真已规避) ## 文件 M CHANGELOG.md (v2.1.3) M admin/config.py (2 个 _enforce_*_policy + load_settings post-load) M admin/routes/health.py (3 个 _check_* + checks 子对象) M admin/routes/ui.py (admin/orders/new 模板加 footer) M admin/static/dashboard.html (footer 块) M admin/tests/test_app.py (适配 checks 字段 + regex 兼容) M admin/tests/test_health.py (4 个新测试) M admin/tests/test_routes.py (适配 checks 字段) M docs/CURRENT_STATE.md (0.3-0.5 增量段) M docs/LEGAL_PRIVACY_BASELINE.md (§6 清理 + §7 重写) + data/crowd_db/tests/test_crowd_db_data_quality.py (8 tests) + reports/LA_LEGAL_PRIVACY_PRE_AUDIT_2026-06-20.md + reports/QA_CROWD_DB_NON_HUNAN_DENSITY_AUDIT.md
2026-06-20 18:36:23 +08:00
### 0.6 crowd_db 可信来源元数据补齐2026-06-21
- 27 个省级 JSON 统一补齐 `trusted_sources` / `quality_note`
- `source_url` 从仓库自引用改为可信公开入口 `https://gaokao.chsi.com.cn/`
- `SCHEMA.md` / loader / provenance tests 已同步
- 这补齐的是**可信来源治理口径**,不代表 26 个非湖南省已升级为高置信推荐数据
### 0.7 真相源分层与历史快照降级6/20 增量)
- 6/19 整改板/执行板顶部加"⚠ 历史快照"头注,指向 6/20
- 6/20 新建 `docs/ACTIVE_REMEDIATION_2026-06-20.md` + `docs/ACTIVE_EXECUTION_BOARD_2026-06-20.md`
- 本节作为 6/20 增量叠加在 6/19 真相源之上
### 0.8 用户端主链路真实 TestClient 覆盖收口2026-06-23
- 公开页与主流程已用真实 `TestClient` 证明:
- `/` / `/pricing` / `/checkout/*`
- `POST /api/public/orders`
- `POST /review/action`(真实 form + 303 redirect
- `/review/start`
- `/portal/{token}/info` / `/status` / `/report` / `/report.pdf`
- `/portal/{token}/cwb` / `/full-plan` / `/payment-success`
- `POST /pay/mock/{payment_id}/complete`
- `RouteClient` 已降级为辅助:
- 临时 app / 特殊 env缺 key、provider unavailable、prod 隐藏 mock
- `submit_order_info(...)` 这类直接函数级持久化断言
- 少量流程搭台用途
- 现状口径:主链路正确性不再依赖 `RouteClient` 自证,真实页面 / 真实协议 / 真实重定向已可回归验证
- 证据:`reports/TEST_CLIENT_COVERAGE_2026-06-23.md`
- 验证:`./.venv/bin/python -m pytest -q admin/tests/test_order_status_page.py admin/tests/test_web_public.py admin/tests/test_web_public_content_pages.py admin/tests/test_web_public_review_flow.py admin/tests/test_web_public_portal_info.py data/orders/tests/test_schema.py``89 passed, 1 warning`
### 0.9 法务协议与 crowd_db 可信来源补齐2026-06-21
- `docs/PRIVACY_POLICY_DRAFT.md` 补齐:未成年人、委托处理、用户权利、存储与删除、投诉联系方式、版本生效等条款
- `docs/SERVICE_TERMS.md` 补齐:服务边界、支付退款、知识产权、免责、争议解决、版本更新等条款
- `docs/LEGAL_PRIVACY_BASELINE.md` 补齐正式法务审核条款清单与待审状态说明
- `data/crowd_db/*.json` 统一补齐可信来源元数据(`trusted_sources` / `quality_note`),并将 `source_url` 切到可信公开入口
- 这两项仍处于**待法务 / 待内容深化**阶段,但已经从“缺文档/缺元数据”提升为“可审核、可复核、可继续推进”
---
6/19 落地了 3 项 P0/P1 整改 + 1 项真相源分层。**本节是当前唯一增量**
### 0.1 A1 — 删除/匿名化保留期门禁P0
- 错误码 `BIZ_ORDER_RETENTION_NOT_EXPIRED` (E02002) → HTTP 409
- 配置 `GAOKAO_RETENTION_DAYS`(默认 180
- 路由层 `_assert_retention_expired` 守卫,状态子集 paid/serving/delivered/completed/refunded 触发pending 直接放行
- 口径来源: `docs/DATA_RETENTION_AND_DELETION.md` §2
- 测试: 3 个新失败/放行用例 + `_expire_retention_window` helper
- 验证: dev-verify all checks passed1175 passed
### 0.2 B1 — 支付失败状态持久化P1
- `data.payments.service.handle_webhook`: 非 success 状态不再抛 PaymentError改为持久化 `payment.status='failed'` + `failed_at` + `failure_reason` + 完整 `callback_payload`
- schema 增量升级:`_ensure_column` 幂等 `ALTER TABLE payments ADD COLUMN failed_at / failure_reason`
- 幂等保证终态paid / refunded / failed后到达的失败 webhook 走 idempotent 路径
- 测试: `test_handle_webhook_persists_failed_status` 锁住新契约
- 验证: dev-verify all checks passed
### 0.3 A2 — 4 个产品/工程文档 Current/Target 校准P1
- `README.md` 顶部执行板指向 6/19 + 6/19 新增约束
- `product/PRD.md` 顶部"最后更新"升级为 6/19
- `product/ROADMAP.md` 顶部校准从 6/13 升级到 6/19
- `docs/TECH_ARCHITECTURE.md` 顶部 Current/Target 指向 6/19 执行板
### 0.4 B2 — 真相源分层与历史快照降级P1
- 6/13 整改板/执行板顶部加"⚠ 历史快照"头注
- 新建 `docs/ACTIVE_REMEDIATION_2026-06-19.md` + `docs/ACTIVE_EXECUTION_BOARD_2026-06-19.md`
- 本节作为 6/19 增量叠加在 6/13 真相源之上
### 0.5 T12-C — 前台删除工单 + 保留期外可申请P1本节落盘即收口
- 落地:
- `admin/routes/web_public.py``_resolve_retention_status` + `_next_step_for_retention`
- `DeletionRequestCreate` Pydantic 锁 `scope` 到白名单 + `confirm_guardian` 强制 bool
- `POST /portal/{token}/deletion-request` 根据订单保留期返回 3 种 next_step 文案
- `GET /portal/{token}/deletion-request` 在表单上方加"保留期状态"提示卡
- 测试: 4 个新测试 + 2 个 helper 复用
- 验证: 1179 passed, dev-verify all checks passed
feat(cli): add order delegation + doctor self-check (phase 3) docs-only + cli: extend scripts/gaokao-cli with two thin wrappers without changing data/rules, data/majors_catalog, or rules/_truth. - gaokao-cli order <subcommand> delegates argv to data.orders.cli.main with the 'order' prefix stripped, so callers can use the unified command face without changing the existing orders parser. - gaokao-cli doctor <json?> returns a single self-check payload that reuses RuleLoader + MajorsCatalogLoader (no new dependencies, no gaokato/ scaffolding). Truth-root or catalog-root failures degrade gracefully with structured {error, ok=false} sections instead of raising. - tests/test_cli_doctor_phase3.py covers: help text, order delegation to list subcommand, doctor ok-path, doctor failure-path. Also re-aligns docs/ACTIVE_EXECUTION_BOARD_2026-06-17.md (new) + docs/CURRENT_STATE.md (single execution口径) + rules/majors source- of-truth index files so design-phase numbering no longer drifts from execution-phase numbering. Pre-existing 2026-06-16 optimization board and 2026-06-17 phase2 plan are demoted to historical snapshots. P0_P1_P2 remediation plan §4 historical cards get a red warning banner so they are not re-read as current pending. Verification: - focused: 4 passed - dev-verify: 770 passed, 1 failed (alipay_sim E2E failure pre-existed this commit; caused by an uncommitted upstream edit in admin/routes/web_public.py that rewires payment_return -> /portal/{token}/payment-success while the E2E still asserts /portal/{token}/status; out of scope for this commit and intentionally not touched.)
2026-06-17 18:05:16 +08:00
---
## 0. 单一执行口径2026-06-17
为消除设计 Phase 编号与执行 Phase 编号漂移,本节是当前唯一口径:
| 设计层 PhaseDESIGN_RULES_TRUSTED_CLI_2026-06-16.md | 执行层 Phase当前真相 | 状态 |
| ------------------------------------------------------ | ------------------------------------------ | ---------------------------------------------- |
| Phase 1 规则真相源化 | 执行 Phase 1 | ✅ 已收口(`ae4835e` + `8a61b8f`,三仓同步) |
| Phase 2 统一审计引擎最小可用 | 执行 Phase 1.5verify + 旧 checker 迁移) | ✅ 已收口(同上) |
| Phase 3 专业目录接入 MVP | 执行 Phase 2 | ✅ 已收口(`36ad58a` + `6b1157f` + `edc5b11` |
| Phase 4 统一 CLI 命令面 | 执行 Phase 3 | ❌ 未启动 → 下一阶段 |
| Phase 5 智能体调度 + admin 整合 | 执行 Phase 4 | ❌ 未启动 → 等 Phase 3 收口 |
| Phase 6 文档/真相源索引收口 | 长期维护 | ⚠ 进行中docs-only 收口本轮同步) |
> 设计层 Phase ≠ 执行层 Phase。状态查询一律以本表 + 6/17 执行板为准。
---
## 1. 当前准确定位
项目当前准确定位为:
- 已完成: 人工服务运营增强系统(闲鱼 / 微信 / 学校渠道)
- 已完成: 管理后台、订单、分享、渠道同步、AI 审核基础校验、CI/CD、性能与安全加固
- 已完成/已验证:
- `Phase2 major_validation` 已接入 `AuditEngine`
- `gaokao-cli audit run --json` 当前只承认两类真实检查:省份规则 + 专业目录状态
- 规则/专业目录/CLI 三层都已具备可回归验证入口
- 当前仍在推进:
- 已完成且已本地验证: `mock` / `alipay_sim` / `alipay` 三层支付代码链与 notify/return 路由退款状态闭环、portal token secret 分离、payment webhook fail-closed、删除/匿名化扩围、分享 allowlist、channel_sync DB 隔离与 DAO 真相收敛
- 未完成且仍阻塞线上验收: 真实支付宝商户凭据、公网 notify_url、备案域名、真实支付 acceptance
一句话:
> 当前项目定位:人工服务运营增强系统;用户端 Web 自助闭环仅为本地 MVP/目标态,尚未达到可对外承诺的完整 SaaS 水位。当前版本已经完成 v2.1 的后台运营链路与 AI 审核增强闭环,但不是完整 Web 自助 SaaS。
---
## 2. 已完成模块
- T1 AI审核服务
- T2 反扎堆检测
- T3 数据溯源
- T4 订单管理
- T5 集成测试与发布
- T6 管理后台
- T7 分享功能
- T8 渠道集成
- T9 错误处理
- T10 CI/CD
- T11 性能与安全
覆盖率门槛证据:
覆盖率门槛证据:
- overall = 92.46%
- core = 100.00%
- 满足整体≥80%、核心≥100%
- 本地与 CI 的硬门禁统一收敛到 `scripts/check_coverage_gate.py`
- `dev-verify.sh` 与 GitHub CI 都执行同一组硬阈值检查
- `codecov.yml` 当前保持同值展示口径,但不是执行单源,也不是阻断门禁
三仓同步状态:
- gitea/main 已同步
- origin/main 已同步
- tksea/main 已同步
- tag v2.1 已推送
---
## 3. 尚未完成 / 不应误报为已完成
### T12 用户端 Web 自助 MVP
当前仅能说:
- 已启动 / 实施中
- 还不能说“已完成”
未完成主链路包括:
- 真实支付接入与回调验签的线上 acceptance
- `info_submitted -> serving` 自动处理主链 +本地自动桥接 `info_submitted -> serving` 已落地;仍缺真实 worker/生成服务/线上调度收口
- 站内通知发送器、真实邮件通知发送器与调度已落地;仍缺生产告警链与独立通知审计页
- 前台删除工单流程与更完整的产品化交互
因此:
- Web 自助购买场景 = **本地 MVP 主链已大部分落地,但线上闭环未完成**
- 完整教育 SaaS 化 = 未完成
---
## 4. 已修正的历史评审问题
以下问题在 2026-06-13 之后已被修正,不应继续按“当前未解决”表述:
1. PRD P2 / P3 功能编号冲突
2. ROADMAP 中已落地功能仍保持未勾选
3. TECH_ARCHITECTURE 仍标“设计中”
4. FINAL_COMPLETION_REPORT 仍写“条件完成”
5. 依赖清单未显式声明 Jinja2 / WeasyPrint / cairocffi / ruff / mypy
6. GitHub origin 凭据导致发布链阻塞
这些应被视为:
- 已修正的历史问题
- 不应再作为当前阻塞项重复引用
---
## 5. 仍然有效的评审问题
以下问题仍成立,应继续作为后续版本约束:
### P0 / P1 真实缺口
- 用户端 Web 自助支付闭环缺失
- 生产通知链已有底层 validated/delivered 状态机、portal 通知审计页、后台独立通知审计页、运维告警审计页与 watchdog alert sink已支持 SMTP/IM webhook sink 代码接入,但仍缺线上真实通道配置后的生产联调
- 前台入口已支持基础资料填写、最多 5 个附件上传与 5 步向导(基础信息 / 偏好与目标 / 已有方案与附件 / 协议确认 / 提交确认);仍缺更完整文件类型策略与更细粒度错误提示
- 2026-06-16 前端专项审计结论:用户端首页 / 定价页 / 结账页存在明显 AI 模板痕迹、开发术语外露与商业转化不足;后台 `/dashboard` 仍偏开发者自检页。当前执行板见 `docs/FRONTEND_UI_EXECUTION_BOARD_2026-06-16.md`
- 2026-06-16 第二轮本地整改已完成首页、定价页、结账页、portal 向导页 / 状态页、后台 `/dashboard` 已完成首轮产品化与去技术暴露重构;剩余前端工作聚焦 design token 基线与更强回归门禁
- 2026-06-16 第三轮本地整改已完成:`admin/static/portal-ui.css` 已建立为共享样式基线,关键用户页面已接入 shared CSS并补齐页面级回归断言前端整改范围已本地收口剩余仅为 Git 交付或后续更深层视觉迭代
- 业务数据备份 / 恢复 / 密钥托管已有本地基线与验证,但异机备份和生产接入仍不足
- 隐私政策 / 服务协议 / 监护人同意 / 数据保留与删除流程仍缺前台/客服自助工单与正式法务版本
> 重要更新2026-06-15
> 上述 5 项是 v2.1 当前阶段以外的真实缺口。
> 上一轮 2026-06-14 严格复审里的 P1 整改项已全部完成:
>
> - P1-1 支付回调双写裂缝已修复
> - P1-5 退款域模型闭环已修复
> - P1-2 删除/匿名化已覆盖 orders 主表 + payments.callback_payload + order_intakes.payload_json
> - P1-7 验证链口径统一CI / dev-verify / codecov / gate script 同一阈值)
### P2 工程改进
- crowd_db 高置信数据应区分湖南与其他省份
- 架构图仍需进一步拆分 Current / Target 视觉表达
- legacy 邮件脚本应继续弱化为非主链能力
### 仍然有效的 P1 / P2 整改项
完整清单见 `docs/P0_P1_P2_REMEDIATION_PLAN_2026-06-14.md`
- P1-3 真实支付回调校验
- P1-8 备份恢复演练 / 目标机告警接入
- 隐私政策 / 服务协议 / 删除工单正式入口
已完成并不再列为整改项:
- P2-1 公共下单孤儿订单
- P2-2 channel_sync 单一 DAO 真相
- P2-3 delivery 通知状态语义收口(`sent` 已移除)
- P2-4 portal token / JWT secret 分离(已通过 P2-4 单元测试 + prod fail-closed
- P2-5 payment webhook secret fail-closed已通过 P2-5 单元测试 + prod fail-closed
- X-02 支付域设计
- X-03 Delivery 交付服务设计
- X-04 合规基线文档
- X-05 备份恢复与密钥托管方案
- X-06 本地一键验证脚本
- X-08 crowd_db 数据完整度等级化
---
## 6. 对外表述边界
允许对外说:
- 已具备人工服务运营后台能力
- 已具备 AI 审核基础校验、数据溯源、分享、渠道同步能力
- `audit run` 当前只承认省份规则 + 专业目录状态校验,不应对外表述为“已包含反扎堆/综合评分闭环”
- 已完成 v2.1 当前计划闭环
不应对外说:
- 已完成完整 Web 自助 SaaS
- 已完成系统内支付闭环
- 已完成用户端完整交付闭环
- 27 省 crowd_db 均为高置信强推荐数据
---
## 7. 推荐阅读顺序
1. docs/CURRENT_STATE.md
2. docs/archive/2026-06-historical-snapshots/FINAL_COMPLETION_REPORT_2026-06-13.md
3. product/PRD.md
4. product/ROADMAP.md
5. docs/IMPLEMENTATION_PLAN_v2.md
6. reports/PRODUCT_PLANNING_TECH_ALIGNMENT_REVIEW_2026-06-13.md作为历史评审参考