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
11 KiB
11 KiB
需求迭代
| 日期 | 变更 | 原因 | 影响 |
|---|---|---|---|
| 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(C4 |
弥补单笔合规盲区/处置时效红线/代理人操作风险 | 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 bb244f4 |
阶段一执行(用户拍板 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-0test_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 / 当日日志 |