# C07 / M03 前向影子观察 · v0.36

入口 `/research/forward`。本版提供固定日线基线的版本冻结、历史证据关联、启停审核、新收盘目标记录、断档检查、完整证据导出和离线重算。只记录研究目标建议，不产生正式信号、投递、模拟成交或交易订单。

## 观察范围与历史研究的关系

| 项目 | C07 | M03 |
| --- | --- | --- |
| 固定参数 | 30 天动量、20 根日收益波动、40% 年化目标、5% 波动下限、100% 原始仓位上限 | 同币种 C01/C02/C03/C04/C06 固定策略、30 天协方差、等风险贡献、20% 年化目标、40% 单策略目标上限 |
| 决策时间 | 每根 UTC 日线收盘 | UTC 周日日线收盘 |
| 模型最早应用时间 | 下一根开盘的时间戳 | 下一根日线收盘 |
| 观察对象 | 未经过交易阈值处理的原始目标 | 未经过交易阈值处理的周度原始目标；其他日保留最近建议 |
| 必须关联的历史记录 | 当前工作区已完成 C07 日线实验 | 当前工作区已完成 M03WF 滚动实验 |

仅支持日线、同一币种及固定交易所，可选择工作区已登记的币种。不能在观察时切换来源或自动跨交易所回退。默认手续费 10 bp、滑点 5 bp 冻结在定义中，关联历史记录必须匹配币种、日线、交易所和成本。C07/M03 研究规则、历史研究包及原有五策略准入流程保留。

观察阶段不重新训练或选择参数。M03WF 记录中可能存在不同的训练选择，但本版只观察固定 30 天基线，不能把滚动选择的收益视为这一观察版本的历史收益证明。C07 和 M03 的原始建议未应用历史撮合中的 2 个百分点调仓阈值，因为本版没有实际份额、现金或漂移仓位，不能据此决定是否应成交。

模型时间戳是理想化最早应用时间。C07 的次根开盘等于前根收盘边界，但实际采集要求收盘后至少 60 秒，因此无法证明在该开盘价成交。M03 的最早应用时间为下一日收盘，也没有在该时点实际下单。页面目标、现金比例和“保留建议”均不代表已持有资产。

## 固定预热起点与逐日数据

首次有效观察保留最新 290 根已收盘日线作为预热上下文：260 根底层指标预热和 30 天风险历史。只把最后一根的新收盘记作前向观察，之前 289 根不计入覆盖率或观察条数。M03 的底层虚拟 NAV 从该固定预热起点建立；后续逐日追加新 K 线，避免每天移动预热起点重新初始化底层策略。

新请求必须匹配冻结交易所、币种和日线；验证 OHLCV、连续性、收盘确认、行情哈希及获取时间。行情获取时间不得晚于服务器时间，且距记录时间小于 120 秒。只接受服务器当前日界的最新已确认日线，必须严格晚于该期启用时间及上次记录；调用者不能提供价格、时间或历史补录参数。

没有缺口时，新行情与已保留历史的重叠 K 线必须逐字段一致，且包含前次收盘。若交易所修订已保存数据，拒绝写入并保留原状态。操作者应核对来源后暂停，再审核开启新一期；不得修改旧观察来掩盖修订。

如果漏过收盘，缺失条数保留为缺失，不补造观察。最新请求重新保留 290 根上下文，清空旧目标，再按当日规则计算：C07 产生当日建议；M03 仅在周日收盘产生新建议，其余日保持现金等待。重新预热的历史 K 线可以用于指标，但不能被标为过去已经观察到的证据。缺口之后的 NAV 起点变化会影响 M03 估计，报告保留每次上下文起点、哈希和重置标记。

## 覆盖率、审核与权限

状态流程为：候选 → 关联历史证据 → 观察中 → 暂停。暂停后重新启用建立新观察期，清空本期上下文与目标，完整保留旧期记录。关联历史证据只允许一次，引用固定实验 ID、配置哈希、结果哈希和摘要哈希，仍标为 `client_computed`。历史记录关联用于追溯，不保证有效性或盈利。

收盘后 60 秒进入应采样范围；10 分钟内完成记为按时。按时覆盖率 = 当前期按时条数 / 当前期应观察条数。暂停后统计截止暂停时间；新期单独统计。即使 100% 覆盖、连续运行数月，本版也不提供“研究准入”或“生产准入”转换。覆盖率只描述采样完整性，不是绩效、独立样本外证据或可执行性证明。

所有者和管理员可审核关联、启用与暂停；研究员可创建版本和手动观察；查看者可读取及导出。服务端校验当前角色，并在请求行情后的写入事务中再次核验权限及版本修订。暂停、成员撤销、币种停用或过期配置不能通过旧的在途请求继续写入。

同一版本、同一期、同一收盘只保留一条记录。并发请求、重试使用数据库去重和修订检查；同一收盘请求的用量只计一次。失败保留已存在的观察与上下文，不以零值代替行情。

## API 与独立运行器

| 方法 / 路径 | 权限与用途 |
| --- | --- |
| `GET /api/console/research/forward` | 登录后读取当前工作区版本投影 |
| `GET /api/console/research/forward/detail?id=UUID&before=SEQUENCE` | 覆盖、审核及每页 50 条观察；可省略 before |
| `POST /api/console/research/forward` | `{id,strategy,asset,venue}`；strategy 为 C07 或 M03 |
| `POST /api/console/research/forward/state` | `{id,revision,state,note,experimentId?}`；只有关联验证时提供 experimentId |
| `POST /api/console/research/forward/observe` | `{id}`；手动观察最新收盘一次 |
| `POST /api/console/research/forward/export` | `{id}`；完整证据导出 |
| `GET /api/v1/research/forward`、`.../detail` | 独立 `research:read` API 权限 |
| `POST /api/v1/research/forward/tick` | 空对象 `{}`，独立 `research:observe` 权限；每轮至多处理一个到期版本 |

管理操作只接受同源浏览器身份，API 密钥不能创建或修改版本。API 密钥固定工作区，不接受用户指定租户。基础 `/research/shadow/tick` 与新 `/research/forward/tick` 分开，两条运行路径不会误处理另一类定义。观察请求每工作区每分钟最多 6 次，单版本尝试间隔至少 30 秒；用量沿用手动评估或计划扫描额度。

把 `trendlab-shadow-runner.py` 和 `trendlab-runner.py` 放在同一目录，按原运行器格式提供私有环境配置（`TRENDLAB_SITE_URL`、`TRENDLAB_API_KEY` 以及私有 Site 需要的 `TRENDLAB_SITE_TOKEN`）。使用只具备所需研究权限的密钥；不要把密钥写进命令行、报告或源码。

```sh
python trendlab-shadow-runner.py --env-file /private/trendlab.env --lane advanced --once
python trendlab-shadow-runner.py --env-file /private/trendlab.env --lane advanced --interval 30
```

不指定 `--lane` 时继续使用原 `baseline` 路径。日志只保留状态及收盘时间，不输出密钥、源地址或原始响应。需要用户自行启用观察版本并部署独立常驻进程；发布网站、打开页面或创建候选版本都不会启动连续采样。

## 导出、离线核对与恢复

版本定义为 `advanced-forward-0.36.0`，回退模型为 `advanced-forward-observation-v1`，证据包格式为 `trendlab-forward-evidence-v1`。完整包包含冻结定义、审核链、逐次目标、预热 K 线、追加日线、风险计划和哈希。基础 `GET` 列表只提供目标投影，不返回完整保留历史。逐条明细和完整导出仍需要工作区读取权限。

```sh
node --experimental-strip-types scripts/reproduce-forward.mts --file forward-evidence.json --out forward-verification.json
```

使用本版本源码与依赖，输入上限 4 MiB，输出路径必须不存在。命令重建各期上下文，并使用冻结引擎逐条重算目标，要求精确一致。哈希及重算证明内容一致与模型可复算，不证明交易所来源真实性、原始文件未被人为整体伪造，或实际成交。

本版复用三张生命周期表，无新增迁移，业务备份仍为 43 表。当前恢复工具为十六文件：v0.35 十三文件，加 `forward-rules-v036.json`、`forward-contract.mjs`、`forward-recovery.mjs`；在 `/integration` 的恢复管理下载并放在同一目录。恢复校验定义、历史引用、审核时序、上下文、目标链、C07 指标和 M03 计划/风险贡献一致性；完整底层 NAV 重算使用上述源码命令。恢复副本自动暂停观察。

原 v0.35 十三文件逐字节保留于 `public/integration/v035/`。`release-v036.json` 要求目标版本支持新增前向模型和全部旧模型；仅表结构一致不足以安全回退。发布清单中的提交和保存版本占位值需按真实部署记录填写后再检查。

容量受控：全部生命周期共享每工作区 50 个冻结版本、5000 条观察；每个新前向版本的观察 payload 合计最多 1 MiB；连续上下文最多 1460 根，最多 90 次普通审核变更，保留最终暂停能力。达到容量后停止新增并保留旧证据，不静默删除或截断。达到历史长度上限可暂停后新开一期；达到整个版本的证据容量上限则需导出并新建版本，旧版本仍占共享名额。业务备份原有 8 MiB 总上限保持，超限时需管理员数据库备份流程。

## 验证与后续

实际软件检查见 `verification-v036.json`。合成行情只用于隔离测试，未作为策略绩效或真实前向数据展示。本次没有启动真实观察运行器、生成真实持续运行证据、连接外部消息接收端或下单。

后续策略研发顺序保持：多币种组合研究 → 可执行组合与成本模型 → 服务端研究任务及原始数据归档 → 经验证的策略接入正式信号。前向收益账本、M03/C07 独立准入标准及真实持续观察验收仍需后续完成。
