{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://tenantpilot.local/specs/201/guardrail-governance.schema.json",
  "title": "UI Surface Guardrail Governance Pack",
  "description": "Repository-owned contract for the review, repository-signal, test-guardrail, exception, and workflow-touchpoint artifacts introduced by Spec 201.",
  "type": "object",
  "additionalProperties": false,
	  "required": [
	    "schemaVersion",
	    "ruleMappings",
	    "reviewChecklist",
	    "repositorySignals",
	    "testGuardrails",
	    "exceptionWorkflow",
	    "workflowTouchpoints",
	    "validationScenarios",
	    "closeoutEntry"
	  ],
  "properties": {
    "schemaVersion": {
      "type": "string"
    },
    "ruleMappings": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/ruleMapping"
      }
    },
    "reviewChecklist": {
      "$ref": "#/$defs/reviewChecklist"
    },
    "repositorySignals": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/repositorySignal"
      }
    },
    "testGuardrails": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/testGuardrail"
      }
    },
    "exceptionWorkflow": {
      "$ref": "#/$defs/exceptionWorkflow"
    },
    "workflowTouchpoints": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/workflowTouchpoint"
      }
    },
	    "validationScenarios": {
	      "type": "array",
	      "minItems": 2,
	      "items": {
	        "$ref": "#/$defs/validationScenario"
	      }
	    },
	    "closeoutEntry": {
	      "$ref": "#/$defs/closeoutEntry"
	    }
	  },
  "$defs": {
    "ruleMapping": {
      "type": "object",
      "additionalProperties": false,
	      "required": [
	        "mappingId",
	        "sourceRuleId",
	        "problemClass",
	        "operationalClasses",
	        "handlingMode",
	        "representativeCases",
	        "targetWorkflowSurfaces"
	      ],
      "properties": {
        "mappingId": { "type": "string" },
        "sourceRuleId": { "type": "string" },
        "problemClass": { "type": "string" },
        "operationalClasses": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "string",
            "enum": [
              "review",
              "repository-signal",
              "test-guardrail",
              "exception",
              "workflow-touchpoint"
            ]
          }
        },
        "handlingMode": {
          "type": "string",
          "enum": [
            "hard-stop-candidate",
            "review-mandatory",
            "exception-required",
            "report-only"
          ]
        },
        "representativeCases": {
          "type": "array",
          "items": { "type": "string" }
        },
        "targetWorkflowSurfaces": {
          "type": "array",
          "minItems": 1,
          "items": { "type": "string" }
        },
        "deferredAutomation": {
          "type": "array",
          "items": { "type": "string" }
        }
      }
    },
    "reviewChecklist": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "checklistId",
        "questions",
        "outcomeClasses",
        "workflowOutcomes",
        "maxReviewMinutes"
      ],
      "properties": {
        "checklistId": { "type": "string" },
        "questions": {
          "type": "array",
          "minItems": 1,
          "items": { "$ref": "#/$defs/reviewQuestion" }
        },
        "outcomeClasses": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "blocker",
              "strong-warning",
              "documentation-required-exception",
              "acceptable-special-case"
            ]
          }
        },
        "workflowOutcomes": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "keep",
              "split",
              "document-in-feature",
              "follow-up-spec",
              "reject-or-split"
            ]
          }
        },
        "maxReviewMinutes": {
          "type": "integer",
          "minimum": 1
        }
      }
    },
    "reviewQuestion": {
      "type": "object",
      "additionalProperties": false,
	      "required": [
	        "questionId",
	        "category",
	        "prompt",
	        "appliesWhen",
	        "linkedMappings",
	        "evidenceExpected",
	        "defaultOutcomeClass"
	      ],
      "properties": {
        "questionId": { "type": "string" },
        "category": {
          "type": "string",
          "enum": [
            "surface-classification",
            "native-usage",
            "shared-family",
            "state-layer",
            "exception",
            "test-coverage"
          ]
	        },
	        "prompt": { "type": "string" },
	        "appliesWhen": { "type": "string" },
	        "linkedMappings": {
	          "type": "array",
	          "minItems": 1,
	          "items": { "type": "string" }
	        },
	        "evidenceExpected": { "type": "string" },
	        "defaultOutcomeClass": {
	          "type": "string",
	          "enum": [
            "blocker",
            "strong-warning",
            "documentation-required-exception",
            "acceptable-special-case"
          ]
        }
      }
    },
    "repositorySignal": {
      "type": "object",
      "additionalProperties": false,
	      "required": [
	        "signalId",
	        "label",
	        "patternType",
	        "confidenceLevel",
	        "handlingMode",
	        "exceptionPath",
	        "futurePromotion"
	      ],
      "properties": {
        "signalId": { "type": "string" },
        "label": { "type": "string" },
        "patternType": {
          "type": "string",
          "enum": ["grep", "search", "path-pattern", "manual"]
        },
        "searchScopePaths": {
          "type": "array",
          "items": { "type": "string" }
        },
        "triggerExamples": {
          "type": "array",
          "items": { "type": "string" }
        },
        "confidenceLevel": {
          "type": "string",
          "enum": ["high", "medium", "low"]
        },
        "handlingMode": {
          "type": "string",
          "enum": [
            "report-only",
            "review-mandatory",
            "exception-required",
            "hard-stop-candidate"
          ]
        },
        "exceptionPath": { "type": "string" },
        "futurePromotion": { "type": "string" }
      }
    },
    "testGuardrail": {
      "type": "object",
      "additionalProperties": false,
	      "required": [
	        "profileId",
	        "surfaceClass",
	        "triggers",
	        "requiredTestTypes",
	        "manualSmokeExpectations",
	        "standardCoverageRule",
	        "exceptionHandlingRule"
	      ],
      "properties": {
        "profileId": { "type": "string" },
        "surfaceClass": {
          "type": "string",
          "enum": [
            "shared-detail-family",
            "monitoring-state-page",
            "global-context-shell",
            "exception-coded-surface",
            "standard-native-filament"
          ]
        },
        "triggers": {
          "type": "array",
          "items": { "type": "string" }
        },
        "requiredTestTypes": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "functional-core",
              "state-contract",
              "exception-fallback",
              "manual-smoke"
            ]
          }
        },
        "manualSmokeExpectations": {
          "type": "array",
          "items": { "type": "string" }
        },
        "standardCoverageRule": { "type": "string" },
        "exceptionHandlingRule": { "type": "string" }
      }
    },
    "exceptionWorkflow": {
      "type": "object",
      "additionalProperties": false,
	      "required": [
	        "workflowId",
	        "supportedExceptionTypes",
	        "requiredFields",
	        "boundaryChecks",
	        "standardizationFields",
	        "spreadReviewRule",
	        "closeoutRequirement",
	        "closeoutNoteTarget"
	      ],
      "properties": {
        "workflowId": { "type": "string" },
        "supportedExceptionTypes": {
          "type": "array",
          "items": { "type": "string" }
        },
	        "requiredFields": {
	          "type": "array",
	          "items": { "type": "string" }
	        },
	        "boundaryChecks": {
	          "type": "array",
	          "items": { "type": "string" }
	        },
	        "standardizationFields": {
	          "type": "array",
	          "items": { "type": "string" }
	        },
	        "spreadReviewRule": { "type": "string" },
	        "closeoutRequirement": { "type": "string" },
	        "closeoutNoteTarget": { "type": "string" }
	      }
	    },
    "workflowTouchpoint": {
      "type": "object",
      "additionalProperties": false,
	      "required": [
	        "touchpointId",
	        "artifactPath",
	        "phase",
	        "requiredPrompts",
	        "linkedMappings",
	        "outcomeTarget"
	      ],
      "properties": {
        "touchpointId": { "type": "string" },
        "artifactPath": { "type": "string" },
        "phase": {
          "type": "string",
          "enum": ["spec", "plan", "tasks", "review", "closeout", "follow-up"]
        },
        "requiredPrompts": {
          "type": "array",
          "items": { "type": "string" }
        },
        "linkedMappings": {
          "type": "array",
          "items": { "type": "string" }
        },
        "outcomeTarget": { "type": "string" }
      }
    },
    "validationScenario": {
      "type": "object",
      "additionalProperties": false,
	      "required": [
	        "scenarioId",
	        "scenarioType",
	        "representativeArtifact",
	        "expectedMappings",
	        "expectedOutcomeClass",
	        "expectedWorkflowOutcome",
	        "status",
	        "notes"
	      ],
      "properties": {
        "scenarioId": { "type": "string" },
        "scenarioType": {
          "type": "string",
          "enum": [
            "low-impact",
            "fake-native",
            "shared-family",
            "state-layer",
            "legitimate-exception"
          ]
        },
        "representativeArtifact": { "type": "string" },
        "expectedMappings": {
          "type": "array",
          "items": { "type": "string" }
        },
        "expectedOutcomeClass": {
          "type": "string",
          "enum": [
            "blocker",
            "strong-warning",
            "documentation-required-exception",
            "acceptable-special-case"
          ]
        },
        "expectedWorkflowOutcome": {
          "type": "string",
          "enum": [
            "keep",
            "split",
            "document-in-feature",
            "follow-up-spec",
            "reject-or-split"
          ]
        },
        "status": {
          "type": "string",
          "enum": ["planned", "validated", "needs-tuning"]
        },
	        "notes": { "type": "string" }
	      }
	    },
	    "closeoutEntry": {
	      "type": "object",
	      "additionalProperties": false,
	      "required": [
	        "entryName",
	        "requiredFields",
	        "noteOwner",
	        "lowImpactRule",
	        "deferredAutomationField"
	      ],
	      "properties": {
	        "entryName": { "type": "string" },
	        "requiredFields": {
	          "type": "array",
	          "minItems": 1,
	          "items": { "type": "string" }
	        },
	        "noteOwner": { "type": "string" },
	        "lowImpactRule": { "type": "string" },
	        "deferredAutomationField": { "type": "string" }
	      }
	    }
	  }
	}
