{
  "manifest_version": "1.0.0",
  "template": {
    "id": "0b574be8-1a25-45fc-8424-661f7901f166",
    "slug": "celld-durable-objects",
    "name": "celld | Open Source Cloudflare Durable Objects",
    "description": "Self-hosted Cloudflare Durable Objects: two-node fleet on your bucket",
    "url": "https://railway.com/deploy/celld-durable-objects",
    "upstream": {
      "image": "ghcr.io/denoland/celld:v0.4.1"
    }
  },
  "services": [
    {
      "name": "celld-peer",
      "source": {
        "image": "ghcr.io/denoland/celld:v0.4.1"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/celld",
      "http": false
    },
    {
      "name": "celld",
      "source": {
        "image": "ghcr.io/denoland/celld:v0.4.1"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/celld",
      "http": true
    },
    {
      "name": "welcome-seed",
      "source": {
        "image": "ghcr.io/denoland/celld:v0.4.1"
      },
      "needs_volume": false,
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "AWS_REGION",
      "service": "celld-peer",
      "description": "Storage region of the fleet bucket.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELLD_WATCH",
      "service": "celld-peer",
      "description": "Local working directory for the live SQLite databases and the replication log. It sits on the attached volume, so a restart does not force every cell to restore from the bucket.",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/celld"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "celld-peer",
      "description": "S3 endpoint of the fleet bucket.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELLD_BUCKET",
      "service": "celld-peer",
      "description": "The fleet bucket. It holds the deployments, the SQLite replicas, the ownership records and the peer secret — every node in the fleet must point at the same one.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELLD_ADVERTISE",
      "service": "celld-peer",
      "description": "The address other nodes use to reach this one. Must resolve to the internal listener, and must stay on the private network.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "AWS_ACCESS_KEY_ID",
      "service": "celld-peer",
      "description": "Bucket credentials. They give full control of the fleet — keep them safe.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELLD_INTERNAL_ADDR",
      "service": "celld-peer",
      "description": "Peer and operator listener. The IPv6 wildcard is required: Railway's private network is IPv6-only, so 0.0.0.0 would make this node unreachable at its own advertised address. Never expose this port publicly — the operator API is unauthenticated.",
      "secret": false,
      "strategy": "default",
      "default": "[::]:8081"
    },
    {
      "key": "AWS_SECRET_ACCESS_KEY",
      "service": "celld-peer",
      "description": "Bucket credentials. They give full control of the fleet — keep them safe.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "celld",
      "description": "Railway routes public traffic and healthchecks by this port. celld does not read it, so it has to match CELLD_ADDR.",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "AWS_REGION",
      "service": "celld",
      "description": "Storage region of the fleet bucket.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELLD_ADDR",
      "service": "celld",
      "description": "Public Worker listener. The IPv6 wildcard stays dual-stack in Rust, so it answers both the public edge and Railway's IPv4 healthcheck.",
      "secret": false,
      "strategy": "default",
      "default": "[::]:8080"
    },
    {
      "key": "CELLD_WATCH",
      "service": "celld",
      "description": "Local working directory for the live SQLite databases and the replication log. It sits on the attached volume, so a restart does not force every cell to restore from the bucket.",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/celld"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "celld",
      "description": "S3 endpoint of the fleet bucket.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELLD_BUCKET",
      "service": "celld",
      "description": "The fleet bucket. It holds the deployments, the SQLite replicas, the ownership records and the peer secret — every node in the fleet must point at the same one.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELLD_ADVERTISE",
      "service": "celld",
      "description": "The address other nodes use to reach this one. Must resolve to the internal listener, and must stay on the private network.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "AWS_ACCESS_KEY_ID",
      "service": "celld",
      "description": "Bucket credentials. They give full control of the fleet — keep them safe.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELLD_INTERNAL_ADDR",
      "service": "celld",
      "description": "Peer and operator listener. The IPv6 wildcard is required: Railway's private network is IPv6-only, so 0.0.0.0 would make this node unreachable at its own advertised address. Never expose this port publicly — the operator API is unauthenticated.",
      "secret": false,
      "strategy": "default",
      "default": "[::]:8081"
    },
    {
      "key": "AWS_SECRET_ACCESS_KEY",
      "service": "celld",
      "description": "Bucket credentials. They give full control of the fleet — keep them safe.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELLD_TRUST_FORWARDED_HEADERS",
      "service": "celld",
      "description": "Let Railway's edge set the scheme and host, so request.url inside a Worker is the real https://<your-domain>/… instead of http://[::]:8080/…. Correct here because the edge replaces both headers; set 0 if you put an untrusted proxy in front.",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "AWS_REGION",
      "service": "welcome-seed",
      "description": "Storage region of the fleet bucket.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELLD_WATCH",
      "service": "welcome-seed",
      "description": "Local working directory for the live SQLite databases and the replication log. It sits on the attached volume, so a restart does not force every cell to restore from the bucket.",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/celld"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "welcome-seed",
      "description": "S3 endpoint of the fleet bucket.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELLD_BUCKET",
      "service": "welcome-seed",
      "description": "The fleet bucket. It holds the deployments, the SQLite replicas, the ownership records and the peer secret — every node in the fleet must point at the same one.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "WELCOME_HTML",
      "service": "welcome-seed",
      "description": "The placeholder landing page. Edit it freely — it is replaced the moment you deploy your own Worker.",
      "secret": false,
      "strategy": "default",
      "default": "<!doctype html>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>celld is running</title>\n<style>\n  :root { color-scheme: light dark; }\n  body { margin: 0; padding: 3rem 1.5rem; font: 16px/1.6 ui-sans-serif, system-ui, sans-serif; }\n  main { max-width: 42rem; margin: 0 auto; }\n  code, pre { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.9em; }\n  pre { padding: 0.9rem 1rem; border-radius: 8px; overflow-x: auto; background: rgba(127,127,127,0.14); }\n  h1 { font-size: 1.6rem; margin-bottom: 0.25rem; }\n  p.sub { margin-top: 0; opacity: 0.7; }\n</style>\n<main>\n  <h1>celld is running</h1>\n  <p class=\"sub\">Self-hosted Durable Objects. This page is the placeholder application that the template deployed for you.</p>\n  <h2>Deploy your own Worker</h2>\n  <p>Install the CLI, then point it at this fleet's bucket. The storage variables are on the <code>celld</code> service in your Railway project.</p>\n  <pre><code>curl -fsSL https://celld.dev/install.sh | sh\n\nexport CELLD_BUCKET=...        # s3://&lt;name&gt;, from the celld service\nexport S3_ENDPOINT=...\nexport AWS_REGION=...\nexport AWS_ACCESS_KEY_ID=...\nexport AWS_SECRET_ACCESS_KEY=...\n\ngit clone https://github.com/denoland/celld\ncelld deploy celld/examples/counter</code></pre>\n  <p>Nodes adopt the new deployment within 30 seconds, without restarting. Set <code>SEED_WELCOME_APP=0</code> on the <code>welcome-seed</code> service so a redeploy of it never replaces your application.</p>\n  <p><a href=\"https://celld.dev/docs\">Documentation</a></p>\n</main>\n"
    },
    {
      "key": "WRANGLER_JSON",
      "service": "welcome-seed",
      "description": "Wrangler configuration of the placeholder application. Asset-only, so it needs no esbuild.",
      "secret": false,
      "strategy": "default",
      "default": "{\n  \"name\": \"celld-welcome\",\n  \"compatibility_date\": \"2026-08-01\",\n  \"assets\": {\n    \"directory\": \"./public\"\n  }\n}"
    },
    {
      "key": "SEED_WELCOME_APP",
      "service": "welcome-seed",
      "description": "Deploy the placeholder welcome application on first boot, so the fleet comes up serving a real page instead of crash-looping on an empty bucket. Set this to 0 once you deploy your own Worker — `celld deploy` replaces the fleet's single deployment pointer, so re-running this job would otherwise overwrite your application.",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "AWS_ACCESS_KEY_ID",
      "service": "welcome-seed",
      "description": "Bucket credentials. They give full control of the fleet — keep them safe.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CELLD_INTERNAL_ADDR",
      "service": "welcome-seed",
      "description": "Peer and operator listener. The IPv6 wildcard is required: Railway's private network is IPv6-only, so 0.0.0.0 would make this node unreachable at its own advertised address. Never expose this port publicly — the operator API is unauthenticated.",
      "secret": false,
      "strategy": "default",
      "default": "[::]:8081"
    },
    {
      "key": "AWS_SECRET_ACCESS_KEY",
      "service": "welcome-seed",
      "description": "Bucket credentials. They give full control of the fleet — keep them safe.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "celld-durable-objects"
      }
    },
    "cli": "railway deploy --template celld-durable-objects",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "0b574be8-1a25-45fc-8424-661f7901f166",
            "serializedConfig": {
              "buckets": {
                "bc12fdfa-4244-419f-ace5-7c4ecd4763fd": {
                  "name": "Storage"
                }
              },
              "services": {
                "0b3005c0-8050-42c0-92fc-03817cc1db06": {
                  "icon": "https://celld.dev/cells-mark.svg",
                  "name": "celld-peer",
                  "deploy": {
                    "startCommand": null,
                    "overlapSeconds": 0,
                    "drainingSeconds": 60,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/denoland/celld:v0.4.1"
                  },
                  "variables": {
                    "AWS_REGION": {
                      "isOptional": false,
                      "description": "Storage region of the fleet bucket.",
                      "defaultValue": "${{Storage.REGION}}"
                    },
                    "CELLD_WATCH": {
                      "isOptional": false,
                      "description": "Local working directory for the live SQLite databases and the replication log. It sits on the attached volume, so a restart does not force every cell to restore from the bucket.",
                      "defaultValue": "/var/lib/celld"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": false,
                      "description": "S3 endpoint of the fleet bucket.",
                      "defaultValue": "${{Storage.ENDPOINT}}"
                    },
                    "CELLD_BUCKET": {
                      "isOptional": false,
                      "description": "The fleet bucket. It holds the deployments, the SQLite replicas, the ownership records and the peer secret — every node in the fleet must point at the same one.",
                      "defaultValue": "s3://${{Storage.BUCKET}}"
                    },
                    "CELLD_ADVERTISE": {
                      "isOptional": false,
                      "description": "The address other nodes use to reach this one. Must resolve to the internal listener, and must stay on the private network.",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}:8081"
                    },
                    "AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "Bucket credentials. They give full control of the fleet — keep them safe.",
                      "defaultValue": "${{Storage.ACCESS_KEY_ID}}"
                    },
                    "CELLD_INTERNAL_ADDR": {
                      "isOptional": false,
                      "description": "Peer and operator listener. The IPv6 wildcard is required: Railway's private network is IPv6-only, so 0.0.0.0 would make this node unreachable at its own advertised address. Never expose this port publicly — the operator API is unauthenticated.",
                      "defaultValue": "[::]:8081"
                    },
                    "AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Bucket credentials. They give full control of the fleet — keep them safe.",
                      "defaultValue": "${{Storage.SECRET_ACCESS_KEY}}"
                    }
                  },
                  "volumeMounts": {
                    "0b3005c0-8050-42c0-92fc-03817cc1db06": {
                      "mountPath": "/var/lib/celld"
                    }
                  }
                },
                "5dd63dcb-ab59-42fd-9fcc-d38b296ea797": {
                  "icon": "https://celld.dev/cells-mark.svg",
                  "name": "celld",
                  "deploy": {
                    "startCommand": null,
                    "overlapSeconds": 0,
                    "drainingSeconds": 60,
                    "healthcheckPath": "/.well-known/celld/health",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/denoland/celld:v0.4.1"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Railway routes public traffic and healthchecks by this port. celld does not read it, so it has to match CELLD_ADDR.",
                      "defaultValue": "8080"
                    },
                    "AWS_REGION": {
                      "isOptional": false,
                      "description": "Storage region of the fleet bucket.",
                      "defaultValue": "${{Storage.REGION}}"
                    },
                    "CELLD_ADDR": {
                      "isOptional": false,
                      "description": "Public Worker listener. The IPv6 wildcard stays dual-stack in Rust, so it answers both the public edge and Railway's IPv4 healthcheck.",
                      "defaultValue": "[::]:8080"
                    },
                    "CELLD_WATCH": {
                      "isOptional": false,
                      "description": "Local working directory for the live SQLite databases and the replication log. It sits on the attached volume, so a restart does not force every cell to restore from the bucket.",
                      "defaultValue": "/var/lib/celld"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": false,
                      "description": "S3 endpoint of the fleet bucket.",
                      "defaultValue": "${{Storage.ENDPOINT}}"
                    },
                    "CELLD_BUCKET": {
                      "isOptional": false,
                      "description": "The fleet bucket. It holds the deployments, the SQLite replicas, the ownership records and the peer secret — every node in the fleet must point at the same one.",
                      "defaultValue": "s3://${{Storage.BUCKET}}"
                    },
                    "CELLD_ADVERTISE": {
                      "isOptional": false,
                      "description": "The address other nodes use to reach this one. Must resolve to the internal listener, and must stay on the private network.",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}:8081"
                    },
                    "AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "Bucket credentials. They give full control of the fleet — keep them safe.",
                      "defaultValue": "${{Storage.ACCESS_KEY_ID}}"
                    },
                    "CELLD_INTERNAL_ADDR": {
                      "isOptional": false,
                      "description": "Peer and operator listener. The IPv6 wildcard is required: Railway's private network is IPv6-only, so 0.0.0.0 would make this node unreachable at its own advertised address. Never expose this port publicly — the operator API is unauthenticated.",
                      "defaultValue": "[::]:8081"
                    },
                    "AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Bucket credentials. They give full control of the fleet — keep them safe.",
                      "defaultValue": "${{Storage.SECRET_ACCESS_KEY}}"
                    },
                    "CELLD_TRUST_FORWARDED_HEADERS": {
                      "isOptional": false,
                      "description": "Let Railway's edge set the scheme and host, so request.url inside a Worker is the real https://<your-domain>/… instead of http://[::]:8080/…. Correct here because the edge replaces both headers; set 0 if you put an untrusted proxy in front.",
                      "defaultValue": "1"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  },
                  "volumeMounts": {
                    "5dd63dcb-ab59-42fd-9fcc-d38b296ea797": {
                      "mountPath": "/var/lib/celld"
                    }
                  }
                },
                "fcb49791-e1a2-4fa3-8d15-17b8ee5d2753": {
                  "icon": "https://celld.dev/cells-mark.svg",
                  "name": "welcome-seed",
                  "deploy": {
                    "startCommand": "sh -c 'if [ \"$SEED_WELCOME_APP\" != \"1\" ]; then echo \"SEED_WELCOME_APP is not 1 - leaving the fleet deployment untouched\"; exit 0; fi; mkdir -p /tmp/welcome/public; printf \"%s\" \"$WRANGLER_JSON\" > /tmp/welcome/wrangler.jsonc; printf \"%s\" \"$WELCOME_HTML\" > /tmp/welcome/public/index.html; exec /usr/local/bin/celld deploy /tmp/welcome'",
                    "healthcheckPath": null,
                    "restartPolicyType": "NEVER",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/denoland/celld:v0.4.1"
                  },
                  "variables": {
                    "AWS_REGION": {
                      "isOptional": false,
                      "description": "Storage region of the fleet bucket.",
                      "defaultValue": "${{Storage.REGION}}"
                    },
                    "CELLD_WATCH": {
                      "isOptional": false,
                      "description": "Local working directory for the live SQLite databases and the replication log. It sits on the attached volume, so a restart does not force every cell to restore from the bucket.",
                      "defaultValue": "/var/lib/celld"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": false,
                      "description": "S3 endpoint of the fleet bucket.",
                      "defaultValue": "${{Storage.ENDPOINT}}"
                    },
                    "CELLD_BUCKET": {
                      "isOptional": false,
                      "description": "The fleet bucket. It holds the deployments, the SQLite replicas, the ownership records and the peer secret — every node in the fleet must point at the same one.",
                      "defaultValue": "s3://${{Storage.BUCKET}}"
                    },
                    "WELCOME_HTML": {
                      "isOptional": true,
                      "description": "The placeholder landing page. Edit it freely — it is replaced the moment you deploy your own Worker.",
                      "defaultValue": "<!doctype html>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>celld is running</title>\n<style>\n  :root { color-scheme: light dark; }\n  body { margin: 0; padding: 3rem 1.5rem; font: 16px/1.6 ui-sans-serif, system-ui, sans-serif; }\n  main { max-width: 42rem; margin: 0 auto; }\n  code, pre { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.9em; }\n  pre { padding: 0.9rem 1rem; border-radius: 8px; overflow-x: auto; background: rgba(127,127,127,0.14); }\n  h1 { font-size: 1.6rem; margin-bottom: 0.25rem; }\n  p.sub { margin-top: 0; opacity: 0.7; }\n</style>\n<main>\n  <h1>celld is running</h1>\n  <p class=\"sub\">Self-hosted Durable Objects. This page is the placeholder application that the template deployed for you.</p>\n  <h2>Deploy your own Worker</h2>\n  <p>Install the CLI, then point it at this fleet's bucket. The storage variables are on the <code>celld</code> service in your Railway project.</p>\n  <pre><code>curl -fsSL https://celld.dev/install.sh | sh\n\nexport CELLD_BUCKET=...        # s3://&lt;name&gt;, from the celld service\nexport S3_ENDPOINT=...\nexport AWS_REGION=...\nexport AWS_ACCESS_KEY_ID=...\nexport AWS_SECRET_ACCESS_KEY=...\n\ngit clone https://github.com/denoland/celld\ncelld deploy celld/examples/counter</code></pre>\n  <p>Nodes adopt the new deployment within 30 seconds, without restarting. Set <code>SEED_WELCOME_APP=0</code> on the <code>welcome-seed</code> service so a redeploy of it never replaces your application.</p>\n  <p><a href=\"https://celld.dev/docs\">Documentation</a></p>\n</main>\n"
                    },
                    "WRANGLER_JSON": {
                      "isOptional": true,
                      "description": "Wrangler configuration of the placeholder application. Asset-only, so it needs no esbuild.",
                      "defaultValue": "{\n  \"name\": \"celld-welcome\",\n  \"compatibility_date\": \"2026-08-01\",\n  \"assets\": {\n    \"directory\": \"./public\"\n  }\n}"
                    },
                    "SEED_WELCOME_APP": {
                      "isOptional": false,
                      "description": "Deploy the placeholder welcome application on first boot, so the fleet comes up serving a real page instead of crash-looping on an empty bucket. Set this to 0 once you deploy your own Worker — `celld deploy` replaces the fleet's single deployment pointer, so re-running this job would otherwise overwrite your application.",
                      "defaultValue": "1"
                    },
                    "AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "Bucket credentials. They give full control of the fleet — keep them safe.",
                      "defaultValue": "${{Storage.ACCESS_KEY_ID}}"
                    },
                    "CELLD_INTERNAL_ADDR": {
                      "isOptional": false,
                      "description": "Peer and operator listener. The IPv6 wildcard is required: Railway's private network is IPv6-only, so 0.0.0.0 would make this node unreachable at its own advertised address. Never expose this port publicly — the operator API is unauthenticated.",
                      "defaultValue": "[::]:8081"
                    },
                    "AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Bucket credentials. They give full control of the fleet — keep them safe.",
                      "defaultValue": "${{Storage.SECRET_ACCESS_KEY}}"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "celld",
      "method": "GET",
      "path": "/.well-known/celld/health",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 3,
    "needs_volume": true
  },
  "generated_at": "2026-09-18T04:14:48.008Z",
  "generator_version": "0.1.0",
  "status": "degraded",
  "validated_at": "2026-09-17T03:38:34.287Z",
  "success_rate_30d": 0.2,
  "validation": {
    "last_run_id": "run_95dc446616ad43aa92b0",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": false,
        "detail": "Your workspace has been restricted. Please contact support to resolve this."
      }
    ],
    "typical_ready_seconds": 27
  }
}
