feat(ops 6/20 v2.1.3): 生产加固 + L-A 送审前修复 + crowd_db 质量契约
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

## 实现内容 (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
This commit is contained in:
hermes
2026-06-20 18:36:23 +08:00
parent 604c8b3484
commit 6eafe1fc9b
13 changed files with 839 additions and 25 deletions

View File

@@ -5,7 +5,9 @@
- A2/B2 文档与执行板校准 + 6/20 T12-D retention cleanup conn ownership 修复
- 端到端本地 acceptance 步骤落地 + 6/20 A-2 admin/外部渠道补录同意审计统一化
落地;下一阶段 = 推进 T12 真实支付 acceptance + 隐私政策正式审定 + 备份恢复
- 6/20 生产加固 (`/health` checks + JWT/admin password fail-closed) + 6/20
L-A 送审前修复 (admin footer + baseline §6/§7 同步) + 6/20 crowd_db 质量契约
锁死;下一阶段 = 推进 T12 真实支付 acceptance + 隐私政策正式审定 + 备份恢复
异机演练)
真相源优先级:
@@ -35,8 +37,9 @@
## 0. 6/20 增量段(叠加在 6/19 真相源之上)
6/20 落地了 1 项 P1 整改 + 端到端本地 acceptance 步骤 + 1 项合规补录统一化 + 真相源分层。
**本节是当前唯一增量**
6/20 落地了 1 项 P1 整改 + 端到端本地 acceptance 步骤 + 1 项合规补录统一化
- 生产加固 + L-A 送审前修复 + crowd_db 质量契约 + 真相源分层。**本节是当前唯一增量**
### 0.1 T12-D retention cleanup conn ownership 修复P1
@@ -65,7 +68,38 @@
- 测试: 4 个参数化 missing_consent_block + 3 个 audit 字段校验 + 1 个白名单校验
- 1 个 detail 返回值 + 1 个 update test_create_order_returns_masked_payload
### 0.3 真相源分层与历史快照降级6/20 增量
### 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 闭环)
- 新增 `data/crowd_db/tests/test_crowd_db_data_quality.py` (CROWD_DB_DATA_QUALITY
§7 承诺的锁死文件,仓库此前缺失)
- 27 省总数 (23 省 + 4 直辖市)
- 仅湖南为 high
- 其它 26 省 quality_level ∈ {usable, skeleton}
- 高考生源大省 (广东/江苏/北京/上海/山东/河南/四川/湖北) 不在 high 集合
- 所有 confidence ∈ [0, 1]
- 所有 data_year = 2025 (6/25 后需显式更新)
- 防止"27 省 crowd_db 均为高置信强推荐数据"合规假象回归
### 0.6 真相源分层与历史快照降级6/20 增量)
- 6/19 整改板/执行板顶部加"⚠ 历史快照"头注,指向 6/20
- 6/20 新建 `docs/ACTIVE_REMEDIATION_2026-06-20.md` + `docs/ACTIVE_EXECUTION_BOARD_2026-06-20.md`

View File

@@ -120,7 +120,8 @@
- `privacy_accepted_at`: 隐私政策同意时间
- `service_terms_accepted_at`: 服务说明同意时间
- `guardian_confirmed`: 是否监护人确认
- `consent_channel`: web / wechat / xianyu / school / admin
- `consent_channel`: web / wechat / xianyu / school
(实现侧 4 个 source旧版文档曾列 `admin` 渠道值因未在生产路径写入而移除6/20 校准)
这些字段可先落在:
@@ -133,17 +134,19 @@
## 7. 当前代码与本基线的差距
已具备:
已具备6/20 增量)
- 订单敏感字段加密/脱敏基础
- 订单删除 DAO 能力
- 订单删除 DAO 能力(含 OrdersDAO conn ownership 修复T12-D
- Portal token 访问控制基础
- **后台代录 / 外部渠道补录的同意审计统一化**A-2 6/20 落地:`consent_method` / `consent_operator` / `consent_channel` / `consent_given_at` / `consent_version` 5 字段在 admin/portal 双轨写库admin `CreateOrderRequest.consent` 必填;`consent_operator` 严格按 `self/guardian/admin_import` 白名单;缺失或非法 consent → HTTP 422
- **数据删除 SOP 的脚本化/产品化**T12-D 6/20 落地:`scripts/gaokao-retention-cleanup.py` + systemd unit + cron 样例 + runbook §8 端到端 acceptance 步骤)
尚缺:
尚缺(截至 6/20
- 后台代录 / 外部渠道补录的同意审计统一化
- 数据删除 SOP 的脚本化/产品化
- 对外正式法务审阅与版本管理
- 对外正式法务审阅与版本管理PM/legal 拍板4 份草案已就绪)
- `consent_version` 升级机制(当前硬编码 `t12-web-mvp-v1`,改版时需 bump
- `consent_scope` 命名空间统一portal `web-self-service-order-intake` vs admin `{source}-channel-intake`,建议提升为 Literal
---