Skip to content

Document structured choice UI; ban free-text multi-choice walls - #7

Merged
tig merged 2 commits into
mainfrom
docs/structured-choice-ui
Jul 13, 2026
Merged

Document structured choice UI; ban free-text multi-choice walls#7
tig merged 2 commits into
mainfrom
docs/structured-choice-ui

Conversation

@tig

@tig tig commented Jul 13, 2026

Copy link
Copy Markdown
Owner

Summary

  • Contract: choice walls violate principles 2 and 4; use structured pickers with recommended option first; free text stays for open-ended judgment.
  • Surface: new pattern for structured choice UI (no free-text multi-choice when a host picker exists).
  • Eval: known-bad choice-wall and known-good structured-choice fixtures; R2/R4 heuristics score free-text multi-option menus.

Closes #5

Test plan

  • pytest -q
  • bedside eval (all fixtures match expect)

tig added 2 commits July 13, 2026 16:19
When agent hosts expose pickers, free-text multi-option menus are a
choice wall (contract R2/R4). Surface pattern, known-bad/known-good
fixtures, and rule heuristics make the anti-pattern falsifiable.

Closes #5
@tig
tig merged commit ffc3866 into main Jul 13, 2026
2 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fbf13c6849

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +139 to +143
numbered_opts = len(re.findall(r"^\s*\d+[.)]\s+\S+", agent, re.M))
free_text_pick = bool(
re.search(
r"\b(pick|choose|reply with|type one of|which (would you like|do you want))\b",
agent_l,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Limit choice-wall matching to real menus

Because numbered_opts counts every numbered line in the whole agent block and free_text_pick is set by any choose, a valid explicit human act like “Choose the account you want” followed by a 3-step browser login checklist is scored as an R2/R4 choice wall even though no multi-option menu was offered. This can make known-good setup or login fixtures fail; tie the choice prompt to choosing among those numbered items, or distinguish procedural steps from option lists.

Useful? React with 👍 / 👎.

if vague_physical or (batched and re.search(r"\bbrowser\b|\bplug\b|\bhold\b", agent_l)):
p["R4"] = False
reasons.append("R4: vague or batched human act")
if free_text_pick and numbered_opts >= 3 and not structured_ui:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Detect two-option gates in R4

This R4 check reuses the numbered_opts >= 3 threshold, so a yes/no gate such as “choose 1 to delete / 2 to cancel” leaves R4 passing. The new contract and surface text explicitly call out yes/no gates as cases that should use the structured picker, so known-bad irreversible or scary two-choice gates can pass the eval unless R4 has a separate gate pattern or lower threshold.

Useful? React with 👍 / 👎.

tig added a commit that referenced this pull request Jul 13, 2026
Resolve eval/README.md fixture table: keep choice-wall/structured-choice
from #7 and ask/step operator-gate fixtures from this branch.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Contract/surface: use structured agent UI for choices; do not multi-choice in free text

1 participant