fix(workflows): break freeform answer loop in AskUserQuestion

When users select "Other" to provide freeform input, Claude re-prompts
with another AskUserQuestion instead of dropping to plain text. This
loops 2-3 times before finally accepting freeform input.

Add explicit freeform escape rule to questioning.md reference, and
update new-milestone.md and discuss-phase.md to switch to plain text
when users signal freeform intent.

Closes #778

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Tibsfox
2026-03-03 03:24:16 -08:00
committed by Lex Christopherson
parent 4737e7f950
commit b0e5717e1a
3 changed files with 21 additions and 3 deletions

View File

@@ -100,6 +100,23 @@ Users who want a slightly modified version of an option can select "Other" and r
</using_askuserquestion>
<freeform_rule>
**When the user wants to explain freely, STOP using AskUserQuestion.**
If a user selects "Other" and their response signals they want to describe something in their own words (e.g., "let me describe it", "I'll explain", "something else", or any open-ended reply that isn't choosing/modifying an existing option), you MUST:
1. **Ask your follow-up as plain text** — NOT via AskUserQuestion
2. **Wait for them to type at the normal prompt**
3. **Resume AskUserQuestion** only after processing their freeform response
The same applies if YOU include a freeform-indicating option (like "Let me explain" or "Describe in detail") and the user selects it.
**Wrong:** User says "let me describe it" → AskUserQuestion("What feature?", ["Feature A", "Feature B", "Describe in detail"])
**Right:** User says "let me describe it" → "Go ahead — what are you thinking?"
</freeform_rule>
<context_checklist>
Use this as a **background checklist**, not a conversation structure. Check these mentally as you go. If gaps remain, weave questions naturally.

View File

@@ -422,7 +422,7 @@ Ask 4 questions per area before offering to continue or move on. Each answer oft
**Question design:**
- Options should be concrete, not abstract ("Cards" not "Option A")
- Each answer should inform the next question
- If user picks "Other", receive their input, reflect it back, confirm
- If user picks "Other" to provide freeform input (e.g., "let me describe it", "something else", or an open-ended reply), ask your follow-up as plain text — NOT another AskUserQuestion. Wait for them to type at the normal prompt, then reflect their input back and confirm before resuming AskUserQuestion for the next question.
**Scope creep handling:**
If user mentions something outside the phase domain:

View File

@@ -27,8 +27,9 @@ Read all files referenced by the invoking prompt's execution_context before star
**If no context file:**
- Present what shipped in last milestone
- Ask: "What do you want to build next?"
- Use AskUserQuestion to explore features, priorities, constraints, scope
- Ask inline (freeform, NOT AskUserQuestion): "What do you want to build next?"
- Wait for their response, then use AskUserQuestion to probe specifics
- If user selects "Other" at any point to provide freeform input, ask follow-up as plain text — not another AskUserQuestion
## 3. Determine Milestone Version