DeployProof · Report v0.1 · updated 19 Sep 2026 · Envelope: Java agent × GCP (complete) · Java agent × AWS (in flight) · Python agent × AWS (in flight)
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.
Raw + converged pass rates on a declared scenario envelope, with per-failure attribution. Java × GCP complete; Java × AWS and Python × AWS running.
≥99% converged success at 95% confidence (Clopper-Pearson), N=480 template-routed runs on frozen versions. Runs after the AWS discovery campaigns close.
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)
¹ 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
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
| Scenario | Topology | Route | Raw | Re-run of failed slots² |
|---|---|---|---|---|
| 01_java_cloudrun | Cloud Run, scale-to-zero | det | 7/8 | 0/1 → closed by platform fix¹ |
| 04_quarkus_jvm_gke | Quarkus on GKE | det | 6/8 | 2/2 |
| 10_det_3vm_dev | 3-VM (api + 2 workers) | det | 7/8 | 1/1 |
| 11_interactive_prod_generative | Prod 3-VM, interactive | gen | 5/8 | 3/3 |
| 12_learning_curve_gcp | Learning-curve 3-VM | gen | 3/8 | 5/5 |
| 12b_clean_3vm_gcp | Clean-slate 3-VM | gen | 3/8 | 5/5 |
| 14_oos_prod_mig_global_lb | MIG + global HTTPS LB (out-of-spec ask) | gen | 5/8 | 3/3 |
| 98_learning_curve | Learning-curve variant | gen | 5/8 | 3/3 |
| TOTAL | 41/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.
| Attribution | Count | Evidence pattern |
|---|---|---|
| Store-egress transients | 12 | App up + logging; backing-store connection 500s during operator-network flap windows; same scenarios pass in stable windows |
| Network blips | 5 | LLM-API DNS 502s, a full connectivity outage, churn timeouts, post-apply flaps |
| Platform defect (probe contract) | 1 | Read 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 exhaustion | 2 | LLM account hit zero mid-campaign (402) — operator error, not platform |
| Environment residuals | 2 | A leaked-secret 409 collision + a quota flap |
| Observability fail-open | 1 | Metrics discovery skipped during a blip; same render passed with metrics elsewhere |
| Total attributed | 23 | 22 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
| Scenario | Topology (first time the agent ever saw it) | Final | Note |
|---|---|---|---|
| 20_springboot_gke_hardened | Hardened GKE (private nodes, shielded, netpol) | 3/3 | Logs+metrics path proven on hardened clusters |
| 21_springboot_cloudrun_multiservice | Cloud Run multi-service (api + workers) | 3/3 | Recovered from 0/3 — headless-worker architecture mismatch found, deterministic servlet fixer shipped |
| 22_springboot_mig_https_lb | MIG behind HTTPS LB | 2/3 | Lone fail = an observability display bug on a healthy deploy (deploy-health 3/3) |
| 23_springboot_gke_multizone_ha | Multi-zone HA GKE | 3/3 | Interpolation-hygiene fixer shipped en route |
| TOTAL | 11/12 gate · 12/12 deploy-health |
Evidence: raw rows · the one failure's dossier
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
In flight · Python agent × AWS · snapshot 19 Sep 2026 (IST)
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.
| Scenario | Topology | Declared → observed route | Gate | Raw | Median deploy |
|---|---|---|---|---|---|
| 01_py_fargate | Fargate service behind an ALB | det → det (template) | 4-part | 8/8 | 326 s |
| 04_py_eks | EKS cluster, api + 2 worker deployments | det → det (template) | 4-part | 8/8 | 1630 s |
| 10_det_3vm_dev | 3-VM (api + 2 workers) behind an ALB | det → det (template) | 4-part | 8/8 | 274 s |
| 11_interactive_prod_generative | Prod request, interactive, full spec | gen → det (as designed: complete spec matches a template) | 4-part | 8/8 | 700 s |
| 14_oos_prod_asg_alb | Auto-scaling group + ALB (out-of-spec ask) | det → det (template) | 4-part | 8/8 | 354 s |
| 12_learning_curve_aws | Learning-curve 3-VM + extra data volume per VM | gen → det (drift⁴) | reachability³ | 8/8 | 585 s |
| 12b_clean_3vm_aws | Clean-slate 3-VM + extra data volume per VM | gen → det (drift⁴) | reachability³ | 7/7 | 517 s |
| 98_learning_curve | Learning-curve variant, generative 3-VM | gen → gen (1 run needed 2 pre-apply verify/repair rounds) | reachability³ | 7/7 | 575 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).
| Incident | What happened | Outcome |
|---|---|---|
| 15 Sep · 01_py_fargate#3 | Model-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#5 | A 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. |
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.
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
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
| Pass | Design (committed before any runs) | Cost / duration |
|---|---|---|
| T2 Certification | N=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 Generalization | 24–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
Reproducibility
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.