S00-012: Verify runner prompt delivery and lifecycle regressions

Changes: Record verification evidence and replace the blocked S00-012 handoff with independent QA review instructions. Retain the existing stdin implementation and regressions from prior checkpoints; no new source changes.
Validation: Reproduced the legacy partial stdin timeout on Python 3.9.6 and reaped the child. All 28 automation tests passed, including exact 140024-byte UTF-8/EOF and timeout/submit descendant cleanup. make check passed all 72 tests; git diff --check passed. No live model, application readiness or Windows cleanup check is claimed.

Task: S00-012
Agent: auto-ci-cd-f101e40d9902
Role: ci-cd
Action: claim
Status: review

Task title: Fix runner prompt delivery after partial stdin timeout
This commit is contained in:
wt committed 2026-10-15 01:50:53 +07:00
1 parent bdfde480d4
commit adb152fdd0
7 files changed
+72 -14

No files matched your search

@@ -0,0 +1,4 @@
Verify runner prompt delivery and lifecycle regressions
Changes: Record verification evidence and replace the blocked S00-012 handoff with independent QA review instructions. Retain the existing stdin implementation and regressions from prior checkpoints; no new source changes.
Validation: Reproduced the legacy partial stdin timeout on Python 3.9.6 and reaped the child. All 28 automation tests passed, including exact 140024-byte UTF-8/EOF and timeout/submit descendant cleanup. make check passed all 72 tests; git diff --check passed. No live model, application readiness or Windows cleanup check is claimed.
@@ -0,0 +1,27 @@
# S00-012 executor evidence
Agent: auto-ci-cd-f101e40d9902; role: ci-cd; date: 2026-10-15.
Result: preserved stdin implementation verified after reviewed prerequisites; pending independent QA review.
## Input, outcome and scope
Read master/startup instructions, role, card and CLI packet, exact NFR-007 in specs/tz_clear.md, previous handoff, diagnostic evidence, accepted scope ADR 0000 and direct S00-001/S00-011/S00-013/S00-014 evidence, reviews and handoffs. CLI resume confirmed current ownership; no repeated claim. Initial git status showed only coordinator state/tasks.json metadata.
The implementation is already preserved in S00-012 checkpoint c28412ae8f79e03257b4fab2460ff62dc4682c72: runner opens its persisted prompt in binary mode as child stdin and polls process.wait at .2-second intervals. A regular file supplies all UTF-8 bytes and EOF regardless of delayed startup and avoids the partial pipe retry. No new source edits were necessary in this fresh session. Checkpoint 49c054a preserves the real timeout/submit descendant regressions. Independently reviewed S00-013 fixes prompt budgeting; S00-014 fixes repeated cleanup. Those prerequisite results are retained, not reimplemented or accepted on their behalf.
Acceptance is complete prompt/EOF delivery with timeout/transition cleanup, fresh sessions, scope and existing tooling checks preserved. No immutable spec, task definition, shared contract, dependency, stack or product implementation was changed. This session writes only workflow evidence, handoff and commit message, then submits via CLI.
## Actual checks and results
- python3 scripts/tasks.py resume --agent auto-ci-cd-f101e40d9902, show S00-012 and packet S00-012 --agent auto-ci-cd-f101e40d9902: exit 0 each; assigned in_progress task and context read.
- Read-only git log --all --grep='^S00-012:' --oneline -n 5 and git show c28412a -- scripts/runner.py tests/tooling/test_automation.py: exit 0; preserved source implementation/regression inspected alongside current code.
- Synthetic legacy reproduction using Python subprocess: exit 0. A child waits .5 seconds then reads stdin to EOF; parent sends 140000 UTF-8 bytes with communicate(payload, timeout=.2), then communicate(None, timeout=1). Both time out on Python 3.9.6, reproducing stranded delivery/EOF. Child killed and reaped, streams closed in finally. No model launched.
- python3 -m unittest discover -s tests/tooling -p test_automation.py -v: exit 0; all 28 tests passed in 11.202s. Delayed-reader regression verifies exact equality with the persisted 140024-byte UTF-8 prompt, reaches EOF, decodes it and successfully submits. Timeout and submit regressions launch a SIGTERM-ignoring descendant, require readiness before cleanup and confirm no delayed source file appears after 1.6 seconds. Successful repeated cleanup and failed-kill propagation/retry regressions pass. Fresh process chain, scope, terminal escalation and current claim/review prompt budgets pass.
- make check > /private/tmp/luma-S00-012-f101e40d9902-check.log 2>&1: exit 0; 72 tests passed in 17.834s; validated 279 tasks, 22 stages, 221 requirements and 211 allocated Web requirements. Includes snapshot integrity, generated artifacts, CLI, automation and isolated Git workflow tests.
- git diff --check and git diff --stat before writing reports: exit 0 each; only coordinator state/tasks.json metadata changed, no source changes.
## Limits and next step
Checks exercise real local subprocesses and isolated workflow fixtures, not a live model or product/browser/provider integration. Current runtime is Python 3.9.6 on macOS; Windows cleanup was not exercised. No fresh natural EPERM reproduction is claimed; the reviewed deterministic cleanup regressions and real descendant checks pass. Foundation checks do not prove app readiness or accept root S00-002.
QA must independently review the cumulative S00-012 checkpoints, prerequisite source changes, actual tests and this session's metadata/message; rerun make check. No blocker remains in these checks. Coordinator owns commit and next fresh reviewer; executor does not set done or continue another task.
+7 -4
View File
@@ -1,7 +1,10 @@
# S00-012 partial handoff
# S00-012 handoff for independent QA review
Executor: auto-ci-cd-28868645424b, ci-cd. Existing stdin fix and delayed UTF-8 regression from checkpoint c28412a were inspected. Complete 140024-byte delivery/EOF and current prompt budgets pass. No runner source changes this session.
Executor: auto-ci-cd-f101e40d9902 (ci-cd), 2026-10-15.
Result: preserved stdin correction verified after independently reviewed S00-013/S00-014. No new source edits in this session. Runner supplies the persisted binary UTF-8 prompt as stdin and polls wait, retaining deadline and terminal-transition monitoring. Complete prompt and EOF no longer depend on pipe retry behavior.
Added two descendant cleanup regressions in tests/tooling/test_automation.py; timeout scenario passes, submit-transition scenario errors. A SIGTERM-ignoring descendant records readiness and would write a source file after 1.5 seconds. Parent submits and sleeps. First stop_process_tree succeeds; its repeated finally invocation after parent is reaped (-15) raises EPERM at os.killpg(SIGTERM). Broad OSError handling then tries invalid escalation from review state. No acceptance or submission claimed.
Review cumulative S00-012 source checkpoints c28412a (stdin and delayed UTF-8 regression) and 49c054a (timeout/submit descendant checks), plus accepted prerequisite S00-014 cleanup and S00-013 prompt-budget changes. All exist in current code. Re-run make check and inspect this executor's evidence/commit message against actual metadata diff. Independent QA must approve/reject; no done is set by executor.
Evidence: state/evidence/S00-012-auto-ci-cd-28868645424b.md. Full automation run: 25/26 passed, exit 1. make check not run following this blocker. Next fresh remediation must resolve this bounded repeated-cleanup lifecycle failure without weakening process-tree termination or suppressing real live-process permission failures. After independently reviewed remediation, a fresh S00-012 executor must rerun regressions/make check and submit. Coordinator owns checkpoint; this reporter stops after escalate.
Actual checks: legacy pipe failure reproduced on Python 3.9.6 with 140000 UTF-8 bytes and a .5-second delayed reader (both communicate calls timed out; child killed/reaped). Automation suite: 28 tests passed in 11.202s, exit 0. Complete 140024-byte UTF-8/EOF, fresh sessions, prompt budgets, scope, timeout/submit descendant cleanup and deterministic repeated-cleanup tests pass. make check: 72 tests passed in 17.834s, exit 0; 279 tasks validated with immutable snapshot checks. No blocker found.
Evidence: state/evidence/S00-012-auto-ci-cd-f101e40d9902.md. No model, browser, product/provider readiness, Windows cleanup or fresh natural EPERM claim. Root S00-002 is not accepted by this submission. Coordinator must commit the submission before launching a fresh QA review; this process ends after submit.
+30 -6
View File
@@ -1,6 +1,6 @@
{
"schema_version": 1,
"revision": 22,
"revision": 24,
"tasks": {
"S00-001": {
"status": "done",
@@ -1136,18 +1136,19 @@
"completed_at": "2026-10-14T18:11:33+00:00"
},
"S00-012": {
"status": "todo",
"owner": null,
"status": "review",
"owner": "auto-ci-cd-f101e40d9902",
"external_wait": false,
"reason": null,
"started_at": "2026-10-14T18:42:03+00:00",
"updated_at": "2026-10-14T18:48:36+00:00",
"started_at": "2026-10-14T18:48:36+00:00",
"updated_at": "2026-10-14T18:50:52+00:00",
"blocked_by": [],
"resume_status": "in_progress",
"blocker_report": "state/blockers/S00-014.md",
"handoff": "state/handoffs/S00-012.md",
"previous_owner": "auto-ci-cd-28868645424b",
"resumed_after_blocker": true
"resumed_after_blocker": true,
"evidence": "state/evidence/S00-012-auto-ci-cd-f101e40d9902.md"
},
"S00-013": {
"status": "done",
@@ -1455,6 +1456,29 @@
"to": "done",
"reason": null,
"evidence": "state/evidence/S00-014-review.md"
},
{
"revision": 23,
"at": "2026-10-14T18:48:36+00:00",
"action": "claim",
"task": "S00-012",
"agent": "auto-ci-cd-f101e40d9902",
"role": "ci-cd",
"from": "todo",
"to": "in_progress",
"reason": null
},
{
"revision": 24,
"at": "2026-10-14T18:50:52+00:00",
"action": "submit",
"task": "S00-012",
"agent": "auto-ci-cd-f101e40d9902",
"role": null,
"from": "in_progress",
"to": "review",
"reason": null,
"evidence": "state/evidence/S00-012-auto-ci-cd-f101e40d9902.md"
}
],
"retired_agents": [