{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$ref": "#/definitions/SetupAgentsInitResult",
  "definitions": {
    "SetupAgentsInitResult": {
      "type": "object",
      "properties": {
        "configFile": {
          "type": "string"
        },
        "config": {
          "$ref": "#/definitions/SetupAgentsWorkspaceConfig"
        },
        "written": {
          "type": "boolean"
        },
        "cwd": {
          "type": "string"
        }
      },
      "required": ["configFile", "config", "written", "cwd"],
      "additionalProperties": false
    },
    "SetupAgentsWorkspaceConfig": {
      "type": "object",
      "properties": {
        "version": {
          "type": "string"
        },
        "mode": {
          "$ref": "#/definitions/SetupAgentsWorkspaceMode"
        },
        "profiles": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ProfileId"
          }
        },
        "tools": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SupportedTool"
          }
        },
        "orchestration": {
          "$ref": "#/definitions/SetupAgentsOrchestrationConfig"
        },
        "notifications": {
          "$ref": "#/definitions/SetupAgentsNotificationsConfig"
        },
        "releaseCheck": {
          "$ref": "#/definitions/SetupAgentsReleaseCheckConfig"
        },
        "remote": {
          "type": "object",
          "properties": {
            "gistId": {
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        "ruleOverrides": {
          "type": "object",
          "properties": {
            "developer": {
              "$ref": "#/definitions/RuleOverride"
            },
            "architect": {
              "$ref": "#/definitions/RuleOverride"
            },
            "sa": {
              "$ref": "#/definitions/RuleOverride"
            },
            "pm": {
              "$ref": "#/definitions/RuleOverride"
            },
            "mulesoft": {
              "$ref": "#/definitions/RuleOverride"
            },
            "ux": {
              "$ref": "#/definitions/RuleOverride"
            },
            "cgcloud": {
              "$ref": "#/definitions/RuleOverride"
            },
            "qa": {
              "$ref": "#/definitions/RuleOverride"
            },
            "crma": {
              "$ref": "#/definitions/RuleOverride"
            },
            "commerce": {
              "$ref": "#/definitions/RuleOverride"
            },
            "data360": {
              "$ref": "#/definitions/RuleOverride"
            },
            "sfmc": {
              "$ref": "#/definitions/RuleOverride"
            },
            "salescloud": {
              "$ref": "#/definitions/RuleOverride"
            },
            "service": {
              "$ref": "#/definitions/RuleOverride"
            },
            "cpq": {
              "$ref": "#/definitions/RuleOverride"
            },
            "omnistudio": {
              "$ref": "#/definitions/RuleOverride"
            },
            "fsl": {
              "$ref": "#/definitions/RuleOverride"
            },
            "ai": {
              "$ref": "#/definitions/RuleOverride"
            },
            "slack": {
              "$ref": "#/definitions/RuleOverride"
            },
            "tableau": {
              "$ref": "#/definitions/RuleOverride"
            },
            "experience-cloud": {
              "$ref": "#/definitions/RuleOverride"
            },
            "release-manager": {
              "$ref": "#/definitions/RuleOverride"
            },
            "fsc": {
              "$ref": "#/definitions/RuleOverride"
            },
            "health": {
              "$ref": "#/definitions/RuleOverride"
            },
            "manufacturing": {
              "$ref": "#/definitions/RuleOverride"
            },
            "communications": {
              "$ref": "#/definitions/RuleOverride"
            },
            "automotive": {
              "$ref": "#/definitions/RuleOverride"
            },
            "education": {
              "$ref": "#/definitions/RuleOverride"
            },
            "netzero": {
              "$ref": "#/definitions/RuleOverride"
            },
            "nonprofit": {
              "$ref": "#/definitions/RuleOverride"
            },
            "public-sector": {
              "$ref": "#/definitions/RuleOverride"
            },
            "media": {
              "$ref": "#/definitions/RuleOverride"
            },
            "energy": {
              "$ref": "#/definitions/RuleOverride"
            },
            "revenue": {
              "$ref": "#/definitions/RuleOverride"
            },
            "maps": {
              "$ref": "#/definitions/RuleOverride"
            },
            "loyalty": {
              "$ref": "#/definitions/RuleOverride"
            },
            "industries": {
              "$ref": "#/definitions/RuleOverride"
            }
          },
          "additionalProperties": false,
          "description": "Per-profile overrides for Cursor scope and Claude import behavior."
        },
        "qualityContracts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/QualityContract"
          }
        },
        "budgetEnvelopes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/PhaseBudgetEnvelope"
          }
        },
        "domains": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/DomainId"
          }
        },
        "evidenceGate": {
          "$ref": "#/definitions/SetupAgentsEvidenceGateMode",
          "description": "How the engine treats generic/insufficient recorded evidence at gated phase transitions (ba→architect, document-review→release). `block` rejects the transition, `warn` emits to stderr but proceeds, `off` disables the check. Project mode defaults to `block`; advisory mode defaults to `warn`. Persisted values remain explicit."
        },
        "gateSubstance": {
          "$ref": "#/definitions/SetupAgentsEvidenceGateMode",
          "description": "How the engine treats a gated handoff whose *substance* is missing — no acceptance criteria (or a generic `none`), acceptance criteria without any mapped evidence, or (for a human-reviewed gate) no recorded review (GH-599). `block` rejects the transition, `warn` emits to stderr but proceeds, `off` disables the check. Project mode defaults to `block`; advisory mode defaults to `warn`. Older project configs therefore migrate fail-closed instead of silently retaining release-ready behavior."
        },
        "gatePolicy": {
          "$ref": "#/definitions/SetupAgentsGatePolicyConfig",
          "description": "Autonomous gate-approval policy (GH-528). Default: disabled (every gate pauses)."
        },
        "contextPreProcessor": {
          "$ref": "#/definitions/PreProcessorConfig",
          "description": "Context pre-processor configuration for reducing large files in delegation packets."
        },
        "fscWhiteLabel": {
          "$ref": "#/definitions/FscWhiteLabelCountry",
          "description": "Which FSC white-label country pack to load. Only meaningful when the `fsc` profile is active. When absent, the `fsc` profile emits its country-neutral output (existing behavior). Exactly one country per workspace."
        },
        "artifactProtection": {
          "$ref": "#/definitions/ArtifactProtectionConfig",
          "description": "Local generated-artifact persistence policy (GH-670)."
        }
      },
      "required": ["version", "mode", "profiles", "tools", "orchestration"],
      "additionalProperties": false
    },
    "SetupAgentsWorkspaceMode": {
      "type": "string",
      "enum": ["project", "advisory"]
    },
    "ProfileId": {
      "type": "string",
      "enum": [
        "developer",
        "architect",
        "sa",
        "pm",
        "mulesoft",
        "ux",
        "cgcloud",
        "qa",
        "crma",
        "commerce",
        "data360",
        "sfmc",
        "salescloud",
        "service",
        "cpq",
        "omnistudio",
        "fsl",
        "ai",
        "slack",
        "tableau",
        "experience-cloud",
        "release-manager",
        "fsc",
        "health",
        "manufacturing",
        "communications",
        "automotive",
        "education",
        "netzero",
        "nonprofit",
        "public-sector",
        "media",
        "energy",
        "revenue",
        "maps",
        "loyalty",
        "industries"
      ]
    },
    "SupportedTool": {
      "type": "string",
      "enum": ["cursor", "vscode", "codex", "claude", "agentforce", "windsurf", "jetbrains", "opencode"]
    },
    "SetupAgentsOrchestrationConfig": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "engine": {
          "type": "string",
          "const": "native"
        },
        "mode": {
          "$ref": "#/definitions/SetupAgentsWorkspaceMode"
        },
        "profiles": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ProfileId"
          }
        }
      },
      "required": ["enabled", "engine", "mode", "profiles"],
      "additionalProperties": false
    },
    "SetupAgentsNotificationsConfig": {
      "type": "object",
      "properties": {
        "slack": {
          "type": "object",
          "properties": {
            "webhookEnvVar": {
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        "github": {
          "type": "object",
          "properties": {
            "issueComment": {
              "type": "boolean"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "SetupAgentsReleaseCheckConfig": {
      "type": "object",
      "properties": {
        "checks": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": ["npm-audit", "knip", "coverage", "secret-scan"]
          }
        }
      },
      "additionalProperties": false
    },
    "RuleOverride": {
      "type": "object",
      "properties": {
        "scope": {
          "type": "string",
          "enum": ["always", "auto-attach", "description"]
        },
        "globs": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "claudeAlwaysImport": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "QualityContract": {
      "type": "object",
      "properties": {
        "role": {
          "type": "string"
        },
        "requiredChecks": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "mode": {
          "$ref": "#/definitions/QualityContractMode"
        },
        "requiredFields": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/PhaseRequiredField"
          }
        },
        "domainEscalation": {
          "$ref": "#/definitions/DomainEscalation"
        }
      },
      "required": ["role", "requiredChecks", "mode"],
      "additionalProperties": false
    },
    "QualityContractMode": {
      "type": "string",
      "enum": ["block", "escalate", "warn", "advisory"]
    },
    "PhaseRequiredField": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
      },
      "required": ["field", "description"],
      "additionalProperties": false
    },
    "DomainEscalation": {
      "type": "object",
      "properties": {
        "domains": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/DomainId"
          }
        },
        "additionalChecks": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "escalationLevel": {
          "type": "string",
          "enum": ["info", "warning", "critical"]
        }
      },
      "required": ["domains", "additionalChecks", "escalationLevel"],
      "additionalProperties": false
    },
    "DomainId": {
      "type": "string",
      "enum": ["healthcare", "financial_services", "government", "defense", "education", "retail"]
    },
    "PhaseBudgetEnvelope": {
      "type": "object",
      "properties": {
        "phase": {
          "$ref": "#/definitions/WorkflowPhase"
        },
        "maxTokens": {
          "type": "number"
        },
        "maxCostCents": {
          "type": "number"
        },
        "maxRetries": {
          "type": "number"
        },
        "maxMinutes": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "WorkflowPhase": {
      "type": "string",
      "enum": ["pm", "ba", "architect", "ux", "developer", "security-review", "qa", "document-review", "release"]
    },
    "SetupAgentsEvidenceGateMode": {
      "type": "string",
      "enum": ["block", "warn", "off"],
      "description": "Enforcement mode for the recorded-evidence quality gate (GH-525)."
    },
    "SetupAgentsGatePolicyConfig": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "Master switch. When false/absent every gate pauses for a human (current default)."
        },
        "autoApproveTransitions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Transition keys (e.g. `document-review→release`) eligible for auto-approval. A transition not listed here always pauses, even when `enabled`. Empty/absent ⇒ none auto-approve."
        }
      },
      "additionalProperties": false,
      "description": "Policy that lets the engine auto-approve explicitly low-risk gated transitions instead of pausing for a human (GH-528). Conservative by design: disabled unless `enabled` is true, and only the listed transitions can ever auto-approve."
    },
    "PreProcessorConfig": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "maxLinesPerFile": {
          "type": "number"
        },
        "maxTotalContextLines": {
          "type": "number"
        },
        "strategies": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": ["schema-extract", "section-extract", "truncate"]
          }
        },
        "headLines": {
          "type": "number"
        },
        "tailLines": {
          "type": "number"
        }
      },
      "required": ["enabled", "maxLinesPerFile", "maxTotalContextLines", "strategies", "headLines", "tailLines"],
      "additionalProperties": false
    },
    "FscWhiteLabelCountry": {
      "type": "string",
      "enum": ["mx", "co", "br"],
      "description": "FSC white-label country packs (Mexico, Colombia, Brazil)."
    },
    "ArtifactProtectionConfig": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "Persisted project intent. Mandatory protection cannot be disabled by editing this value."
        },
        "policyVersion": {
          "type": "number",
          "description": "Allows deterministic migrations when the protected artifact inventory changes."
        },
        "repositoryMode": {
          "type": "string",
          "enum": ["customer-repository", "salesforce-owned"],
          "description": "Last observed mode. This value is not authoritative repository-ownership evidence."
        },
        "classificationSource": {
          "type": "string",
          "enum": ["default", "signed-policy"],
          "description": "Only a verified signed policy may establish Salesforce-owned mode."
        }
      },
      "required": ["enabled", "policyVersion", "repositoryMode", "classificationSource"],
      "additionalProperties": false
    }
  }
}
