Handbook
board_game_choose_move v1
Invariant: The model may only return a chosen_move_id copied from the provided legal_moves list. Invented ids are rejected at validation time.
Updated
Input: player_view (JSON object), legal_moves (non-empty list of {move_id, public_summary}), optional coach_hint (string), optional timeout_sec, temperature.
Prompt style: Omit prompt_style or set prompt_style: "minimal" for the original short system prompt and a user envelope containing only player_view, legal_moves, and coach_hint.
Direct LLM variant: prompt_style: "direct" additionally requires rules_digest (short prose for this game) and prior_plies (list of past plies {ply_index?, seat, move_id, public_summary}; may be empty at game start). The runner uses an expanded system prompt that references rules and move history. Build this payload with task_input_choose_move_direct_llm in forge_lcdl.game_lcdl.plan.
Output: {chosen_move_id: string, reason?: string, ...} parsed from assistant JSON. chosen_move_id must equal one of the input move_id values.
Failure modes
TransportFailure— chat transport errors.ParseFailure— assistant output not valid JSON.SchemaFailure— input or output rejected vs contract schemas.GatewayFailure— upstream/provider errors.
Verification
Task-internal validation and JSON schema checks per contract.json verification_policy.
Changelog
- v1 — Maintained in catalog; see git history for semantic changes.