forge-lcdl

LCDL game tasks — index (alphabetical)

Contracts live under src/forge_lcdl/contracts//v1/contract.md. Runners: game_catalog_v1.py.

task_id Purpose Key inputs Outputs (success) Core validations private / hidden-info
game_move_explain Natural-language explanation for a chosen legal move player_view, legal_moves, selected_move_id, optional utterance move_id, explanation, facts_used, caveats selected_move_id must be legal before LLM call; response move_id must match verbatim Caller must populate player_view.public/private so secrets are appropriate; private is echoed only if orchestrator trusts the model boundary
game_move_parse Map NL utterance to legal ids player_view, legal_moves, utterance status ∈ {selected,ambiguous,illegal_or_unmatched} + move ids / subsets Invented move_id rejected; ambiguity lists subset of legal ids Same private caveat as above
game_move_rank Ordinal ranking + plan text player_view, legal_moves, objective, heuristic_scores (keys ⊆ legal ids), style ranked_moves, overall_plan, risk_notes Rows use legal move_id; ranks 1…k permutation; numeric confidence [0,1] heuristic_scores must align with disclosed position only

Older board-game scaffolding tasks (board_game_*) live in board_game_tasks_v1.py targeting the game_engine types — keep separate until converged.

Checklist — contract uniformity

Every game_move_* v1 note should expose:

  1. Invariants — no invented move identifiers.
  2. Input — required keys and typing.
  3. Output — fields and enums.
  4. Hidden information — tasks must receive seat-filtered player_view only.