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
This commit is contained in:
1 parent
59b9ff62fe
commit
c28412ae8f
20 files changed
+491
-25
No files matched your search
+9
-9
@@ -206,21 +206,21 @@ The coordinator commits each transition before launching another agent.
|
||||
failure = None
|
||||
stopped_after_transition = False
|
||||
returncode = None
|
||||
with (session / 'output.log').open('wb') as output:
|
||||
# Give the child a complete UTF-8 stream ending at EOF. Feeding a pipe
|
||||
# through short communicate() retries can strand a partially sent prompt
|
||||
# when the child is slow to start reading. The prompt is already persisted.
|
||||
with prompt_path.open('rb') as prompt_input, (session / 'output.log').open('wb') as output:
|
||||
try:
|
||||
process = subprocess.Popen(argv, cwd=self.root, env=env, stdin=subprocess.PIPE,
|
||||
process = subprocess.Popen(argv, cwd=self.root, env=env, stdin=prompt_input,
|
||||
stdout=output, stderr=subprocess.STDOUT, start_new_session=(os.name == 'posix'))
|
||||
deadline = time.monotonic() + self.timeout
|
||||
first_communicate = True
|
||||
stopped_after_transition = False
|
||||
try:
|
||||
while True:
|
||||
try:
|
||||
process.communicate(prompt.encode('utf-8') if first_communicate else None,
|
||||
timeout=min(.2, max(.01, deadline - time.monotonic())))
|
||||
process.wait(timeout=min(.2, max(.01, deadline - time.monotonic())))
|
||||
break
|
||||
except subprocess.TimeoutExpired:
|
||||
first_communicate = False
|
||||
try:
|
||||
live = self.tracker.state()
|
||||
current = live['tasks'][item['id']]
|
||||
@@ -231,17 +231,17 @@ The coordinator commits each transition before launching another agent.
|
||||
blocker_exit = executor_exit = reviewer_exit = False
|
||||
if blocker_exit or executor_exit or reviewer_exit:
|
||||
stop_process_tree(process)
|
||||
process.communicate()
|
||||
process.wait()
|
||||
stopped_after_transition = True
|
||||
break
|
||||
if time.monotonic() >= deadline:
|
||||
stop_process_tree(process)
|
||||
process.communicate()
|
||||
process.wait()
|
||||
failure = 'Agent timed out; process terminated before escalation'
|
||||
break
|
||||
except BaseException:
|
||||
stop_process_tree(process)
|
||||
process.communicate()
|
||||
process.wait()
|
||||
raise
|
||||
finally:
|
||||
# Even an exited harness must not leave source-writing descendants alive.
|
||||
|
||||
Reference in new issue
Block a user