Files
LumaWeb/state/evidence/S00-002-manual-security-stdin-20261015a.md
T
wt c28412ae8f S00-012: Record blocked task and remediation handoff
Changes: Preserve incomplete work and blocker metadata for S00-012. This checkpoint does not mark implementation accepted.
Validation: Session ended with status blocked.
Blocker: Required automation suite fails in existing all-prompts budget test: S21-006 exceeds even a diagnostic 90000-character prompt limit. This blocks verification of the stdin remediation; production limit remains 80000.

Task: S00-012
Agent: manual-ci-cd-stdin-20261015b
Role: ci-cd
Action: escalate
Status: blocked

Task title: Fix runner prompt delivery after partial stdin timeout
2026-10-15 01:37:36 +07:00

2.0 KiB

S00-002 review startup blocker

Reporter: manual-security-stdin-20261015a, security-role supervisor. No acceptance review was performed. Implementation commit 59b9ff62fe is preserved.

The assigned reviewer auto-security-9b8ae55222db (PID 86944) produced an empty output.log for several minutes. Its prompt.md contains 75696 bytes / 55647 characters. A one-second OS sample showed codex_exec::resolve_root_prompt -> Stdin::read_to_end -> read. This is startup waiting on stdin, before agent execution.

Actual runtime: Python 3.9.6. scripts/runner.py calls communicate(prompt, timeout=.2), then retries communicate(None). In this runtime Popen._communicate only registers stdin for writing when the current input argument is truthy. A timeout during partial delivery therefore prevents remaining writes/EOF on subsequent calls.

Synthetic reproduction, exit 0: launch Python child sleeping .5 seconds then reading stdin to EOF; parent sends 80000 bytes with communicate(timeout=.2), observes TimeoutExpired, retries communicate(None, timeout=1), observes a second TimeoutExpired. Child then terminated and reaped. Output: REPRODUCED: retry communicate(None) leaves child waiting for stdin; payload bytes=80000; Python=3.9.6.

Runner PID 84112 was stopped with SIGINT; its BaseException cleanup terminated/reaped the reviewer and removed .runner.lock. Supervisor exec session returned 130/KeyboardInterrupt. No product source edits, Git rollback, task acceptance or release bypass. Network access remains enabled in runner.local.json and verified by reviewed S00-011.

Required remediation: make runner prompt delivery resilient to slow startup/backpressure while preserving terminal-transition monitoring, timeout/process-tree cleanup and full untruncated fresh prompts. Add a deterministic delayed-stdin/large-payload regression test. Do not change product stack, requirements or S00-002 implementation. Current original review must resume in a fresh reviewer only after independent remediation acceptance.