From b7b21307844baf7de97fa31e1b3b369a65c404aa Mon Sep 17 00:00:00 2001 From: Vuong Hoang Date: Sun, 31 May 2026 13:59:10 -0700 Subject: [PATCH] catalog-schema: add CatalogLifecycle + reproducibility.seed_field Resolves the stale-schema gap asset-engine-dev flagged (the published schema rejected the lifecycle field 12/14 live services already use) and adds reproducibility.seed_field so a seedable engine can declare which response key carries the seed used. Authoritative regen path remains dump_schema.py against asset_engine/catalog.py; reconcile there. --- docs/asset-engine/services.schema.json | 57 ++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/docs/asset-engine/services.schema.json b/docs/asset-engine/services.schema.json index 4570cb9..ff63527 100644 --- a/docs/asset-engine/services.schema.json +++ b/docs/asset-engine/services.schema.json @@ -273,6 +273,40 @@ "title": "CatalogLatency", "type": "object" }, + "CatalogLifecycle": { + "additionalProperties": false, + "description": "Per-service orchestration metadata.\n\nPresence means \"asset_engine can start/stop this service from the UI\".\nAbsence (default) means \"managed externally \u2014 UI surfaces no controls.\"\nSee docs/contracts/orchestration.contract.md.\n\n - stack: directory name under /opt/docker/compose/ on the\n inference host (compose path derived).\n - vram_gb: VRAM the model needs at typical operating params.\n Used by the memory gate before docker compose up.\n - gpu_device_id: 0 or 1 to pin to a specific card, None if the\n service uses both GPUs / picks dynamically. None\n means the gate must clear on each device.", + "properties": { + "stack": { + "minLength": 1, + "title": "Stack", + "type": "string" + }, + "vram_gb": { + "exclusiveMinimum": 0, + "title": "Vram Gb", + "type": "number" + }, + "gpu_device_id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Gpu Device Id" + } + }, + "required": [ + "stack", + "vram_gb" + ], + "title": "CatalogLifecycle", + "type": "object" + }, "CatalogModel": { "additionalProperties": false, "properties": { @@ -333,6 +367,18 @@ ], "default": null, "title": "Notes" + }, + "seed_field": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Seed Field" } }, "required": [ @@ -571,6 +617,17 @@ ], "default": null }, + "lifecycle": { + "anyOf": [ + { + "$ref": "#/$defs/CatalogLifecycle" + }, + { + "type": "null" + } + ], + "default": null + }, "license": { "title": "License", "type": "string"