S00-012: Approve complete runner prompt delivery after lifecycle checks

Changes: Accept the preserved S00-012 stdin correction and descendant regressions; record independent QA evidence. No source changes.
Validation: Reproduced the legacy 140000-byte delayed-reader timeout and reaped the child. All 28 automation tests and 72 make check tests passed, including complete UTF-8/EOF, submit/timeout descendant cleanup, fresh sessions, scope and snapshots. Reviewed executor message and cumulative patches; git diff --check passed. No Windows, live model or application readiness claim.

Task: S00-012
Agent: auto-qa-04bdb7324ecc
Role: qa
Action: review
Status: done

Task title: Fix runner prompt delivery after partial stdin timeout
This commit is contained in:
wt committed 2026-10-15 02:03:50 +07:00
1 parent 6ec97125ae
commit e4defcd371
6 files changed
+69 -18

No files matched your search

+3 -3
View File
@@ -1,11 +1,11 @@
# Матрица задач
Generated; state revision **34**. Canonical status: state/tasks.json.
Generated; state revision **35**. Canonical status: state/tasks.json.
| ID | Этап | Оператор | Reviewer | Статус | Owner | Зависимости | Задача |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [S00-001](tasks/S00-001.md) | S00 | orchestrator | security | done | auto-orchestrator-48aab142ecde | | Утвердить Web-профиль |
| [S00-002](tasks/S00-002.md) | S00 | orchestrator | security | blocked | auto-orchestrator-68a05c587e33 | S00-001, S00-011, S00-012 | Выбрать framework и build runtime |
| [S00-002](tasks/S00-002.md) | S00 | orchestrator | security | review | auto-orchestrator-68a05c587e33 | S00-001, S00-011, S00-012 | Выбрать framework и build runtime |
| [S00-003](tasks/S00-003.md) | S00 | protocol | qa | todo | | S00-001, S00-002 | Проверить XMPP WSS/auth библиотеку |
| [S00-004](tasks/S00-004.md) | S00 | crypto | security | todo | | S00-001, S00-002 | Проверить browser OMEMO backend |
| [S00-005](tasks/S00-005.md) | S00 | storage | qa | todo | | S00-002 | Выбрать IndexedDB wrapper и migration policy |
@@ -14,7 +14,7 @@ Generated; state revision **34**. 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 | review | auto-ci-cd-f101e40d9902 | S00-001, S00-011, S00-013, S00-014, S00-015 | Fix runner prompt delivery after partial stdin timeout |
| [S00-012](tasks/S00-012.md) | S00 | ci-cd | qa | done | auto-ci-cd-f101e40d9902 | S00-001, S00-011, S00-013, S00-014, S00-015 | 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-015](tasks/S00-015.md) | S00 | ci-cd | qa | done | auto-ci-cd-84e209103f24 | S00-001, S00-011, S00-013, S00-014, S00-016 | Устранить прерывание: Fix runner prompt delivery after partial stdin timeout |
+2 -2
View File
@@ -7,7 +7,7 @@
## Задачи
- [S00-001](../tasks/S00-001.md): Утвердить Web-профиль — orchestrator; done.
- [S00-002](../tasks/S00-002.md): Выбрать framework и build runtime — orchestrator; blocked.
- [S00-002](../tasks/S00-002.md): Выбрать framework и build runtime — orchestrator; review.
- [S00-003](../tasks/S00-003.md): Проверить XMPP WSS/auth библиотеку — protocol; todo.
- [S00-004](../tasks/S00-004.md): Проверить browser OMEMO backend — crypto; todo.
- [S00-005](../tasks/S00-005.md): Выбрать IndexedDB wrapper и migration policy — storage; todo.
@@ -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; review.
- [S00-012](../tasks/S00-012.md): Fix runner prompt delivery after partial stdin timeout — ci-cd; done.
- [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-015](../tasks/S00-015.md): Устранить прерывание: Fix runner prompt delivery after partial stdin timeout — ci-cd; done.
+2 -2
View File
@@ -1,6 +1,6 @@
id,stage,operator,reviewer,status,owner,depends_on,title
S00-001,S00,orchestrator,security,done,auto-orchestrator-48aab142ecde,,Утвердить Web-профиль
S00-002,S00,orchestrator,security,blocked,auto-orchestrator-68a05c587e33,"S00-001, S00-011, S00-012",Выбрать framework и build runtime
S00-002,S00,orchestrator,security,review,auto-orchestrator-68a05c587e33,"S00-001, S00-011, S00-012",Выбрать framework и build runtime
S00-003,S00,protocol,qa,todo,,"S00-001, S00-002",Проверить XMPP WSS/auth библиотеку
S00-004,S00,crypto,security,todo,,"S00-001, S00-002",Проверить browser OMEMO backend
S00-005,S00,storage,qa,todo,,S00-002,Выбрать IndexedDB wrapper и migration policy
@@ -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,review,auto-ci-cd-f101e40d9902,"S00-001, S00-011, S00-013, S00-014, S00-015",Fix runner prompt delivery after partial stdin timeout
S00-012,S00,ci-cd,qa,done,auto-ci-cd-f101e40d9902,"S00-001, S00-011, S00-013, S00-014, S00-015",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-015,S00,ci-cd,qa,done,auto-ci-cd-84e209103f24,"S00-001, S00-011, S00-013, S00-014, S00-016",Устранить прерывание: Fix runner prompt delivery after partial stdin timeout
1 id stage operator reviewer status owner depends_on title
2 S00-001 S00 orchestrator security done auto-orchestrator-48aab142ecde Утвердить Web-профиль
3 S00-002 S00 orchestrator security blocked review auto-orchestrator-68a05c587e33 S00-001, S00-011, S00-012 Выбрать framework и build runtime
4 S00-003 S00 protocol qa todo S00-001, S00-002 Проверить XMPP WSS/auth библиотеку
5 S00-004 S00 crypto security todo S00-001, S00-002 Проверить browser OMEMO backend
6 S00-005 S00 storage qa todo S00-002 Выбрать IndexedDB wrapper и migration policy
9 S00-008 S00 ci-cd qa todo S00-003, S00-004 Описать WSS/upload/TURN/push topology
10 S00-009 S00 orchestrator security todo S00-003, S00-004, S00-005, S00-006, S00-007, S00-008 Согласовать результаты spikes
11 S00-011 S00 ci-cd security done auto-ci-cd-d105e8027730 S00-001 Restore verified npm registry access for the stack spike
12 S00-012 S00 ci-cd qa review done auto-ci-cd-f101e40d9902 S00-001, S00-011, S00-013, S00-014, S00-015 Fix runner prompt delivery after partial stdin timeout
13 S00-013 S00 ci-cd qa done auto-ci-cd-5f68f03dd33b S00-001, S00-011 Bound oversized S21-006 runner context without truncating requirements
14 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
15 S00-015 S00 ci-cd qa done auto-ci-cd-84e209103f24 S00-001, S00-011, S00-013, S00-014, S00-016 Устранить прерывание: Fix runner prompt delivery after partial stdin timeout
@@ -0,0 +1,4 @@
Approve complete runner prompt delivery after lifecycle checks
Changes: Accept the preserved S00-012 stdin correction and descendant regressions; record independent QA evidence. No source changes.
Validation: Reproduced the legacy 140000-byte delayed-reader timeout and reaped the child. All 28 automation tests and 72 make check tests passed, including complete UTF-8/EOF, submit/timeout descendant cleanup, fresh sessions, scope and snapshots. Reviewed executor message and cumulative patches; git diff --check passed. No Windows, live model or application readiness claim.
+25
View File
@@ -0,0 +1,25 @@
# S00-012 independent QA review
Reviewer: auto-qa-04bdb7324ecc (qa). Executor: auto-ci-cd-f101e40d9902 (ci-cd).
Date: 2026-10-15. Decision: approve reliable complete runner prompt delivery.
Input: assigned card/CLI packet, required startup/workflow/task artifacts, exact NFR-007, original startup diagnostic, executor evidence/handoff/message, accepted ADR 0000 and all five direct dependency evidence/reviews/handoffs. Output: independent acceptance report; no source changes.
## Acceptance findings
1. Checkpoint c28412a replaces partial pipe communicate retries with the already-persisted prompt opened in binary mode as child stdin. This provides all UTF-8 bytes and EOF independently of startup delay. The runner polls process.wait rather than sending more input. Independently reproduced the legacy failure: a child delays .5 seconds and reads to EOF; communicate of 140000 UTF-8 bytes with .2-second timeout followed by communicate(None, timeout=1) both time out on Python 3.9.6. The child was killed/reaped and streams closed. The current delayed-reader regression passes, comparing the complete persisted 140024-byte UTF-8 prompt, decoding it after EOF and successfully submitting without scope violation.
2. Deadline and task-transition monitoring remain active at .2-second wait intervals. The timeout and submit regressions from checkpoint 49c054a pass against current code: an actual descendant first installs SIGTERM ignore and records readiness; cleanup prevents its delayed source write, preserves review after submit and produces the expected remediation after timeout. Reviewed prerequisite S00-014 retains first-call SIGTERM/SIGKILL termination and records successful cleanup on the Popen instance. Both deterministic repeated-cleanup and failed-kill propagation/retry tests pass. No natural EPERM reproduction is claimed.
3. All 28 automation tests and all 72 make check tests pass, including fresh sessions, scope enforcement, transition monitoring, prompt budgets, immutable snapshot integrity, generated artifacts, CLI and isolated Git workflow checks. No product code, dependency, stack, shared contract or spec change is included in S00-012.
Examined cumulative source patches c28412a and 49c054a, current runner/test paths, accepted S00-013/S00-014 runner patches, executor submission adb152f (all changed files), and subsequent interruption checkpoint d80f20e. The executor message matches its actual evidence/handoff/CLI-generated metadata changes and explicitly identifies retained prior source work. S00-015 independently accepted recovery from the later provider capacity interruption; S00-012 is now review with all prerequisites done. Initial and pre-report working trees were clean. No acceptance defect or review blocker found.
## Actual independent checks
- python3 scripts/tasks.py resume --agent auto-qa-04bdb7324ecc, show S00-012 and packet S00-012 --agent auto-qa-04bdb7324ecc: exit 0 each; empty owned list expected for reviewer, different executor and correct review assignment; no claim.
- Read-only git log/show/status and required file reads: exit 0; patches, message, scope and dependency reports inspected.
- Inline Python subprocess reproduction of legacy communicate retry: exit 0; asserted two timeouts for the delayed reader and 140000-byte payload; killed/reaped child and closed streams in finally.
- python3 -m unittest discover -s tests/tooling -p test_automation.py -v > /private/tmp/luma-S00-012-04bdb7324ecc-automation.log 2>&1: exit 0; 28 tests passed in 13.373s.
- make check > /private/tmp/luma-S00-012-04bdb7324ecc-check.log 2>&1: exit 0; 72 tests passed in 20.193s. Current foundation validation includes 281 tasks, 22 stages, 221 requirements and 211 allocated Web requirements. These two checks ran concurrently in independent temporary fixtures.
- git diff --check and git status --short before reports: exit 0; no source changes or whitespace errors.
Runtime: Python 3.9.6, macOS 27.0.1 arm64. Tests exercise local subprocesses and isolated fixture harnesses; no model, browser, live product/provider integration, Windows cleanup or escaped process-group check is claimed. Approval accepts only S00-012, not root S00-002 or application readiness. Coordinator owns the review commit and next fresh process; done without that commit is not a completed automation cycle. Reviewer exits after approve and does not mutate Git.
+33 -11
View File
@@ -1,6 +1,6 @@
{
"schema_version": 1,
"revision": 34,
"revision": 35,
"tasks": {
"S00-001": {
"status": "done",
@@ -15,18 +15,16 @@
"completed_at": "2026-10-14T18:03:56+00:00"
},
"S00-002": {
"status": "blocked",
"status": "review",
"owner": "auto-orchestrator-68a05c587e33",
"started_at": "2026-10-14T18:11:33+00:00",
"reason": "Reviewer startup hangs waiting for stdin EOF: runner retries communicate(None) after a .2s partial-write timeout. Reproduced with delayed stdin reader and 80000-byte payload on Python 3.9.6; no S00-002 acceptance review was performed.",
"updated_at": "2026-10-14T18:24:59+00:00",
"blocked_by": [
"S00-012"
],
"reason": null,
"updated_at": "2026-10-14T19:03:50+00:00",
"blocked_by": [],
"resume_status": "review",
"blocker_report": "state/blockers/S00-012.md",
"handoff": "state/handoffs/S00-002.md",
"previous_owner": "auto-orchestrator-3a4f07103316",
"previous_owner": "auto-orchestrator-68a05c587e33",
"resumed_after_blocker": true,
"evidence": "state/evidence/S00-002-auto-orchestrator-68a05c587e33.md"
},
@@ -1136,19 +1134,22 @@
"completed_at": "2026-10-14T18:11:33+00:00"
},
"S00-012": {
"status": "review",
"status": "done",
"owner": "auto-ci-cd-f101e40d9902",
"external_wait": false,
"reason": null,
"started_at": "2026-10-14T18:48:36+00:00",
"updated_at": "2026-10-14T19:01:28+00:00",
"updated_at": "2026-10-14T19:03:50+00:00",
"blocked_by": [],
"resume_status": "review",
"blocker_report": "state/blockers/S00-015.md",
"handoff": "state/handoffs/S00-012.md",
"previous_owner": "auto-ci-cd-f101e40d9902",
"resumed_after_blocker": true,
"evidence": "state/evidence/S00-012-auto-ci-cd-f101e40d9902.md"
"evidence": "state/evidence/S00-012-auto-ci-cd-f101e40d9902.md",
"reviewer": "auto-qa-04bdb7324ecc",
"review_evidence": "state/evidence/S00-012-review.md",
"completed_at": "2026-10-14T19:03:50+00:00"
},
"S00-013": {
"status": "done",
@@ -1641,6 +1642,27 @@
"to": "done",
"reason": null,
"evidence": "state/evidence/S00-015-review.md"
},
{
"revision": 35,
"at": "2026-10-14T19:03:50+00:00",
"action": "auto-unblock",
"task": "S00-002",
"resolved_by": "S00-012",
"to": "review",
"fresh_agent_required": true
},
{
"revision": 35,
"at": "2026-10-14T19:03:50+00:00",
"action": "approve",
"task": "S00-012",
"agent": "auto-qa-04bdb7324ecc",
"role": "qa",
"from": "review",
"to": "done",
"reason": null,
"evidence": "state/evidence/S00-012-review.md"
}
],
"retired_agents": [