🏠 一个所有者一个库DO 名就是 user_id,库里没有 owner 列,也不可能查到别人的策略;隔离由 DO 边界给,不靠 WHERE。
🔒 版本不可改,用快照解耦版本由触发器 versions_immutable 兜底不可改;运行配置可改,所以回测与部署各自存 config_json 快照,改配置不追溯。
♻️ 复用键代替重算reuse_key 把「同一次回测」的全部身份规范化成一个串;命中就返回最早那条、不计配额。没有 UNIQUE,靠 DO 内排队串行。
🪣 摘要进库,大块进 R2DO SQLite 只放报告摘要;权益曲线、逐笔交易等大块在 R2 BACKTEST_RESULTS。先落库后写 R2,R2 失败补偿删行,不留没有大块的 completed 回测。
⚛️ 一次转换一个事务部署的每次状态转换(行 + 快照 + 事件 + 权益点)在 transactionSync 里一起写;转换本身是 domain 纯函数,仓储只负责落盘。
⏱️ 毫秒整数时间(已接受的例外)全库时间存 INTEGER epoch ms,便于和 K 线开盘 / 收盘对齐与 alarm 比较;这是对全仓 ISO TEXT 约定的已接受例外,不打算迁移。
🧩 旧行靠「读时默认值」兼容迁移只加列不回填:v1/v2 版本无产物 / 来源、v4 部署无回撤与引擎版本等,都在仓储读出时按注明的默认值解释(compiledOf / originOf / deploymentOf)。