v0.1 preview · real campaign data, evidence-linked · certification (T2) and unseen-repo trial (T3) are pre-registered designs, not yet run

DeployProof · Report v0.1 · updated 19 Sep 2026 · Envelope: Java agent × GCP (complete) · Java agent × AWS (in flight) · Python agent × AWS (in flight)

The reliability ledger for AI-driven cloud deployments

HiveDeploy's agents deploy applications to customers' own clouds. This report publishes how often that works — raw and attributed, with every failure root-caused, every fix named, and every run's evidence one click away. Nothing here is a demo.

LIVE DATA
T1 · Discovery

Raw + converged pass rates on a declared scenario envelope, with per-failure attribution. Java × GCP complete; Java × AWS and Python × AWS running.

DESIGNED · PRE-REGISTERED
T2 · Certification

≥99% converged success at 95% confidence (Clopper-Pearson), N=480 template-routed runs on frozen versions. Runs after the AWS discovery campaigns close.

DESIGNED · PRE-REGISTERED
T3 · Generalization

Converged pass rate on 24–30 public repos the agent has never seen — pinned SHAs, fixed prompt, publish-regardless. Intake tooling is live; first candidate pinned.

Headline · Java agent × GCP (closed 15 Jul 2026)

64.1%raw pass, 64-run discovery (41/64) — published first, always
95.7%converged after class fixes: 22/23 failed slots recovered on the strict gate
100%deploy-health after the Cloud Run platform fix (23/23 recovered)¹
1real platform defect in 23 failures — caught by re-run, fixed, class green
$0.75avg LLM cost per deploy session (median $0.51, 94% cache hit)
23/23failures root-caused with public dossiers

¹ One scenario (Cloud Run, scale-to-zero) passes health+connection+metrics; its idle container emits no recent log entries by design — disclosed, counted as deploy-health only.

The success gate

What "deployed" means here

A run counts only if the deployed application proves itself on four independent checks, probed from outside the platform:

Load-balancer-generated 502/503/504 pages never count as "up." Every result row is labeled with the gate version it ran under.

T1 results · discovery

Campaign A — 64 runs, 8 scenarios, deterministic + generative

ScenarioTopologyRouteRawRe-run of failed slots²
01_java_cloudrunCloud Run, scale-to-zerodet7/80/1 → closed by platform fix¹
04_quarkus_jvm_gkeQuarkus on GKEdet6/82/2
10_det_3vm_dev3-VM (api + 2 workers)det7/81/1
11_interactive_prod_generativeProd 3-VM, interactivegen5/83/3
12_learning_curve_gcpLearning-curve 3-VMgen3/85/5
12b_clean_3vm_gcpClean-slate 3-VMgen3/85/5
14_oos_prod_mig_global_lbMIG + global HTTPS LB (out-of-spec ask)gen5/83/3
98_learning_curveLearning-curve variantgen5/83/3
TOTAL41/64 · 64.1%22/23 · 95.7%

² Fix-then-rerun protocol: every failure root-caused → failure class fixed platform-wide → the exact failed slots re-run in a stable window. Raw and converged are always published together.

Where the 23 raw failures actually came from

AttributionCountEvidence pattern
Store-egress transients12App up + logging; backing-store connection 500s during operator-network flap windows; same scenarios pass in stable windows
Network blips5LLM-API DNS 502s, a full connectivity outage, churn timeouts, post-apply flaps
Platform defect (probe contract)1Read as a network blip at close; re-runs exposed the Cloud Run /healthz probe-contract bug (below) — the campaign's one AGENT-attributed failure, fixed and re-run green
Account credit exhaustion2LLM account hit zero mid-campaign (402) — operator error, not platform
Environment residuals2A leaked-secret 409 collision + a quota flap
Observability fail-open1Metrics discovery skipped during a blip; same render passed with metrics elsewhere
Total attributed2322 environmental/harness + 1 platform defect — which the instrument caught, fixed, and re-ran green

Evidence: per-failure dossiers · raw rows (JSONL) · campaign metadata · re-run rows

Campaign B — 4 unseen production topologies, first-contact ×3

ScenarioTopology (first time the agent ever saw it)FinalNote
20_springboot_gke_hardenedHardened GKE (private nodes, shielded, netpol)3/3Logs+metrics path proven on hardened clusters
21_springboot_cloudrun_multiserviceCloud Run multi-service (api + workers)3/3Recovered from 0/3 — headless-worker architecture mismatch found, deterministic servlet fixer shipped
22_springboot_mig_https_lbMIG behind HTTPS LB2/3Lone fail = an observability display bug on a healthy deploy (deploy-health 3/3)
23_springboot_gke_multizone_haMulti-zone HA GKE3/3Interpolation-hygiene fixer shipped en route
TOTAL11/12 gate · 12/12 deploy-health

Evidence: raw rows · the one failure's dossier

Root cause worth reading · the Cloud Run class

Every Cloud Run deploy failed its external health probe on /healthz — while the container's own startup and liveness probes on the same path succeeded. Live-evidence diagnosis: Google's front end reserves /healthz externally, returning 404 to outside callers even when the app serves it. No app, module, or probe change could ever have passed. The platform's public probe now falls back across candidate health paths; the fix unblocked the entire Cloud Run class (scenario 01 and the 0/3 → 3/3 recovery above). This is the kind of failure only volume testing on real clouds finds.

Self-healing & the flywheel

Discovery isn't just a score — it feeds the product

In flight · Python agent × AWS · snapshot 19 Sep 2026 (IST)

Second agent, second cloud — 62 runs, 0 deploy failures. Read the three caveats before the number.

Same instrument, new agent, new cloud: 64 reliability runs (8 scenarios × 8) with 12 coverage runs queued behind them, us-east-1, one operator environment, every run torn down to a verified-zero account afterwards. This is a raw, in-flight number — no converged claim is made until closure.

62/62raw pass so far (100%) — 62 of 64 reliability runs banked; 0 deploy failures, 0 teardown leaks
40/40on the strict 4-part gate (health + logs + metrics gating, connection measured 40/40)
22/22on the learning-curve evaluation gate — endpoint reachability only, as those scenario specs declare³
15runs that drifted from a declared-generative ask onto a template — pass, but do not test the generative path⁴
2off-ledger incidents disclosed below — neither a deploy failure, both slots re-run green
$26metered LLM cost across 73 sessions (≈$0.42/run, max session $2.12); provider-invoice reconciliation pending
ScenarioTopologyDeclared → observed routeGateRawMedian deploy
01_py_fargateFargate service behind an ALBdet → det (template)4-part8/8326 s
04_py_eksEKS cluster, api + 2 worker deploymentsdet → det (template)4-part8/81630 s
10_det_3vm_dev3-VM (api + 2 workers) behind an ALBdet → det (template)4-part8/8274 s
11_interactive_prod_generativeProd request, interactive, full specgen → det (as designed: complete spec matches a template)4-part8/8700 s
14_oos_prod_asg_albAuto-scaling group + ALB (out-of-spec ask)det → det (template)4-part8/8354 s
12_learning_curve_awsLearning-curve 3-VM + extra data volume per VMgen → det (drift⁴)reachability³8/8585 s
12b_clean_3vm_awsClean-slate 3-VM + extra data volume per VMgen → det (drift⁴)reachability³7/7517 s
98_learning_curveLearning-curve variant, generative 3-VMgen → gen (1 run needed 2 pre-apply verify/repair rounds)reachability³7/7575 s
TOTAL (in flight)62/62 · 100%535 s

³ Scenarios 12, 12b and 98 are learning-curve evaluations by design: their gate is endpoint reachability (200 on the app port), with logs and metrics measured where available but not gating. Every row in the JSONL carries its gate notes, so the two gate modes can be separated by a reader.

Route drift, disclosed as an open defect. Scenarios 12 and 12b ask for a 3-VM topology plus a second data volume per VM — a requirement no template has a field for, put there precisely to force the generative path. The classifier judged the request complete, routed it onto the 3-VM template and silently dropped the out-of-scope requirement. The deploys are healthy, the number is honest, and the runs still don't test what they were written to test. The same class was recorded on GCP (a requested data disk never delivered). Fix direction, not yet landed: a stated requirement with no schema field must mark the request incomplete, not vanish. Until then, real generative evidence on this ledger is scenario 98 (7 rows).

Two incidents that never reached the ledger

IncidentWhat happenedOutcome
15 Sep · 01_py_fargate#3Model-provider credit balance hit zero mid-session (HTTP 402). The harness recognised the class and halted cleanly instead of banking a failure.Operator error, not platform. Topped up; slot re-run → pass. Disclosed here because it is invisible in the JSONL.
15 Sep · 01_py_fargate#5A local DNS drop mid-apply left the deploy worker blocked inside a subprocess read for 2.5 hours — deployment read "deploying" on every poll, process alive, log growing, nothing a liveness check could see. A queued repair task then resurrected the torn-down deployment.Harness + platform defect. Root fix: bounded subprocess reads that kill and reap on timeout; a triple-signal watchdog (queue backlog ∧ stale log ∧ dead ping); teardown order now purges the queue before marking terminal. Slot re-run → pass.

Six defects only running it found

Three were caught by pre-campaign canary runs and fixed before the ledger opened — which is why the raw number is 100% and should be read as "after canaries", not "first contact". Three struck mid-campaign.

  1. Availability-zone capability blind spot (canary). The default VPC has a subnet in every AZ, and one us-east-1 AZ offers neither the chosen instance type nor Fargate. The 3-VM template picked a subnet without checking; Fargate handed all six subnets to ECS. A 1-in-6 failure on 19 of 76 planned runs. Fix: subnets are now filtered by live instance-type offerings, and Fargate excludes the incapable zone id.
  2. HTTPS requested without a domain (canary). The extractor turned public HTTPS on with an empty subdomain, sending the deploy into an unrepairable hosted-zone lookup; a second template exposed certificate-via-DNS with no domain field at all. Fix: schema validators degrade to plain HTTP / self-signed and say so, instead of failing 40 minutes in.
  3. A hollow logs gate on EKS (canary). The only log group the template created was the image build's, so the gate could pass on build output while no container log existed. Fix: control-plane logging plus container-level log collection, and the observability path reads the application group. Confirmed live before launch.
  4. Provider credit exhaustion (mid-campaign) — the 402 incident above.
  5. Worker wedge (mid-campaign) — the DNS-drop incident above, and the structural fix it forced.
  6. The sweeper said "verified clean" with 42 resources live (mid-campaign). Ownership matching used a name prefix, so provider-managed names carrying the run id mid-string were invisible; generatively named resources had no owner rule; the verify pass read an unpaginated first page. Fix: run-id token anywhere in the name, a whitelisted generative-name shape (never applied to IAM), full pagination, security groups in the verify inventory — then the account was swept to a verified zero and every run since has ended there.

Evidence: raw rows (JSONL, with declared and observed route per row) · campaign metadata and caveats · ledger summary. Final rows, the coverage-12 leg and the closure note publish when the campaign closes.

In flight · Java agent × AWS · snapshot 18 Jul 2026

Java on AWS — discovery running

The same instrument, second cloud: 64 reliability runs (16 deterministic / 48 generative, 9 scenarios) at concurrency 2, with 12 coverage runs queued. Early signal: the deterministic 3-VM scenario passed 4/4 first-try (304-second deploy), and GCP's worst class passed first-try. The failure classes this leg surfaced were ported to the Python agent before its campaign (above). Results publish at closure as report v0.2. Snapshot rows (not citable as final — see metadata).

Roadmap · pre-registered designs

What gets measured next

PassDesign (committed before any runs)Cost / duration
T2 CertificationN=480 template-routed runs, production-weighted 7-topology mix, failure budget k≤1, one-sided 95% Clopper-Pearson lower bound ≥99%, AGENT/ENVIRONMENTAL/HARNESS attribution, certificate bound to frozen platform+template versions with published invalidation rules≈$100–260 · ~2 days
T3 Generalization24–30 public OSS repos, pinned SHAs, pre-registered list + fixed prompt + adapted gate, pre-run build control, promotion frozen mid-wave, results publish regardless of outcome. Intake tooling live; first candidate pinned (spring-petclinic @ f182358d).≈$50–150 · ~2–4 days

Limitations

What this report does not claim

Reproducibility

Versioned, inspectable, re-runnable

Each report release binds to a platform commit, template-library version, scenario-catalog version, and gate version. Published alongside: the ledger summary, ledger documentation and regeneration commands, per-run rows, and per-failure dossiers. Certificates (T2) carry explicit invalidation rules — any deploy-path change voids them until re-certification.