# Intent: Builder-Job-Payload-Felder bis in die agent-codex-Queue durchreichen ## Ziel Die in `board-builder-trigger-column-config` neu eingeführten Payload-Felder `model`/`reasoning_effort`/`iteration_limit` eines Builder-Jobs aus `BOARD_INBOX_DIR` werden von `worker.py` beim Übersetzen in `../agent-codex`s eigenes Queue-Schema (`AGENT_BUILDER_QUEUE_DIR`) nicht verworfen, sondern unverändert in den dortigen Job-Payload übernommen. ## Umfang - `board-agent/worker.py`, `enqueue_builder_job()` (aktuell Zeile 508-538): Signatur um optionale Parameter `model=None`, `reasoning_effort=None`, `iteration_limit=None` erweitern; im `write_payload(...)`-Dict (Zeile 526-537) diese Felder **nur aufnehmen, wenn nicht `None`** (gleiche „kein Feld statt leerer Wert"-Regel wie in den vorgelagerten Trigger-Intents, damit `agent-codex/builder.py`s spätere `payload.get(...)`-Fallback-Logik intakt bleibt). - `process_job()`s Builder-Zweig (aktuell Zeile 1008-1018): liest `payload.get("model")`, `payload.get("reasoning_effort")`, `payload.get("iteration_limit")` aus dem `BOARD_INBOX_DIR`-Job und reicht sie an den erweiterten `enqueue_builder_job(...)`-Aufruf (Zeile 1012) durch. - `completion_watcher.py`s `enqueue_builder_retry_job()` (aktuell Zeile 84-98, ruft `worker.enqueue_builder_job(slug, intent_path, on_complete_dir, runtime)` auf, Zeile 95): unverändert lassen, ruft weiterhin ohne die neuen Parameter auf (automatischer Wiederholungsversuch nach `limit_reached` verwendet bewusst wieder die Env-Var-Defaults, keine erneute `column_config`-Lookup nötig, da außerhalb des Scopes dieses Splits — siehe Risiken unten). - `board-agent/test_board_agent.py`: Test, der einen `BOARD_INBOX_DIR`- Job mit `model`/`reasoning_effort`/`iteration_limit` verarbeitet und prüft, dass die in `AGENT_BUILDER_QUEUE_DIR` geschriebene Datei dieselben Felder enthält; sowie ein Test ohne diese Felder, der prüft, dass der Queue-Payload sie ebenfalls nicht enthält (kein `None`/leerer Platzhalter). ## Explizit ausgeschlossen - Keine Änderung an `agent-codex/builder.py` — dass diese Felder dort gelesen und angewendet werden, ist Scope von `agent-codex-builder-payload-model-override`. - Kein Rückwirken auf den automatischen `limit_reached`-Retry-Pfad (`enqueue_builder_retry_job()`) — der bleibt bei den bisherigen Env-Var-Defaults; siehe „Offene Risiken". - Keine Änderung an Research- oder Review-Pfaden. ## Annahmen - `board-builder-trigger-column-config` ist bereits gemergt und liefert die drei Felder mit den hier vorausgesetzten Namen im `BOARD_INBOX_DIR`-Job-Payload. - Der Feldname im Queue-Payload für `agent-codex` ist identisch zum Feldnamen im `BOARD_INBOX_DIR`-Payload (`model`, `reasoning_effort`, `iteration_limit`) — keine Umbenennung beim Übersetzen. ## Offene Risiken / offene Fragen - Der automatische `limit_reached`-Retry (`enqueue_builder_retry_job()`) verwendet nach diesem Intent weiterhin nur Env-Var-Defaults statt der ursprünglich für den Job gewählten `column_config`-Werte — eine Karte, die mit einem Nicht-Default-Modell durch Builder lief, an ihrem Iterationslimit hängen blieb und automatisch neu versucht wird, verliert dabei ihre ursprüngliche Modellwahl. Das ist eine bewusste Scope-Grenze dieses Splits (der automatische Retry-Mechanismus selbst ist Gegenstand anderer, bereits existierender Intents/Commits, z. B. „board-agent: fix ReadWritePaths gap blocking automatic limit_reached retry") und sollte, falls unerwünscht, als eigenständiges Folge-Intent behandelt werden statt hier mitgelöst zu werden. ## Erfolgskriterien - Ein Builder-Job mit `model`/`reasoning_effort`/`iteration_limit` im `BOARD_INBOX_DIR`-Payload erzeugt eine `AGENT_BUILDER_QUEUE_DIR`- Datei mit denselben Feldern und unverändertem Wert. - Ein Builder-Job ohne diese Felder erzeugt eine Queue-Datei ohne diese Schlüssel (kein Breaking Change für bestehende/alte Jobs). - Bestehende Tests für `enqueue_builder_job()`/`process_job()` bleiben grün, neue Tests sind grün.