verify_ok = false, the publish gate will block until a human fixes it.image_slots_resolved flips to true.400 "Study has unresolved verify errors", deploy blocked entirely
400 "Study has 4 unresolved image slots in q_brand_mood, resolve all images before publishing"
| # | Layer | What it catches | Who |
|---|---|---|---|
| 1 | Progressive disclosure | Wrong card type for the job, Claude reasons only over relevant specs. Adding 50 new card types doesn't degrade generation quality. | Claude |
| 2 | streamObject Zod | Structurally invalid JSON, missing required fields, wrong types, invalid discriminated union values. Corrected before forge ever sees it. | Zod + SDK |
| 3 | Pass 1: coverage | Research objectives from the brief missing from the flow. "Brief says measure consideration, no consideration card found." | GPT-4o |
| 4 | Pass 2: flow_logic | Routing that doesn't make logical sense. Screener on wrong value, NPS asked before awareness filter, dead branches. | GPT-4o |
| 5 | Pass 3: ai_probes | Vague probe objectives that won't produce useful qual data. "objective: understand opinions" vs. a specific insight target. | GPT-4o |
| 6 | forge() | Compiler assumption violations, empty branch cases, sequences referencing missing node IDs, fields the emitter expects but didn't find. | TypeScript |
| 7 | VM Track A | Happy path runtime crashes, missing end_card. Typo in branch condition, undefined variable mid-execution. | Node VM |
| 8 | VM Track B | Alternative happy path, routing divergence under different inputs. Dead-end path not exercised by Track A. | Node VM |
| 9 | VM Track C | Screen-out path doesn't terminate at screen_out_card. Disqualified respondent routed to a question instead. | Node VM |
| 10 | VM 5s timeout | Infinite loops, runaway dynamic_card iterations. Loop that never terminates → path times out → verify failure → fix prompt. | Node VM |
| 11 | Image slot detection | image_grid cards with unresolved imageIntent, flagged at save time. imageSlots: N in done payload, image_slots_resolved = false in DB. | Code |
| 12 | Edit path forge+verify | Human-introduced errors after generation. Broken branch target, invalid card config. Returned as structured errors, no LLM. | Code |
| 13 | Publish gate | Attempting to deploy an unverified or image-incomplete survey. Hard 400, no bypass, no "publish with warnings" path. | Code |
| 14 | Human review | Researcher judgment, wording, tone, brand-specific context the system can't know. Inline edits trigger forge+verify immediately. | Human |