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
This commit is contained in:
@@ -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`
|
||||
|
||||
@@ -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)
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user