Step 1 inside the DSPy program: parse → structure
We parse the PRD into a structured spec: goals, non-goals, user stories, guardrails, and measurable “done” criteria. That’s just Python + a Signature like PRDToSpec(prd_text -> spec_json). The module enforces that we get JSON with the fields we expect (if it’s malformed, we fail the run).