diff --git a/data/json/ssvc_object_registry.json b/data/json/ssvc_object_registry.json index d46fe465..9f156e2a 100644 --- a/data/json/ssvc_object_registry.json +++ b/data/json/ssvc_object_registry.json @@ -2,6 +2,7 @@ "name": "SSVC Object Registry", "definition": "A registry for SSVC objects organized by type, namespace, key, and version.", "schemaVersion": "2.0.0", + "generatedAt": "2026-09-09T15:10:13.388981Z", "types": { "DecisionPoint": { "type": "DecisionPoint", diff --git a/data/schema/v2/SsvcObjectRegistry_2_0_0.schema.json b/data/schema/v2/SsvcObjectRegistry_2_0_0.schema.json index 947fb94e..043af392 100644 --- a/data/schema/v2/SsvcObjectRegistry_2_0_0.schema.json +++ b/data/schema/v2/SsvcObjectRegistry_2_0_0.schema.json @@ -368,6 +368,12 @@ "description": "The schema version of this selection list.", "type": "string" }, + "generatedAt": { + "title": "Generatedat", + "description": "RFC 3339 timestamp indicating when the registry was generated.", + "format": "date-time", + "type": "string" + }, "types": { "title": "Types", "additionalProperties": { diff --git a/src/ssvc/registry/base.py b/src/ssvc/registry/base.py index 1300a4e5..e670a217 100644 --- a/src/ssvc/registry/base.py +++ b/src/ssvc/registry/base.py @@ -22,6 +22,7 @@ # DM24-0278 import logging +from datetime import datetime, timezone from typing import Any, ClassVar, Literal, Optional, Union import semver @@ -137,6 +138,16 @@ class _NsType(BaseModel): class SsvcObjectRegistry(_SchemaVersioned, _Base, BaseModel): _schema_version: ClassVar[str] = SCHEMA_VERSION + generatedAt: str = Field( + default_factory=lambda: datetime.now(timezone.utc).isoformat().replace("+00:00", "Z"), + description="RFC 3339 timestamp indicating when the registry was generated.", + json_schema_extra={"format": "date-time"}, + ) + + def model_dump_json(self, *args, **kwargs) -> str: + # Refresh at serialization time so singleton registries record actual generation time. + self.generatedAt = datetime.now(timezone.utc).isoformat().replace("+00:00", "Z") + return super().model_dump_json(*args, **kwargs) schemaVersion: Literal[SCHEMA_VERSION] = Field( ..., description="The schema version of this selection list.",