Raw schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"description": "Human-readable name for the simulation"
},
"appWeight": {
"type": "string",
"enum": [
"lean",
"typical",
"heavy"
],
"description": "Immutable root-level workload weight; defaults to typical with appWeightDefaulted=true. Lean is measured only for the eligible owned graph; heavy is an unsupported assumption. predictionEvidence reports per-quantity provenance and assumption ranges, not confidence intervals."
},
"description": {
"type": "string",
"maxLength": 500,
"description": "Optional description of the simulation's purpose"
},
"scenarioId": {
"type": "string",
"minLength": 1,
"description": "Live scenario identifier from scenario.list; mutually exclusive with resources and connections"
},
"scenarioOverrides": {
"anyOf": [
{
"type": "object",
"properties": {
"eksSpotInterruption": {
"type": "object",
"properties": {
"startupSeconds": {
"type": "integer",
"minimum": 0,
"maximum": 3600
}
},
"required": [
"startupSeconds"
],
"additionalProperties": false
}
},
"required": [
"eksSpotInterruption"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"webAutoscaling": {
"type": "object",
"properties": {
"includeTrafficRecovery": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false
}
},
"required": [
"webAutoscaling"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"redisCacheCrashRecovery": {
"type": "object",
"properties": {
"cacheableRequestShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Fraction of offered requests sent to Redis (0β1; the scenario default is 0.8)."
},
"cacheHitRate": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Configured hit rate among requests sent to Redis (0β1; the scenario default is 0.8)."
}
},
"required": [
"cacheableRequestShare",
"cacheHitRate"
],
"additionalProperties": false
}
},
"required": [
"redisCacheCrashRecovery"
],
"additionalProperties": false
}
],
"description": "Scenario-only customization; requires scenarioId and exactly one supported override. Redis cache assumptions affect only this simulation."
},
"resources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Unique identifier for this resource within the simulation"
},
"type": {
"type": "string",
"enum": [
"compute",
"database",
"storage",
"network",
"cache",
"queue",
"kubernetes"
],
"description": "Resource category"
},
"name": {
"type": "string",
"description": "Display name for the resource"
},
"minAcu": {
"description": "Not accepted at resource level; use characteristics.minAcu for the exact AWS Aurora Serverless v2 db.serverless shape."
},
"maxAcu": {
"description": "Not accepted at resource level; use characteristics.maxAcu for the exact AWS Aurora Serverless v2 db.serverless shape."
},
"provider": {
"type": "string",
"enum": [
"aws",
"gcp",
"azure",
"oci",
"digitalocean"
],
"default": "aws",
"description": "Cloud provider hosting this resource"
},
"location": {
"type": "object",
"properties": {
"regionKey": {
"type": "string"
},
"zoneKey": {
"type": "string"
},
"localityType": {
"type": "string",
"enum": [
"az",
"zone",
"availability_domain",
"fault_domain"
]
},
"providerLabel": {
"type": "string"
},
"faultDomainKey": {
"type": "string"
}
},
"required": [
"regionKey"
],
"additionalProperties": false,
"description": "Resource region; set location.regionKey:'us-east-2' on each owned typical node (normalized to use2)."
},
"recoveryPolicy": {
"type": "object",
"properties": {
"criticalCpuThreshold": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"criticalSteps": {
"type": "integer",
"minimum": 1
},
"warningCpuThreshold": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"warningSteps": {
"type": "integer",
"minimum": 1
},
"failureParkSteps": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false,
"description": "Optional recovery thresholds and cooldown lengths for this resource"
},
"characteristics": {
"type": "object",
"properties": {
"size": {
"type": "string",
"description": "Instance or SKU size (e.g. 't3.medium', 'db.r5.large')"
},
"workload": {
"type": "string",
"enum": [
"crud",
"crud-typical"
],
"description": "Explicit 'crud-typical' on each owned typical app; 'crud' selects lean identity on the exact lean graph."
},
"appRuntime": {
"type": "string",
"description": "Owned typical app runtime: node."
},
"appWorkerCount": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Owned typical: 2 workers on each app."
},
"appDbPoolSize": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Owned typical: pool size 250 on each app."
},
"workloadDatabaseEngine": {
"type": "string",
"enum": [
"mysql"
],
"description": "MySQL workload identity on the db.r5.large database."
},
"workloadDatabaseVersion": {
"type": "string",
"description": "Owned typical MySQL workload version: 8.0."
},
"loadBalancerScheme": {
"type": "string",
"enum": [
"internal",
"internet-facing"
],
"description": "Owned typical ALB scheme: internal."
},
"ocpus": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 126,
"description": "OCI flexible compute shape capacity. Family-specific limits are validated against the provider shape; VM.Standard.E4.Flex accepts 1β64 OCPUs and 1 OCPU = 2 vCPUs. Not a performance or price claim."
},
"capacityRps": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Compute only: literal per-node RPS ceiling at which CPU reaches ~95%. Kubernetes rejects capacityRps; use maxThroughput for its total cluster ceiling."
},
"maxThroughput": {
"type": "number",
"description": "Kubernetes: total cluster RPS ceiling; compute: legacy internal throughput scaling parameter (prefer capacityRps for compute)."
},
"maxConnections": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000000,
"description": "Fixed concurrent DB connection budget; Aurora Serverless defaults from maximum configured ACU."
},
"cdnTraffic": {
"type": "object",
"properties": {
"cacheableFraction": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"cacheableMissDatabaseFraction": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"dynamicDatabaseFraction": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"cacheableFraction",
"cacheableMissDatabaseFraction",
"dynamicDatabaseFraction"
],
"additionalProperties": false,
"description": "Assumed CDN cacheable/dynamic request mix and DB-query fractions. cacheHitRate applies only to the cacheable share. Read simulation.step metrics.cdnFlow for the modeled edge, origin and database flow."
},
"cacheHitRate": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"sessionAffinity": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"const": "sticky"
},
"fleetId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"initialSessions": {
"type": "number",
"minimum": 0,
"default": 100
},
"arrivalsPerStep": {
"type": "number",
"minimum": 0,
"default": 0
},
"meanLifetimeSteps": {
"type": "number",
"minimum": 1,
"default": 300
},
"requestsPerSessionPerSecond": {
"type": "number",
"exclusiveMinimum": 0,
"default": 1
},
"maxSessionsPerOwner": {
"type": "number",
"exclusiveMinimum": 0,
"default": 1000
},
"reconnect": {
"type": "string",
"enum": [
"none",
"next-step"
],
"default": "none"
},
"workload": {
"type": "object",
"properties": {
"replicas": {
"type": "integer",
"minimum": 1,
"maximum": 10000
},
"minReplicas": {
"type": "integer",
"minimum": 1,
"maximum": 10000
},
"maxReplicas": {
"type": "integer",
"minimum": 1,
"maximum": 10000
},
"targetCpuPercent": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 70
},
"capacityRpsPerReplica": {
"type": "number",
"exclusiveMinimum": 0
},
"autoscaling": {
"type": "boolean",
"default": true
}
},
"required": [
"replicas",
"minReplicas",
"maxReplicas",
"capacityRpsPerReplica"
],
"additionalProperties": false
}
},
"required": [
"mode",
"fleetId"
],
"additionalProperties": false,
"description": "Opt-in modeled sticky owners for generic compute; Kubernetes requires explicit workload replicas independent of nodes. Use identical fleetId/config on compute peers. Existing sessions do not migrate on scale-out; owner loss disconnects them. reconnect:'next-step' explicitly enables rebinding; default none. Session arrivals/lifetime are assumptions, not measured OpenShell data. Read full step metrics.sessionAffinity for per-owner load, rejects and disconnects."
},
"connectionDemand": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"load-derived",
"declared",
"max"
],
"description": "load-derived keeps the legacy traffic estimate; declared uses only the plan-time declaredConnections/idlePoolFloor; max uses the greatest of load-derived and declared/floor demand."
},
"declaredConnections": {
"type": "integer",
"minimum": 0,
"maximum": 1000000,
"description": "ASSUMPTION / plan-time peak pool budget (for example, replicas Γ per-pod pool size), not an observed live connection count."
},
"idlePoolFloor": {
"type": "integer",
"minimum": 0,
"maximum": 1000000,
"description": "ASSUMPTION / plan-time minimum idle pool footprint, not an observed live connection count."
}
},
"required": [
"mode"
],
"additionalProperties": false,
"description": "Database only. Omit to preserve legacy load-derived connection use. `declared` and `max` require declaredConnections and/or idlePoolFloor. Demand above usable maxConnections adds a bounded rule-based pool-saturation error signal, not a provider-calibrated rate."
},
"multiAz": {
"type": "boolean",
"description": "AWS Aurora Serverless v2: true with instanceCount:2 creates a billable reader in a second AZ."
},
"instanceCount": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Generic fixed compute: represented VM count (integer 1β100); capacity aggregates and CPU is per VM. Cannot combine with autoscaling:true, minInstances, or maxInstances. AWS Aurora Serverless v2 remains 1 with multiAz:false or 2 with multiAz:true."
},
"minCapacity": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Aurora Serverless minimum ACU (flat form; nested config wins)."
},
"maxCapacity": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Aurora Serverless maximum ACU (flat form; nested config wins)."
},
"minAcu": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Flat minimum ACU alias only for AWS Aurora Serverless v2 size db.serverless; conflicts with minCapacity are rejected."
},
"maxAcu": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Flat maximum ACU alias only for AWS Aurora Serverless v2 size db.serverless; conflicts with maxCapacity are rejected."
},
"config": {
"type": "object",
"properties": {
"minCapacity": {
"type": "number",
"exclusiveMinimum": 0
},
"maxCapacity": {
"type": "number",
"exclusiveMinimum": 0
}
},
"additionalProperties": true,
"description": "Aurora Serverless ACU bounds. Nested config uses minCapacity/maxCapacity; flat characteristics.minAcu/maxAcu aliases are accepted only on the exact AWS Aurora Serverless v2 db.serverless shape."
},
"autoscaling": {
"type": "boolean",
"description": "Mark this compute resource as the autoscaling primary target"
},
"billingState": {
"type": "string",
"enum": [
"active",
"idle",
"stopped",
"detached",
"deleted"
],
"description": "Billing state: 'stopped' bills storage only, 'idle'/'detached' bill flat idle rates, 'deleted' bills nothing. Default 'active'."
},
"serviceFamily": {
"type": "string",
"description": "Idle-billed service family (e.g. 'nat-gateway', 'vpc-endpoint', 'eip-detached', 'ebs-snapshot') β determines the flat idle rate"
},
"capacityGB": {
"type": "number",
"description": "Storage capacity in GB β drives per-GB snapshot/backup idle cost and stopped-instance storage cost"
},
"scaleOutCpuThreshold": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Compute or Kubernetes only β overrides the simulation-wide CPU HPA scale-out target (see the top-level autoscalingTargetCpu) for THIS resource's scale decisions only; every other resource keeps the simulation-wide default."
},
"scaleInCpuThreshold": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Compute or Kubernetes only β overrides the simulation-wide CPU HPA scale-in target for THIS resource's scale decisions only; every other resource keeps the simulation-wide default."
},
"kubernetesCpuHpa": {
"type": "object",
"properties": {
"cpuRequestMilliCores": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000
},
"cpuRequestEvidence": {
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": [
"calibrated",
"external"
]
},
"reference": {
"type": "string",
"minLength": 1,
"maxLength": 512
}
},
"required": [
"source",
"reference"
],
"additionalProperties": false
},
"cpuDemandMilliCoresPerRps": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000
},
"cpuDemandEvidence": {
"$ref": "#/properties/resources/items/properties/characteristics/properties/kubernetesCpuHpa/properties/cpuRequestEvidence"
},
"cpuDemandCalibration": {
"type": "object",
"properties": {
"method": {
"type": "string",
"const": "least-squares-through-origin"
},
"reviewed": {
"type": "boolean",
"const": true
},
"measurements": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rps": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000
},
"cpuMilliCores": {
"type": "number",
"minimum": 0,
"maximum": 1000000000
}
},
"required": [
"rps",
"cpuMilliCores"
],
"additionalProperties": false
},
"minItems": 2,
"maxItems": 100
}
},
"required": [
"method",
"reviewed",
"measurements"
],
"additionalProperties": false
},
"targets": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "Utilization"
},
"targetPercent": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000
}
},
"required": [
"type",
"targetPercent"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "AverageValue"
},
"targetMilliCores": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000
}
},
"required": [
"type",
"targetMilliCores"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 2
},
"replicas": {
"type": "integer",
"minimum": 1,
"maximum": 10000
},
"minReplicas": {
"type": "integer",
"minimum": 1,
"maximum": 10000
},
"maxReplicas": {
"type": "integer",
"minimum": 1,
"maximum": 10000
},
"scaleDownStabilizationSteps": {
"type": "integer",
"minimum": 1,
"maximum": 10000
}
},
"required": [
"cpuDemandMilliCoresPerRps",
"targets",
"replicas",
"minReplicas",
"maxReplicas"
],
"additionalProperties": false,
"description": "Opt-in bounded workload-pod replica model, separate from node-pool scaling. Declare CPU demand in millicores/RPS and targets (Utilization requires an explicit CPU request). A reviewed cpuDemandCalibration may include 2β100 offered-RPS/aggregate-mCPU points and must match the explicit demand value; cite its source and reference in cpuDemandEvidence. Unannotated request/demand inputs are ASSUMED; no HPA controller parity is claimed."
}
},
"additionalProperties": true,
"description": "Capacity and sizing characteristics for the resource (extra keys such as costMultiplier pass through unchanged)"
}
},
"required": [
"id",
"type",
"name"
],
"additionalProperties": false
},
"description": "List of cloud resources composing this simulation. For a built-in scenario, pass the hydrated resources from scenario.get; scenario.list cards are graph-free. (max 10 in demo mode; mutually exclusive with scenarioId)"
},
"connections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"sourceId": {
"type": "string",
"description": "ID of the source (upstream) resource"
},
"targetId": {
"type": "string",
"description": "ID of the target (downstream) resource"
},
"label": {
"type": "string",
"description": "Optional label describing the connection type"
}
},
"required": [
"sourceId",
"targetId"
],
"additionalProperties": false
},
"description": "Directed connections between resources. For a built-in scenario, pass the hydrated connections from scenario.get; scenario.list cards are graph-free. Directed edges should describe traffic flow between resources; omit when using scenarioId."
},
"traffic": {
"type": "number",
"default": 0,
"description": "Initial traffic in requests per second (RPS)"
},
"seed": {
"type": "integer",
"minimum": 0,
"description": "Deterministic RNG seed for reproducible replays"
},
"autoscalingConfig": {
"type": "object",
"properties": {
"scaleOutCpuThreshold": {
"type": "number"
},
"scaleInCpuThreshold": {
"type": "number"
},
"scaleOutThroughputThreshold": {
"type": "number"
},
"scaleInThroughputThreshold": {
"type": "number"
},
"scaleOutLatencyThreshold": {
"type": "number"
},
"cooldownSeconds": {
"type": "number"
},
"ecsCpuTargetTracking": {
"type": "boolean"
},
"scaleOutCooldownSeconds": {
"type": "integer",
"minimum": 0,
"maximum": 86400
},
"scaleInCooldownSeconds": {
"type": "integer",
"minimum": 0,
"maximum": 86400
},
"simulationSecondsPerStep": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 60
},
"minInstances": {
"type": "number"
},
"maxInstances": {
"type": "number"
}
},
"required": [
"scaleOutCpuThreshold",
"scaleInCpuThreshold",
"scaleOutThroughputThreshold",
"scaleInThroughputThreshold",
"scaleOutLatencyThreshold",
"cooldownSeconds",
"minInstances",
"maxInstances"
],
"additionalProperties": false,
"description": "Simulation autoscaling thresholds and cooldown. Pass the value from scenario.get when creating from a copied scenario graph."
},
"maxInstances": {
"type": "integer",
"minimum": 1,
"description": "Hard ceiling on the autoscaled compute fleet size, stored as autoscalingConfig.maxInstances. If omitted, the provider default applies (AWS 50, GCP 15, Azure/OCI/DigitalOcean 10) β which may be much larger than your intended fleet size."
},
"minInstances": {
"type": "integer",
"minimum": 1,
"description": "Floor on the autoscaled compute fleet size, stored as autoscalingConfig.minInstances."
},
"autoscalingTargetCpu": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Canonical CPU HPA scale-out target percent. CWM synthesizes unrelated autoscaling defaults."
},
"scaleOutCpuThreshold": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Equivalent alias for autoscalingTargetCpu; if both are sent they must match."
},
"scaleOutCpuPercent": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Grok-compatible alias for the CPU HPA scale-out target; if multiple target names are sent they must match."
},
"autoscaleTargetCpuPercent": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Grok-compatible alias for the CPU HPA scale-out target; if multiple target names are sent they must match."
},
"ecsCpuTargetTracking": {
"type": "boolean",
"description": "Opt into CPU-only ECS Fargate target tracking."
},
"scaleOutCooldownSeconds": {
"type": "integer",
"minimum": 0,
"maximum": 86400,
"description": "ECS CPU target-tracking scale-out cooldown in simulated seconds."
},
"scaleInCooldownSeconds": {
"type": "integer",
"minimum": 0,
"maximum": 86400,
"description": "ECS CPU target-tracking scale-in cooldown in simulated seconds."
},
"simulationSecondsPerStep": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 60,
"description": "Simulated seconds per step for ECS cooldowns (default 1)."
},
"resilienceConfig": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"description": "Master switch for retry/cascade modeling"
},
"version": {
"type": "number",
"const": 1,
"description": "Resilience model version"
},
"dependencies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Unique dependency edge ID"
},
"sourceId": {
"type": "string",
"minLength": 1,
"description": "Upstream resource ID"
},
"targetId": {
"type": "string",
"minLength": 1,
"description": "Downstream resource ID"
},
"requestRatio": {
"type": "number",
"minimum": 0,
"maximum": 20,
"description": "Requests to target per original request"
},
"authRequestsPerAttempt": {
"type": "number",
"minimum": 0,
"maximum": 10,
"description": "Auth/token requests generated per dependency attempt"
},
"authDependencyId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Dependency receiving generated auth/token traffic"
},
"retryPolicy": {
"type": "object",
"properties": {
"maxRetries": {
"type": "integer",
"minimum": 0,
"maximum": 8,
"description": "Maximum retries for this dependency edge (0 disables retries; default 2)."
},
"backoffMs": {
"type": "integer",
"minimum": 0,
"maximum": 60000,
"description": "Initial retry backoff in milliseconds (default 100)."
},
"backoffMultiplier": {
"type": "number",
"minimum": 1,
"maximum": 10,
"description": "Exponential backoff multiplier (default 2)."
},
"jitterRatio": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Fractional backoff jitter from 0 to 1 (default 0.1)."
},
"timeoutMs": {
"type": "integer",
"minimum": 1,
"maximum": 120000,
"description": "Per-attempt client deadline in milliseconds (default 2000); includes queue wait, service, and latency."
},
"retryBudgetRatio": {
"type": "number",
"minimum": 0,
"maximum": 10,
"description": "Retry RPS budget as a multiple of original edge RPS (default 2)."
},
"retryBudgetRps": {
"type": "number",
"minimum": 0,
"maximum": 500000,
"description": "Optional absolute retry RPS cap, also bounded by retryBudgetRatio."
},
"retryActorId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Actor producing retries, such as a gateway or client"
}
},
"additionalProperties": false
},
"protection": {
"type": "object",
"properties": {
"circuitBreaker": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"failureRateThreshold": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"minimumRequests": {
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"openSteps": {
"type": "integer",
"minimum": 1,
"maximum": 120
},
"halfOpenMaxRequests": {
"type": "integer",
"minimum": 1,
"maximum": 10000
}
},
"additionalProperties": false
},
"rateLimitRps": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 500000
},
"loadShedding": {
"type": "boolean"
}
},
"additionalProperties": false
},
"capacity": {
"type": "object",
"properties": {
"maxRps": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 500000
},
"maxConcurrent": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000000
},
"meanServiceTimeMs": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 120000
}
},
"additionalProperties": false
}
},
"required": [
"id",
"sourceId",
"targetId"
],
"additionalProperties": false
},
"maxItems": 64,
"description": "Dependency edges with retry and protection policies"
},
"scheduledFaults": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"type": {
"type": "string",
"enum": [
"capacity_limit",
"concurrency_limit",
"latency",
"error_rate",
"traffic_surge"
],
"description": "Fault type; traffic_surge increases root client demand"
},
"targetResourceId": {
"type": "string"
},
"dependencyId": {
"type": "string"
},
"startStep": {
"type": "integer",
"minimum": 0
},
"endStep": {
"type": "integer",
"minimum": 1
},
"capacityPercent": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"maxConcurrent": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000000
},
"addedLatencyMs": {
"type": "number",
"minimum": 0,
"maximum": 120000
},
"errorRate": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"trafficMultiplier": {
"type": "number",
"exclusiveMinimum": 1,
"maximum": 20,
"description": "traffic_surge demand multiplier"
}
},
"required": [
"id",
"type",
"startStep"
],
"additionalProperties": false
},
"maxItems": 32,
"description": "Scheduled capacity, error, latency, concurrency, or traffic-surge faults"
},
"scalingPolicies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"dependencyId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"constrainedMetric": {
"type": "string",
"enum": [
"rps",
"concurrency"
]
},
"observationMetric": {
"type": "string",
"enum": [
"source_cpu",
"capacity_utilization"
]
},
"observedResourceId": {
"type": "string",
"minLength": 1
},
"scaleOutThresholdPercent": {
"type": "number",
"minimum": 1,
"maximum": 100
},
"scaleOutCapacityMultiplier": {
"type": "number",
"minimum": 1,
"maximum": 20
}
},
"required": [
"id",
"dependencyId",
"constrainedMetric",
"observationMetric",
"scaleOutThresholdPercent"
],
"additionalProperties": false
},
"maxItems": 32,
"description": "Capacity-observation policies, including intentional autoscaling blind spots"
},
"maxCascadeDepth": {
"type": "integer",
"minimum": 1,
"maximum": 8
},
"maxGeneratedRps": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 500000
},
"maxStepWork": {
"type": "integer",
"minimum": 1,
"maximum": 2048
},
"retryGeneratedTrafficAffectsCost": {
"type": "boolean"
},
"externalMetrics": {
"type": "object",
"properties": {
"errorMode": {
"type": "string",
"enum": [
"drop_failed_trigger",
"freeze_combined_decision"
]
},
"initialCapacity": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"minCapacity": {
"type": "integer",
"minimum": 0,
"maximum": 10000,
"default": 0
},
"maxCapacity": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"default": 100
},
"triggers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"targetValue": {
"type": "number",
"exclusiveMinimum": 0,
"minimum": 0.000001,
"maximum": 1000000000
},
"noReadyEndpointsAsZero": {
"type": "boolean",
"default": false
},
"samples": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"step": {
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"status": {
"type": "string",
"const": "value"
},
"value": {
"type": "number",
"minimum": 0,
"maximum": 1000000000
}
},
"required": [
"step",
"status",
"value"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"step": {
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"status": {
"type": "string",
"enum": [
"no_ready_endpoints",
"discovery_error",
"fetch_error"
]
}
},
"required": [
"step",
"status"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 120
}
},
"required": [
"id",
"targetValue",
"samples"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 16
}
},
"required": [
"errorMode",
"initialCapacity",
"triggers"
],
"additionalProperties": false,
"description": "Deterministic per-trigger recommendation inputs. A no_ready_endpoints sample is a successful zero only when that trigger sets noReadyEndpointsAsZero:true; discovery_error and fetch_error always remain errors. This is not a KEDA/provider actuator and does not change resource counts."
}
},
"additionalProperties": false,
"description": "Optional retry/cascade resilience model returned by scenario.get. externalMetrics accepts deterministic sampled triggers; no_ready_endpoints is successful zero only when noReadyEndpointsAsZero:true, while discovery_error and fetch_error remain errors. This recommendation model does not actuate KEDA, providers, or simulated resource counts."
},
"responseMode": {
"type": "string",
"enum": [
"compact",
"full"
],
"default": "compact",
"description": "Response detail level. 'compact' (default) returns id, name, status, traffic, and a per-resource summary (id, name, status, cpuPercent) β keeps the response small for agent loops. 'full' returns the complete simulation object including all resource characteristics and connections."
}
},
"required": [
"name"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}