S00-014: Approve runner cleanup idempotence after independent lifecycle checks
Changes: Accept the bounded S00-014 cleanup correction and record independent QA evidence and handoff; no reviewer source changes. Validation: Four focused signal/descendant tests and make check passed (72 tests); prior function independently fails the injected repeated-signal regression in memory. Inspected executor patch/message and scope; git diff --check passed. Natural EPERM, Windows and parent-task acceptance are not claimed. Task: S00-014 Agent: auto-qa-0c2d58e2382e Role: qa Action: review Status: done Task title: Fix repeated runner cleanup after a submitted parent is reaped
This commit is contained in:
1 parent
7a737eeb49
commit
bdfde480d4
7 files changed
+76
-19
No files matched your search
@@ -0,0 +1,4 @@
|
||||
Approve runner cleanup idempotence after independent lifecycle checks
|
||||
|
||||
Changes: Accept the bounded S00-014 cleanup correction and record independent QA evidence and handoff; no reviewer source changes.
|
||||
Validation: Four focused signal/descendant tests and make check passed (72 tests); prior function independently fails the injected repeated-signal regression in memory. Inspected executor patch/message and scope; git diff --check passed. Natural EPERM, Windows and parent-task acceptance are not claimed.
|
||||
@@ -0,0 +1,29 @@
|
||||
# S00-014 independent QA review
|
||||
|
||||
Reviewer: auto-qa-0c2d58e2382e (qa).
|
||||
Executor: auto-ci-cd-14343249da62 (ci-cd).
|
||||
Date: 2026-10-15. Decision: approve the bounded repeated-cleanup correction.
|
||||
|
||||
Input: assigned card/context, master/startup/workflow instructions, exact NFR-007, executor evidence/handoff/message, S00-012 preserved evidence/handoff, blocker reports, accepted ADR 0000 and direct dependency evidence/reviews/handoffs. Output: independent acceptance report. No reviewer source changes.
|
||||
|
||||
## Findings against acceptance
|
||||
|
||||
1. The preserved real submit regression passes: a descendant first installs SIGTERM ignore and records readiness; the harness submits and sleeps. Runner stops the process group, retains review state, records no scope violation, and the descendant cannot write its delayed source file. No invalid escalation occurs.
|
||||
2. The equivalent real timeout regression passes, prevents the delayed write and produces the expected blocked/remediation state. Initial cleanup retains SIGTERM followed by SIGKILL even when the parent has already exited. Both preserved subprocess tests were independently rerun.
|
||||
3. Successful cleanup is recorded on the same Popen instance only after all existing termination steps succeed. The subsequent finally cleanup returns without signaling the reaped group again. PermissionError remains unsuppressed; the deterministic final-SIGKILL failure test confirms a failed attempt does not mark completion and a retry signals again. Existing stdin, deadline/transition monitoring, prompt budgets and scope behavior remain intact; their full-suite checks pass.
|
||||
|
||||
Examined executor commit 7a737eeb499c2e4551665747bddeaf78cb75aba1, both source patches, metadata diff, and commit message. Source changes are limited to scripts/runner.py and tests/tooling/test_automation.py; other changes are workflow/generated artifacts. The executor message matches the actual correction and tests and accurately distinguishes injected EPERM from a natural syscall reproduction. Initial working tree was clean. No acceptance defect or review blocker found.
|
||||
|
||||
## Actual independent checks
|
||||
|
||||
- `python3 scripts/tasks.py resume --agent auto-qa-0c2d58e2382e` and `show S00-014`: exit 0 each; empty owned list expected for reviewer, task in review with a different executor; no claim.
|
||||
- `git log --all --oneline --grep='^S00-014:'`, `git show 7a737ee` scoped source and metadata sections, and initial `git status --short`: exit 0; patch/message reviewed and tree clean.
|
||||
- `PYTHONPATH=tests/tooling python3 -m unittest test_automation.RunnerTests.test_completed_cleanup_does_not_signal_reaped_group_again test_automation.RunnerTests.test_failed_descendant_kill_is_not_marked_complete test_automation.RunnerTests.test_submit_transition_stops_source_writing_descendant test_automation.RunnerTests.test_timeout_stops_source_writing_descendant -v`: exit 0; four tests in 3.982s.
|
||||
- Read-only in-memory Python check: extracted stop_process_tree from `git show 7a737ee^:scripts/runner.py` using AST, temporarily bound it in the test module, ran the deterministic completed-cleanup test and asserted its sole error was `PermissionError: Reaped process group inaccessible`; exit 0. No source edits or real EPERM claim. This independently confirms the regression fails against the prior function.
|
||||
- `make check > /private/tmp/luma-S00-014-review-check.log 2>&1`: exit 0; 72 tests in 17.514s, validation of 279 tasks, 22 stages, 221 requirements and 211 allocated Web requirements. Includes complete delayed UTF-8/EOF delivery, timeout/transition, fresh sessions, scope, current prompt budgets and immutable snapshots.
|
||||
- `git diff --check` and final pre-report `git status --short`: exit 0; no whitespace errors or source changes.
|
||||
- Runtime observations: Python 3.9.6; macOS 27.0.1, build 26A434. No browser/server required for this tooling task.
|
||||
|
||||
## Limits and handoff
|
||||
|
||||
The original natural EPERM was not reproduced in this session; deterministic signal injection reproduces the repeated-signal failure. Windows cleanup and escaped process groups were not tested. Existing SIGKILL semantics are preserved; no permission bypass or process enumeration was added. No application, model, live provider, S00-012 or root S00-002 acceptance is claimed. Approval covers only S00-014. Coordinator must commit the review transition before launching a fresh process for the returned parent task; reviewer does not continue that work or mutate Git.
|
||||
@@ -6,3 +6,5 @@ Result: successful stop_process_tree cleanup is recorded on the Popen object, pr
|
||||
Ready for independent QA review. Inspect actual source diff and commit message; repeat make check and the two deterministic signal tests. Verify initial SIGTERM/final SIGKILL ordering, no repeated signaling after success, no suppression/marking on inaccessible live descendants, and both preserved real SIGTERM-ignoring descendant regressions. The natural prior EPERM did not recur in this fresh session; deterministic injected EPERM failed before the fix and passes after it. Do not describe it as a fresh real-syscall reproduction.
|
||||
|
||||
Focused checks: 4 tests passed, exit 0. make check: 72 tests passed in 17.247s, exit 0, including delayed UTF-8/EOF, deadline, transition, fresh sessions, scope and unchanged prompt budgets. Evidence: state/evidence/S00-014-auto-ci-cd-14343249da62.md. No blocker or app/parent-task acceptance claimed. Coordinator must commit implementation and launch a fresh QA reviewer; executor does not set done, continue S00-012, or mutate Git.
|
||||
|
||||
Independent QA review: auto-qa-0c2d58e2382e, 2026-10-15. Accepted the bounded repeated-cleanup correction; report: state/evidence/S00-014-review.md. Four focused tests and make check (72 tests in 17.514s) passed, exit 0. Independently confirmed the prior function fails the injected repeated-signal test in memory. No natural EPERM reproduction or parent-task acceptance claimed. No reviewer source changes or blocker. Coordinator must commit this review transition and launch a fresh process to continue S00-012.
|
||||
+34
-12
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"revision": 21,
|
||||
"revision": 22,
|
||||
"tasks": {
|
||||
"S00-001": {
|
||||
"status": "done",
|
||||
@@ -1136,19 +1136,17 @@
|
||||
"completed_at": "2026-10-14T18:11:33+00:00"
|
||||
},
|
||||
"S00-012": {
|
||||
"status": "blocked",
|
||||
"owner": "auto-ci-cd-28868645424b",
|
||||
"status": "todo",
|
||||
"owner": null,
|
||||
"external_wait": false,
|
||||
"reason": "Submit-transition descendant regression fails: repeated stop_process_tree after parent reap raises EPERM at os.killpg; launch OSError handling then attempts invalid escalation from review state.",
|
||||
"reason": null,
|
||||
"started_at": "2026-10-14T18:42:03+00:00",
|
||||
"updated_at": "2026-10-14T18:45:16+00:00",
|
||||
"blocked_by": [
|
||||
"S00-014"
|
||||
],
|
||||
"updated_at": "2026-10-14T18:48:36+00:00",
|
||||
"blocked_by": [],
|
||||
"resume_status": "in_progress",
|
||||
"blocker_report": "state/blockers/S00-014.md",
|
||||
"handoff": "state/handoffs/S00-012.md",
|
||||
"previous_owner": "manual-ci-cd-stdin-20261015b",
|
||||
"previous_owner": "auto-ci-cd-28868645424b",
|
||||
"resumed_after_blocker": true
|
||||
},
|
||||
"S00-013": {
|
||||
@@ -1165,14 +1163,17 @@
|
||||
"completed_at": "2026-10-14T18:42:03+00:00"
|
||||
},
|
||||
"S00-014": {
|
||||
"status": "review",
|
||||
"status": "done",
|
||||
"owner": "auto-ci-cd-14343249da62",
|
||||
"external_wait": false,
|
||||
"reason": null,
|
||||
"started_at": "2026-10-14T18:45:17+00:00",
|
||||
"updated_at": "2026-10-14T18:47:20+00:00",
|
||||
"updated_at": "2026-10-14T18:48:36+00:00",
|
||||
"evidence": "state/evidence/S00-014-auto-ci-cd-14343249da62.md",
|
||||
"handoff": "state/handoffs/S00-014.md"
|
||||
"handoff": "state/handoffs/S00-014.md",
|
||||
"reviewer": "auto-qa-0c2d58e2382e",
|
||||
"review_evidence": "state/evidence/S00-014-review.md",
|
||||
"completed_at": "2026-10-14T18:48:36+00:00"
|
||||
}
|
||||
},
|
||||
"events": [
|
||||
@@ -1433,6 +1434,27 @@
|
||||
"to": "review",
|
||||
"reason": null,
|
||||
"evidence": "state/evidence/S00-014-auto-ci-cd-14343249da62.md"
|
||||
},
|
||||
{
|
||||
"revision": 22,
|
||||
"at": "2026-10-14T18:48:36+00:00",
|
||||
"action": "auto-unblock",
|
||||
"task": "S00-012",
|
||||
"resolved_by": "S00-014",
|
||||
"to": "todo",
|
||||
"fresh_agent_required": true
|
||||
},
|
||||
{
|
||||
"revision": 22,
|
||||
"at": "2026-10-14T18:48:36+00:00",
|
||||
"action": "approve",
|
||||
"task": "S00-014",
|
||||
"agent": "auto-qa-0c2d58e2382e",
|
||||
"role": "qa",
|
||||
"from": "review",
|
||||
"to": "done",
|
||||
"reason": null,
|
||||
"evidence": "state/evidence/S00-014-review.md"
|
||||
}
|
||||
],
|
||||
"retired_agents": [
|
||||
|
||||
Reference in new issue
Block a user