From 54c58551ae1a3738889510984115ec38313ac2de Mon Sep 17 00:00:00 2001 From: QiuSW <105186638@qq.com> Date: Mon, 31 Aug 2026 08:49:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BB=9F=E4=B8=80=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=A5=91=E7=BA=A6=E7=89=88=E6=9C=AC=E6=A0=87?= =?UTF-8?q?=E8=AF=86=20(#149)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/runtime-status/v1/README.md | 2 +- .../runtime-status/v1/examples/invalid/business-alert.json | 2 +- contracts/runtime-status/v1/examples/invalid/credential.json | 2 +- .../runtime-status/v1/examples/invalid/internal-path.json | 2 +- .../runtime-status/v1/examples/invalid/unknown-major.json | 2 +- .../runtime-status/v1/examples/invalid/user-session.json | 2 +- .../runtime-status/v1/examples/valid/config-mismatch.json | 2 +- contracts/runtime-status/v1/examples/valid/degraded.json | 2 +- .../runtime-status/v1/examples/valid/offline-last-known.json | 2 +- contracts/runtime-status/v1/examples/valid/recovered.json | 2 +- contracts/runtime-status/v1/examples/valid/running.json | 2 +- contracts/runtime-status/v1/mapping.md | 2 +- contracts/runtime-status/v1/runtime-status.schema.json | 2 +- contracts/tests/runtime-status-v1/README.md | 2 +- contracts/tests/runtime-status-v1/test_contract.py | 4 ++-- 15 files changed, 16 insertions(+), 16 deletions(-) diff --git a/contracts/runtime-status/v1/README.md b/contracts/runtime-status/v1/README.md index e44af71..531699b 100644 --- a/contracts/runtime-status/v1/README.md +++ b/contracts/runtime-status/v1/README.md @@ -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 写入的运行状态。 diff --git a/contracts/runtime-status/v1/examples/invalid/business-alert.json b/contracts/runtime-status/v1/examples/invalid/business-alert.json index 24cbe8c..ee90e7d 100644 --- a/contracts/runtime-status/v1/examples/invalid/business-alert.json +++ b/contracts/runtime-status/v1/examples/invalid/business-alert.json @@ -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, diff --git a/contracts/runtime-status/v1/examples/invalid/credential.json b/contracts/runtime-status/v1/examples/invalid/credential.json index 5838210..c47f34f 100644 --- a/contracts/runtime-status/v1/examples/invalid/credential.json +++ b/contracts/runtime-status/v1/examples/invalid/credential.json @@ -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, diff --git a/contracts/runtime-status/v1/examples/invalid/internal-path.json b/contracts/runtime-status/v1/examples/invalid/internal-path.json index 3f4a8a6..ddc8aa3 100644 --- a/contracts/runtime-status/v1/examples/invalid/internal-path.json +++ b/contracts/runtime-status/v1/examples/invalid/internal-path.json @@ -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, diff --git a/contracts/runtime-status/v1/examples/invalid/unknown-major.json b/contracts/runtime-status/v1/examples/invalid/unknown-major.json index 5a4be6d..40b534f 100644 --- a/contracts/runtime-status/v1/examples/invalid/unknown-major.json +++ b/contracts/runtime-status/v1/examples/invalid/unknown-major.json @@ -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, diff --git a/contracts/runtime-status/v1/examples/invalid/user-session.json b/contracts/runtime-status/v1/examples/invalid/user-session.json index 68b7b86..d711852 100644 --- a/contracts/runtime-status/v1/examples/invalid/user-session.json +++ b/contracts/runtime-status/v1/examples/invalid/user-session.json @@ -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, diff --git a/contracts/runtime-status/v1/examples/valid/config-mismatch.json b/contracts/runtime-status/v1/examples/valid/config-mismatch.json index 8b488a2..dcad8d2 100644 --- a/contracts/runtime-status/v1/examples/valid/config-mismatch.json +++ b/contracts/runtime-status/v1/examples/valid/config-mismatch.json @@ -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, diff --git a/contracts/runtime-status/v1/examples/valid/degraded.json b/contracts/runtime-status/v1/examples/valid/degraded.json index 805baee..f3d81c3 100644 --- a/contracts/runtime-status/v1/examples/valid/degraded.json +++ b/contracts/runtime-status/v1/examples/valid/degraded.json @@ -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, diff --git a/contracts/runtime-status/v1/examples/valid/offline-last-known.json b/contracts/runtime-status/v1/examples/valid/offline-last-known.json index 8589cbd..3e9859c 100644 --- a/contracts/runtime-status/v1/examples/valid/offline-last-known.json +++ b/contracts/runtime-status/v1/examples/valid/offline-last-known.json @@ -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, diff --git a/contracts/runtime-status/v1/examples/valid/recovered.json b/contracts/runtime-status/v1/examples/valid/recovered.json index 0624156..ed33b39 100644 --- a/contracts/runtime-status/v1/examples/valid/recovered.json +++ b/contracts/runtime-status/v1/examples/valid/recovered.json @@ -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, diff --git a/contracts/runtime-status/v1/examples/valid/running.json b/contracts/runtime-status/v1/examples/valid/running.json index 6ef851f..8eae210 100644 --- a/contracts/runtime-status/v1/examples/valid/running.json +++ b/contracts/runtime-status/v1/examples/valid/running.json @@ -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, diff --git a/contracts/runtime-status/v1/mapping.md b/contracts/runtime-status/v1/mapping.md index d553cbf..0e7ab0d 100644 --- a/contracts/runtime-status/v1/mapping.md +++ b/contracts/runtime-status/v1/mapping.md @@ -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` | 同实例单调递增 | 拒绝倒序消息,保留最后已知投影 | diff --git a/contracts/runtime-status/v1/runtime-status.schema.json b/contracts/runtime-status/v1/runtime-status.schema.json index 77b57ce..271db00 100644 --- a/contracts/runtime-status/v1/runtime-status.schema.json +++ b/contracts/runtime-status/v1/runtime-status.schema.json @@ -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}$" diff --git a/contracts/tests/runtime-status-v1/README.md b/contracts/tests/runtime-status-v1/README.md index d20ed15..c4cf129 100644 --- a/contracts/tests/runtime-status-v1/README.md +++ b/contracts/tests/runtime-status-v1/README.md @@ -1,4 +1,4 @@ -# runtime-status/v1 契约测试 +# yovision.runtime-status/v1 契约测试 从仓库根目录运行: diff --git a/contracts/tests/runtime-status-v1/test_contract.py b/contracts/tests/runtime-status-v1/test_contract.py index 2cc8c1f..49ac3ae 100644 --- a/contracts/tests/runtime-status-v1/test_contract.py +++ b/contracts/tests/runtime-status-v1/test_contract.py @@ -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"])