diff --git a/planning/ROADMAP.md b/planning/ROADMAP.md index 4dec331..d8a2173 100644 --- a/planning/ROADMAP.md +++ b/planning/ROADMAP.md @@ -6,7 +6,7 @@ Зафиксировать Web scope, browser targets и проверенные кандидаты, не устанавливая непроверенный framework по догадке. -Задач: 15; entry: нет; exit: S00-010. +Задач: 16; entry: нет; exit: S00-010. ## [S01: Предметные контракты](stages/S01.md) diff --git a/planning/TASK_MATRIX.md b/planning/TASK_MATRIX.md index 9ca7c1a..3ac336a 100644 --- a/planning/TASK_MATRIX.md +++ b/planning/TASK_MATRIX.md @@ -1,6 +1,6 @@ # Матрица задач -Generated; state revision **25**. Canonical status: state/tasks.json. +Generated; state revision **27**. Canonical status: state/tasks.json. | ID | Этап | Оператор | Reviewer | Статус | Owner | Зависимости | Задача | | --- | --- | --- | --- | --- | --- | --- | --- | @@ -17,7 +17,8 @@ Generated; state revision **25**. Canonical status: state/tasks.json. | [S00-012](tasks/S00-012.md) | S00 | ci-cd | qa | blocked | 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 | todo | | S00-001, S00-011, S00-013, S00-014 | Устранить прерывание: Fix runner prompt delivery after partial stdin timeout | +| [S00-015](tasks/S00-015.md) | S00 | ci-cd | qa | blocked | auto-ci-cd-5475930af078 | S00-001, S00-011, S00-013, S00-014, S00-016 | Устранить прерывание: Fix runner prompt delivery after partial stdin timeout | +| [S00-016](tasks/S00-016.md) | S00 | ci-cd | qa | blocked | | S00-001, S00-011, S00-013, S00-014 | Restore reviewer model availability after provider capacity failure | | [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: Профиль и проверка стека | | [S01-001](tasks/S01-001.md) | S01 | orchestrator | security | todo | | S00-010 | Описать identity/model contracts | | [S01-002](tasks/S01-002.md) | S01 | orchestrator | security | todo | | S00-010, S01-001 | Описать async account context | diff --git a/planning/stages/S00.md b/planning/stages/S00.md index f41809c..68e127f 100644 --- a/planning/stages/S00.md +++ b/planning/stages/S00.md @@ -19,7 +19,8 @@ - [S00-012](../tasks/S00-012.md): Fix runner prompt delivery after partial stdin timeout — ci-cd; blocked. - [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; todo. +- [S00-015](../tasks/S00-015.md): Устранить прерывание: Fix runner prompt delivery after partial stdin timeout — ci-cd; blocked. +- [S00-016](../tasks/S00-016.md): Restore reviewer model availability after provider capacity failure — ci-cd; blocked. - [S00-010](../tasks/S00-010.md): Gate: Профиль и проверка стека — qa; todo. ## Граница этапа diff --git a/planning/task_matrix.csv b/planning/task_matrix.csv index 37347e3..7f6c9c1 100644 --- a/planning/task_matrix.csv +++ b/planning/task_matrix.csv @@ -12,7 +12,8 @@ S00-011,S00,ci-cd,security,done,auto-ci-cd-d105e8027730,S00-001,Restore verified S00-012,S00,ci-cd,qa,blocked,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,todo,,"S00-001, S00-011, S00-013, S00-014",Устранить прерывание: Fix runner prompt delivery after partial stdin timeout +S00-015,S00,ci-cd,qa,blocked,auto-ci-cd-5475930af078,"S00-001, S00-011, S00-013, S00-014, S00-016",Устранить прерывание: Fix runner prompt delivery after partial stdin timeout +S00-016,S00,ci-cd,qa,blocked,,"S00-001, S00-011, S00-013, S00-014",Restore reviewer model availability after provider capacity failure 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: Профиль и проверка стека S01-001,S01,orchestrator,security,todo,,S00-010,Описать identity/model contracts S01-002,S01,orchestrator,security,todo,,"S00-010, S01-001",Описать async account context diff --git a/planning/tasks.json b/planning/tasks.json index 8620fc3..855ac9c 100644 --- a/planning/tasks.json +++ b/planning/tasks.json @@ -851,7 +851,8 @@ "S00-001", "S00-011", "S00-013", - "S00-014" + "S00-014", + "S00-016" ], "requirements": [], "scope": [ @@ -886,6 +887,59 @@ ], "context_budget_chars": 48000 }, + { + "id": "S00-016", + "stage": "S00", + "kind": "blocker", + "root_task": "S00-002", + "blocker_depth": 3, + "unblocks": [ + "S00-015" + ], + "role": "ci-cd", + "reviewer_role": "qa", + "title": "Restore reviewer model availability after provider capacity failure", + "outcome": "A verified available tool-capable fresh reviewer execution path after explicit external provider/configuration readiness, without bypassing S00-012 independent review.", + "depends_on": [ + "S00-001", + "S00-011", + "S00-013", + "S00-014" + ], + "requirements": [], + "scope": [ + "scripts/runner.py", + "tests/tooling/test_automation.py" + ], + "inputs": [ + "docs/WEB_PROFILE.md", + "docs/ARCHITECTURE.md", + "docs/CONTRACTS.md", + "docs/TESTING.md", + "roles/orchestrator.md", + "docs/decisions/README.md", + "state/blockers/S00-012.md", + "state/blockers/S00-015.md", + "state/blockers/S00-016.md" + ], + "spec_sections": [], + "ui_sections": [], + "steps": [ + "Obtain coordinator confirmation that the configured reviewer model is available or an available replacement is explicitly authorized and locally configured; do not put credentials in evidence.", + "After external release, verify the readiness condition using the coordinator-authorized harness in a fresh process; do not retry indefinitely.", + "Record actual readiness evidence and submit remediation for independent review; leave S00-012 acceptance to its subsequent fresh reviewer." + ], + "acceptance": [ + "Provider/configuration readiness is explicitly supplied by the coordinator.", + "A fresh tool-capable reviewer execution path succeeds without the recorded startup capacity/503 failure.", + "S00-012 is not accepted or bypassed by the remediation." + ], + "checks": [ + "Inspect failed reviewer run evidence for the exact external failure.", + "Record actual authorized fresh harness startup result after external readiness; do not claim unavailable checks passed." + ], + "context_budget_chars": 48000 + }, { "id": "S00-010", "stage": "S00", diff --git a/planning/tasks/S00-015.md b/planning/tasks/S00-015.md index 5b487ae..52eb62b 100644 --- a/planning/tasks/S00-015.md +++ b/planning/tasks/S00-015.md @@ -7,7 +7,7 @@ - Этап: S00 - Оператор: ci-cd - Reviewer: qa -- Зависимости: S00-001, S00-011, S00-013, S00-014 +- Зависимости: S00-001, S00-011, S00-013, S00-014, S00-016 - Требования: инженерная подготовка ## Один результат diff --git a/planning/tasks/S00-016.md b/planning/tasks/S00-016.md new file mode 100644 index 0000000..75199fe --- /dev/null +++ b/planning/tasks/S00-016.md @@ -0,0 +1,59 @@ +# S00-016: Restore reviewer model availability after provider capacity failure + +- Remediation для: S00-015; root: S00-002; depth: 3 + +> Generated from planning/tasks.json; status is in state/tasks.json. + +- Этап: S00 +- Оператор: ci-cd +- Reviewer: qa +- Зависимости: S00-001, S00-011, S00-013, S00-014 +- Требования: инженерная подготовка + +## Один результат + +A verified available tool-capable fresh reviewer execution path after explicit external provider/configuration readiness, without bypassing S00-012 independent review. + +## Разрешённые пути + +- `scripts/runner.py` +- `tests/tooling/test_automation.py` + +Не изменять другие modules, shared contracts или spec snapshots без изменения плана. Stem без расширения разрешает принятые stack-specific extensions и focused test рядом. + +## Прочитать + +- docs/WEB_PROFILE.md +- docs/ARCHITECTURE.md +- docs/CONTRACTS.md +- docs/TESTING.md +- roles/orchestrator.md +- docs/decisions/README.md +- state/blockers/S00-012.md +- state/blockers/S00-015.md +- state/blockers/S00-016.md + +## Шаги + +1. Obtain coordinator confirmation that the configured reviewer model is available or an available replacement is explicitly authorized and locally configured; do not put credentials in evidence. +2. After external release, verify the readiness condition using the coordinator-authorized harness in a fresh process; do not retry indefinitely. +3. Record actual readiness evidence and submit remediation for independent review; leave S00-012 acceptance to its subsequent fresh reviewer. + +## Приёмка + +1. Provider/configuration readiness is explicitly supplied by the coordinator. +2. A fresh tool-capable reviewer execution path succeeds without the recorded startup capacity/503 failure. +3. S00-012 is not accepted or bypassed by the remediation. + +## Focused checks + +1. Inspect failed reviewer run evidence for the exact external failure. +2. Record actual authorized fresh harness startup result after external readiness; do not claim unavailable checks passed. + +## Блокер и завершение запуска + +Для всех ролей scope — только эта задача. При блокере создать issue JSON по state/ISSUE_TEMPLATE.json, вызвать escalate с текущим ID/role/agent, проверить status=blocked и resolution_task, затем немедленно завершить запуск. Не решать blocker и не выбирать следующую задачу самому. Новый агент назначается runner. Правки metadata через CLI — единственное исключение scope. + +## Передача + +Сохранить evidence/handoff; submit → review и завершить запуск. Reviewer также выполняет только эту задачу, включая обязательное escalate при блокере. diff --git a/state/blockers/S00-016.md b/state/blockers/S00-016.md new file mode 100644 index 0000000..95ef714 --- /dev/null +++ b/state/blockers/S00-016.md @@ -0,0 +1,22 @@ +# Blocker S00-016 + +- Original task: S00-015 +- Root task: S00-002 +- Reporter: auto-ci-cd-5475930af078 +- Role: ci-cd +- Original owner: auto-ci-cd-5475930af078 +- Waits for user/external condition: True + +## Cause + +S00-012 fresh reviewer exited before review because its execution provider returned HTTP 503 and Selected model is at capacity. Provider availability or operator-authorized local harness model configuration is external to S00-015 source scope. + +## One remediation outcome + +A verified available tool-capable fresh reviewer execution path after explicit external provider/configuration readiness, without bypassing S00-012 independent review. + +## Evidence / reproduction + +Coordinator run auto-qa-98b05bd56c25: run.json returncode=1 and output.log contains reconnects, HTTP 503 and repeated capacity errors. Diagnosis: state/evidence/S00-015-auto-ci-cd-5475930af078.md. No fresh capacity retry performed. + +The reporting agent must stop now. A new agent implements only S00-016. diff --git a/state/evidence/S00-015-auto-ci-cd-5475930af078.md b/state/evidence/S00-015-auto-ci-cd-5475930af078.md new file mode 100644 index 0000000..b3953e8 --- /dev/null +++ b/state/evidence/S00-015-auto-ci-cd-5475930af078.md @@ -0,0 +1,20 @@ +# S00-015 interruption diagnosis + +Agent: auto-ci-cd-5475930af078; role: ci-cd. + +Input: assigned card, master/startup instructions, dependency evidence and S00-012 handoff. Outcome sought: identify and remove the interruption cause without accepting S00-012. No source files changed. + +## Actual read-only checks + +- `python3 scripts/tasks.py resume --agent auto-ci-cd-5475930af078`: exit 0, confirms assigned S00-015 in_progress. +- `python3 scripts/tasks.py show S00-015`: exit 0, scope scripts/runner.py and tests/tooling/test_automation.py. +- Read state/runs/auto-qa-98b05bd56c25/run.json and the last 80 lines of its output.log: exit 0. Reviewer returncode is 1, stopped_after_transition false, scope_violations empty. Output reports repeated reconnects, WebSocket fallback after HTTP 503 Service Unavailable, then twice `Selected model is at capacity. Please try a different model.` +- `rg -n 'stdin|communicate|prompt|partial|delayed' scripts/runner.py tests/tooling/test_automation.py`: exit 0. Existing regular-file stdin transport and delayed-reader regression remain present; not executed in this session. +- `git status --short`: exit 0, only coordinator state/tasks.json claim metadata changed before diagnosis artifacts. +- Attempt to read state/handoffs/S00-015.md: absent (combined cat exit 1). Original S00-012 handoff exists and records only generic agent exit, without provider diagnosis. + +## Blocker and limits + +Recorded reproduction is the coordinator's fresh S00-012 QA run auto-qa-98b05bd56c25: model startup fails with external capacity/503 errors before any QA acceptance result. No new model invocation or capacity reproduction was attempted. This current executor session being available does not prove the failed reviewer configuration is available or that S00-012 was reviewed. + +Provider availability or an operator-authorized available model configuration is external input, outside source scope. No retry loop, model switch, workflow success fabrication or source modification was made. No test, app readiness or S00-012 acceptance is claimed. Escalate with requires_user_input and stop; coordinator decides when the execution provider is ready for a fresh process. diff --git a/state/handoffs/S00-015.md b/state/handoffs/S00-015.md new file mode 100644 index 0000000..b117d6d --- /dev/null +++ b/state/handoffs/S00-015.md @@ -0,0 +1,11 @@ +# S00-015 blocked handoff + +Reporter: auto-ci-cd-5475930af078 (ci-cd). + +The generic exit-code blocker is diagnosed from state/runs/auto-qa-98b05bd56c25/run.json and output.log: fresh S00-012 reviewer reconnects repeatedly, encounters HTTP 503, falls back to HTTPS and exits with `Selected model is at capacity`. It did not complete S00-012 acceptance review. + +No source changes. Existing runner prompt-file stdin delivery remains intact. No tests or live model retry were run; this is provider failure diagnosis, not an approval of S00-012. + +External next input: coordinator/operator must confirm availability of the configured tool-capable reviewer model, or explicitly authorize and configure an available replacement in its local harness. Then release the external remediation through the normal workflow and launch a fresh process to verify readiness. Do not bypass independent review, reuse the retired reporter, or mark S00-012 done. + +Evidence: state/evidence/S00-015-auto-ci-cd-5475930af078.md. This agent exits immediately after escalate. diff --git a/state/issues/S00-015-auto-ci-cd-5475930af078.json b/state/issues/S00-015-auto-ci-cd-5475930af078.json new file mode 100644 index 0000000..db60a61 --- /dev/null +++ b/state/issues/S00-015-auto-ci-cd-5475930af078.json @@ -0,0 +1,28 @@ +{ + "title": "Restore reviewer model availability after provider capacity failure", + "reason": "S00-012 fresh reviewer exited before review because its execution provider returned HTTP 503 and Selected model is at capacity. Provider availability or operator-authorized local harness model configuration is external to S00-015 source scope.", + "reproduction": "Coordinator run auto-qa-98b05bd56c25: run.json returncode=1 and output.log contains reconnects, HTTP 503 and repeated capacity errors. Diagnosis: state/evidence/S00-015-auto-ci-cd-5475930af078.md. No fresh capacity retry performed.", + "role": "ci-cd", + "reviewer_role": "qa", + "scope": [ + "scripts/runner.py", + "tests/tooling/test_automation.py" + ], + "outcome": "A verified available tool-capable fresh reviewer execution path after explicit external provider/configuration readiness, without bypassing S00-012 independent review.", + "steps": [ + "Obtain coordinator confirmation that the configured reviewer model is available or an available replacement is explicitly authorized and locally configured; do not put credentials in evidence.", + "After external release, verify the readiness condition using the coordinator-authorized harness in a fresh process; do not retry indefinitely.", + "Record actual readiness evidence and submit remediation for independent review; leave S00-012 acceptance to its subsequent fresh reviewer." + ], + "acceptance": [ + "Provider/configuration readiness is explicitly supplied by the coordinator.", + "A fresh tool-capable reviewer execution path succeeds without the recorded startup capacity/503 failure.", + "S00-012 is not accepted or bypassed by the remediation." + ], + "checks": [ + "Inspect failed reviewer run evidence for the exact external failure.", + "Record actual authorized fresh harness startup result after external readiness; do not claim unavailable checks passed." + ], + "depends_on": [], + "requires_user_input": true +} diff --git a/state/tasks.json b/state/tasks.json index 12e7700..849f5ee 100644 --- a/state/tasks.json +++ b/state/tasks.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "revision": 25, + "revision": 27, "tasks": { "S00-001": { "status": "done", @@ -1179,10 +1179,24 @@ "completed_at": "2026-10-14T18:48:36+00:00" }, "S00-015": { - "status": "todo", - "owner": null, + "status": "blocked", + "owner": "auto-ci-cd-5475930af078", "external_wait": false, - "reason": null + "reason": "S00-012 fresh reviewer exited before review because its execution provider returned HTTP 503 and Selected model is at capacity. Provider availability or operator-authorized local harness model configuration is external to S00-015 source scope.", + "started_at": "2026-10-14T18:51:15+00:00", + "updated_at": "2026-10-14T18:52:29+00:00", + "blocked_by": [ + "S00-016" + ], + "resume_status": "in_progress", + "blocker_report": "state/blockers/S00-016.md", + "handoff": "state/handoffs/S00-015.md" + }, + "S00-016": { + "status": "blocked", + "owner": null, + "external_wait": true, + "reason": "S00-012 fresh reviewer exited before review because its execution provider returned HTTP 503 and Selected model is at capacity. Provider availability or operator-authorized local harness model configuration is external to S00-015 source scope." } }, "events": [ @@ -1499,6 +1513,29 @@ "from": "review", "to": "blocked", "reason": "Agent exited with code 1" + }, + { + "revision": 26, + "at": "2026-10-14T18:51:15+00:00", + "action": "claim", + "task": "S00-015", + "agent": "auto-ci-cd-5475930af078", + "role": "ci-cd", + "from": "todo", + "to": "in_progress", + "reason": null + }, + { + "revision": 27, + "at": "2026-10-14T18:52:29+00:00", + "action": "escalate", + "task": "S00-015", + "resolution_task": "S00-016", + "agent": "auto-ci-cd-5475930af078", + "role": "ci-cd", + "from": "in_progress", + "to": "blocked", + "reason": "S00-012 fresh reviewer exited before review because its execution provider returned HTTP 503 and Selected model is at capacity. Provider availability or operator-authorized local harness model configuration is external to S00-015 source scope." } ], "retired_agents": [ @@ -1506,6 +1543,7 @@ "manual-security-stdin-20261015a", "manual-ci-cd-stdin-20261015b", "auto-ci-cd-28868645424b", - "auto-qa-98b05bd56c25" + "auto-qa-98b05bd56c25", + "auto-ci-cd-5475930af078" ] }