Files
group_xinghuo_jinrong/docs/memory/ITERATION.md
T
GaoYiYuan_0626 c5182f1910 feat(convert): 基金转换 T-0/T-0b 门禁 + T-1 数据层 + T-2/T-2b 纯函数与实算回填
T-0 / T-0b(门禁 · 2026-09-10)
- T-0:sqlite 与 MySQL 结构对齐 —— core_holding 统一为 qty/cost_amount/as_of/pnl_pct
  + PK + UNIQUE(customer_id, product_id);补 core_product_nav;新增建库自校验
  _assert_ddl_aligned()(R-g);test_db.py 增 3 条门禁用例(含反向验证门禁失效)
- T-0b:DB 账号分离(D20)—— 新增 scripts/core/00-grant.sql(三账号逐表授权);
  settings.py 增 3 组账号;db.py 改 get_engine(db, role),缓存键改为 (库名, 角色),
  账号未配置回退单账号;core_ro→ro / gateway_repository→rw / risk·session_repository→rw;
  tests/conftest.py 四处显式 role="admin"(R-e)

T-1(数据层)
- scripts/core/01-ddl.sql:新建 core_fee_rule / core_share_lot / core_convert_lot_detail;
  core_trade 加 convert_group_id + idx_convert_group;core_product 加 8 列 + fee_rate 补 COMMENT
- 新增 07-seed-fee-rule.sql(赎回费 5 档 × 14 产品,按 22 号文 §10)/ 08-seed-share-lot.sql
  (58 行持仓 → 61 行批次,Σ remain_qty 恒等于 qty)/ 09-seed-org.sql(管理人 + TA +
  申购费率 + 最低持有余额,v1.1 按「管理人全产品线」重排)
- reset.ps1 追加 07/08/09;02-mysql-agent专用.sql 追加 risk_convert_detail
- tests/_ddl.py 同步 4 表 + 新增 REQUIRED_CONVERT_TABLES 建库门禁
- 新增 scripts/dev/verify_convert_seed.py(pymysql 等价 reset 流程 + 8 条 DoD 断言,
  含断言 ⑧「费率档 ↔ product_type 匹配」,越档即 FAIL)

T-2 / T-2b(纯函数包 + 示例实算回填)
- 新增 app/service/convert/ 7 文件:__init__ / types / calc / fee / nav / lot_bootstrap / errors
  (纯函数,不查库、不碰 SQL;所有量化显式 ROUND_HALF_UP;lot_bootstrap 用 zlib.crc32
   保证 D18 跨进程同源)
- 新增 tests/test_convert_calc.py 93 用例(12 类:HALF_UP 反向自证 / 分档边界 /
  FIFO 含同 confirmed_at 兜底 / 双口径 / 强制全转与强制赎回 / PRD §5.3 全链自证 /
  纯函数零 IO 依赖断言)
- 重写 scripts/dev/calc_convert_demo.py:去掉脚本内公式副本,改为调用生产 calc.py,
  末尾与 PRD §5.3 逐项比对(不一致即退出码 1),兼作一致性门禁

验证
- pytest 609 passed / 3 skipped(516 → +93,零回归)
- verify_convert_seed.py 8/8 PASS;calc_convert_demo.py 15/15 与 PRD §5.3 一致

文档:PRD v0.9.1(费率分类修正)· 架构 §7 签名回填 / §8.3 错误码注 / §15 T-2 完成 ·
开发计划 §1.5 新增 R-h + §4.2·§4.3 执行记录 · AGENTS.md · docs/memory
2026-09-10 14:45:55 +08:00

11 KiB
Raw Blame History

需求迭代

日期 变更 原因 影响
2026-09-05 init 项目记忆 + app 脚手架 用户要求 memory kit + 目录结构 MEMORY / ENVIRONMENT / REQUIREMENTS / FRAMEWORK / FLOW / TODO
2026-09-05 需求拆解四 Agent P0 场景定稿 用户故事归纳 REQUIREMENTS(对照 docs/需求拆解/)
2026-09-05 技术栈 Windows 原生 + Milvus Lite 本机内存限制 FRAMEWORK
2026-09-05 Core 模拟库 jinrong_core + 扩大种子 + Neo4j 同步 无真实 Core FRAMEWORK / FLOW / ENVIRONMENT
2026-09-05 Agent 编排依赖改为 LangGraph 为主 状态图 + Tool 节点 FRAMEWORK
2026-09-05 memory 全量刷新:§0 新 Agent 交接清单 + 实现状态表 + bootstrap 脚手架已落地,便于无上下文交接 MEMORY / FRAMEWORK / FLOW / TODO / REQUIREMENTS / ENVIRONMENT
2026-09-07 追加需求 FR-8/FR-9/FR-10 经独立 AI 评审→修订→复审并入 PRD v1.1 + 规则表 v1.1 + 开发计划 v1.2(C4C6 任务 + 挂账 #1#9) 弥补单笔合规盲区/处置时效红线/代理人操作风险 PRD / 附-风控规则表 / 开发计划
2026-09-07 《实现方案-风控追加需求v1.1-C4C6.md》定稿:独立 AI 评审 FAIL(P0×1/P1×4/P2×6)→ 修订闭环;C4~C6 编码依据可照抄 开发流程第 2 步(另一 AI 验证挑毛病) 实现方案文档
2026-09-07 全库文档同步:分支口径修正(feature/risk → 实况 risk-control-agent,与 main 分叉 67/4)+ T-21 评审闭环 / 425 绿 / T-03 / C1~C3 状态落账 + 新建项目根交接文档.md 文档与实况不一致(用户排查要求) MEMORY / TODO / REQUIREMENTS / FRAMEWORK / FLOW / ENVIRONMENT / ITERATION / PRD / 架构设计 / 开发计划 / README / 交接文档
2026-09-07 阶段一「对齐 main 基准」AL-01~AL-08 完成(逐项独立 commit bb244f4b5fd52e):SUIT-001008 换核为 core_ro.check_suitability(C×R 矩阵 + match_result 五值 + JR-AST/FM 契约)· risk_suitability_log 重建 21 列 · Core 表 is_hnw/风评 expires_at 七新列 · 种子 33 客户/14 产品 · 全量 406 passed 0 failed 0 skipped(425→406,SUIT 测试重写)· uvicorn 冒烟三端点通过 · risk-m1 补打(3c07de6)· 六项拍板全落定 阶段一执行(用户拍板 main = 需求唯一基准);基线变更与 SUIT 体系退役需落账 MEMORY / TODO / REQUIREMENTS / FRAMEWORK / FLOW / ENVIRONMENT / ITERATION / README / 交接文档
2026-09-08 前端接入面交付:方案 B 会话管理三端点(8328c24)+ 方案 C SSE 流式对话(01ec5fc),测试 482→503 绿 前端 React 多 Agent 入口需后端接入面先就绪(用户拍板方案 B+C) chat.py / session_repository / agent_service / 测试 / README / 交接文档
2026-09-09 架构改进与稳定性加固 T-101~T-202:Redis 双层分布式锁(T-201)+ 无 key 启动告警(T-107)+ 审计 trace 顺序守卫(T-202)+ 文档口径勘误(词表 45 / Tool 5 / Agent 表 6);pytest 503→510 绿(+7);接口契约与表结构零变更 架构梳理发现 24 项待处理,两轮独立审核通过;用户拍板「补告警 + 换 Redis 锁」;合并 main 前只做低风险项 交接文档-架构改进 / 架构设计-风控模块 / MEMORY / 开发计划-架构改进 / TODO / 测试 +7
2026-09-10 架构改进线收尾闭环:§7.2 七项手工冒烟补跑 7/7 PASS(无 key 告警 / 交易阻断放行 / 预警聚合 / Redis 降级退回进程内锁 / Redis 恢复零降级 / 调换装饰器使 T-202 守卫变红后字节级还原);核实并纠正「037ce7e 未 push」的过期表述(远程 risk-control-agent = fffb78a = 本地 HEAD,早已推送);冒烟残留按 SOP §2 重灌双库清除,全量 510 passed 复绿 架构改进线唯一缺口是手工冒烟未执行;交接文档/项目记忆的 push 状态与实际 git 状态不符(以 git ls-remote 为准) TODO-架构改进 / 交接文档-架构改进 / 交接文档-基金转换 / MEMORY / TODO / ITERATION / 当日日志
2026-09-10 基金转换(convert)线设计闭环:PRD v0.9(33 条外审闭环)+ 架构 v1.0(独立评审通过,13 条建议 0 悬空)+ 执行期风险 5 条 + D18/D19/D20;DB 账号分离定案(用户拍板「按真实项目走」,接主架构 C1);新建 docs/交接文档-基金转换.md PRD-风控监测Agent FR-1 一期显式拒收 convert,需放开;合规口径须外部事实核验(证监会公告〔2025〕22 号);账号方案为跨线交叉点 PRD-基金转换 / 架构设计-基金转换 / 评审待办 / 处置表 / 交接文档-基金转换(新) / MEMORY / TODO / 交接文档.md / 交接文档-架构改进 / 开发计划-架构改进
2026-09-10 基金转换(convert)线第 4 步开发计划闭环:产出 docs/项目框架设计/开发计划-基金转换交易.md(v1.0,1,047 行,T-0T-13 逐任务改法 + DoD + §0 速览 + §1.4 十五条代码事实核对表 + §1.5 **七条实现级裁定 R-aR-g** + §12 十六条回归面 + §13 PRD 19 条验收映射 + §14 实现级风险表);经四轮独立子代理审核收敛:12 条 → 接受 11 / 驳回 1(附实测证据)/ 0 悬空(一轮补 R15 真 MySQL 集成用例 test_integration_risk.py:426-437 + R16 redeem 用例 + R-c 拆「降级规则 + 覆盖率补偿」双条 + F-11 计数 11→13;二轮抓出 R-a 并发论证不成立——执行权锁是请求粒度 → 增第 ③ 步 IntegrityError 回退 + T-6 并发用例;三轮修 §14「四道→五道」口径不一致 + 实测驳回「SQLAlchemy 会抛 PendingRollbackError」的推测;四轮终验通过、无「声明已改实际未改」残留);三项实测加固(sqlite 3.50.4 不支持 ON DUPLICATE KEY UPDATE,且 WHERE NOT EXISTS/FROM DUAL 两个候选写法方言互斥;SQLAlchemy 2.0.51 异常后同事务可用;pydantic 2.13.4 Optional+gt 保 422) AIcoding 第 4 步;用户要求「写完拉起子进程审核,改完后再审,审到没问题才能进行下一步」;架构/PRD 存在 2 处口径不一致需裁定(W-1/W-2),且实现级空白 7 处需收口 开发计划-基金转换交易(新) / 交接文档-基金转换(v1.2) / MEMORY / TODO / ITERATION / skill ai-coding-step4-dev-plan(新)
2026-09-10 基金转换线:T-0 / T-0b / T-1 落地 + PRD 费率分类修正(v0.9 → v0.9.1):T-0 sqlite/MySQL 结构对齐(core_holding 列名+PK、补 core_product_nav)+ 建库自校验 · T-0b DB 账号分离 D20(xh_core_ro / xh_core_rw / xh_agent_rw)· T-1 数据层(core_fee_rule、core_share_lot、core_convert_lot_detail、risk_convert_detail 四表 + 07-seed-fee-rule / 08-seed-share-lot / 09-seed-org 三个种子 + reset 链),全量 516 passed / 3 skipped(批 0 后基线,零回归),T-1 数据层断言 8/8 PASS;外审漏网的费率分类错误修正——PROD-005827 由「主动偏股 0.0080」归位「其他混合型 0.0050」(22 号文 §8 分档),主示例转入方改真主动偏股 PROD-003095,09-seed-org 按真实「管理人全产品线」重排为 v1.1 用户驳回「那是两种类型,怎么能混呢?」并强调「按真实业务走,强调很多遍了,这个项目要贴近真实,是要上线的」;根因是五轮评审只做内部自洽核对,从未做「产品类型 ↔ 费率档」匹配核对 PRD-基金转换(v0.9.1) / 开发计划-基金转换交易 / 交接文档-基金转换(v1.3) / 架构设计-基金转换交易 / AGENTS.md / 09-seed-org.sql(v1.1) / verify_convert_seed.py / MEMORY(自检第 11、12 问) / TODO / FRAMEWORK
2026-09-10 基金转换线 T-2(纯函数包)+ T-2b(实算回填)完成:新增 app/service/convert/ 7 文件(__init__ / types(frozen dataclass + 3 归一工具)/ calc / fee / nav / lot_bootstrap / errors(ConvertError + 11 子类))+ 新增 tests/test_convert_calc.py 93 用例(12 类,含 HALF_UP 反向自证与纯函数零 IO 依赖断言,把 DoD 的「人工 grep」升级为硬断言);重写 scripts/dev/calc_convert_demo.py —— 去掉脚本内公式副本、改调生产 calc.py、末尾 15 项自校验(不一致即退出码 1),使其兼作「PRD §5.3 ↔ 生产口径」一致性门禁;新增实现级裁定 R-h(plan_lots 零剩余不触发强制处置);两处文档计数差异已留痕(异常实为 11 个而非 8 个 / 架构 §7 补 hold_days·rounding_diff·ensure_batch_limit 三签名);全量 609 passed / 3 skipped(516 → +93,零回归) 用户「继续推进到结束」;T-2 是并行组 A(T-3/T-4/T-5)与 T-2b 的唯一前置;原实算脚本自带公式副本 = 与 D18 同类的漂移风险 开发计划-基金转换交易(§1.5 R-h + §4.2/§4.3 执行记录 + DoD 勾选) / 架构设计-基金转换交易(§7 签名回填 · §8.3 FEE_RULE_MISSING 注 · §15 T-2 完成) / PRD-基金转换(§5.3 数值来源) / 交接文档-基金转换(v1.4) / AGENTS.md / app/service/convert/*(新) / tests/test_convert_calc.py(新) / scripts/dev/calc_convert_demo.py / MEMORY / TODO / FRAMEWORK / ITERATION
2026-09-10 基金转换线第 5 步开工 · 第 0 批门禁 T-0 + T-0b 完成:基线 510 → 516 passed / 3 skipped。T-0:tests/_ddl.py 重写 core_holding(qty/cost_amount/as_of/pnl_pct + PK + uk_cust_product)+ 新增 core_product_nav + _assert_ddl_aligned() 建库自校验;2 处测试 INSERT 改 qty 并补 3 个 NOT NULL 列(原计划漏项);test_db.py +3 用例(含门禁反向验证的自动化用例)。T-0b(D20 账号分离):新增 scripts/core/00-grant.sql(3 账号逐表授权,不进 reset.ps1);settings.py +6 项;db.py get_engine(db, role) + _resolve_credentials(缓存键 (db, role),未配置回退 mysql_user);core_ro→ro / gateway_repository→rw / risk_repository·session_repository→rw 显式;conftest.py 4 处→admin(R-e)。两处口径修正:① audit_log 实授 SELECT, INSERT(字面「只授 INSERT」会连读一起剥夺,致 has_engine_error_audit/list_audit_events 失权)② conftest 必须 admin。遗留环境操作:00-grant.sql 需管理员执行 + 写 .env(3 条权限断言未配置时自动 skip) AIcoding 第 5 步(T-0/T-0b 为阻断前置);用户「你进行下一步」 tests/_ddl.py · tests/test_db.py · tests/conftest.py · tests/test_chat_tools.py · tests/test_concentration_c4.py · app/utils/db.py · app/config/settings.py · 4 个 Repository · scripts/core/00-grant.sql(新) · 开发计划-基金转换(§3.3) · 架构设计-基金转换(§11.1 实施记录) · 交接文档-基金转换(v1.2) · MEMORY / TODO / 当日日志