{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/schemas/source-traceability.schema.json",
  "title": "Source Traceability",
  "type": "object",
  "required": ["description", "objective", "traceability"],
  "properties": {
    "description": { "type": "string", "minLength": 1 },
    "objective": { "type": "string", "minLength": 1 },
    "traceability": {
      "type": "object",
      "required": ["policy", "artifactChain", "claimLedger", "pageUsage", "claimInstrumentation", "qaRequirements"],
      "properties": {
        "policy": {
          "type": "object",
          "required": ["objective", "why", "rule", "blockedRule"]
        },
        "artifactChain": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "required": ["stage", "path", "purpose", "required"]
          }
        },
        "claimLedger": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "required": ["id", "claim", "status", "sourcePath", "publicUse", "allowedLocations", "requiredQualifier"],
            "properties": {
              "status": { "enum": ["allowed", "blocked"] },
              "allowedLocations": {
                "type": "array",
                "items": { "type": "string", "minLength": 1 }
              }
            }
          }
        },
        "pageUsage": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "required": ["route", "sourceBrief", "visibleClaims", "blockedClaims", "seoRequirements", "schemaRequirements", "aeoRequirements"]
          }
        },
        "claimInstrumentation": {
          "type": "object",
          "required": ["objective", "pageSectionClaims", "schemaClaimIds", "llmSummaryClaimIds", "blockedClaimIds", "qaGates"],
          "properties": {
            "objective": { "type": "string", "minLength": 1 },
            "pageSectionClaims": {
              "type": "array",
              "minItems": 1,
              "items": {
                "type": "object",
                "required": ["route", "selector", "attribute", "claimIds", "why"]
              }
            },
            "schemaClaimIds": {
              "type": "array",
              "minItems": 1,
              "items": {
                "type": "object",
                "required": ["route", "endpoint", "claimIds", "why"]
              }
            },
            "llmSummaryClaimIds": {
              "type": "array",
              "minItems": 1,
              "items": { "type": "string", "minLength": 1 }
            },
            "blockedClaimIds": {
              "type": "array",
              "minItems": 1,
              "items": { "type": "string", "minLength": 1 }
            },
            "qaGates": {
              "type": "array",
              "minItems": 1,
              "items": { "type": "string", "minLength": 1 }
            }
          }
        },
        "qaRequirements": {
          "type": "array",
          "minItems": 1,
          "items": { "type": "string", "minLength": 1 }
        }
      }
    }
  }
}
