| 1. Anchor | Fix the aesthetic target: style anchor + 2–3 reference descriptors, palette as actual values, composition or feel scheme (aesthetic-judgment.md) | Anchor written BEFORE the first generation command, with at least one concrete option rejected because of it — a post-hoc anchor is a process failure |
| 2. Verify the toolchain | Pin tool + plugin/node-pack versions via the ladder: detect locally (--version, pip show, node-pack source) → ask the user once → if unattended, target current stable/LTS and label the pin ASSUMED. Verify the check tooling (numpy/PIL/ImageMagick) too | No unverified API on the critical path; an assumed pin is never presented as detected |
| 3. Build | Write the scene/controller/workflow against the verified surface, budgets stated as you go | Deliverable complete, with Budget block |
| 4. Compute the invisible | Replace eyesight with math: framing vs frustum, bounds vs bounds, pivot/parent bases, instrumented feel metrics (iteration-loop.md) | Every spatial/feel claim has a number or a check attached |
| 5. Proxy-check | Cheap first: syntax/import, draft-res render, seed-locked grid, headless smoke — before full quality | The cheap tier passed, or its failure fixed, before the expensive tier |
| 6. Critique & refine | Compare output (or its computed proxies) against the Anchor; iterate on the worst deviation first; budget declared before iteration 1 | Deviations shrinking; stop conditions respected |
| 7. Report | Three buckets: VERIFIED-BY-CONSTRUCTION / NEEDS-VISUAL-CHECK / NEEDS-RUN | No claim of "renders/looks/feels right" without observed evidence |