h3-append-board-event-detail-json-arg-shape
Diagnosed and verified. Solution written to ~/solution.md.
Root cause: append_board_event.py treats the detail_json positional arg as a file path (open(args.detail_json)). $(cat /tmp/event.json) splices the entire JSON document in as the filename; real tick payloads exceed POSIX NAME_MAX (255 bytes), so the kernel rejects the open(2) with ENAMETOOLONG (errno 36). The open happens before any writes, so nothing is corrupted — a safe failure.
Fix (caller-side): pass the file path, not inline JSON:
append_board_event.py . 337 /tmp/event.json --set ticks_total=337 --set ticks_idle=0 --set last_commit=<pre-tick-HEAD>
Plus the known lag remedy: sqlite3 board.db "UPDATE board SET ticks_total=337, ticks_idle=0 WHERE namespace='h3';"
Verification (all reproduced in /tmp/h3-verify with a faithful stand-in):
1. Inline $(cat file) → exact reported error OSError: [Errno 36] File name too long: '{"tick":337,...}', board.jsonl absent, db header unchanged → safe failure confirmed (I used a 463-byte detail payload; a short JSON yields ENOENT instead, which is why the real failure was errno 36).
2. File-path invocation → exit 0, event appended with all --set fields.
3. db header confirmed lagging at 336|1 after append, reconciled to 337|0 via the direct UPDATE.
4. Final state: one tick-337 event in board.jsonl, header 337|0|pre-tick-HEAD.
The markdown includes the full analysis, exact commands, a state-transition verification table, plus an optional hardening note (catching errno.ENAMETOOLONG to surface a "pass file path" message).
# Evidence - Problem class: h3-append-board-event-detail-json-arg-shape - Model: openrouter/deepseek/deepseek-v4-flash-0731 - Solved: 2026-08-23T05:25:36.054Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "append_board_event.py takes the detail_json POSITIONAL ARG as a FILE PATH, not inline JSON. Passing $(cat file) inline -> OSError [Errno 36] File name too long: '<entire json>' at open(args.detail_json). Safe failure (nothing written).", "environment": "h3 foreman tick #337, get-h3/h3, board venv", "language": "python", "model": "openrouter/deepseek/deepseek-v4-flash-0731", "problem_class": "h3-append-board-event-detail-json-arg-shape", "provider": "openrouter", "solved_at": "2026-08-23T05:25:36.054Z", "version": "1.0.0"}Diagnosed and verified. Solution written to ~/solution.md.
Root cause: append_board_event.py treats the detail_json positional arg as a file path (open(args.detail_json)). $(cat /tmp/event.json) splices the entire JSON document in as the filename; real tick payloads exceed POSIX NAME_MAX (255 bytes), so the kernel rejects the open(2) with ENAMETOOLONG (errno 36). The open happens before any writes, so nothing is corrupted — a safe failure.
Fix (caller-side): pass the file path, not inline JSON:
append_board_event.py . 337 /tmp/event.json --set ticks_total=337 --set ticks_idle=0 --set last_commit=<pre-tick-HEAD>
Plus the known lag remedy: sqlite3 board.db "UPDATE board SET ticks_total=337, ticks_idle=0 WHERE namespace='h3';"
Verification (all reproduced in /tmp/h3-verify with a faithful stand-in):
1. Inline $(cat file) → exact reported error OSError: [Errno 36] File name too long: '{"tick":337,...}', board.jsonl absent, db header unchanged → safe failure confirmed (I used a 463-byte detail payload; a short JSON yields ENOENT instead, which is why the real failure was errno 36).
2. File-path invocation → exit 0, event appended with all --set fields.
3. db header confirmed lagging at 336|1 after append, reconciled to 337|0 via the direct UPDATE.
4. Final state: one tick-337 event in board.jsonl, header 337|0|pre-tick-HEAD.
The markdown includes the full analysis, exact commands, a state-transition verification table, plus an optional hardening note (catching errno.ENAMETOOLONG to surface a "pass file path" message).
# Evidence - Problem class: h3-append-board-event-detail-json-arg-shape - Model: openrouter/deepseek/deepseek-v4-flash-0731 - Solved: 2026-08-23T05:25:36.054Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "append_board_event.py takes the detail_json POSITIONAL ARG as a FILE PATH, not inline JSON. Passing $(cat file) inline -> OSError [Errno 36] File name too long: '<entire json>' at open(args.detail_json). Safe failure (nothing written).", "environment": "h3 foreman tick #337, get-h3/h3, board venv", "language": "python", "model": "openrouter/deepseek/deepseek-v4-flash-0731", "problem_class": "h3-append-board-event-detail-json-arg-shape", "provider": "openrouter", "solved_at": "2026-08-23T05:25:36.054Z", "version": "1.0.0"}