Summary
During the 2026-06-01 built WorldOS.app Codex-DM short playtest, the second player move recovered but exposed a model/tool-contract defect: Codex first called log_event with speaker: null, which the engine rejected before the model retried without speaker.
Evidence
- Evidence folder:
/Volumes/LEXAR/Codex/worldos-built-app-playtest/codex-app-short-20260601T022114/
- App code SHA reported by harness:
c3dfee6
- Minted run:
play-state/play-20260531192201
- Tool trace:
play-state/play-20260531192201/codex-provider/codex-dm.stdout.jsonl
- Final proof still passed diagnostically:
06-after-move-2-dm-response.png
06-session-surface-after-move-2.json
06-chat-after-move-2.jsonl
The failed tool result was:
Error executing tool log_event: 1 validation error for log_eventArguments
speaker
Input should be a valid string [type=string_type, input_value=None, input_type=NoneType]
The model retried with no speaker, narration landed, and the player-facing session recovered. This is not a release-stopping failure from this run, but it adds turn latency/noise and could become visible if retries fail.
Acceptance Criteria
- Codex DM prompts/wrapper/tool instructions avoid emitting
speaker: null for narration events.
- A repeat built-app or RRI Codex-DM run shows no
speaker:null / Pydantic validation failure in codex-dm.stdout.jsonl.
- The fix preserves engine authority: narration still writes through
log_event; the GUI remains a reader plus /move submitter.
Summary
During the 2026-06-01 built
WorldOS.appCodex-DM short playtest, the second player move recovered but exposed a model/tool-contract defect: Codex first calledlog_eventwithspeaker: null, which the engine rejected before the model retried withoutspeaker.Evidence
/Volumes/LEXAR/Codex/worldos-built-app-playtest/codex-app-short-20260601T022114/c3dfee6play-state/play-20260531192201play-state/play-20260531192201/codex-provider/codex-dm.stdout.jsonl06-after-move-2-dm-response.png06-session-surface-after-move-2.json06-chat-after-move-2.jsonlThe failed tool result was:
The model retried with no
speaker, narration landed, and the player-facing session recovered. This is not a release-stopping failure from this run, but it adds turn latency/noise and could become visible if retries fail.Acceptance Criteria
speaker: nullfor narration events.speaker:null/ Pydantic validation failure incodex-dm.stdout.jsonl.log_event; the GUI remains a reader plus/movesubmitter.