Commit Graph
75 Commits
Author SHA1 Message Date
GaoYiYuan_0626 b5fd52ef02 AL-08: 演示库重灌与种子核对对齐 main 基准——prepare_risk_demo.sql 改写 expires_at 口径(演示客户刷新为测评 90 天前/剩余 275 天,CUST-1004 保持过期演示 FM-03,替代 SUIT-008 evaluated_at+365 旧写法);演示 SOP 同步(§2 完成标志 33 客户口径+expires_at 剩余天数,A-1 预期改 SUIT_RISK_MISMATCH,A-2 改 FM-01 SUIT_AGE_CONFIRM 网点确认);网关阻断响应补全 main 契约字段(match_result/mismatch_type/requires_disclosure/needs_branch_confirm/rule_refs)+audit detail 加 block_response_code;集成测试 4 例旧口径断言更新(A-1 trace 一致性断机器码/A-1 audit JSON 断机器码/A-2 重写为 FM-01 语义/settings 退役断言)。SOP §2 脚本化全量重灌双库验证通过(AML 8 条/演示 7 行/sync 33 rows);全量 406 passed 0 failed 0 skipped(集成测试真库走 21 列新表+expires_at 数据恢复执行) 2026-09-07 17:49:39 +08:00
GaoYiYuan_0626 ec11ec42c0 AL-07: test_suitability 按 main 契约重写——七判定路径正反例(not_found 客户/产品两向/FM-03 过期/JR-AST-PRO 专业豁免优先于矩阵 forbidden/JR-AST-012 矩阵 forbidden/矩阵缺行 fail-closed/allowed/矩阵披露与产品 requires_disclosure 两源/FM-01 age70+R5 阻断+69岁与R2 两边界);compute_rule_refs 四类组合(含报告样例 过期+不匹配→['JR-AST-012','FM-03']);build_suitability_log_row 逐字段 21 列映射断言+bool→int 转换;服务集成端到端(21 列落库/check_source r02_trade 与 r02_chat/actor_id/request_ref 透传/兼容字段 rule_id=机器码 映射/NotFound 结构化不抛);MySQL 方言冒烟(真库连通时验 SQL 可执行性,未灌库自动 skip)。可控日期用远未来/远过去 expires_at 种子。全量 395 passed 0 failed;1 skip=集成模块待 AL-08 重灌演示 SQL expires_at 2026-09-07 17:42:55 +08:00
GaoYiYuan_0626 38da477be4 AL-06: 对话 Tool 与 API 响应对齐 main 基准——chat_tools.suitability_check 返回体扩展 match_result/mismatch_type/requires_disclosure/needs_branch_confirm/block_response_code/rule_refs(替代 rule_id/reasons/effective_level 展示),check_source='r02_chat',not_found 转结构化 found=False(NotFoundError except 死代码清除);tool_service.summarize suitability 分支按新枚举重写文案(网点当面确认 FM-01/签署风险揭示书/测评过期 FM-03/专业豁免,附 rule_refs 依据);risk_api 断言改 block_response_code。全量 373 passed 0 failed(1 skip=test_suitability 占位待 AL-07)。遗留:chat 链路 risk_suitability_log.actor_id 暂落 SYSTEM(run_tool 统一透传需动 core_tools/kb_tools 冻结 func 契约,发起者留痕已由 agent_tool_call 覆盖) 2026-09-07 17:39:04 +08:00
GaoYiYuan_0626 adf5e8013a AL-05: suitability 服务重构换核对齐 main 基准——判定内核由 SUIT-001~008 纯函数矩阵改为 core_ro.check_suitability(C×R 数据驱动);SuitabilityResult 扩 main 新字段(match_result 五值/mismatch_type 七值/requires_disclosure/needs_branch_confirm/block_response_code/rule_refs)并保留旧字段兼容层(rule_id=机器码别名/effective_level=customer_level/reasons=[reason]);check_core/cap_by_age/match_by_matrix/is_assessment_valid 删除(SUIT-006 被 FM-01 替换,SUIT-008 被 FM-03 expires_at 替换);settings.risk_assessment_valid_days 退役(.env/.env.example 注释);NotFoundError 不再抛(not_found 结构化,main 契约);写库走 build_suitability_log_row + insert_suitability_log 升级 21 列(rule_refs JSON 序列化);check_source 参数化(网关 r02_trade/risk.py manual)+actor_id 透传;网关阻断响应补 block_response_code;model 抽 compute_rule_refs 公共函数防两处漂移;测试配套:_ddl 加矩阵 25 行种子 helper、conftest fixture 灌种子+集成就位校验改 expires_at 口径、trade_gateway/risk_api fixture 补种子与 expires_at、404 两例改 200+blocked 新契约、repository 21 列断言、settings 退役断言、test_suitability 占位 skip 待 AL-07 重写。sqlite 端到端七语义+落库验证通过;剩 4 failed 均为 chat_tools/API 旧展示断言(AL-06 处理) 2026-09-07 17:34:32 +08:00
GaoYiYuan_0626 c92f0d7020 AL-04: 引入 model/suitability.py 对齐 main 基准——build_suitability_log_row 原样引入(check 结果→risk_suitability_log INSERT 行映射;rule_refs 组合:JR-AST-012 等级不配/FM-03 风评过期/FM-01 网点确认/JR-AST-PRO 专业豁免;CheckSource 四值 Literal) 2026-09-07 17:12:46 +08:00
GaoYiYuan_0626 ba3465a953 AL-03: core_ro.py 融合对齐 main 基准——我方骨架保留(utils/db.get_engine 统一引擎工厂,main 自带 create_engine 工厂不采纳;风控扩展 get_trade_by_id/sum_trades_on_date/list_trades_range/list_active_customers 全保留),吸收 main 四项+1:①get_customer_l0 扩列版(c.*+风评新列+risk_is_expired) ②check_suitability+_suitability_result(C×R 矩阵判定,判定链 not_found→FM-03 过期→JR-AST-PRO 豁免→JR-AST-012 矩阵→披露→FM-01 网点确认) ③list_products_for_customer(C-11) ④list_holdings 合并(limit=500 截断防护+min_subscribe_amount/term_days 新列) ⑤list_trades(差距#13 新查询能力)。移植坑消解:main 三处 CURDATE() SQL 表达式统一改 Python 端 _is_expired 计算(sqlite 测试库兼容),date/datetime/str 统一 _as_date 归一。双方言验收:MySQL 真库(not_found/expired 真跑)+sqlite 七路径可控日期验证通过;pytest 失败面与 AL-02 基线一致(15 failed 均旧契约断言) 2026-09-07 17:11:52 +08:00
GaoYiYuan_0626 e99ec6775a AL-02: risk_suitability_log 重建 21 列对齐 main 基准——底座 SQL 采纳 main 版(product_name/investor_category/match_result 五值/mismatch_type 七值/requires_disclosure/needs_branch_confirm/risk_was_expired/block_response_code/check_source 四值/actor_id/rule_refs JSON + 6 索引);07-说明.md 直接采用 main 版 P0 契约;tests/_ddl.py sqlite 同步(21 列 + core_suitability_rule 新表 + core_customer/core_customer_risk/core_product 扩列,VARCHAR 近似 ENUM 与现有风格一致);修 test_risk_api 位置式 INSERT 补列名。全列 INSERT 验收通过;剩余 15 failed 均为旧契约断言(报告预告作废集,AL-05/06/07 清零) 2026-09-07 17:05:15 +08:00
GaoYiYuan_0626 bb244f43a3 AL-01: Core 库表结构对齐 main 基准——01-ddl 采纳 main 版(新增 core_suitability_rule C×R 矩阵表+FK/core_customer KYC 扩列含 is_hnw/core_customer_risk 七新列含 expires_at+investor_category/core_product 起购金额/期限/揭示书列/core_trade AML 扩列/core_cash_flow flow_subtype);02~06 种子采纳 main 版(33 客户含 CUST-DEMO-A~E/14 产品/矩阵 25 行);保留我方独有 STAFF-90001 风控演示账号;README 种子规模与矩阵口径同步。非交互重灌验证通过(矩阵 25/客户 33/产品 14/风评 33) 2026-09-07 16:57:15 +08:00
GaoYiYuan_0626 eae28bee4e docs: PRD/规则表/开发计划合并需求追加 v1.1 修订 2026-09-07 12:46:59 +08:00
GaoYiYuan_0626 21f63a95ee chore: .gitignore 忽略风控需求追加过程文档 v1.1 2026-09-07 12:42:59 +08:00
GaoYiYuan_0626 9cc2e59bb7 fix: T-21 评审闭环(P1-1 MILVUS_URI 遮蔽)——milvus_service 环境防御顺序重排: settings 先初始化(干净读 .env)→os.environ 归位合法 http 占位(仅替换文件 URI)→import pymilvus; 原顺序下 pydantic 读到被污染 env 会把 .env 的 MILVUS_URI 一并遮蔽(最坏 import 顺序真连接事故); 最坏顺序断言+全量 425 绿+端到端检索通过 2026-09-07 12:24:46 +08:00
GaoYiYuan_0626 8fbbca6bb2 docs: T-21 文档同步——TODO 勾选(完成详情+三坑收口)/MEMORY 交接清单与仓库地图/FLOW milvus_tool 状态改已做; 下一项=前端 React 入口 2026-09-07 12:12:36 +08:00
GaoYiYuan_0626 535c8a0a20 fix: T21 真库联调三坑——①Milvus Lite 文件库跨进程重开 collection released, ensure_collection 补显式 load(单测同进程覆盖不到); ②faiss 不支持中文路径(faiss C++ IO), 本机 .env 改英文绝对路径 C:/Users/YUAN/.jinrong/milvus/, .env.example 加警告; ③build_kb 直跑 sys.path 引导项目根(同 rebuild_alerts 先例); 真库 24 块入库+检索验收通过(基金申购 Top3 命中申赎规则, 溯源完整), 425 绿 2026-09-07 12:11:10 +08:00
GaoYiYuan_0626 1c51149912 feat: T21-5 知识库 Tool 接入对话——kb_tools(search_knowledge)挂统一注册表第三层; ToolSpec 新增 skip_access_check(公开知识无归属语义, advisor 无绑定客户可查, 意图层限定 customer/advisor); 意图关键词 customer/advisor 组尾挂 kb 词(Core 词优先, risk 不开放); tool_node 按 spec 白名单注入 query; summarize 溯源口径; 单测 13 例, 425 绿 2026-09-07 12:05:36 +08:00
GaoYiYuan_0626 e2a444453e feat: T21-4 RAG 检索编排——rag_service.search_knowledge(query→bge-m3 向量→Milvus 检索→chunks+source_refs 溯源去重), 异常原样上抛不吞(防 LLM 编造回答), 空白 query 短路, ensure_collection 幂等防御; 单测 8 例注入 mock, 412 绿 2026-09-07 12:01:45 +08:00
GaoYiYuan_0626 974fff9507 fix: T21-3 补丁——.gitignore 白名单 data/kb/*.md(演示手册入库可复现, 真实产品文档仍忽略), 补提交 6 只产品手册 md 2026-09-07 11:57:36 +08:00
GaoYiYuan_0626 7edf522aff feat: T21-3 知识库首批数据+入库脚本——data/kb 6 只种子产品手册(每只 prospectus/fee/rule/risk 四节 24 块, 费率与 core_product seed 对齐)+build_kb.py(front-matter+节标题切块/doc_type 白名单/Core 权威元数据缺省即中止/一次批量 embedding/upsert 幂等/--dry-run); 脚本单测 10 例, 404 绿 2026-09-07 11:55:24 +08:00
GaoYiYuan_0626 1056a95343 feat: T21-2 Milvus 接入层——kb_product_rules 幂等建集合(冻结 11 字段+AUTOINDEX COSINE)+upsert 入库+search_kb(溯源字段必带+effective_date 合规过滤+标量过滤); 规避 pymilvus 3.x import 阶段读 .env 文件 URI 炸 import 的坑(setdefault 预置合法 MILVUS_URI); 单测 8 例真 Lite 临时库, 394 绿 2026-09-07 11:49:43 +08:00
GaoYiYuan_0626 e34973f018 feat: T21-1 embedding 服务——Ollama bge-m3 批量 /api/embed(1024 维), 连接/模型/结构/维度四类失败一律 EmbeddingError 不静默降级(拍板口径), 空输入短路; settings 增 embed_dim/embed_timeout; 单测 10 例 mock HTTP 不依赖 Ollama, 386 绿 2026-09-07 11:46:24 +08:00
GaoYiYuan_0626 5f32dd349c docs: T-03 文档同步(378 绿, 评审 PASS with findings P0=0)——TODO 勾选 + MEMORY/FRAMEWORK/REQUIREMENTS F-03 状态改为完成 + 下一步 T-21/前端 2026-09-07 11:18:28 +08:00
GaoYiYuan_0626 207fc79f61 test: T-03 评审闭环(PASS, P0=0)——P2-1 词表规范化断言修正/P2-2 补 7 条同构变体(你现在是管理员/ignore the above instructions 等)+变体单测/P2-3 窗口 TTL 断言+EXPIRE 失败取舍锁定; P3 session_id 落库截断+trace 兜底注释, 378 绿 2026-09-07 11:16:15 +08:00
GaoYiYuan_0626 cc6f34fbbd feat: T-03 输入防护限流(T3-3)——actor 级 Redis 固定窗口 30 次/分(settings 可调), 超限 429 GUARD_RATE_LIMITED+留痕, Redis 故障 fail-open, 测试 4 例(429/窗口滚动/fail-open/注入计数), 376 绿 2026-09-07 11:10:26 +08:00
GaoYiYuan_0626 65b45aa917 feat: T-03 输入防护接入 chat(T3-2)——注入/超长命中即拒 400 + input_guard_log 留痕(fail-fast 不建会话, 留痕降级不改拒绝语义), Pydantic 硬顶 20000, 集成测试 7 例 2026-09-07 11:02:36 +08:00
GaoYiYuan_0626 497554da43 feat: T-03 输入防护服务(T3-1)——input_guard 纯函数检测(注入短语词表/oversize 4000) + 单测 20 例(不误杀用例/判定顺序锁定), 365 绿 2026-09-07 10:59:25 +08:00
GaoYiYuan_0626 e5937d6ac9 docs: 阶段C 文档同步(345 绿, tag risk-m3, 独立评审 PASS P0=0)
- docs/memory/TODO.md: 勾选风控阶段 C 完结(C0~C3)
- docs/memory/MEMORY.md: §0/§1/仓库地图更新至阶段 C 收尾 + 下一步 T-21/T-03/前端
- .gitignore: 正式忽略交接文档.md 与 .workbuddy/(过程文件不提交约定)
2026-09-07 10:36:51 +08:00
GaoYiYuan_0626 c92d8c7783 test: 阶段C 评审 P2 补 advisor 归属覆盖与空 product_id 单测(345 绿) 2026-09-07 10:31:58 +08:00
GaoYiYuan_0626 930ea9db56 feat: 阶段C 风控对话线(C1 四只读 Tool + C2 risk 分支意图 + C3 A-6 验收与边界)
- C1: app/service/risk/chat_tools.py 新增 alert_query/customer_context/suitability_check/aml_lookup 四只读 Tool,挂 RISK_TOOL_REGISTRY(与 core_tools.ToolSpec 同构)
- C1: tool_service.run_tool 改查 core+risk 统一注册表并恒传 risk_repo;_normalize_params 读 spec 白名单;core_tools 三函数加 risk_repo=None;summarize 补四工具分支
- C2: match_intent 按 agent 分组扩 risk 关键词;agent_service.tool_node 守卫放宽(requires_customer=False 的 Tool 允许无绑定客户运行,支撑 A-6 全局待审)
- C3: A-6 验收(risk_officer 问待审预警→alert_query 全量→回复含待审数)+ 诱导处置边界(无处置 Tool、系统提示禁自动处置、诱导只触发只读且预警状态不变)
- 测试 tests/test_risk_chat_tools.py(21 例);全量 pytest 342 绿(原 321 + 21)
2026-09-07 10:26:54 +08:00
GaoYiYuan_0626 d56f73ff73 chore: 阶段C 增补 pytest-asyncio 依赖(C0) 2026-09-07 10:26:24 +08:00
GaoYiYuan_0626 397c0b2092 docs: 同步交接文档至 T-04 复审闭环(321 绿) + MEMORY/FLOW/TODO 测试数 297→321 + T-04 评审闭环状态 2026-09-07 09:59:37 +08:00
GaoYiYuan_0626 1216d26083 fix: T-04 复审闭环——P2-1 test_chat 夹具补 _risk_repo 打桩(防越权双写写脏演示 MySQL)/P3 归属码改为显式集合+前缀兜底/truncated 判定多取 1 条防恰好 500 误报, 321 绿 2026-09-07 09:51:38 +08:00
GaoYiYuan_0626 40a9ee21a6 fix: T-04 评审闭环——P1-1 留痕降级提 error 带定位字段/P1-2 对话越权接鉴权双写(utils/authz.py 下沉公共出口,deps 复用,service 不反向依赖 api)/P2 入参白名单+days 钳制[1,365]/list_holdings SQL LIMIT+truncated/时间窗集中 _now_naive; 补测 24 例(days 边界/非法入参/inactive 归属/双写断言/降级日志/上下文截断), 321 绿 2026-09-07 09:42:37 +08:00
GaoYiYuan_0626 301c78edc3 feat: T-04 Core RO Tool 节点——chat Tool 接入+归属校验+agent_tool_call 落库
- app/tool/core_tools.py: 三只读 Tool(query_customer_profile/holdings/recent_trades, Core RO 仅 SELECT) + TOOL_REGISTRY 白名单(requires_customer); JSON 安全化(Decimal 两位/时间 isoformat)
- app/service/tool_service.py: match_intent 关键词意图(仅 customer/advisor; risk/analyst 空转归 C1/C2) + assert_tool_access 归属断言(customer 本人/advisor assigned/risk_officer 全量/其余拒, 口径对齐 deps.assert_customer_access) + run_tool 编排(白名单→校验→执行→agent_tool_call 落库, 落库失败降级 warning)
- agent_service: 图 START→tool→llm→guard; Tool 结果注入 LLM 上下文(SystemMessage); 降级回复带 Tool 摘要; chat() 可选 session 上下文(缺省空转, T-07 兼容)
- session_repository: insert_tool_call(message_id 一期 NULL, session_id+trace_id 可还原)
- 归属拒绝口径: Tool 层不抛 403 改 blocked 留痕(AUTH_403_* 同码), 对话内呈现——API 层 deny 铁律不变
- tests: test_chat_tools 20 例(三态+落库字段+降级+图注入) + test_chat 4 例(全链路/JWT 外 debug 通道), _ddl 补 agent_tool_call/core_holding, 297 绿
- 真库冒烟: uvicorn+真 MySQL/Redis chat 触发持仓查询 success 落痕 47ms, 现场已清理
2026-09-07 08:43:36 +08:00
GaoYiYuan_0626 3c3ce4e5d6 docs: 交接文档增量同步——演示库状态更新(已按 SOP 重灌+冒烟清理, pytest 可直接跑, 走查后需再重灌) + FLOW 尾注补 python-jose 漏装坑(与 redis 包同类, 附 import 自检命令) + JWT 默认密钥 warning 属预期/DEEPSEEK 空 chat 降级入本机状态 + AGENTS.md 代码入口刷新(main 全路由/鉴权工厂/Auth SDK/StateGraph) 2026-09-07 08:15:50 +08:00
GaoYiYuan_0626 b97e77747a docs: M2 收尾复核闭环(M4)+Wave 0 状态同步——M4 复核记录(任务映射/T-30~T-32 边界收口/成功体不包裹演进口径维持/agent_message.trace_id 请求级口径/会话枚举取舍登记), TODO(T-01/T-02/T-06/T-07 勾选+T-30~T-32 收口), MEMORY(§0 进度/仓库地图/下一步/273 绿), FLOW(§0 JWT 已做/§1 链路/§2 对话主链路状态), FRAMEWORK(能力模块+分层), REQUIREMENTS(F-01/F-02 完成/F-03 部分), 开发计划头注, 演示 SOP 补 JWT 通道签发演示 2026-09-07 03:08:27 +08:00
GaoYiYuan_0626 61711cb70a fix: Wave 0 独立 AI 评审闭环(有条件通过→闭环, 273 绿)——P2-1 python-jose>=3.5.0(防 CVE-2024-33663/33664) P2-2 audit 降级+OPTIONS 测试 P2-3 JWT 通道 chat 3 例 P2-4 debug 兜底双闸门(dev+无 RS256 公钥) P2-5 留痕失败降级显式化(401/403 拒绝语义不漂移, _safe_unauth_audit 保护 repo 构造); P3 顺手: 401 归 platform/值域外 400 补留痕/Bearer 大小写不敏感/jti 加 uuid/CLI permissions+exp 上限/dev 默认密钥 warning/LLM 单例加锁/chat 主角色优先序+message strip+guard 日志脱敏/必填 claims 参数化+none 算法固化; P3 登记项(会话枚举/seq_no 锁/trace_id 口径/文档同步)归 M4 文档 2026-09-07 03:03:12 +08:00
GaoYiYuan_0626 ee5c78af66 feat: T-06 chat 最小闭环——api/chat(X-Agent-Type 分流+准入矩阵+customer 归属固定本人/advisor G-01 归属校验+SessionGuard actor/agent 一致+closed 409) + session_repository(agent_session/agent_message, 派生表补 alias 修 MySQL 1248) + memory_service(Redis 窗口 sess:{agent}:{id}:msgs TTL2h N20, miss/异常回源 MySQL) + main 挂载 + tests/test_chat 12 例, 260 绿 2026-09-07 02:41:42 +08:00
GaoYiYuan_0626 fb18c04a8a feat: T-07 LangGraph StateGraph 骨架——compose(system 四 Agent 边界 prompt)→llm(DeepSeek/langchain-openai, 无 key 降级)→guard(customer/risk 免责声明+has_disclaimer, 未知类型 fail-safe 最严口径) + chat() 入口 + 图/LLM 单例缓存与测试隔离出口 + tests/test_agent_service 8 例(mock LLM 不依赖外网) 2026-09-07 02:34:57 +08:00
GaoYiYuan_0626 3cec034026 feat: T-02 审计中间件——http_access 全量访问审计(auth 注入 request.state, 排障路径跳过, 写库失败降级) + 独立 request_id(X-Request-Id 白名单透传贯通, B7 复审 P3-4) + 422/404/405/500 统一错误体(500 由 trace 中间件兜底生成并回写 trace 头, B7 复审 P2-2) + input_guard_log 双写(deps 401/403 留痕, platform 网关跳过 ENUM 口径, 挂账⑧收口) + repo.insert_input_guard_log + tests/test_audit_middleware 12 例, 240 绿 2026-09-07 02:32:03 +08:00
GaoYiYuan_0626 36f476f450 feat: T-01 JWT 鉴权——auth_service(Auth SDK: HS256/RS256 验签+必填claims显式校验+jti吊销 fail-open) + deps 工厂替换(Bearer 全环境, debug 头降级 dev 兜底) + X-Agent-Type 交叉校验(手册§4.6/§5.4 准入矩阵) + issue_dev_token CLI + redis_gateway exists/set_ex + lifespan 改验 jwt_ready + tests/test_auth_jwt 18 例, 228 绿 2026-09-07 02:23:33 +08:00
GaoYiYuan_0626 725a38d203 docs: 交接文档 B9b 后同步——MEMORY §0 补演示库走查残留警告(pytest 集成防护 fail 属预期, 先按 SOP 重灌)+B9b 评审闭环+阶段优先级改 Wave 0+文档资产表加演示 SOP, FLOW §0 状态行与本机 pytest 表述限定, 测试数统一 209 2026-09-07 02:04:32 +08:00
GaoYiYuan_0626 539d4915d7 fix: B9b 复审闭环——P2-1 SOP 交互重灌补 DROP jinrong_agent(reset.ps1 只重建 core+裸 CREATE TABLE 会 1050 中止); P2-2 补做 T-31 名下 P2-8 手工 SQL 对照收口(4 组合真库 SQL 推导与函数判定一致, 登记 SOP 核查单附行); P2-3 SOP 走查范围与 11/11 口径统一(A-6 归 M3/A-8 映射交代); P3: A-4/A-9 COUNT 当日窗+已处置单幂等用例+suitability/check 阻断响应补 G-08 两要素(advice/notice)+记忆文档数字同步; 留痕 scan_all 幂等读后写无锁取舍; 209 绿 2026-09-07 01:59:15 +08:00
GaoYiYuan_0626 03d77b9451 feat: B9b 演示走查——核查单收口: ①预警类 API 固定 disclaimer(alerts/handle/aml-scan) ②aml/scan 幂等防护(find_recent_aml_alert 同客户当日已有 aml 单不出单+skipped_existing) ⑥集成测试前置断言(A-1/A-3/A-4 清洁检查 fail+重灌提示, A-5 按 trade_id 定位); 演示 SOP 落地(脚本化重灌 MYSQL_PWD 方式); 真服务走查 A-1~A-5/A-7/A-9+核查单①②④⑤ 11/11 PASS(核查单⑥防护现场复现), 208 绿; M2 达成 2026-09-07 01:36:44 +08:00
GaoYiYuan_0626 e62fb1d291 fix: B9a 复审闭环——P2-1 skipped 分支 has_engine_error_audit 中间态警示(input_summary LIKE)+docstring 局限声明; P2-2 非首笔 trade 幂等用例; P3 顺手: 双脚本连接自检/ImportError 分支/非 dict payload raw 兜底/get_trade_by_id confirmed 过滤/勿并行声明, 8 例 204 绿, warning 路径真库复验后清理; docs 同步复审结论 2026-09-07 01:02:12 +08:00
GaoYiYuan_0626 fdf487dc32 feat: B9a 演示/运维脚本——subscribe_alerts(risk:pub:alert 订阅演示/连接自检/--duration) + rebuild_alerts(按 trade_id 幂等重放: find_alerts_by_trade payload LIKE 查已入单防重复出单与重复 append, 含 aml/已处置单) + core_ro.get_trade_by_id 只读扩展 + test_demo_scripts 5 例, 201 绿; 真库手工验证(出单→幂等 skip→missing exit1; 订阅端到端 trace 贯通)后现场清理; docs 同步(TODO/MEMORY/FLOW/开发计划) 2026-09-07 00:43:25 +08:00
GaoYiYuan_0626 be44d569a4 docs: 交接文档 B8 后全面同步——MEMORY 进度/B7·B8 复审闭环/196 绿/bootstrap 本机就位注记, FLOW §0 补本机状态与已知坑(mysql.exe 路径/reset.ps1 交互卡死), TODO 进行中改 B9a 2026-09-07 00:01:52 +08:00
GaoYiYuan_0626 516b1132a3 fix: B8 复审 P1-1——conftest except pytest.SkipRequested 引用不存在属性致 skip 路径炸收集(删, Skipped 继承 BaseException 直传, 错密码故障注入验证 skip 不 error); P3 顺手: teardown l3_snapshot 哨兵 + A-1 补 trace 响应头/suitability_log 两环; P2-1 演示库耦合前置断言挂 B9b 核查单⑥ 2026-09-06 23:52:59 +08:00
GaoYiYuan_0626 c6ad0885d3 test: B8 收敛——sqlite 测试 DDL 单一事实源 _ddl.py(10 文件 45 处手写 DDL 清零)+localtime 时区收敛(B5 评审 P3-4, utcnow 边界修复)+测试内遗留建表清理, 196 绿; docs 同步 B8 完成状态 2026-09-06 23:37:03 +08:00
GaoYiYuan_0626 e7bd8880e2 test: B8 主体——conftest(演示数据校验/幂等代跑/TRD-TEST- teardown)+集成测试 A-1~A-5/A-7/A-9+trace一致性+审计JSON(11例)+_ddl.py 单一事实源+L3 DEL 行为断言(B7复审P2-1)+locks 文案中性化(P3-2), 196 绿 2026-09-06 23:27:37 +08:00
GaoYiYuan_0626 fe29b736ea fix: B7 复审 P1-1——dispose_engines 显式 Engine.dispose()(手写单例字典替代 lru_cache, test_db 3 例, 独立评审有条件通过→闭环) 2026-09-06 23:06:32 +08:00
GaoYiYuan_0626 429e2f9e38 docs: 交接文档 B7 后全面同步——MEMORY bootstrap 补风控步骤/文档索引补 PRD 与开发计划/验证门闸补 pytest, ENVIRONMENT 对齐 R-02 已实现 2026-09-06 21:47:54 +08:00
GaoYiYuan_0626 5c83cda10a docs: L3 锁外 DEL 竞态窗口留痕(一期无读路径无影响,对话线接缓存时改双删, B7 自查) 2026-09-06 21:14:06 +08:00
GaoYiYuan_0626 6195349dd6 feat: main 集成(路由挂载/trace 中间件/lifespan) + B7 挂账收口(引擎工厂/统一错误体/锁公共化/L3 缓存 DEL/死代码清理/处置原子事务/启动期 debug 校验, B7) 2026-09-06 20:48:50 +08:00
GaoYiYuan_0626 a78e9d4d31 fix: B6 复审收口——测试 Redis 隔离/网关审计口径 platform/死常量清理/回归断言补强
- P2: test_risk_api env 注入 FakePublisher,aml 推送不触真 Redis
- P3: deny/_authz_audit 增 agent_type 参数,simulate 越权审计传 platform
  (与网关放行审计同口径);删 HANDLE_RESULTS 死常量(Literal 单处定义)
- P3: 补 start_date/end_date 过滤+分页 422 边界+suitability api 层审计断言;
  补 app/service/risk/__init__.py
- 挂账: B7 行新增④项(启动期拒绝/引擎工厂覆盖三实例化点/handle 原子性/
  input_guard_log);B9b 行核查单(disclaimer/scan 幂等/Swagger 手测/analyst);
  TODO.md T-30/T-31/T-32 进度同步
2026-09-06 19:21:15 +08:00
GaoYiYuan_0626 3e40a2bb49 fix: B6 评审修复——鉴权审计统一 deny/401 留痕、start_date/end_date 对齐 PRD、simulate 回挂鉴权、异常与审计注入收敛
- P1-1: 403/401 全部经 deps.deny/_authz_audit 留痕(event_type='authz')
- P2-1: GET /alerts 参数名 start_date/end_date 对齐 PRD;page/page_size 用 fastapi.Query
- P2-2: /api/simulate/trade 回挂 get_auth_context(risk_demo 或本人),越权 403+审计
- P2-3: suitability/aml 直调补审计+request_ref 透传
- P3-1: 多角色 fail-closed 口径固化进测试;P3-3/P3-4 core_ro/risk_repo 必传;
  P3-5 LookupError→NotFoundError 统一;P3-9 alert_service import 上提
- 测试: test_risk_api 权限矩阵/审计断言/多角色组合/非 dev 拒绝;
  test_trade_gateway 客户本人 vs 越权 403(P3-4 模拟 _repo 注入 sqlite)
- 挂账: P3-2/P3-7(响应外壳+disclaimer)→B7;P3-6(scan 幂等)→B9b 前
2026-09-06 18:58:48 +08:00
GaoYiYuan_0626 e3fcf28b27 feat: 鉴权依赖(debug头/归属断言/越权审计) + 风控4 API(台账/处置/校验/AML扫描, B6) 2026-09-06 18:37:53 +08:00
GaoYiYuan_0626 d1982804da docs: B5 复审 L1 审计断言挂账 B8 2026-09-06 18:23:07 +08:00
GaoYiYuan_0626 46a1f24870 fix: 引擎异常审计降级/审计全量输入输出/TRD-TEST 注入点(B5 评审 P1-1、P2-1~3、P3 批量) 2026-09-06 18:17:44 +08:00
GaoYiYuan_0626 2a95b65ec8 feat: 模拟交易网关(suitability 阻断→落库→引擎, convert 400, B5) 2026-09-06 18:05:44 +08:00
GaoYiYuan_0626 67f0e55537 docs: B4 复审观察项挂账(30 天口径/申赎方向/list_trades 收敛) 2026-09-06 17:47:30 +08:00
GaoYiYuan_0626 03f8b63780 fix: FR-4 payload 上下文补组装/种子名单唯一命中/规则流水升序等(B4 评审 P1-1、P2-2~5、P3×7) 2026-09-06 17:40:13 +08:00
GaoYiYuan_0626 e8e5f7e981 feat: AML 名单匹配/全量扫描 + 事件引擎编排 + R-05 scoring 占位(B4) 2026-09-06 17:19:54 +08:00
GaoYiYuan_0626 64fba1029a docs: L3 docstring 补 R-05 接入改造点留痕(复审 P3-1) 2026-09-06 17:10:23 +08:00
GaoYiYuan_0626 65d4618968 refactor: L3 risk_score 一期不写保持 NULL,归 R-05 首写(B3 评审 P3-4 用户拍板) 2026-09-06 17:04:38 +08:00
GaoYiYuan_0626 026c4ce75c fix: L3 乐观锁防丢更新/last_alert_id 保留语义/竞态日志(B3 评审 P1-1、P2-1~5) 2026-09-06 16:42:18 +08:00
GaoYiYuan_0626 1f4217899d feat: L3 画像最小写入 profile_l3(最高档合并防降级 + 并发首单兜底, B3) 2026-09-06 16:26:04 +08:00
GaoYiYuan_0626 645092d7ad fix: FakePublisher 对齐 publisher 契约(dict 入参,实现方序列化) 2026-09-06 15:49:25 +08:00
GaoYiYuan_0626 6f38c9b129 feat: 预警聚合/去重/审计/PubSub 推送 alert_service(B2) 2026-09-06 15:44:34 +08:00
GaoYiYuan_0626 19c72b9b0d feat: 风控规则纯函数 RISK-001~005(B1) 2026-09-06 15:40:55 +08:00
GaoYiYuan_0626 25fc1ebdd7 docs: 阶段 A 评审挂账登记(MySQL 对照→B9b/B2 职责/B3 并发/B6 枚举校验/B7 引擎工厂) 2026-09-06 15:37:42 +08:00
GaoYiYuan_0626 98b1fba695 fix: 评审修复——SUIT-008 配置贯通/精确规则编号 rule_id/trace 兜底/request_ref 透传/测试补强 2026-09-06 15:37:05 +08:00
GaoYiYuan_0626 3c07de67b7 feat: suitability 公共校验服务(SUIT-001~008) + AuthContext 模型冻结(A4) 2026-09-06 15:18:35 +08:00
GaoYiYuan_0626 4eb8b462cd feat: risk_repository 风控四表读写(A3) 2026-09-06 15:15:51 +08:00
GaoYiYuan_0626 fdf0c9675f feat: core_ro 扩展当日申赎合计查询 sum_trades_on_date(A2) 2026-09-06 15:11:01 +08:00
GaoYiYuan_0626 2f96f7c8e5 feat: trace 贯通与脱敏工具 + risk 阈值配置(A1) 2026-09-06 15:09:14 +08:00
GaoYiYuan_0626 487b9da5b1 docs: 风控模块 PRD v1.0/规则附表/架构 v1.1/开发计划 v1.1 + 文档联动修正 2026-09-06 15:09:13 +08:00