16. Planning: ask for the result, not the steps
A query says how to reach an answer. A goal says only what the answer is — the final read query, written over the facts it needs as if they already existed — and leaves the route to a planner. The route is chosen deterministically, by embabel-agent’s GOAP condition planner (A*), from the views and DERIVE rules the world already has; models do judgement inside the steps, within typed bounds, and never choose the route. A planned query is correct by construction, and reproducible: proven well-formed before it runs, and the statement that runs is the one that was reviewed, every time it runs.
That claim has an edge, and the section is precise about where it lies:
| Holds before anything runs | Because |
|---|---|
| the plan is well-formed: every fact it reads is made by an earlier step or held by the world | introspection checks each step’s needs against what precedes it (§16.2) |
| it refuses before it spends | planning runs no step, reads no source and calls no model (§16.8) |
| the same goal over the same world gets the same plan | the planner is deterministic, and two plans of equal cost are reported as a tie, never broken by chance (§16.5) |
| what runs is what was reviewed | a saved plan is pinned with a fingerprint of every step it chose, and refused as stale when one moves — never silently redone (§16.10) |
What is not proven is that a model’s judgement inside a step is right. It is bounded (it fills declared
types, §7.8, and keeps only elements it was shown, §7.7), typed, reported (PROJECTION_* and the other
warnings), cached (§7.6) and priced (§9) — but it is a judgement. “Deterministic planning; bounded, typed
model calls” is the accurate description. “Fully deterministic” is not.

