{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://nova.cloudinit.dev/schemas/contract.schema.json", "title": "Nova Consumer Contract", "description": "A consumer's declaration of infrastructure intent. Engine-agnostic: no aws_* or Terraform terms.", "type": "object", "required": ["id", "name", "environment", "infrastructure"], "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^[a-z][a-z0-9-]{2,5}$", "description": "Stable operational acronym (3-6 chars). Used in state keys + resource naming." }, "name": { "type": "string", "minLength": 3, "description": "Human-readable contract name." }, "environment": { "type": "string", "enum": ["dev", "qa", "prod", "dr"], "description": "Target environment." }, "infrastructure": { "type": "array", "minItems": 1, "description": "List of modules to deploy. Array (not map) per D-015.", "items": { "type": "object", "required": ["module", "inputs"], "additionalProperties": false, "properties": { "module": { "type": "string", "pattern": "^[a-z][a-z0-9-]*$", "description": "Module name from the registry." }, "version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$", "description": "Semver version. Optional — defaults to latest non-deprecated." }, "inputs": { "type": "object", "description": "Module-specific inputs. No aws_* keys (engine-agnostic)." } } } } } }