shy3130
f20772d7b7
feat(open-api): 开放能力闭环 — write:ext 数据写入 + SSE 事件流 + 契约守护
二开闭环补齐三块: 数据进得来 (写入)、事件推得出 (SSE)、契约有人守 (快照+CI)。
- write:ext scope (第六档): POST /api/ext-data/{id}/ingest 对 Token 开放,
复用管理端同一校验/落盘/视图刷新路径; 结构配置/上传/拉取仍不开放,
外部只能写行数据, 不能改写表结构
- SSE 短期票据 (V2 收尾): POST /api/events/ticket 换 60s 一次性票据 →
GET /api/events?ticket=… 订阅事件流; 票据只继承 Token scope 不放大权限;
进程内事件总线 (services/events.py, 慢消费者丢旧保新), 告警落盘点已挂
(alert_store.append/append_many → bus), 事件按 scope 过滤双向验证
- 契约守护: test_openapi_contract.py 冻结 tier=a 开放面 (61 端点),
增删须显式更新快照; 新增 ci.yml (后端全量测试 + 前端构建) 把契约
变化拦在 PR 上
- examples/open-api: 四个零依赖可运行示例 (行情/写入/回测/事件流) + README
- 菜单设置架构标注: 每页核心/扩展徽标 + 悬停原因 + 图例 (按 open-platform-plan
§2 依赖方向分类, 核心 8 页/扩展 11 页); 顺带补上 MenuSettings 缺失的 模拟盘
- 测试: 网关 write矩阵/票据语义 + 票据生命周期/总线/SSE帧/告警联动 + 契约快照,
全量 2408 passed / 102s; 线上实测: ingest 200 / 票据一次性 / SSE hello+
alert 推送 / scope 过滤双向 / 契约 61 路径
2026-09-26 11:31:11 +08:00
..
2026-07-26 12:19:55 +08:00
2026-06-18 17:18:23 +08:00
2026-09-20 07:52:56 +09:00
2026-09-15 17:43:56 +08:00
2026-07-08 18:10:19 +08:00
2026-09-26 11:31:11 +08:00
2026-09-26 11:31:11 +08:00
2026-09-26 11:31:11 +08:00
2026-08-30 19:05:31 +08:00
2026-09-13 21:44:22 +09:00
2026-09-05 15:41:15 +08:00
2026-09-10 19:38:33 +09:00
2026-09-10 08:04:48 +09:00
2026-09-09 11:09:48 +08:00
2026-09-05 22:49:52 +08:00
2026-08-30 19:05:30 +08:00
2026-09-04 16:37:06 +08:00
2026-09-26 11:31:11 +08:00
2026-09-26 11:31:11 +08:00
2026-09-25 21:29:23 +08:00
2026-09-06 23:16:27 +08:00
2026-09-25 21:29:23 +08:00
2026-08-30 19:05:21 +08:00
2026-09-04 12:03:06 +08:00
2026-09-14 20:02:10 +09:00
2026-09-14 20:02:10 +09:00
2026-09-09 11:09:48 +08:00
2026-08-31 16:50:21 +08:00
2026-09-24 07:39:30 +09:00
2026-09-14 20:02:10 +09:00
2026-09-09 07:10:55 +09:00
2026-09-24 07:39:30 +09:00
2026-09-14 20:02:10 +09:00
2026-09-10 19:32:13 +09:00
2026-08-16 23:39:07 +08:00
2026-07-08 18:10:19 +08:00
2026-09-04 12:03:06 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-09-20 14:23:33 +08:00
2026-09-01 13:05:21 +08:00
2026-09-15 17:43:56 +08:00
2026-06-23 21:47:29 +08:00
2026-09-09 11:09:48 +08:00
2026-09-13 21:44:22 +09:00
2026-09-24 20:01:14 +08:00
2026-09-14 20:02:10 +09:00
2026-08-23 19:12:57 +08:00
2026-09-24 11:06:22 +08:00
2026-09-14 14:02:18 +08:00
2026-08-31 16:50:21 +08:00
2026-09-18 19:27:10 +09:00
2026-09-24 20:01:14 +08:00
2026-07-08 18:10:19 +08:00
2026-09-09 16:10:03 +08:00
2026-09-09 15:49:21 +08:00
2026-09-23 19:53:46 +09:00
2026-09-10 19:36:30 +09:00
2026-09-02 14:48:32 +08:00
2026-09-02 14:48:32 +08:00
2026-09-05 21:14:53 +09:00
2026-07-09 16:35:21 +08:00