grilling
Interview the user relentlessly until you reach a shared understanding. Map this as a design tree: every decision branches into the decisions that hang off it.
Work the tree in rounds. The frontier is every decision whose prerequisites are already settled — the questions you can ask now without guessing at answers you haven't heard yet. Ask the whole frontier in one round: number each question and give your recommended answer. Then wait for the user's answers before the next round.
Use ask_user for each round. Put all frontier questions in one form. Fill the fields as follows:
title: Name the subject and the round.intro: Summarize what is settled and why this frontier is open.questions: Include the current frontier, up to the form limit of 10. If the frontier is larger, ask the first 10 and recompute it from the answers.id: Use the question number, such asQ1.header: Start with the question number and add a title.prompt: State the decision and the context that the user needs.type: Usechoicewhen the answer set is known. Usetextonly for an open answer.options: For a choice question, use stablevalueids, conciselabeltext, and a briefdescription. Setmultitotrueonly when the user can select more than one option.details: Explain trade-offs or consequences for a choice option. It can also contain a sketch.recommendation: For a choice question, use the recommended optionvalue, or an array of values whenmultiistrue. For a text question, give the recommended answer. Also give text questions aplaceholderthat shows the expected answer shape.
Each round the user answers reshapes the tree — settled decisions push the frontier outward and unblock questions that depended on them. Recompute the frontier and ask the next round. A question whose answer depends on another question still open in this round belongs to a later round, not this one.