fluid-core/schemas/revision.schema.json

236 lines
9.7 KiB
JSON
Raw Normal View History

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://fluid.dev/schemas/revision.schema.json",
"title": "FLUID revision record",
"description": "What deterministic interface state was built, verified, exposed and measured. Published revisions should be immutable; corrections create successors (FluidAPIStandards.md section 8).",
"type": "object",
"properties": {
"fluid_revision": {
"type": "object",
"properties": {
"schema_version": { "$ref": "common.schema.json#/$defs/schemaVersion" },
"id": { "$ref": "common.schema.json#/$defs/revisionId" },
"interface_id": { "$ref": "common.schema.json#/$defs/interfaceId" },
"revision_number": { "type": "integer", "minimum": 0 },
"parent_revision": {
"oneOf": [
{ "$ref": "common.schema.json#/$defs/revisionId" },
{ "type": "null" }
],
"description": "Null marks genesis."
},
"state": {
"enum": ["CREATED", "VERIFIED", "EXPERIMENT", "CANDIDATE", "STABLE", "DEPRECATED", "RETIRED"]
},
"created_at": { "$ref": "common.schema.json#/$defs/timestamp" },
"created_by": { "$ref": "common.schema.json#/$defs/actor" },
"contract": {
"type": "object",
"properties": {
"type": { "enum": ["openapi", "graphql", "protobuf", "asyncapi", "jsonschema", "custom"] },
"version": { "type": "string" },
"artifact_ref": { "$ref": "common.schema.json#/$defs/artifactRef" },
"digest": { "$ref": "common.schema.json#/$defs/digest" }
},
"required": ["type", "artifact_ref", "digest"],
"additionalProperties": false
},
"implementation": {
"type": "object",
"properties": {
"artifact_ref": { "$ref": "common.schema.json#/$defs/artifactRef" },
"source_ref": { "type": "string" },
"build_ref": { "type": "string" },
"digest": { "$ref": "common.schema.json#/$defs/digest" }
},
"required": ["artifact_ref", "digest"],
"additionalProperties": false
},
"interface_evolution_intent": {
"type": "object",
"description": "Every revision is governed by a specific intent version, so audit can ask whether the change was valid under the intent that existed at the time (ArchitectureBlueprint.md section 27).",
"properties": {
"version": { "type": "string", "minLength": 1 },
"artifact_ref": { "$ref": "common.schema.json#/$defs/artifactRef" }
},
"required": ["version"],
"additionalProperties": false
},
"originating_hypotheses": { "type": "array", "items": { "$ref": "common.schema.json#/$defs/hypothesisId" } },
"backend_requirements": { "type": "array", "items": { "$ref": "common.schema.json#/$defs/backendRequirementId" } },
"compatibility": {
"type": "object",
"properties": {
"class": {
"enum": ["BACKWARD_COMPATIBLE", "FORWARD_COMPATIBLE", "ADDITIVE", "BEHAVIORAL_CHANGE", "BREAKING", "MIGRATION_ONLY", "INTERNAL_ONLY"]
},
"breaking_changes": { "type": "array", "items": { "type": "string" } },
"deprecations": { "type": "array", "items": { "type": "string" } },
"supersedes": { "type": "array", "items": { "$ref": "common.schema.json#/$defs/revisionId" } },
"compatibility_evidence_refs": { "type": "array", "items": { "$ref": "common.schema.json#/$defs/evidenceRef" } }
},
"required": ["class"],
"additionalProperties": false
},
"adaptation_classes": { "type": "array", "items": { "$ref": "common.schema.json#/$defs/adaptationClass" } },
"verification": {
"type": "object",
"description": "The primary safety barrier between adaptive generation and deterministic runtime (ArchitectureBlueprint.md section 15).",
"properties": {
"status": { "enum": ["PENDING", "PASSED", "FAILED"] },
"test_refs": { "type": "array", "items": { "type": "string" } },
"security_check": { "enum": ["PENDING", "PASSED", "FAILED"] },
"policy_check": { "enum": ["PENDING", "PASSED", "FAILED"] }
},
"required": ["status"],
"additionalProperties": false
},
"complexity": {
"type": "object",
"properties": {
"before": { "$ref": "common.schema.json#/$defs/complexityDelta" },
"after": { "$ref": "common.schema.json#/$defs/complexityDelta" },
"delta_score": { "type": "number" },
"budget_status": { "enum": ["WITHIN_BUDGET", "AT_BUDGET", "OVER_BUDGET"] }
},
"additionalProperties": false
},
"deployment": {
"type": "object",
"properties": {
"environments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"started_at": { "$ref": "common.schema.json#/$defs/timestamp" },
"routing_policy_ref": { "type": "string" }
},
"required": ["name"],
"additionalProperties": false
}
},
"current_exposure": {
"type": "object",
"properties": {
"traffic_share": { "$ref": "common.schema.json#/$defs/unitInterval" },
"cohorts": { "type": "array", "items": { "$ref": "common.schema.json#/$defs/cohortId" } }
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"fitness": {
"type": "object",
"properties": {
"baseline_revision": { "oneOf": [{ "$ref": "common.schema.json#/$defs/revisionId" }, { "type": "null" }] },
"measurement_window": { "$ref": "common.schema.json#/$defs/observationWindow" },
"metrics": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"baseline": { "type": ["number", "null"] },
"current": { "type": ["number", "null"] },
"target": { "type": ["number", "null"] },
"guardrail": { "type": ["number", "null"] }
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"adoption": {
"type": "object",
"description": "Adoption is evidence, not proof of quality (FluidAPIStandards.md section 32).",
"properties": {
"eligible_consumers": { "type": ["integer", "null"], "minimum": 0 },
"active_consumers": { "type": ["integer", "null"], "minimum": 0 },
"adoption_rate": { "oneOf": [{ "$ref": "common.schema.json#/$defs/unitInterval" }, { "type": "null" }] },
"retained_adoption_rate": { "oneOf": [{ "$ref": "common.schema.json#/$defs/unitInterval" }, { "type": "null" }] }
},
"additionalProperties": false
},
"economics": {
"type": "object",
"properties": {
"build_cost": { "type": "number", "minimum": 0 },
"experiment_cost_to_date": { "type": "number", "minimum": 0 },
"currency": { "type": "string" }
},
"additionalProperties": false
},
"promotion": {
"type": "object",
"properties": {
"eligible": { "type": "boolean" },
"recommended_state": {
"oneOf": [
{ "enum": ["CREATED", "VERIFIED", "EXPERIMENT", "CANDIDATE", "STABLE", "DEPRECATED", "RETIRED"] },
{ "type": "null" }
]
},
"recommendation_reason": { "type": ["string", "null"] },
"authorized_by": { "oneOf": [{ "$ref": "common.schema.json#/$defs/actor" }, { "type": "null" }] },
"authorized_at": { "oneOf": [{ "$ref": "common.schema.json#/$defs/timestamp" }, { "type": "null" }] }
},
"additionalProperties": false
},
"rollback": {
"type": "object",
"properties": {
"supported": { "type": "boolean" },
"target_revision": { "oneOf": [{ "$ref": "common.schema.json#/$defs/revisionId" }, { "type": "null" }] },
"procedure_ref": { "type": "string" }
},
"required": ["supported"],
"additionalProperties": false
},
"provenance": {
"type": "object",
"properties": {
"decision_refs": { "type": "array", "items": { "$ref": "common.schema.json#/$defs/decisionId" } },
"experiment_refs": { "type": "array", "items": { "$ref": "common.schema.json#/$defs/experimentId" } },
"telemetry_refs": { "type": "array", "items": { "$ref": "common.schema.json#/$defs/evidenceRef" } }
},
"additionalProperties": false
},
"audit": {
"type": "object",
"properties": {
"immutable_event_refs": { "type": "array", "items": { "$ref": "common.schema.json#/$defs/eventId" } }
},
"additionalProperties": false
}
},
"required": [
"schema_version", "id", "interface_id", "revision_number", "parent_revision",
"state", "contract", "implementation", "interface_evolution_intent",
"compatibility", "verification", "rollback", "provenance"
],
"additionalProperties": false
}
},
"required": ["fluid_revision"],
"additionalProperties": false
}