diff --git a/planning/TASK_MATRIX.md b/planning/TASK_MATRIX.md index e783fd6..50497fe 100644 --- a/planning/TASK_MATRIX.md +++ b/planning/TASK_MATRIX.md @@ -1,6 +1,6 @@ # Матрица задач -Generated; state revision **22**. Canonical status: state/tasks.json. +Generated; state revision **24**. Canonical status: state/tasks.json. | ID | Этап | Оператор | Reviewer | Статус | Owner | Зависимости | Задача | | --- | --- | --- | --- | --- | --- | --- | --- | @@ -14,7 +14,7 @@ Generated; state revision **22**. Canonical status: state/tasks.json. | [S00-008](tasks/S00-008.md) | S00 | ci-cd | qa | todo | | S00-003, S00-004 | Описать WSS/upload/TURN/push topology | | [S00-009](tasks/S00-009.md) | S00 | orchestrator | security | todo | | S00-003, S00-004, S00-005, S00-006, S00-007, S00-008 | Согласовать результаты spikes | | [S00-011](tasks/S00-011.md) | S00 | ci-cd | security | done | auto-ci-cd-d105e8027730 | S00-001 | Restore verified npm registry access for the stack spike | -| [S00-012](tasks/S00-012.md) | S00 | ci-cd | qa | todo | | S00-001, S00-011, S00-013, S00-014 | Fix runner prompt delivery after partial stdin timeout | +| [S00-012](tasks/S00-012.md) | S00 | ci-cd | qa | review | auto-ci-cd-f101e40d9902 | S00-001, S00-011, S00-013, S00-014 | Fix runner prompt delivery after partial stdin timeout | | [S00-013](tasks/S00-013.md) | S00 | ci-cd | qa | done | auto-ci-cd-5f68f03dd33b | S00-001, S00-011 | Bound oversized S21-006 runner context without truncating requirements | | [S00-014](tasks/S00-014.md) | S00 | ci-cd | qa | done | auto-ci-cd-14343249da62 | S00-001, S00-011, S00-013 | Fix repeated runner cleanup after a submitted parent is reaped | | [S00-010](tasks/S00-010.md) | S00 | qa | orchestrator | todo | | S00-001, S00-002, S00-003, S00-004, S00-005, S00-006, S00-007, S00-008, S00-009 | Gate: Профиль и проверка стека | diff --git a/planning/stages/S00.md b/planning/stages/S00.md index 1c48eaf..737c342 100644 --- a/planning/stages/S00.md +++ b/planning/stages/S00.md @@ -16,7 +16,7 @@ - [S00-008](../tasks/S00-008.md): Описать WSS/upload/TURN/push topology — ci-cd; todo. - [S00-009](../tasks/S00-009.md): Согласовать результаты spikes — orchestrator; todo. - [S00-011](../tasks/S00-011.md): Restore verified npm registry access for the stack spike — ci-cd; done. -- [S00-012](../tasks/S00-012.md): Fix runner prompt delivery after partial stdin timeout — ci-cd; todo. +- [S00-012](../tasks/S00-012.md): Fix runner prompt delivery after partial stdin timeout — ci-cd; review. - [S00-013](../tasks/S00-013.md): Bound oversized S21-006 runner context without truncating requirements — ci-cd; done. - [S00-014](../tasks/S00-014.md): Fix repeated runner cleanup after a submitted parent is reaped — ci-cd; done. - [S00-010](../tasks/S00-010.md): Gate: Профиль и проверка стека — qa; todo. diff --git a/planning/task_matrix.csv b/planning/task_matrix.csv index 21b094d..56c2bd8 100644 --- a/planning/task_matrix.csv +++ b/planning/task_matrix.csv @@ -9,7 +9,7 @@ S00-007,S00,security,orchestrator,todo,,"S00-004, S00-005",Утвердить pa S00-008,S00,ci-cd,qa,todo,,"S00-003, S00-004",Описать WSS/upload/TURN/push topology S00-009,S00,orchestrator,security,todo,,"S00-003, S00-004, S00-005, S00-006, S00-007, S00-008",Согласовать результаты spikes S00-011,S00,ci-cd,security,done,auto-ci-cd-d105e8027730,S00-001,Restore verified npm registry access for the stack spike -S00-012,S00,ci-cd,qa,todo,,"S00-001, S00-011, S00-013, S00-014",Fix runner prompt delivery after partial stdin timeout +S00-012,S00,ci-cd,qa,review,auto-ci-cd-f101e40d9902,"S00-001, S00-011, S00-013, S00-014",Fix runner prompt delivery after partial stdin timeout S00-013,S00,ci-cd,qa,done,auto-ci-cd-5f68f03dd33b,"S00-001, S00-011",Bound oversized S21-006 runner context without truncating requirements S00-014,S00,ci-cd,qa,done,auto-ci-cd-14343249da62,"S00-001, S00-011, S00-013",Fix repeated runner cleanup after a submitted parent is reaped S00-010,S00,qa,orchestrator,todo,,"S00-001, S00-002, S00-003, S00-004, S00-005, S00-006, S00-007, S00-008, S00-009",Gate: Профиль и проверка стека diff --git a/state/commit_messages/auto-ci-cd-f101e40d9902.txt b/state/commit_messages/auto-ci-cd-f101e40d9902.txt new file mode 100644 index 0000000..4492824 --- /dev/null +++ b/state/commit_messages/auto-ci-cd-f101e40d9902.txt @@ -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. diff --git a/state/evidence/S00-012-auto-ci-cd-f101e40d9902.md b/state/evidence/S00-012-auto-ci-cd-f101e40d9902.md new file mode 100644 index 0000000..0842e88 --- /dev/null +++ b/state/evidence/S00-012-auto-ci-cd-f101e40d9902.md @@ -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. diff --git a/state/handoffs/S00-012.md b/state/handoffs/S00-012.md index 88c74bf..817fc62 100644 --- a/state/handoffs/S00-012.md +++ b/state/handoffs/S00-012.md @@ -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. diff --git a/state/tasks.json b/state/tasks.json index 24d2e5a..fd483f5 100644 --- a/state/tasks.json +++ b/state/tasks.json @@ -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": [