feat(ops)+docs: 密钥轮换工具 + 两份文档目录审计收口(D1.1 §23 / D2.1 v6.26)

一、密钥轮换(新增工具 + 操作手册)
- 新增 tools/rotate_api_keys.py:--check 体检 + 交互式轮换;getpass 不回显、
  自动备份 .env.bak-<时间戳>(已被 ignore 命中)、校验不过整体不写入、
  三个 Qwen 变量写同一值 / 两个 DeepSeek 变量写同一值。
  实测 --check:Qwen 三变量同值且非空、DeepSeek 两变量同值且非空。
- 新增 开发文档/D3.8-模型密钥轮换与凭据安全操作手册-2026-09-20.md(CS-OPS-2026-023):
  .env 5 个变量与读取方取证、五步流程、3 个坑、复核清单、回退方式、能力边界。
- 口径确认:model_endpoint_config.secret_ref 存变量名 ⇒ 轮换只改 .env,不动 DB;
  但必须重启 API + Worker。

二、门禁修复:docs/ 编号撞车
- tools/check_authoritative_docs.py(D3.4 N-14 登记的验收命令集之一)实测 FAIL:
  我方 docs/46 docs/47(2026-09-20 建)与投顾组 docs/46-投顾Agent需求文档.md
  docs/47-投顾Agent功能架构文档.md(2026-09-16 建)同号。
- 按「后到者让位」改名:docs/48-可改文件白名单.md / docs/49-底座会签申请单-2026-09-19.md,
  同步 8 处引用。修复后:checked 54 documents, no number collision,exit 0。

三、前端品牌残留(W12 合并静默回退)
- employee-advisor/dashboard/index.html 与 customer/advisor-plans/index.html 的
  <title> 仍是 南方财富(投顾组分支带回)→ 按 DEC-27 改为 南方基金。
- HTTP 实测两页标题已正确;全仓 app/ 复查 南方财富 = 0。

四、文档口径校准(12 处事实漂移)
- D1.1:D2.1 版本 v5.3 → v6.26(§4.0 / §4.1 / §1 / §2 四处长期错误);
  §8 四行遗留项闭合(D-5 / D-6 / D-7 / 仓库副本同步)+ 新增 §22 §23 留痕;
  §10.2「本区不在任何 git 仓库内」更正为已入库;新增两编号 ⇒ 计数 56 → 58 全量同步。
- D2.2:顶栏徽标 v2.4 与元数据 v2.5 自相矛盾 → 统一;「投顾已清除」→ 状态更新
  (模块 2026-09-20 已恢复,但客服范围裁定 §1.7 / RK-10 不变)。
- D2.3:徽标 v1.0 · 7 批次 51 项 → v1.1 · 8 批次 57 项;投顾清除后果 + §7.1 头号风险
  + 风险表 + 不触碰行全部加恢复口径。
- D2.4:v1.3 变更说明 ⑦ / §1.4 Out of scope / Q-09 加投顾恢复口径。
- D2.5:advisor_t 自相矛盾口径改写为账号表一行 + 口径更正;五项自检首选改为
  一键脚本 启动演示.bat / demo.ps1;补 D3.8 与未发布 advisor:* 白名单登记。
- D2.6:门禁数字 1856/2 → 1909/3 skipped、ruff 19 → 20、补 portal_api_check 行;
  §10 两项已闭环(密钥轮换已工具化、A-10 组 3/4 已补签);头部加 W12/W13 状态更新。
- D4.5:顶部状态更新补指向 D4.7。
- 新增 开发文档/D4.7-投顾模块恢复记录-2026-09-20.md(CS-PURGE-2026-014):
  时间线、8 项恢复动作、客服线不变的结论、DEC-19 理由更正、遗留 1 项、失误登记。
- _consistency.py(维护侧):§三 改为「投顾状态口径检查」,合法语境扩为
  清除史 / 恢复史 / 不属本 Agent 范围。

五、回归实测(全绿)
- pytest -q:1909 passed / 3 skipped / 0 failed
- ruff check app tools tests:20(与 W12 持平,未引入新债)
- mypy app:2(= 既有基线)
- tools/check_authoritative_docs.py:54 文档无编号冲突(exit 0)
- tools/e2e_smoke_test.py --read-only:31/31
- tools/portal_api_check.py:40 项 通过 35 / 失败 0 / 跳过 5
- _eval_harness/http_probe.py:11/11 succeeded
- _consistency.py:GATE PASS
- demo.ps1 -SkipStart -NoBrowser:五项自检全过、退出码 0
- 权威副本 ↔ 仓库:逐字节一致(客服agent 24 / 开发文档 52)

六、未做(如实登记)
- 投顾 config_release 工具白名单(advisor:*)仍未发布 ⇒ 投顾 Agent 工具调用 fail closed
  (实测 active_agent_tools 仅 customer_service:* 4 项 + risk:* 4 项)。与客服线无关;
  要演投顾线先跑 tools/publish_advisor_demo_config.py --apply。
- 两把 key 的实际轮换需你在控制台建新 key(无法代做),流程见 D3.8。
This commit is contained in:
张胜宇
2026-09-20 15:27:07 +08:00
parent 4306326a56
commit c91bbcbdc1
16 changed files with 623 additions and 55 deletions
@@ -1 +1 @@
<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>我的投顾方案 · 南方财富</title><link rel="stylesheet" href="/static/portal/common/base.css"><link rel="stylesheet" href="/static/portal/common/advisor-plan.css?v=20260916-plan3"><link rel="stylesheet" href="/static/portal/customer/advisor-plans/advisor-plans.css?v=20260916-plan3"></head><body><main id="main-content" class="page-shell"><div class="page-heading"><div><h1 class="page-heading__title">我的投顾方案</h1><p class="page-heading__description">可在下方申报投顾方案(需已完成且在有效期内的风险测评);投顾受理并发送后,方案会出现在「已收到的方案」里。</p></div><div class="page-heading__actions"><button class="button" type="button" data-reload>刷新</button></div></div><section class="panel"><div class="panel__header"><h2 class="panel__title">申报投顾方案</h2></div><div class="panel__body"><form class="advisor-request-form" data-request-form><label class="form-field"><span class="form-field__label">投资金额(万元)</span><input class="form-field__input" data-request-amount type="number" min="1" step="1" value="500" required></label><label class="form-field"><span class="form-field__label">投资期限</span><select class="form-field__input" data-request-horizon><option>&lt;1年</option><option>1-3年</option><option selected>3-5年</option><option>&gt;5年</option></select></label><label class="form-field"><span class="form-field__label">风险偏好</span><select class="form-field__input" data-request-risk><option>稳健</option><option selected>平衡</option><option>进取</option></select></label><label class="form-field advisor-request-form__wide"><span class="form-field__label">补充说明(可选)</span><input class="form-field__input" data-request-note maxlength="200" placeholder="例如:希望偏债、不想承受太大波动"></label><button class="button button--primary" type="submit" data-request-submit>提交申报</button><p class="form-alert" data-request-alert></p></form></div></section><section class="panel panel--flush"><div class="panel__header"><h2 class="panel__title">我的申报</h2></div><div class="panel__body" data-request-list></div></section><section class="panel panel--flush"><div class="panel__header"><h2 class="panel__title">已收到的方案</h2></div><div class="panel__body" data-list-content></div></section></main><script type="module" src="/static/portal/customer/advisor-plans/advisor-plans.js?v=20260916-plan3"></script></body></html>
<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>我的投顾方案 · 南方基金</title><link rel="stylesheet" href="/static/portal/common/base.css"><link rel="stylesheet" href="/static/portal/common/advisor-plan.css?v=20260916-plan3"><link rel="stylesheet" href="/static/portal/customer/advisor-plans/advisor-plans.css?v=20260916-plan3"></head><body><main id="main-content" class="page-shell"><div class="page-heading"><div><h1 class="page-heading__title">我的投顾方案</h1><p class="page-heading__description">可在下方申报投顾方案(需已完成且在有效期内的风险测评);投顾受理并发送后,方案会出现在「已收到的方案」里。</p></div><div class="page-heading__actions"><button class="button" type="button" data-reload>刷新</button></div></div><section class="panel"><div class="panel__header"><h2 class="panel__title">申报投顾方案</h2></div><div class="panel__body"><form class="advisor-request-form" data-request-form><label class="form-field"><span class="form-field__label">投资金额(万元)</span><input class="form-field__input" data-request-amount type="number" min="1" step="1" value="500" required></label><label class="form-field"><span class="form-field__label">投资期限</span><select class="form-field__input" data-request-horizon><option>&lt;1年</option><option>1-3年</option><option selected>3-5年</option><option>&gt;5年</option></select></label><label class="form-field"><span class="form-field__label">风险偏好</span><select class="form-field__input" data-request-risk><option>稳健</option><option selected>平衡</option><option>进取</option></select></label><label class="form-field advisor-request-form__wide"><span class="form-field__label">补充说明(可选)</span><input class="form-field__input" data-request-note maxlength="200" placeholder="例如:希望偏债、不想承受太大波动"></label><button class="button button--primary" type="submit" data-request-submit>提交申报</button><p class="form-alert" data-request-alert></p></form></div></section><section class="panel panel--flush"><div class="panel__header"><h2 class="panel__title">我的申报</h2></div><div class="panel__body" data-request-list></div></section><section class="panel panel--flush"><div class="panel__header"><h2 class="panel__title">已收到的方案</h2></div><div class="panel__body" data-list-content></div></section></main><script type="module" src="/static/portal/customer/advisor-plans/advisor-plans.js?v=20260916-plan3"></script></body></html>
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>投顾工作台 · 南方财富</title>
<title>投顾工作台 · 南方基金</title>
<link rel="stylesheet" href="/static/portal/common/base.css">
<link rel="stylesheet" href="/static/portal/common/operations.css">
<link rel="stylesheet" href="/static/portal/common/advisor-plan.css?v=20260916-plan3">