fix(question): require at least one recommended option
Every question the agent asks now carries at least one recommended option. Replo's unanswered-question timer (andytown #28112) goes with the recommended option when nobody answers in Slack or Messages, so a question without one gets no timer and no "if no one answers in 5 minutes" notice, and waits for a person indefinitely.
Context: #62 made recommended required but let the model send an empty list "when you have no genuine preference". In production on 2026-09-25 the first Slack question after the deploy did exactly that (recommended: [] for "what would you fix today?"), so the card showed no notice and nothing will ever pick for it. Kevin's call: always recommend.
Changes
packages/schema/src/v1/question.ts: theQuestionPromptcheck rejects an empty list with "recommend at least one option"; the field description says at least one, even for a matter of taste.QuestionInfo.recommendedstays optional so stored questions still load.packages/opencode/src/tool/question.txt: the tool text tells the model to always pick, choosing the option that is easiest to change later because it is used when nobody answers in time.- Tests: the header-length case now sends a pick; the rejection case covers the empty list; parameters snapshot updated.
Not changed: packages/sdk (openapi.json, gen files) regenerate byte-identical; the tool's description text is not part of the OpenAPI surface.
Testing Done
bun test test/tool/question.test.ts test/tool/parameters.test.ts in packages/opencode: 63 pass, 16 snapshots.
Release: needs a new release (v1.18.32-6) and the andytown pin bump (snapshot, fleet upgrader, coordinator SDK tarball) to take effect.
🤖 Generated with Claude Code
Summary by cubic
Requires at least one recommended option on every question the agent asks. Replo's unanswered-question timer picks the recommended option when nobody answers in Slack or Messages, so an empty list previously meant no timer and no advance notice, leaving the question to wait indefinitely. The tool now requires at least one label even for matters of taste, while QuestionInfo.recommended stays optional so stored questions still load. Takes effect after a new release (v1.18.32-6) and the andytown pin bump.