ROLE: You are a schema architect and validation engineer. TASK: Generate a STRICT JSON Schema (Draft 2020-12) named "data.schema.json" that validates a Cuddler document instance for one document type. INPUTS: DOCUMENT_TEMPLATE: {DOCUMENT_TEMPLATE} DOCUMENT_PURPOSE (optional): {DOCUMENT_PURPOSE} INTENDED_AUDIENCE (optional): {INTENDED_AUDIENCE} DOMAIN_OR_INDUSTRY (optional): {DOMAIN_OR_INDUSTRY} COMPLIANCE_CONTEXT (optional): {COMPLIANCE_CONTEXT} REQUIRED_SECTIONS_HINTS (optional): {REQUIRED_SECTIONS_HINTS} SCHEMA_VERSION (required): {SCHEMA_VERSION} PRIMARY_OUTPUT_CONTENT_TYPE (optional): {PRIMARY_OUTPUT_CONTENT_TYPE} SUPPORTED_OUTPUT_CONTENT_TYPES (optional): {SUPPORTED_OUTPUT_CONTENT_TYPES} PROFILE_ID (optional): {PROFILE_ID} PROFILE_VERSION (optional): {PROFILE_VERSION} PROFILE_DESCRIPTION (optional): {PROFILE_DESCRIPTION} SCHEMA_LINKS_HINTS (optional): {SCHEMA_LINKS_HINTS} CRITICAL OUTPUT RULES: 1) Output ONLY valid JSON. No markdown. No commentary. 2) Output exactly ONE JSON object: the JSON Schema. 3) Use JSON Schema Draft 2020-12: - "$schema": "https://json-schema.org/draft/2020-12/schema" SCHEMA IDENTITY: - Compute documentTypeId = kebab-case(DOCUMENT_TEMPLATE). - "$id" MUST be: "https://www.cuddler.dev/schemas///data.schema.json" - The validated instance MUST contain: - top-level "$schema" const == the schema $id - meta.documentTypeId const == documentTypeId - meta.schemaVersion const == SCHEMA_VERSION REQUIRED CUDDLER METADATA: The schema MUST include a top-level "cuddler" object with: - specVersion: "1.0.0-draft.7" - documentTypeId: documentTypeId - schemaVersion: SCHEMA_VERSION - output.primaryContentType: use PRIMARY_OUTPUT_CONTENT_TYPE when provided; otherwise choose the most appropriate content type - output.supportedContentTypes: optional; if present it MUST include primaryContentType and use unique values OPTIONAL CUDDLER METADATA: - profile: include only when PROFILE_ID is supplied - id: PROFILE_ID - version: PROFILE_VERSION when supplied - description: PROFILE_DESCRIPTION when supplied - schemaLinks: include when the document type links to other Cuddler document types - each item MUST include: - rel - targetSchema (absolute URI) - description - targetDocumentTypeId is optional but recommended STRICTNESS: - Every instance-visible object MUST set "additionalProperties": false. - When composition is used, preserve strictness with "unevaluatedProperties": false where needed. - Prefer "oneOf" over "anyOf". DOCUMENTATION IN THE SCHEMA: - Every instance-visible property MUST include a non-empty "description". - Each description MUST explain: a) what the field means in this document type b) what an autonomous assistant should write there c) the expected granularity or structure d) any content policy or exclusion that matters DATA-ONLY REQUIREMENT: - Do NOT include UI/layout/theme/css/page-size/fonts/template-rendering instructions. - Export behavior may be declared only through cuddler.output metadata. REQUIRED TOP-LEVEL INSTANCE SHAPE: The validated instance MUST be an object with EXACTLY these top-level properties: - $schema (required; absolute URI; usually const to this schema $id) - meta (required) - content (required) - assets (required) - references (required) - annotations (optional) META REQUIREMENTS: meta MUST be a strict object. Required: - schemaVersion (const SCHEMA_VERSION) - documentTypeId (const documentTypeId) - documentId (UUID) - title (string) - createdAt (date-time) - authors[] (minItems 1) Recommended core fields: - updatedAt (date-time) - status (enum): draft | final | deprecated - language (BCP-47-like tag) - summary (string) - intendedAudience (string) - confidentiality (enum): public | internal | confidential | restricted - tags[] (unique array of short strings) Author objects: - name is REQUIRED - id, role, and email are OPTIONAL unless the document family clearly requires them CONTENT REQUIREMENTS: content MUST be a strict object. - sections[] is REQUIRED - documentModel is OPTIONAL but SHOULD be included when the document has reusable structured facts SECTIONS: - A Section object MUST include: - key - heading - blocks[] - subsections[] is optional - content.sections.items MUST be oneOf SECTION VARIANT schemas. - Each SECTION VARIANT MUST: - constrain key via const - include non-empty title - include non-empty description - optionally restrict allowed block kinds or structure - Enforce required top-level section keys with contains + minContains. BLOCK MODEL (fixed d7 core set): 1) "text" - kind - blockId (UUID) - text (string) - format (enum): plain | markdown 2) "bullets" - kind - blockId (UUID) - items[] (array of strings; minItems 1) - style (optional enum): unordered | ordered - intro (optional string) 3) "table" - kind - blockId (UUID) - columns[] of { key, heading, description } - rows[] as arrays of scalar values 4) "asset" - kind - blockId (UUID) - assetId (UUID) - caption (optional string) ASSETS: - assets.library[] MAY be empty. - Asset objects MUST include: - id - kind: image | vector | diagram | chart | tableSource | document | spreadsheet | slide | font | other - name - uri - mimeType - Visual asset kinds MUST include altText. REFERENCES: - references[] MAY be empty. - Reference objects MUST include: - id - title - locator - Reference kind MAY use: web | pdf | doc | book | standard | policy | specification | other ANNOTATIONS: - annotations[] is optional - items are strict { key, value } objects - value must be scalar: string | number | boolean | null LINKED CUDDLER DOCUMENTS: If this document type catalogs or links to other generated Cuddler documents: - model the link record explicitly in documentModel or another typed location - include schemaUri (required absolute schema URI for the target document type) - include schemaPath when repository-local or offline validation needs it - declare matching cuddler.schemaLinks metadata for the corresponding target schemas FINAL QUALITY BAR: The result must be a schema another autonomous assistant can read and use to generate a valid instance without needing hidden repo-specific context. DELIVERABLE: Return the completed strict JSON Schema JSON ONLY.