# v0.46 第一阶段：托管研究调度

入口 `/research/runtime`；模型 `managed-research-runtime-v1`，协议 `managed-research-runtime-0.46.0-dev.1`。

本次交付是v0.46的第一阶段：为已存在的研究工作提供可由云端或独立主机调用的持久调度入口。正式模型事件路由、订阅选择及投递编排属于下一阶段；本阶段不调用扫描投递、消息队列、真实交易或平台巡检。原有研究、准入、消息和交易权限没有因调度功能自动提升。

## 工作方式

默认没有调度配置，读取状态不会建立虚构运行记录。管理员选择通道、最小阶段间隔（15–3600秒）、连续失败阈值（2–10次）和启用状态，填写理由保存。配置修订通过比较并交换提交，旧修订不能覆盖新配置。所选通道依保存顺序轮换，每次tick至多推进一个通道的一个阶段。

| 通道 | 实际操作 | 继续遵守的条件 |
| --- | --- | --- |
| data | 一次元数据、分页或归档阶段 | 数据流须已启用；来源限流、退避、容量、版本与质量规则 |
| research-jobs | 一个计算、窗口或归档阶段 | 仅处理已创建任务；创建者权限、预留用量、期限和对象完整性 |
| baseline | 基础策略影子观察 | 已审核并开启的观察版本、收盘时效和研究用量 |
| advanced | C07 / M03 前向观察 | 已冻结日线版本和原观察条件 |
| portfolio | 组合目标观察 | 固定模型、币种和预算；不构成模拟成交 |
| portfolio-paper | 组合前向模拟 | 已开启的独立模拟账户、意图、价格、时效和风险检查 |

通道内部仍动态读取自己的工作区配置。调度不会替用户创建研究任务、启用数据流、启用观察或模拟账户，不接受调用者上传价格、来源地址、目标币种或模型参数。币种范围不会由运行器命令行覆盖。采集与研究失败不会被当作新信号。

## 运行授权与暂停

配置仅限所有者和管理员；researcher可推进已经启用的调度；viewer可读取。独立API使用新增`runtime:read`或`runtime:run`权限，读权限不能推进，运行权限不能下载研究结果或修改调度。运行权限涵盖上述六项已授权研究通道，不授予消息或交易能力。

启用配置记录授权管理员和授权时间。每次运行检查其当前成员角色及账户有效性；被移除、降级、账号停用或失效后，不允许后续业务提交。调用者的原工作区和密钥权限同样在每个数据库事务中复查。

每个工作区一个90秒租约。经该入口发起的每个子数据库事务同时校验调度修订、启用状态、租约、授权管理员和调用者权限。异步行情请求返回后，即使底层通道自己的状态没有变化，调度暂停或改配置也会阻断提交。已经完成的业务写入不会因随后暂停被撤回。失去租约后可能留下未引用对象，按原数据/研究对象运维规则核对处理。

暂停或修改配置会中断当前调度记录并清除该调度租约。独立旧运行器、直接通道接口和手动操作遵守各自的权限与启停规则；本开关不是全系统停止按钮。维护时需分别停止其他调用来源。原任务自身租约可能等待原期限后才能重新取得。

## 运行器和云端入口

| 接口 | 权限 | 语义 |
| --- | --- | --- |
| `GET /api/v1/runtime` | runtime:read | 配置、心跳告警及最近50次运行摘要 |
| `POST /api/v1/runtime/tick`，`{}` | runtime:run | 至多推进一个已启用通道阶段 |
| `POST /api/console/runtime/config` | 管理员控制台 | 保存或暂停配置，需要当前revision和理由 |
| 对应控制台GET、tick | 登录及工作区角色 | 与上述业务规则相同 |

独立API不接受控制台会话代替Bearer密钥。私有站点的入口服务凭证和应用密钥仍是独立两层，见`/integration/Deployment-v024.md`。源码和任务提示词不保存秘密。

将`trendlab-shadow-runner.py`与`trendlab-runner.py`放在同一目录。通过私有环境文件提供站点与`runtime:run`密钥，先核对工作区，再运行：

```bash
python3 trendlab-shadow-runner.py --env-file managed.env --lane managed --once
python3 trendlab-shadow-runner.py --env-file managed.env --lane managed --interval 30
```

`--once`是真实推进请求。运行器间隔为15–300秒；服务器保存的最小阶段间隔独立生效。每次一个阶段，不是每次运行所有通道。六通道各轮换一次需要六次调用，初次分页研究还需要更多调用，应按业务时效配置调用频率。

Sites模式另提供`trendlab_runtime_status`和`trendlab_runtime_tick`两个MCP工具，参数仅可选`workspaceId`。平台核验调用者身份后，应用继续执行工作区角色和上述调度检查；独立OIDC部署使用独立API运行器。v0.45原数据工具保留。

启用页面配置不会自动建立云端任务。本阶段已实现托管工具入口，云端任务的建立、工具连接、实际执行和持久化回读分别验收。不能用工具声明、隔离HTTP测试或空闲返回宣称真实持续采集完成。

## 故障、心跳与记录

运行调用按工作区每分钟最多6次；原通道的来源限流、套餐、容量和时效限制继续生效。每次保留调用时间、固定通道、配置修订、结果摘要和摘要哈希，不复制行情正文、凭证、源URL或完整研究输出。

成功或空闲会清零连续失败；业务失败、不可用数据及采集退避计为失败。失败后按最小阶段间隔指数退避，上限15分钟。达到配置的连续失败阈值时，以新配置修订自动暂停；管理员核对后显式启用，不自动恢复。此处是跨通道的连续失败计数，某通道失败后另一通道成功会打断连续失败；各通道具体健康情况仍须检查其业务记录。

页面展示“从未调用”“心跳超时”“租约过期”“授权失效”等运行提示。这些是页面可见状态，不表示已部署独立监控或已发送外部告警。心跳超时阈值取15分钟和六个最小阶段间隔中的较大值；心跳新鲜也不能替代各通道的数据覆盖率或绩效验收。

完成处理后保留最近500次调度记录，运行期间可能额外存在一个活动记录。配置历史保留，普通配置变更达到1000条时停止继续变更，启用状态仍可紧急暂停；恢复隔离可追加暂停记录。调度摘要不是永久业务审计账本，也不能证明完整持续运行。原数据版本、任务事件、观察证据和模拟账本保持原保留语义。

## 恢复与回退

新增三张业务表：`managed_runtime_controls`、`managed_runtime_history`、`managed_runtime_runs`。总计56业务备份表、26个迁移、35个当前便携恢复文件。v0.45的33个文件冻结于`/integration/v045/`，逐字节保留。

恢复演练核验配置历史、运行引用和摘要哈希。恢复副本将调度保存为新的暂停修订，清除租约，将活动运行标记中断；各研究、数据与模拟通道继续按原恢复隔离规则处理。恢复不会建立定时任务、重启运行器或自动发出业务记录。

使用`/integration/release-v046.json`核对兼容性；旧版本缺少新结构和模型，不能直接回退。本文件与旧发布清单中的空来源槽位不能充当已经保存的部署身份，精确来源以原生发布返回记录为准。

## 验收状态

隔离检查覆盖并发只取得一个调度租约、暂停期间子事务阻断、租约失效、管理员和调用者权限撤销、故障熔断、实际数据采集原语、有限记录保留及56表恢复。构建后HTTP使用真正构建的Worker和临时D1/R2，不使用生产数据。

v0.45云端数据工具已在真实私有入口返回空闲状态，工作区当时没有数据流；这只证明入口和身份可用。真实交易所连续采集、云端调度持续运行、浏览器点击及正式模型发布和订阅投递仍需独立验收。本阶段`formalSignalsEnabled`、`dispatchAllowed`、`executionAllowed`均为false。具体结果见`/research/verification-v046.json`。
