Files
group_xinghuo_jinrong/docs/memory/TODO.md
T

208 lines
22 KiB
Markdown
Raw Normal View History

# TODO
> 大任务开始时更新;完成一步打钩并验证后再往下。
> **新 Agent:** 先看 `MEMORY.md` §0 交接清单,再从此处取下一项。
## 进行中
**2026-09-10 批次**(`merger` · 基线 **804 pytest** · `npm run build` 绿):客服 Wave3 + analyst D-06/445cfbb + 风控前端三页 + 课程/文档 · **未 commit**
### 本批次 · 优先收尾(推荐顺序)
- [ ] **git commit `merger`**:Wave3 + analyst D-06/模板缓存 + 风控前端/灌库/深潜课7 + 问数 UI 标签 + 文档(你确认后执行)
- [x] **风控深潜课改版(方案 1 · 7 模块 · 读者 dev)**:模块 1–7 已写(含写侧并发)· `jinrong-module-risk/index.html` 已拼接
- [ ] **数据分析 · 20 题 live battery**:`uvicorn` + DeepSeek → `python scripts/dev/run_query_battery.py` → 本地写 `scripts/dev/battery_report.json`(**已拍板:不入库** · 见 `.gitignore`)
- [ ] **客服 · 手工验收**:`docs/memory/tests/2026-09-10-customer-1b-r1/MANUAL-CHECKLIST.md`(CUST-9527 持仓/sanitize/R1 种子)
- [ ] **客服 · Redis DEL**:灌 R1 种子后 `redis-cli -p 6380 DEL profile:l1:CUST-9527`(6380 未起则先 `start-redis.ps1`)
- [ ] **测试包签核**:`TEST-LOG-2026-09-10-CS-001` → 模块负责人 zhangyong 确认
- [ ] **接口契约发群稿**:`docs/项目管理/接口契约发群-2026-09-09.md`(复制到群即完成)
- [ ] **口径字典/问数模板种子**:本机执行 `seed-analyst-metric-dict.sql` · **`seed-analyst-query-templates.sql`**(若未灌)
### 需拍板(定了再开任务)
| 项 | 选项 / 说明 |
| --- | --- |
| **C-04 阈值 push** | 维持 inline(现状) vs Redis pub / 定时扫仓 |
| **C-11 匹配说明放开度** | 已拍板:「我能买什么」→ suitability;「推荐稳赚」仍 reject |
| **`battery_report.json`** | **已拍板:不入库**(`.gitignore` · 本地跑 `run_query_battery.py` 生成) |
| **本地 `data-analysis-agent` 分支** | 是否 `git pull xinghuo data-analysis-agent` 对齐远程(与 merger 独立) |
**已拍板(2026-09-10 · 见下方风控/课程待办)**
- [x] 风控 L1/L2 Redis **不做**(仅 L3 cache-aside)
- [x] 风控前端 P1:**台账筛选 + 适当性页 + AML 扫描页一起做**(自有组件栈)
- [x] 风控演示:**`scripts/demo/prepare_all.ps1` 一键灌库**
- [x] 风控深潜课:**加模块 7(写侧并发)**
---
## 待办(统筹 · P1 推荐顺序)
> 2026-09-09 P0 主链路已通;**当前优先看上方「2026-09-10 批次」**。
- [x] **代销平台 API v0.1 实现**(2026-09-08)
- [x] **`web/` P0 脚手架 + 主链路真接**(2026-09-09)
- [x] **`web/src/api/risk.ts` 补 `X-Agent-Type: risk`**(2026-09-09)
- [x] **同步 `MEMORY/REQUIREMENTS/FRAMEWORK`**(analyst S3 · 773 基线 · D-01~D04)
- [x] **接口契约发群稿**(`docs/项目管理/接口契约发群-2026-09-09.md` — 待你复制到群)
### 前端 `web/` · P0 收尾
> **四角色 Demo 主链路已通**(登录 → Dashboard → Chat/问数/风控 REST);以下为 polish / 规格缺口。
- [x] 四角色 Dashboard · 平台只读 · ChatPanel · 游客试聊 · 行情 · 风控台账+筛选+适当性+AML+模拟交易 · 问数工作台+资产沉淀
- [x] **问数结果标签**:`AnalystQueryPage` 展示 `template_hit` / `cache_hit`(2026-09-10)
- [ ] **分析对话与问数合一** / **看板钻取** — 规格 D-09/D-12,往后排
- [ ] **Vitest 补测**(可选):`useChatPanel` · `api/analyst.ts` mock
- [x] **simulate 交易 UI**:风控菜单「模拟交易」+ `RiskSimulatePage` + `api/simulate.ts`(演示说明 · A-3/A-1 预设)
- [x] **接口契约发群稿**(见 `docs/项目管理/接口契约发群-2026-09-09.md` · 复制到群即完成)
## 待办(模块侧开放项)
### 客服 Agent · S2 接缝(2026-09-09 已接线 · 并行分流)
> 清单:`docs/项目框架设计/客服Agent-合并说明.md` §3–§4 · 原则只增不盖、不覆盖 `main.py`/`chat.py`/`agent_service.py` 整体。
- [x] **跑迁移 SQL**:`scripts/agent/migrate-customer-agent-cs-c11.sql`(`conversation_archive` · `customer_notes`)(2026-09-09 本机已执行)
- [x] **挂游客路由**:`POST /api/chat/visitor` → `main.py`
- [x] **编排接缝(并行)**:`X-Agent-Type: customer` → `customer_service.run_customer_chat`;其余 Agent 仍 `agent_service.chat`
- [x] **Wave 3 测试解禁**:`test_wave3_customer_service.py` 19 例绿 · 基线 **554 passed**
- [x] **Wave 1/2 解禁**:`test_wave1_*` · `test_wave2_*` 已移出 `collect_ignore` 并绿(132+ 例)
- [x] **Wave 3 profile / 4 / 5 解禁**:`test_wave3_profile_service` · `test_wave4_e2e` · `test_wave5_notes` · 基线 **730 passed**
- [x] **1B/R1 拍板落地**(2026-09-10):`sanitize_postprocess` · Top-K · TEST-LOG · 776 pytest
- [x] **Wave3 能力批次**(2026-09-10):C-04 threshold · C-05 nav · C-11/C-07/C-08 · visitor 1B 对齐 · keyword 优先级 · **786→795 pytest**
- [x] **企业级测试包** `docs/memory/tests/2026-09-10-customer-1b-r1/`
- [x] **课程 layout 修复**(2026-09-10):`showLayer` 单参回退 · `.module-inner` CSS 别名 · `build_all.py`
- [x] **客服 KB 第二套(fin_*)· Ollama 灌库**(2026-09-09 本机):
1. `ollama pull bge-m3` ✓
2. Ollama 服务 `http://127.0.0.1:11434` ✓
3. **Windows**:`MILVUS_URI` 须英文绝对路径(如 `C:/Users/Windows/.jinrong/milvus/milvus.db`),中文项目路径 faiss 会炸
4. `python scripts/kb/build_collections.py --rebuild`(原料 `data/kb_collections/`)✓ 9 块
5. `python scripts/kb/test_search.py` ✓
- [x] **客服 RAG 接 fin_* 三库**:`VisitorRagService` → `search_cs_knowledge`(`fin_product` / `fin_policy` / `fin_faq`);宿主 Tool 仍走 `kb_product_rules`(T-21)
- [x] **tool 层实现 + 种子文档**:`document_parser` / `embedding_tool` / `milvus_tool` + `data/kb_collections/*`(2026-09-09)
### 数据分析 Agent · S3 接缝(2026-09-09 已接线)
> 清单:`docs/项目框架设计/数据分析Agent-合并说明.md` · **804 passed** · 冒烟 `scripts/dev/smoke_analyst.py`
- [x] merge + 接缝(`analyst_router` · `analyst_auth_adapter` · 问数走 `get_platform_auth_context`)
- [x] customer `self` 域 + 「AI 分析有风险」尾注
- [x] Wave6 测试 · 迁移 `migrate-analyst-d07-d11.sql` · 重置 `reset-analyst-d07-d11.sql`
- [x] 前端问数页 · Scope B 冒烟 19/19
- [x] **P2 · D-11 资产沉淀 UI**(`AnalystAssetsPage` · `POST /api/analyst/assets`)
- [x] **P2 · 问数页 dashboard 卡片**(`GET /api/analyst/dashboard` · `AnalystQueryPage` 顶部 metrics)
- [x] **P2 · 口径字典种子 SQL**(`scripts/agent/seed-analyst-metric-dict.sql` · 本机需手工执行)
- [x] **customer Chat SSE**(`chat.py` stream → `prepare_customer_stream` · 前端 `mode="stream"`)
- [x] **STAFF-30001/30002 追加 risk_demo**(`jwt_service.py` · 模拟交易页可造预警)
- [x] **445cfbb 功能层 cherry-pick**(2026-09-10):`guardrail.py` · `dict_service.py` · wave6 测试 · `run_query_battery.py`
- [x] **D-06 双层缓存**(2026-09-10):结果缓存+表世代写侧失效 · 模板填参 · 问数页标签 · 种子 SQL
- [ ] **D-09 多轮追问** · **N-03 溯源明细** · **N-07 转人工** — 前后端均未做
### 数据分析 Agent · 445cfbb 合入后开放项
- [ ] **20 题 live battery 跑分**(见上方「本批次 · 优先收尾」)
- [ ] **agent 编排接流水 Ambiguity**:`dict_service` 已返 Ambiguity · 确认 `analyst_agent` 反问链路在 live 20 题里生效(Q 含「流水」)
- [x] **D-06 写侧主动失效**(2026-09-10):表世代 bump · 模拟交易 `core_trade` · 预警/L3 写侧 · `invalidate_tables` + 单测
- [x] **D-06 模板缓存**(2026-09-10):`template_service` 匹配+填参 · 问数编排跳过 LLM · 种子 `seed-analyst-query-templates.sql`
- [ ] **D-06 PII 脱敏后再缓存** — 暂缓(全仓脱敏方案未定)
- [ ] **已知挂账(迭代文档)**:Q17 `create` 误杀 · Q7 无城市字段静默改职业 · 待排期
- [ ] **远程分支同步**(可选):本地 `data-analysis-agent` @ `fd9464d` 落后 `xinghuo/data-analysis-agent` 2 commit
### 风控 Agent · 2026-09-10 拍板收口
> **后端主链路(FR-1~10 · 对话 6 Tool · 处置 API)已完成。** 下列为 polish / 演示 / 文档,不是「风控坏了」。
**拍板(已定 · 不再扩 scope)**
- [x] **画像 Redis L1/L2 不进风控**:L1/L2 热缓存归**客服线**(`customer_service` + `ProfileHotCache`);风控只保留 **L3 cache-aside**(`profile_l3.get_profile_l3` · `customer_context` Tool 已走)— **不做** risk 侧 L1/L2 Redis
- [x] **前端用自有组件**:扩页时复用 `PageShell` · `Button`(`components/ui`)· `ApiErrorResult` · AntD `Table/Modal/Select`(对齐 `RiskAlertsPage` / `RiskSimulatePage`),不新引 UI 库
- [x] **模拟交易 UI 已有**:`RiskSimulatePage` + `api/simulate.ts`(A-1/A-3 预设)
**P1 · 前端代码(2026-09-10 拍板 · 三页一起做 · 2026-09-10 完成)**
- [x] **台账筛选 UI**:`RiskAlertsPage` · `alert_type` / `customer_id` / 日期窗
- [x] **适当性检查页**:`RiskSuitabilityPage` · `POST /api/risk/suitability/check`
- [x] **AML 扫描页**:`RiskAmlScanPage` · `POST /api/risk/aml/scan`
- [x] **路由/菜单**:`/app/risk/suitability` · `/app/risk/aml-scan`
**P1 · 演示一键灌库(2026-09-10 完成)**
- [x] **`scripts/demo/prepare_all.ps1`**:双库 DROP → core + agent 种子 → AML → prepare_risk_demo → sync_advisor_rel
**P2 · 深潜课(2026-09-10 完成)**
- [x] **模块 7 · 写侧并发**:`modules/07-concurrency.html` · nav 7 dots · `build.sh` / python 拼接 `index.html`
**后端 / 架构 · 挂账(非 P1 · 动契约前先出方案)**
- [ ] **AL-06**:chat 链路 `risk_suitability_log.actor_id` 暂落 SYSTEM(`agent_tool_call` 已覆盖发起者;改须动 `core_tools`/`kb_tools` 冻结签名)
**对话 Tool(risk Chat SSE)— 已完成**
- [x] risk Chat SSE(`ChatPanel` · `X-Agent-Type: risk`)
- [x] 6 只 Tool 已注册(含 `query_agent_behavior`)
**运维 / 演示 checklist(脚本已有 · 非产品化 · 见 `演示SOP-风控模块.md`)**
> 走查时手工跑即可;**不等于**后端缺 API。
- [ ] `subscribe_alerts.py` → Redis `risk:pub:alert` 实时推送演示
- [ ] `escalation_scan.py` / `agent_behavior_scan.py`(FR-9/10 · cron 无 UI,运维手跑)
- [ ] `rebuild_alerts.py`(engine_error 补偿)
- [x] SOP §2 灌库:`seed-aml-list.sql` + `prepare_risk_demo.sql`(`reset.ps1` 只重建 core)→ **`prepare_all.ps1` 一键串联**
- [ ] 走查样例 A-1~A-5 · FR-9/10 · L3 high 样例(文档步骤,非代码任务)
### 客服 Agent · Wave3 开放项(2026-09-10 后)
- [ ] **C-04 push/cron**:阈值命中仅持仓查询内联提醒;无 Redis pub / 定时扫仓(**拍板**)
- [ ] **C-05 Phase B**:`nav-snapshot` sync · 前端行情 Phase B(见 v0.2 草案)
- [ ] **C-08 偏离检测**:仅 L1 槽位,无自动调仓建议
- [ ] **Vitest**:客户 Chat 新 intent 无前端单测(后端已覆盖)
- [ ] **手工验收 + TEST-LOG 签核**(见上方「本批次 · 优先收尾」)
### 画像 Redis · cache-aside(2026-09-09 · **客服域,非风控**)
- [x] **L3 热读(风控)**:`get_profile_l3` cache-aside · `customer_context` Tool 已走此路径
- [ ] **L1 热读/写(客服)**:`ProfileHotCache` 仅在 `customer_service.py` · 宿主 `POST /api/chat` 未接 — **风控不做**
- [ ] **L2 热读/写(顾问)**:表与 JWT scope 已有 · Repository/Redis **未实现** — **风控不做**
- [x] **【前端接入·方案 B】chat 拉侧三端点**(commit `8328c24`,2026-09-08):`GET /api/chat/sessions`(本人+本 Agent 线分页列表)、`GET /api/chat/sessions/{id}/messages`(历史消息升序分页,closed 仍可读)、`POST /api/chat/sessions/{id}/close`(active→closed,重复/非 active 409);chat.py 抽 `_resolve_agent_type`/`_assert_chat_entry`/`_guard_session` 三守卫供四端点共用,POST "" 行为零回归;risk_manager 在对话线数据面保持 403(PRD 4A.1)。测试 482→**494 绿**;独立评审 P0=0,P1(close 并发 rowcount 静默 200)已修复
2026-09-08 14:24:08 +08:00
- [x] **【前端接入·方案 C】SSE 流式对话**(commit `01ec5fc`,2026-09-08):新增 `POST /api/chat/stream`(OpenAI 兼容 chunk:首帧 meta → delta → finish_reason=stop → `[DONE]`);`agent_service.stream_chat` 生成器 + `needs_disclaimer`;`_guard_request`/`_prepare_turn` 与同步端点共用守卫;`session_repository.insert_turn` user+assistant 同事务落库(修评审 P0/P1)。测试 494→**503 绿**。遗留:无心跳帧、断连留空会话待清理
- [x] chat 同步/流式落库免责声明口径统一(2026-09-09):`chat.py` `_assistant_content_for_persist` · sync/stream 共用 · `test_chat` 回归
- [x] 2026-09-05 memory 文件夹更新(新 Agent 交接清单)
> **AL-09 已完成(2026-09-08)**——见 `docs/项目框架设计/合并注意事项-风控模块并入main.md` 执行记录。
- [x] **【AL-09】合并接线**(2026-09-08):JWT 统一 · 模块 chat 恢复 · auth_adapter · test_module_boundary 绿 · **502 pytest 绿**
- [x] T-04 Core RO 封装为 Tool 节点;A-01 归属校验(chat Tool 接入 + agent_tool_call 落库)—— **完成(2026-09-07)**:`app/tool/core_tools.py`(L0/持仓/流水三只读 Tool + TOOL_REGISTRY 白名单)+ `app/service/tool_service.py`(关键词意图仅 customer/advisor;归属校验对齐 deps.assert_customer_access 口径——Tool 层拒绝不抛 403 而 blocked 留痕,纵深防御;run_tool 执行+落库,落库失败降级)+ agent_service 图 tool 节点(START→tool→llm→guard;结果注入 LLM 上下文,降级回复带摘要)+ session_repository.insert_tool_call(message_id 一期 NULL)。**A-01 口径:本任务只做 Tool 层归属校验语义(customer 本人/advisor assigned/risk_officer 全量/其余拒),A-01 完整场景(代理人画像)仍归 T-20**;risk 分支四 Tool 归 C1 复用 run_tool。**评审闭环(2026-09-07):首评 P1×2+P2×3+P3×2 → 修复 `40a9ee2` → 复审 P2×1+P3×4 → 修复 `1216d26`,pytest 321 绿;入参白名单+days 钳制、公共鉴权双写 `utils/authz.py`、list_holdings LIMIT 均落地**
- [x] T-21 Milvus Lite + kb_product_rules 首批入库 —— **完成(2026-09-07,commits e34973f~535c8a0 共 6 个 + 评审闭环 9cc2e59)**:`app/service/embedding.py`(Ollama bge-m3 批量 /api/embed 1024 维,四类失败一律 EmbeddingError 不静默降级)+ `app/service/milvus_service.py`(kb_product_rules 幂等建集合+upsert+search_kb 溯源/effective_date 合规过滤)+ `data/kb/` 6 只种子产品手册(prospectus/fee/rule/risk 四节 24 块)+ `scripts/kb/build_kb.py`(--dry-run/--kb-dir)+ `app/service/rag_service.py` 落地(search_knowledge→chunks+source_refs,异常上抛防 LLM 编造)+ `app/tool/kb_tools.py` 挂注册表第三层(**ToolSpec 新增 skip_access_check**:公开知识无归属语义,advisor 无绑定客户可查;意图层限定 customer/advisor,risk 不开放——用户拍板)+ tool_node 按 spec 白名单注入 query + summarize 溯源口径。**真库验收:24 块入库,search_knowledge("基金申购") Top3 命中申赎规则(score 0.73+),溯源完整**。三坑收口:Milvus Lite 跨进程重开须显式 load / faiss 不支持中文路径(本机 .env 改 C:/Users/YUAN/.jinrong/milvus/)/ build_kb sys.path 引导。知识库 API(上传/重建端点)一期不做(knowledge.py 仍空壳,用户拍板),425 绿
- [x] T-03 输入防护规则(F-03:prompt_injection/oversize/限流)—— **完成(2026-09-07,commits 497554d/65b45aa/cc6f34f/207fc79)**:`app/service/input_guard.py`(注入短语词表 42 条四类纯函数检测 + `inspect_message` oversize 4000 先于 injection + `check_rate_limit` Redis INCR 固定窗口 actor 级 30 次/分 fail-open)+ chat 路由接入(顺序:鉴权→准入→空白→限流 429→注入/超长 400→归属→会话;被拒 fail-fast 不建会话不落消息,blocked 落 input_guard_log,留痕降级不改拒绝语义;Pydantic 硬顶 20000,业务限 4000 移 guard 层换留痕)+ redis_gateway.incr + settings.guard_rate_limit_*;拍板:命中即拒不清洗、仅 blocked 留痕、词表代码常量可审计。**独立 AI 评审 PASS with findings(P0=0;P2×3 已收口:词表断言修正/补 7 条同构变体/窗口 TTL 断言+EXPIRE 失败取舍锁定;P3 已收 session_id 截断,挂账对抗变体扩表)**,378 绿
- [x] 风控阶段 C(C0 pytest-asyncio / C1 chat_tools / C2 risk 分支 StateGraph / C3 A-6 验收)—— **完成(2026-09-07)**:`app/service/risk/chat_tools.py` 四只读 Tool(alert_query/customer_context/suitability_check/aml_lookup)挂 `RISK_TOOL_REGISTRY`;`tool_service.run_tool` 改查 core+risk 统一注册表 `get_registered_tool` 且恒传 `risk_repo`;`_normalize_params` 读 spec 白名单;`match_intent` 按 agent 分组扩 risk 关键词;`agent_service.tool_node` 守卫放宽(`requires_customer=False` 允许无绑定客户,支撑 A-6 全量待审);A-6 验收+诱导处置边界(无处置 Tool、系统提示禁自动处置、诱导只触发只读且预警状态不变);**独立 AI 评审 PASS(P0=0,P2 补 advisor 归属/空 product_id 单测已收口),345 绿,tag `risk-m3`**
### 风控模块(PRD v1.0 已冻结 · `docs/PRD/PRD-风控监测Agent.md`,事件驱动线不依赖 T-07 可先行)
- [x] T-30 风控事件线 —— **全部完成(B1~B9b,M2 tag risk-m2)**:规则引擎/预警聚合/L3/AML/交易网关/4 API/演示走查 11/11 PASS + 核查单①~⑥收口,均经独立 AI 评审闭环;scan_all 幂等读后写无锁留痕(接批量时 run_locked)
- [x] T-31 `service/suitability.py` 公共校验(SUIT-001~008)+ `POST /api/risk/suitability/check` —— **交付=suitability 服务函数+单测(77 例;check API 随 B6 带鉴权+直调审计);MySQL 手工 SQL 对照(阶段 A 评审 P2-8)2026-09-07 收口:4 组演示组合真库 SQL 推导与函数判定逐项一致(演示 SOP 核查单附行)。【2026-09-07 阶段一退役】SUIT-001~008 编号体系已随 AL-05 换核退役,判定内核改为 main 的 core_ro.check_suitability(C×R 矩阵 + JR-AST/FM 契约),测试按 main 契约重写(原 77 例作废,全量基线 425→406)**
- [x] T-32 预警台账与人工处置 API + 对话线 —— **台账/处置 API 已由 B6 覆盖并复审通过(A-7/A-9 用例绿);交付=对话线,归阶段 C(C1~C3,T-07 已就绪)**
## 已完成
- [x] 2026-09-07 风控 M2 收尾(M4 复核):MEMORY/TODO 状态与边界文字对齐(任务映射 T-30/T-31/T-32 口径确认;B7 复审留痕「成功响应不包裹外壳」演进口径维持并登记开发计划 M4 节)——风控阶段 B 正式完结
- [x] 2026-09-07 T-01 JWT 鉴权(commit 36f476f + 评审闭环 61711cb):`app/service/auth_service.py` Auth SDK(HS256 dev/RS256 生产、必填 claims 显式校验、jti 吊销 fail-open、RS256/HS256 算法白名单互斥)+ `deps.get_auth_context` 工厂替换(Bearer 全环境优先;debug 头降级 dev 兜底,双闸门=APP_ENV+无 RS256 公钥)+ X-Agent-Type 交叉校验(手册 §4.6/§5.4 AGENT_ACCESS_MATRIX)+ `scripts/dev/issue_dev_token.py` 签发 CLI + lifespan 改验 jwt_ready
- [x] 2026-09-07 T-02 审计中间件(commit 3cec034):`app/api/audit_middleware.py` http_access 全量访问审计(actor 经 request.state.auth,排障路径/OPTIONS 跳过,写库失败降级)+ 独立 request_id(X-Request-Id 贯通,B7 复审 P3-4)+ 422/404/405/500 统一错误体(500 由 trace 中间件兜底回写 trace 头,B7 复审 P2-2)+ input_guard_log 双写(挂账⑧收口;401 归 platform、四 Agent 入口写 guard)
- [x] 2026-09-07 T-07 LangGraph 骨架(commit fb18c04):`agent_service` StateGraph(llm→guard)+ DeepSeek/langchain-openai(无 key 降级明确标注)+ 四 Agent 边界 system prompt + customer/risk 免责声明(has_disclaimer)+ 单测 mock LLM 不依赖外网
- [x] 2026-09-07 T-06 chat 最小闭环(commit ee5c78a):`api/chat.py` POST /api/chat(X-Agent-Type 分流+准入+归属校验+SessionGuard AUTH_403_SESSION_AGENT+closed 409)+ `session_repository`(agent_session/agent_message)+ `memory_service`(Redis 窗口 sess:{agent}:{id}:msgs TTL2h N≤20,miss/异常回源 MySQL)+ main 挂载
- [x] 2026-09-07 Wave 0 独立 AI 评审有条件通过→闭环(commit 61711cb):P2×5(python-jose>=3.5.0 防 CVE / audit 降级测试 / JWT 通道 chat 用例 / debug 兜底纵深防御 / 留痕失败降级显式化)+ P3×11 顺手,273 测试绿
- [x] 2026-09-05 init 项目记忆目录 + `app/` 脚手架(api/service/tool/model/config/utils)
- [x] 2026-09-05 需求拆解文档(业务场景/矩阵/合规)
- [x] 2026-09-05 表设计 + 技术选型 + JWT 手册
- [x] 2026-09-05 Core 模拟库 `scripts/core/*` + `reset.ps1` + 文档
- [x] 2026-09-05 `core_ro.py` + `settings.mysql_core_database` + sync 脚本
- [x] 2026-09-05 Agent 编排依赖改为 LangGraph(requirements.txt)
- [x] 2026-09-05 memory 文件夹更新(新 Agent 交接清单)
- [x] 2026-09-10 merger 批次(工作区 · **804 pytest** · 未 commit):Wave3 · analyst D-06 · 风控前端/灌库/深潜课7 · 问数 template 标签
- [x] 2026-09-10 客服 Wave3 + analyst 445cfbb cherry-pick + 课程 layout 修复(**795 pytest** · 已并入上项)
- [x] 2026-09-09 数据分析 Agent S3 合并接线 + 问数页 + 迁移/冒烟(`773 passed` · commit `af9fb71`)
- [x] 2026-09-09 数据分析 Agent 需求规格定稿 v1.1(`docs/需求拆解/01-数据分析Agent需求规格.md`)