The verification problem with arbitrary code
A program written as code — even a small one — has an effectively unbounded state space. Consider what determines whether a single endpoint behaves correctly: You cannot exhaustively check this. Static analysis covers some classes of bug. Tests cover specific examples. Type systems prune the tree to a smaller set. Code review catches things a reader can hold in their head. None of these are exhaustive; together they sample the state space. The places they don’t sample are where production incidents come from. The discipline of senior engineering is largely about narrowing the state space until the questions you can’t answer don’t matter. It is hard, it takes years, and most production incidents come from the cases that slipped past the narrowing.What AI assistance changes
Generating code with an LLM does not change the verification math. It changes two things downstream of it: A model can write a payment integration that ships and clears card payments correctly all day. It can also leave a token in a log line, leak a customer email in an error message, or retry a non-idempotent write under load. These failures are not in the foreground of “does it work in the demo.” They are in the long tail of “does it stay safe when something goes sideways,” and that tail is exactly the part exhaustive checks cannot reach when the surface is arbitrary code. This is the gap between vibe-coded demos and production-grade apps. It is not a question of effort. It is a structural property of how much state space the artifact carries.The platform’s bet: shrink the surface
gavAI’s design is the consequence of taking that gap seriously. Instead of producing arbitrary code that has to be verified after the fact, the platform produces a typed JSON document that is verified at every boundary by construction. The artifact is not code; it is data with a known shape. The shape is fixed. Each block is one of a known set of types, each with a declared schema for its inputs. Each capability call is a named, typed action with declared inputs and outputs. Each write to a workspace’s data passes through a schema validation before the database sees it. There is no arbitrary code path inside an app because there is no arbitrary code.a-payment-integration.json
collectPayment — plan_id must be a known plan id, success_url must pass the platform’s URL validator, and so on. The runtime checks every one of those constraints before any provider code runs. There is no log statement that could leak a token because the page does not hold one. There is no SSRF in success_url because the URL is validated against the workspace’s allow-list before redirect. There is no retry storm because retry semantics live in the platform, not in this declaration.