fix: 统一运行状态契约版本标识 (#149)

This commit is contained in:
QiuSW
2026-08-31 08:49:49 +08:00
parent e4fed702c4
commit 54c58551ae
15 changed files with 16 additions and 16 deletions
+1 -1
View File
@@ -4,7 +4,7 @@
## 消息与时间语义
- `schema_version` 固定为 `runtime-status/v1`。生产者必须先通过 `runtime-status.schema.json` 再发布。
- `schema_version` 固定为 `yovision.runtime-status/v1`。生产者必须先通过 `runtime-status.schema.json` 再发布。
- `status_id` 是消息幂等键;`sequence` 在单个 `brain_instance_ref` 内单调递增。重复消息可忽略;小于当前已保存 sequence 的消息不得覆盖投影。
- `observed_at` 是 Brain 完成该次观测的 UTC RFC 3339 时间,不是 Sense 的接收时间。允许最大 30 秒未来时钟偏差;超过时拒绝该消息,并保留最后已知投影。
- Brain 的推荐发布周期是 30 秒。Sense 以 `evaluation_time - observed_at > 90 秒` 推导 `stale`;恰好 90 秒仍为 fresh。`stale` 和 `offline` 都是 Sense 的传输/时间投影,不是 Brain 写入的运行状态。
@@ -1,5 +1,5 @@
{
"schema_version": "runtime-status/v1",
"schema_version": "yovision.runtime-status/v1",
"status_id": "018f4d6a-8d1b-4a25-8b37-9085f9c0d205",
"brain_instance_ref": "brain-east-01",
"sequence": 1,
@@ -1,5 +1,5 @@
{
"schema_version": "runtime-status/v1",
"schema_version": "yovision.runtime-status/v1",
"status_id": "018f4d6a-8d1b-4a25-8b37-9085f9c0d202",
"brain_instance_ref": "brain-east-01",
"sequence": 1,
@@ -1,5 +1,5 @@
{
"schema_version": "runtime-status/v1",
"schema_version": "yovision.runtime-status/v1",
"status_id": "018f4d6a-8d1b-4a25-8b37-9085f9c0d203",
"brain_instance_ref": "brain-east-01",
"sequence": 1,
@@ -1,5 +1,5 @@
{
"schema_version": "runtime-status/v2",
"schema_version": "yovision.runtime-status/v2",
"status_id": "018f4d6a-8d1b-4a25-8b37-9085f9c0d201",
"brain_instance_ref": "brain-east-01",
"sequence": 1,
@@ -1,5 +1,5 @@
{
"schema_version": "runtime-status/v1",
"schema_version": "yovision.runtime-status/v1",
"status_id": "018f4d6a-8d1b-4a25-8b37-9085f9c0d204",
"brain_instance_ref": "brain-east-01",
"sequence": 1,
@@ -1,5 +1,5 @@
{
"schema_version": "runtime-status/v1",
"schema_version": "yovision.runtime-status/v1",
"status_id": "018f4d6a-8d1b-4a25-8b37-9085f9c0d103",
"brain_instance_ref": "brain-east-01",
"sequence": 43,
@@ -1,5 +1,5 @@
{
"schema_version": "runtime-status/v1",
"schema_version": "yovision.runtime-status/v1",
"status_id": "018f4d6a-8d1b-4a25-8b37-9085f9c0d102",
"brain_instance_ref": "brain-east-01",
"sequence": 42,
@@ -1,5 +1,5 @@
{
"schema_version": "runtime-status/v1",
"schema_version": "yovision.runtime-status/v1",
"status_id": "018f4d6a-8d1b-4a25-8b37-9085f9c0d104",
"brain_instance_ref": "brain-east-01",
"sequence": 44,
@@ -1,5 +1,5 @@
{
"schema_version": "runtime-status/v1",
"schema_version": "yovision.runtime-status/v1",
"status_id": "018f4d6a-8d1b-4a25-8b37-9085f9c0d105",
"brain_instance_ref": "brain-east-01",
"sequence": 45,
@@ -1,5 +1,5 @@
{
"schema_version": "runtime-status/v1",
"schema_version": "yovision.runtime-status/v1",
"status_id": "018f4d6a-8d1b-4a25-8b37-9085f9c0d101",
"brain_instance_ref": "brain-east-01",
"sequence": 41,
+1 -1
View File
@@ -2,7 +2,7 @@
| 契约字段 | Brain 生产者责任 | Sense 消费者投影责任 |
|---|---|---|
| `schema_version` | 固定发布 `runtime-status/v1` | 先按主版本分派;未知版本不覆盖最后投影 |
| `schema_version` | 固定发布 `yovision.runtime-status/v1` | 先按主版本分派;未知版本不覆盖最后投影 |
| `status_id` | 每次观测生成唯一幂等键 | 去重,不把重复消息当成新观测 |
| `brain_instance_ref` | 发布部署时分配的逻辑引用 | 映射到内部 edge node;不把它当数据库主键 |
| `sequence` | 同实例单调递增 | 拒绝倒序消息,保留最后已知投影 |
@@ -17,7 +17,7 @@
"inputs"
],
"properties": {
"schema_version": { "const": "runtime-status/v1" },
"schema_version": { "const": "yovision.runtime-status/v1" },
"status_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
+1 -1
View File
@@ -1,4 +1,4 @@
# runtime-status/v1 契约测试
# yovision.runtime-status/v1 契约测试
从仓库根目录运行:
@@ -146,7 +146,7 @@ def may_transition(previous, current):
def may_replace(previous, candidate, evaluation_time):
if candidate["schema_version"] != "runtime-status/v1":
if candidate["schema_version"] != "yovision.runtime-status/v1":
return False
if validate(candidate):
return False
@@ -166,7 +166,7 @@ class RuntimeStatusV1ContractTests(unittest.TestCase):
def test_schema_declares_frozen_version_and_closed_objects(self):
self.assertEqual(SCHEMA["$schema"], "https://json-schema.org/draft/2020-12/schema")
self.assertEqual(SCHEMA["properties"]["schema_version"]["const"], "runtime-status/v1")
self.assertEqual(SCHEMA["properties"]["schema_version"]["const"], "yovision.runtime-status/v1")
self.assertFalse(SCHEMA["additionalProperties"])
for name in ("runtime", "model", "configuration", "health"):
self.assertFalse(SCHEMA["properties"][name]["additionalProperties"])