diff --git a/examples/boot_release_set.json b/examples/boot_release_set.json index e2ce894..fd87dc6 100644 --- a/examples/boot_release_set.json +++ b/examples/boot_release_set.json @@ -2,14 +2,6 @@ "boot_release_set_id": "urn:srcos:boot-release-set:m2-demo-recovery-2026-04-26", "base_release_set_ref": "urn:srcos:release-set:m2-demo-2026-04-26", "boot_mode": "recovery", - "status": "ready", - "artifacts": { - "kernel_ref": "urn:srcos:artifact:m2-demo-recovery-kernel-sha256-0f3b6d7f", - "initrd_ref": "urn:srcos:artifact:m2-demo-recovery-initrd-sha256-08f4c82e", - "rootfs_ref": "urn:srcos:artifact:m2-demo-recovery-rootfs-sha256-5f4dcc3b" - }, - "created_at": "2026-04-26T14:30:00Z", - "notes": "SourceOS Recovery Environment for the M2 local-first demo. This models the nlboot-evolved recovery path: minimal boot artifacts, signed content-addressed refs, and linkage back to the assigned ReleaseSet." "boot_channel": "rescue", "status": "ready", "platform_entrypoints": [ diff --git a/schemas/control-plane/Fingerprint.json b/schemas/control-plane/Fingerprint.json index 9ccb9ee..a3987b9 100644 --- a/schemas/control-plane/Fingerprint.json +++ b/schemas/control-plane/Fingerprint.json @@ -2,8 +2,8 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://schemas.srcos.ai/v2/control-plane/Fingerprint.json", "title": "Fingerprint", - "description": "Canonical Fingerprint schema. Wrapper that preserves legacy identifier while providing a stable srcos namespace for new references.", + "description": "Canonical Fingerprint schema. Control-plane wrapper that delegates to the canonical v2 Fingerprint contract (camelCase envelope), keeping a stable srcos control-plane namespace.", "allOf": [ - { "$ref": "./fingerprint.schema.json" } + { "$ref": "../Fingerprint.json" } ] } diff --git a/schemas/control-plane/ReleaseSet.json b/schemas/control-plane/ReleaseSet.json index b0ef6fc..0761fb5 100644 --- a/schemas/control-plane/ReleaseSet.json +++ b/schemas/control-plane/ReleaseSet.json @@ -2,8 +2,8 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://schemas.srcos.ai/v2/control-plane/ReleaseSet.json", "title": "ReleaseSet", - "description": "Canonical ReleaseSet schema. Wrapper that preserves legacy identifier while providing a stable srcos namespace for new references.", + "description": "Canonical ReleaseSet schema. Control-plane wrapper that delegates to the canonical v2 ReleaseSet contract (camelCase envelope), keeping a stable srcos control-plane namespace.", "allOf": [ - { "$ref": "./release-set.schema.json" } + { "$ref": "../ReleaseSet.json" } ] } diff --git a/tools/validate_control_plane_examples.py b/tools/validate_control_plane_examples.py index 9fd6169..67f490e 100644 --- a/tools/validate_control_plane_examples.py +++ b/tools/validate_control_plane_examples.py @@ -19,7 +19,9 @@ def validate_pair(schema_path: Path, example_path: Path) -> None: schema = json.loads(schema_path.read_text(encoding="utf-8")) jsonschema.validators.validator_for(schema).check_schema(schema) legacy_ref = schema.get("allOf", [{}])[0].get("$ref") - validation_schema_path = schema_path.with_name(legacy_ref) if legacy_ref else schema_path + # The wrapper schema delegates validation to the legacy sibling schema it $refs + # (a relative path like "./release-set.schema.json"), so resolve it against the + # wrapper's directory. (Path.with_name rejects names containing "/".) validation_schema_path = (schema_path.parent / legacy_ref).resolve() if legacy_ref else schema_path validation_schema = json.loads(validation_schema_path.read_text(encoding="utf-8")) example = json.loads(example_path.read_text(encoding="utf-8"))