mirror of
https://github.com/garrytan/gstack.git
synced 2026-06-17 15:20:11 +02:00
ad405ad370
When --disallowedTools AskUserQuestion is set and no MCP variant is
callable, the model surfaces decisions as visible prose options
("A) ... B) ... C) ..." or "1. ... 2. ... 3. ...") rather than via the
native numbered-prompt UI. isNumberedOptionListVisible doesn't catch
these because the ❯ cursor sits on the empty input prompt rather than
on option 1, so runPlanSkillObservation and runPlanSkillFloorCheck
would time out at 5-10 minutes per test even though the model was
correctly waiting for user input.
This was exposed by the v1.28 fallback deletion: pre-deletion the
model used the preamble fallback to silently auto-resolve to
plan_ready in this scenario. Post-deletion the model correctly
surfaces the question and waits, but the harness couldn't tell.
isProseAUQVisible matches:
- 2+ distinct lettered options at line starts (A/B/C/D form)
- 3+ distinct numbered options at line starts WITHOUT a `❯ 1.`
cursor (so it doesn't double-fire on native numbered prompts)
Wired into:
- classifyVisible (used by runPlanSkillObservation) → returns
outcome='asked' instead of timeout
- runPlanSkillFloorCheck → counts as auq_observed (floor met)
8 new unit tests in claude-pty-runner.unit.test.ts cover the lettered
shape, numbered shape, threshold edges, native-cursor exclusion, and
mid-prose false-positive guard.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>