{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://standards.rootblocks.com/schemas/recipes/compiler-instruction.v1.schema.json",
  "title": "RootBlocks Compiler Instruction Recipe v1",
  "type": "object",
  "additionalProperties": false,
  "allOf": [
    {
      "if": {
        "properties": {
          "domain": {
            "const": "application"
          }
        },
        "required": ["domain"]
      },
      "then": {
        "required": ["applicationContract"]
      }
    },
    {
      "if": {
        "properties": {
          "domain": {
            "const": "iac"
          }
        },
        "required": ["domain"]
      },
      "then": {
        "required": ["iacContract"]
      }
    },
    {
      "if": {
        "properties": {
          "domain": {
            "const": "cicd"
          }
        },
        "required": ["domain"]
      },
      "then": {
        "required": ["cicdContract"]
      }
    },
    {
      "if": {
        "properties": {
          "domain": {
            "const": "test"
          }
        },
        "required": ["domain"]
      },
      "then": {
        "required": ["testContract"]
      }
    }
  ],
  "required": [
    "schemaVersion",
    "recipeId",
    "version",
    "domain",
    "standard",
    "recipeResolution",
    "appliesTo",
    "compatibility",
    "consumerObligations",
    "inputArtifacts",
    "phases",
    "outputArtifacts",
    "outputInventory",
    "placementRules",
    "dependencyRules",
    "testRules",
    "sourceMapRules",
    "evidenceRules",
    "failureRules"
  ],
  "properties": {
    "schemaVersion": {
      "const": "rootblocks.compiler-instruction/v1"
    },
    "recipeId": {
      "$ref": "#/$defs/id"
    },
    "version": {
      "$ref": "#/$defs/semver"
    },
    "domain": {
      "enum": ["application", "component-pack", "iac", "cicd", "test", "workflow", "custom"]
    },
    "standard": {
      "$ref": "#/$defs/standardRef"
    },
    "recipeResolution": {
      "$ref": "#/$defs/recipeResolution"
    },
    "appliesTo": {
      "type": "object",
      "additionalProperties": false,
      "required": ["profiles", "languages"],
      "properties": {
        "profiles": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/id"
          },
          "uniqueItems": true
        },
        "languages": {
          "type": "array",
          "minItems": 1,
          "items": {
            "enum": ["csharp", "typescript", "javascript", "python", "java", "kotlin", "go", "rust", "php", "ruby", "yaml", "custom"]
          },
          "uniqueItems": true
        },
        "providers": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/id"
          },
          "uniqueItems": true
        },
        "runtimes": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9.+-]{0,80}$"
          },
          "uniqueItems": true
        },
        "generationModes": {
          "type": "array",
          "minItems": 1,
          "items": {
            "enum": ["builderx-compiler", "agent-codegen-governed", "hybrid"]
          },
          "uniqueItems": true
        }
      }
    },
    "compatibility": {
      "$ref": "#/$defs/recipeCompatibility"
    },
    "consumerObligations": {
      "$ref": "#/$defs/consumerObligations"
    },
    "inputArtifacts": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/artifactRef"
      }
    },
    "phases": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/phase"
      }
    },
    "outputArtifacts": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/artifactRef"
      }
    },
    "outputInventory": {
      "$ref": "#/$defs/outputInventory"
    },
    "placementRules": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/rule"
      }
    },
    "dependencyRules": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/dependencyRule"
      }
    },
    "namingRules": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/rule"
      }
    },
    "testRules": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/rule"
      }
    },
    "sourceMapRules": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/rule"
      }
    },
    "evidenceRules": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/rule"
      }
    },
    "failureRules": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/rule"
      }
    },
    "applicationContract": {
      "$ref": "#/$defs/applicationContract"
    },
    "iacContract": {
      "$ref": "#/$defs/iacContract"
    },
    "cicdContract": {
      "$ref": "#/$defs/cicdContract"
    },
    "testContract": {
      "$ref": "#/$defs/testContract"
    }
  },
  "$defs": {
    "id": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9.-]{2,127}$"
    },
    "semver": {
      "type": "string",
      "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(-[A-Za-z0-9.-]+)?(\\+[A-Za-z0-9.-]+)?$"
    },
    "hash": {
      "type": "string",
      "pattern": "^[a-f0-9]{64,128}$"
    },
    "standardRef": {
      "type": "object",
      "additionalProperties": false,
      "required": ["bundleId", "version", "hash"],
      "properties": {
        "bundleId": {
          "$ref": "#/$defs/id"
        },
        "version": {
          "$ref": "#/$defs/semver"
        },
        "hash": {
          "$ref": "#/$defs/hash"
        }
      }
    },
    "recipeResolution": {
      "type": "object",
      "additionalProperties": false,
      "required": ["bundleAssetRequired", "missingRecipeBehavior", "incompatibleRecipeBehavior"],
      "properties": {
        "bundleAssetRequired": {
          "const": true
        },
        "missingRecipeBehavior": {
          "const": "block"
        },
        "incompatibleRecipeBehavior": {
          "const": "block"
        }
      }
    },
    "recipeCompatibility": {
      "type": "object",
      "additionalProperties": false,
      "required": ["minimumStandardVersion", "supportedConsumers", "supportedSchemaFamilies"],
      "properties": {
        "minimumStandardVersion": {
          "$ref": "#/$defs/semver"
        },
        "supportedConsumers": {
          "type": "array",
          "minItems": 1,
          "items": {
            "enum": ["rootblocks-console", "builderx", "visual-builder", "agent", "rbstd", "custom"]
          },
          "uniqueItems": true
        },
        "supportedSchemaFamilies": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/id"
          },
          "uniqueItems": true
        }
      }
    },
    "consumerObligations": {
      "type": "object",
      "additionalProperties": false,
      "required": ["rootblocksConsole", "builderx", "visualBuilder", "governedAgent"],
      "properties": {
        "rootblocksConsole": {
          "$ref": "#/$defs/consumerObligation"
        },
        "builderx": {
          "$ref": "#/$defs/consumerObligation"
        },
        "visualBuilder": {
          "$ref": "#/$defs/consumerObligation"
        },
        "governedAgent": {
          "$ref": "#/$defs/consumerObligation"
        }
      }
    },
    "consumerObligation": {
      "type": "object",
      "additionalProperties": false,
      "required": ["mustResolveFromBundle", "mustRecordRecipeRef", "mustEmitEvidence", "allowedGenerationModes"],
      "properties": {
        "mustResolveFromBundle": {
          "const": true
        },
        "mustRecordRecipeRef": {
          "const": true
        },
        "mustEmitEvidence": {
          "const": true
        },
        "allowedGenerationModes": {
          "type": "array",
          "minItems": 1,
          "items": {
            "enum": ["builderx-compiler", "agent-codegen-governed", "hybrid"]
          },
          "uniqueItems": true
        }
      }
    },
    "artifactRef": {
      "type": "object",
      "additionalProperties": false,
      "required": ["kind", "required"],
      "properties": {
        "kind": {
          "enum": ["construction", "project", "workflow", "component", "buildpack", "source", "test", "iac", "cicd", "source-map", "source-audit", "evidence", "docs", "package", "output-inventory", "resource-graph"]
        },
        "id": {
          "$ref": "#/$defs/id"
        },
        "pathPattern": {
          "type": "string",
          "minLength": 1
        },
        "schemaVersion": {
          "type": "string",
          "pattern": "^rootblocks\\.[a-z0-9.-]+/v[0-9]+$"
        },
        "sourceMapRequired": {
          "type": "boolean"
        },
        "evidenceRequired": {
          "type": "boolean"
        },
        "inventoryRequired": {
          "type": "boolean"
        },
        "required": {
          "type": "boolean"
        }
      }
    },
    "outputInventory": {
      "type": "object",
      "additionalProperties": false,
      "required": ["required", "schemaVersion", "pathPattern", "mustCover"],
      "properties": {
        "required": {
          "const": true
        },
        "schemaVersion": {
          "enum": ["rootblocks.structured-project-output/v1", "rootblocks.source-audit-report/v1", "rootblocks.construction-output-inventory/v1"]
        },
        "pathPattern": {
          "type": "string",
          "minLength": 1
        },
        "mustCover": {
          "type": "array",
          "minItems": 1,
          "items": {
            "enum": ["projects", "files", "tests", "source-maps", "evidence", "validation-gates", "packages", "resources", "pipelines"]
          },
          "uniqueItems": true
        }
      }
    },
    "phase": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "order", "purpose", "inputs", "outputs", "gates", "failureBehavior"],
      "properties": {
        "id": {
          "$ref": "#/$defs/id"
        },
        "order": {
          "type": "integer",
          "minimum": 1
        },
        "purpose": {
          "type": "string",
          "minLength": 1
        },
        "inputs": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/id"
          }
        },
        "outputs": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/id"
          }
        },
        "gates": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/id"
          }
        },
        "failureBehavior": {
          "enum": ["block", "warn", "manual-review"]
        }
      }
    },
    "rule": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "severity", "statement"],
      "properties": {
        "id": {
          "$ref": "#/$defs/id"
        },
        "severity": {
          "enum": ["block", "warn", "advisory"]
        },
        "statement": {
          "type": "string",
          "minLength": 1
        }
      }
    },
    "dependencyRule": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "from", "allowed", "forbidden", "severity"],
      "properties": {
        "id": {
          "$ref": "#/$defs/id"
        },
        "from": {
          "$ref": "#/$defs/id"
        },
        "allowed": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/id"
          },
          "uniqueItems": true
        },
        "forbidden": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/id"
          },
          "uniqueItems": true
        },
        "severity": {
          "enum": ["block", "warn", "advisory"]
        }
      }
    },
    "applicationContract": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "applicationIrSections",
        "layerResponsibilities",
        "requiredLayout",
        "packageOwnership",
        "workflowNodeTranslation",
        "agentFallback",
        "delegations"
      ],
      "properties": {
        "applicationIrSections": {
          "type": "array",
          "minItems": 16,
          "items": {
            "enum": [
              "appIdentity",
              "languageRuntime",
              "architectureProfile",
              "boundedContexts",
              "modules",
              "domainModel",
              "useCases",
              "ports",
              "adapters",
              "workflowBindings",
              "workflowNodeOperations",
              "applicationOperations",
              "domainPolicies",
              "hostEntrypoints",
              "tests",
              "infrastructureLinks",
              "deliveryLinks",
              "sourceMapPlan",
              "evidencePlan"
            ]
          },
          "uniqueItems": true,
          "allOf": [
            { "contains": { "const": "appIdentity" } },
            { "contains": { "const": "languageRuntime" } },
            { "contains": { "const": "architectureProfile" } },
            { "contains": { "const": "domainModel" } },
            { "contains": { "const": "useCases" } },
            { "contains": { "const": "ports" } },
            { "contains": { "const": "adapters" } },
            { "contains": { "const": "workflowBindings" } },
            { "contains": { "const": "workflowNodeOperations" } },
            { "contains": { "const": "applicationOperations" } },
            { "contains": { "const": "domainPolicies" } },
            { "contains": { "const": "tests" } },
            { "contains": { "const": "sourceMapPlan" } },
            { "contains": { "const": "evidencePlan" } }
          ]
        },
        "layerResponsibilities": {
          "type": "array",
          "minItems": 5,
          "items": {
            "$ref": "#/$defs/layerResponsibility"
          }
        },
        "requiredLayout": {
          "$ref": "#/$defs/requiredApplicationLayout"
        },
        "packageOwnership": {
          "type": "array",
          "minItems": 5,
          "items": {
            "$ref": "#/$defs/packageOwnership"
          }
        },
        "workflowNodeTranslation": {
          "$ref": "#/$defs/workflowNodeTranslation"
        },
        "agentFallback": {
          "$ref": "#/$defs/agentFallback"
        },
        "delegations": {
          "type": "array",
          "minItems": 6,
          "items": {
            "$ref": "#/$defs/delegation"
          },
          "allOf": [
            { "contains": { "properties": { "domain": { "const": "iac" } }, "required": ["domain"] } },
            { "contains": { "properties": { "domain": { "const": "cicd" } }, "required": ["domain"] } },
            { "contains": { "properties": { "domain": { "const": "test" } }, "required": ["domain"] } },
            { "contains": { "properties": { "domain": { "const": "component-pack" } }, "required": ["domain"] } },
            { "contains": { "properties": { "domain": { "const": "source-map" } }, "required": ["domain"] } },
            { "contains": { "properties": { "domain": { "const": "evidence" } }, "required": ["domain"] } }
          ]
        }
      }
    },
    "iacContract": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "resourceGraph",
        "environmentProfiles",
        "toolProfiles",
        "stateBackend",
        "lifecycleGates",
        "backupAndRetention",
        "outputContract"
      ],
      "properties": {
        "resourceGraph": {
          "type": "object",
          "additionalProperties": false,
          "required": ["explicitResourcesRequired", "dependencyGraphRequired", "outputsRequired"],
          "properties": {
            "explicitResourcesRequired": {
              "const": true
            },
            "dependencyGraphRequired": {
              "const": true
            },
            "outputsRequired": {
              "const": true
            }
          }
        },
        "environmentProfiles": {
          "type": "array",
          "minItems": 3,
          "items": {
            "$ref": "#/$defs/iacEnvironmentProfile"
          },
          "allOf": [
            { "contains": { "properties": { "environment": { "const": "dev" } }, "required": ["environment"] } },
            { "contains": { "properties": { "environment": { "const": "qa" } }, "required": ["environment"] } },
            { "contains": { "properties": { "environment": { "const": "prod" } }, "required": ["environment"] } }
          ]
        },
        "toolProfiles": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/iacToolProfile"
          }
        },
        "stateBackend": {
          "$ref": "#/$defs/iacStateBackendContract"
        },
        "lifecycleGates": {
          "$ref": "#/$defs/iacLifecycleGates"
        },
        "backupAndRetention": {
          "$ref": "#/$defs/iacBackupRetention"
        },
        "outputContract": {
          "$ref": "#/$defs/iacOutputContract"
        }
      }
    },
    "layerResponsibility": {
      "type": "object",
      "additionalProperties": false,
      "required": ["layer", "owns", "mustNotReference"],
      "properties": {
        "layer": {
          "enum": ["domain", "application", "infrastructure", "workflows", "host"]
        },
        "owns": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "string",
            "minLength": 1
          },
          "uniqueItems": true
        },
        "mustNotReference": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/id"
          },
          "uniqueItems": true
        }
      }
    },
    "iacEnvironmentProfile": {
      "type": "object",
      "additionalProperties": false,
      "required": ["environment", "parameterizationRequired", "approvalRequiredForApply", "secretRefsOnly"],
      "properties": {
        "environment": {
          "enum": ["dev", "qa", "prod"]
        },
        "parameterizationRequired": {
          "const": true
        },
        "approvalRequiredForApply": {
          "type": "boolean"
        },
        "secretRefsOnly": {
          "const": true
        }
      }
    },
    "iacToolProfile": {
      "type": "object",
      "additionalProperties": false,
      "required": ["provider", "tools"],
      "properties": {
        "provider": {
          "enum": ["azure", "aws", "gcp", "kubernetes", "custom"]
        },
        "tools": {
          "type": "array",
          "minItems": 1,
          "items": {
            "enum": ["terraform", "opentofu", "bicep", "pulumi", "cloud-native", "custom"]
          },
          "uniqueItems": true
        }
      }
    },
    "iacStateBackendContract": {
      "type": "object",
      "additionalProperties": false,
      "required": ["requiredForManagedEnvironments", "lockingRequired", "encryptionRequired", "driftBaselineRequired"],
      "properties": {
        "requiredForManagedEnvironments": {
          "const": true
        },
        "lockingRequired": {
          "const": true
        },
        "encryptionRequired": {
          "const": true
        },
        "driftBaselineRequired": {
          "const": true
        }
      }
    },
    "iacLifecycleGates": {
      "type": "object",
      "additionalProperties": false,
      "required": ["planBeforeApply", "driftBeforeApply", "approvalForProdApply", "approvalForDestroy", "destructiveGateForDestroy"],
      "properties": {
        "planBeforeApply": {
          "const": true
        },
        "driftBeforeApply": {
          "const": true
        },
        "approvalForProdApply": {
          "const": true
        },
        "approvalForDestroy": {
          "const": true
        },
        "destructiveGateForDestroy": {
          "const": true
        }
      }
    },
    "iacBackupRetention": {
      "type": "object",
      "additionalProperties": false,
      "required": ["statefulResourcesRequireBackup", "retentionDecisionRequired", "destroyRequiresBackupOrWaiver"],
      "properties": {
        "statefulResourcesRequireBackup": {
          "const": true
        },
        "retentionDecisionRequired": {
          "const": true
        },
        "destroyRequiresBackupOrWaiver": {
          "const": true
        }
      }
    },
    "iacOutputContract": {
      "type": "object",
      "additionalProperties": false,
      "required": ["resourceSourceMapsRequired", "planOutputRequired", "applyOutputRequired", "evidenceRequired"],
      "properties": {
        "resourceSourceMapsRequired": {
          "const": true
        },
        "planOutputRequired": {
          "const": true
        },
        "applyOutputRequired": {
          "const": true
        },
        "evidenceRequired": {
          "const": true
        }
      }
    },
    "cicdContract": {
      "type": "object",
      "additionalProperties": false,
      "required": ["stageGraph", "providerProfiles", "artifactPolicy", "environmentGates", "outputContract"],
      "properties": {
        "stageGraph": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "explicitStagesRequired",
            "dependencyGraphRequired",
            "buildTestPackageBeforeDeploy",
            "providerJobMappingRequired"
          ],
          "properties": {
            "explicitStagesRequired": {
              "const": true
            },
            "dependencyGraphRequired": {
              "const": true
            },
            "buildTestPackageBeforeDeploy": {
              "const": true
            },
            "providerJobMappingRequired": {
              "const": true
            }
          }
        },
        "providerProfiles": {
          "type": "array",
          "minItems": 2,
          "items": {
            "$ref": "#/$defs/cicdProviderProfile"
          },
          "allOf": [
            { "contains": { "properties": { "provider": { "const": "github-actions" } }, "required": ["provider"] } },
            { "contains": { "properties": { "provider": { "const": "azure-devops" } }, "required": ["provider"] } }
          ]
        },
        "artifactPolicy": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "packageBeforeDeploy",
            "publishBeforeQaProd",
            "immutableArtifactsRequired",
            "checksumRequired",
            "promotionUsesPublishedArtifacts"
          ],
          "properties": {
            "packageBeforeDeploy": {
              "const": true
            },
            "publishBeforeQaProd": {
              "const": true
            },
            "immutableArtifactsRequired": {
              "const": true
            },
            "checksumRequired": {
              "const": true
            },
            "promotionUsesPublishedArtifacts": {
              "const": true
            }
          }
        },
        "environmentGates": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "prodApprovalRequired",
            "prodPromotionApprovalRequired",
            "qaProdImmutableArtifactRequired",
            "healthCheckAfterProdDeploy",
            "rollbackRequiredForCritical",
            "secretRefsOnly"
          ],
          "properties": {
            "prodApprovalRequired": {
              "const": true
            },
            "prodPromotionApprovalRequired": {
              "const": true
            },
            "qaProdImmutableArtifactRequired": {
              "const": true
            },
            "healthCheckAfterProdDeploy": {
              "const": true
            },
            "rollbackRequiredForCritical": {
              "const": true
            },
            "secretRefsOnly": {
              "const": true
            }
          }
        },
        "outputContract": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "stageSourceMapsRequired",
            "evidenceRequired",
            "sourceAuditRequired",
            "providerSyntaxValidationRequired"
          ],
          "properties": {
            "stageSourceMapsRequired": {
              "const": true
            },
            "evidenceRequired": {
              "const": true
            },
            "sourceAuditRequired": {
              "const": true
            },
            "providerSyntaxValidationRequired": {
              "const": true
            }
          }
        }
      }
    },
    "cicdProviderProfile": {
      "type": "object",
      "additionalProperties": false,
      "required": ["provider", "workflowPathPattern", "supportedStageTypes", "secretRefsOnly"],
      "properties": {
        "provider": {
          "enum": ["github-actions", "azure-devops", "custom"]
        },
        "workflowPathPattern": {
          "type": "string",
          "minLength": 1
        },
        "supportedStageTypes": {
          "type": "array",
          "minItems": 10,
          "items": {
            "enum": ["restore", "build", "test", "security-scan", "package", "publish-artifact", "deploy", "health-check", "promote", "rollback"]
          },
          "uniqueItems": true
        },
        "secretRefsOnly": {
          "const": true
        }
      }
    },
    "testContract": {
      "type": "object",
      "additionalProperties": false,
      "required": ["taxonomy", "dddLayerRules", "contractRules", "impactedSelection", "outputContract"],
      "properties": {
        "taxonomy": {
          "type": "object",
          "additionalProperties": false,
          "required": ["categories", "riskBasedCoverageRequired", "workflowNodeAndRegressionDistinct"],
          "properties": {
            "categories": {
              "type": "array",
              "minItems": 10,
              "items": {
                "enum": [
                  "unit",
                  "application",
                  "contract",
                  "integration",
                  "e2e",
                  "architecture",
                  "workflow-node",
                  "workflow-regression",
                  "security",
                  "static-analysis",
                  "performance-load"
                ]
              },
              "uniqueItems": true
            },
            "riskBasedCoverageRequired": {
              "const": true
            },
            "workflowNodeAndRegressionDistinct": {
              "const": true
            }
          }
        },
        "dddLayerRules": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "domainTestsRequired",
            "applicationTestsBuilderXFree",
            "infrastructureAdapterTestsRequired",
            "workflowNodeOperationTestsRequired",
            "workflowRegressionRequiredForCritical",
            "architectureTestsRequired",
            "hostTestsSmokeOnly"
          ],
          "properties": {
            "domainTestsRequired": {
              "const": true
            },
            "applicationTestsBuilderXFree": {
              "const": true
            },
            "infrastructureAdapterTestsRequired": {
              "const": true
            },
            "workflowNodeOperationTestsRequired": {
              "const": true
            },
            "workflowRegressionRequiredForCritical": {
              "const": true
            },
            "architectureTestsRequired": {
              "const": true
            },
            "hostTestsSmokeOnly": {
              "const": true
            }
          }
        },
        "contractRules": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "publicApisRequireContractTests",
            "eventsRequireContractTests",
            "componentsRequireContractTests",
            "packagesRequireContractTests",
            "workflowOutputsRequireContractTests"
          ],
          "properties": {
            "publicApisRequireContractTests": {
              "const": true
            },
            "eventsRequireContractTests": {
              "const": true
            },
            "componentsRequireContractTests": {
              "const": true
            },
            "packagesRequireContractTests": {
              "const": true
            },
            "workflowOutputsRequireContractTests": {
              "const": true
            }
          }
        },
        "impactedSelection": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "sourceMapsRequired",
            "dependencyGraphRequired",
            "componentVersionsRequired",
            "riskRulesRequired",
            "deterministicSelectionRequired"
          ],
          "properties": {
            "sourceMapsRequired": {
              "const": true
            },
            "dependencyGraphRequired": {
              "const": true
            },
            "componentVersionsRequired": {
              "const": true
            },
            "riskRulesRequired": {
              "const": true
            },
            "deterministicSelectionRequired": {
              "const": true
            }
          }
        },
        "outputContract": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "testSourceMapsRequired",
            "testEvidenceRequired",
            "regressionEvidenceRequired",
            "recipeRefRequired"
          ],
          "properties": {
            "testSourceMapsRequired": {
              "const": true
            },
            "testEvidenceRequired": {
              "const": true
            },
            "regressionEvidenceRequired": {
              "const": true
            },
            "recipeRefRequired": {
              "const": true
            }
          }
        }
      }
    },
    "requiredApplicationLayout": {
      "type": "object",
      "additionalProperties": false,
      "required": ["solutionFiles", "sourceProjects", "testProjects", "builderxPaths", "docsPaths", "artifactPaths"],
      "properties": {
        "solutionFiles": {
          "$ref": "#/$defs/stringList"
        },
        "sourceProjects": {
          "$ref": "#/$defs/stringList"
        },
        "testProjects": {
          "$ref": "#/$defs/stringList"
        },
        "builderxPaths": {
          "$ref": "#/$defs/stringList"
        },
        "docsPaths": {
          "$ref": "#/$defs/stringList"
        },
        "artifactPaths": {
          "$ref": "#/$defs/stringList"
        }
      }
    },
    "packageOwnership": {
      "type": "object",
      "additionalProperties": false,
      "required": ["layer", "allowedFamilies", "forbiddenFamilies"],
      "properties": {
        "layer": {
          "enum": ["domain", "application", "infrastructure", "workflows", "host", "test"]
        },
        "allowedFamilies": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/id"
          },
          "uniqueItems": true
        },
        "forbiddenFamilies": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/id"
          },
          "uniqueItems": true
        }
      }
    },
    "workflowNodeTranslation": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "chain",
        "nodeOperationsPathPattern",
        "applicationOperationPathPattern",
        "mustUseApplicationOperation",
        "mustNotCallInfrastructureDirectly",
        "sourceMapRequired"
      ],
      "properties": {
        "chain": {
          "type": "array",
          "minItems": 5,
          "items": {
            "enum": ["workflow-node", "workflow-node-operation", "application-operation", "domain-policy-model", "infrastructure-through-ports"]
          },
          "uniqueItems": true
        },
        "nodeOperationsPathPattern": {
          "type": "string",
          "minLength": 1
        },
        "applicationOperationPathPattern": {
          "type": "string",
          "minLength": 1
        },
        "mustUseApplicationOperation": {
          "const": true
        },
        "mustNotCallInfrastructureDirectly": {
          "const": true
        },
        "sourceMapRequired": {
          "const": true
        }
      }
    },
    "agentFallback": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "allowedModes",
        "builderxValidationRequired",
        "protectedZonesRequired",
        "sourceMapsRequired",
        "testsRequired",
        "missingCriticalBehavior"
      ],
      "properties": {
        "allowedModes": {
          "type": "array",
          "minItems": 1,
          "items": {
            "enum": ["agent-codegen-governed", "hybrid"]
          },
          "uniqueItems": true
        },
        "builderxValidationRequired": {
          "const": true
        },
        "protectedZonesRequired": {
          "const": true
        },
        "sourceMapsRequired": {
          "const": true
        },
        "testsRequired": {
          "const": true
        },
        "missingCriticalBehavior": {
          "const": "block"
        }
      }
    },
    "delegation": {
      "type": "object",
      "additionalProperties": false,
      "required": ["domain", "targetRef", "required"],
      "properties": {
        "domain": {
          "enum": ["iac", "cicd", "test", "component-pack", "source-map", "evidence"]
        },
        "targetRef": {
          "type": "string",
          "pattern": "^[a-z0-9][a-z0-9./-]{2,127}$"
        },
        "required": {
          "type": "boolean"
        }
      }
    },
    "stringList": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string",
        "minLength": 1
      },
      "uniqueItems": true
    }
  }
}
