diff --git a/planning/ROADMAP.md b/planning/ROADMAP.md index 2bf5e22..2f9c299 100644 --- a/planning/ROADMAP.md +++ b/planning/ROADMAP.md @@ -6,7 +6,7 @@ Зафиксировать Web scope, browser targets и проверенные кандидаты, не устанавливая непроверенный framework по догадке. -Задач: 24; entry: нет; exit: S00-010. +Задач: 25; entry: нет; exit: S00-010. ## [S01: Предметные контракты](stages/S01.md) diff --git a/planning/TASK_MATRIX.md b/planning/TASK_MATRIX.md index 4d30c78..8e9f797 100644 --- a/planning/TASK_MATRIX.md +++ b/planning/TASK_MATRIX.md @@ -1,6 +1,6 @@ # Матрица задач -Generated; state revision **65**. Canonical status: state/tasks.json. +Generated; state revision **67**. Canonical status: state/tasks.json. | ID | Этап | Оператор | Reviewer | Статус | Owner | Зависимости | Задача | | --- | --- | --- | --- | --- | --- | --- | --- | @@ -25,8 +25,9 @@ Generated; state revision **65**. Canonical status: state/tasks.json. | [S00-020](tasks/S00-020.md) | S00 | ci-cd | qa | blocked | auto-ci-cd-5a18c8aa1b42 | S00-001, S00-002, S00-017, S00-018, S00-019, S00-024 | Restore access to the pinned Linux XMPP experiment toolchain | | [S00-021](tasks/S00-021.md) | S00 | crypto | security | done | auto-crypto-fcef9b6781bf | S00-001, S00-002 | Устранить прерывание: Проверить browser OMEMO backend | | [S00-022](tasks/S00-022.md) | S00 | crypto | security | blocked | | S00-001, S00-002, S00-021 | Confirm or source a verified browser/WASM-capable OMEMO2 backend for the Web client endpoint | -| [S00-023](tasks/S00-023.md) | S00 | storage | qa | todo | | S00-002 | Устранить прерывание: Выбрать IndexedDB wrapper и migration policy | +| [S00-023](tasks/S00-023.md) | S00 | storage | qa | blocked | auto-storage-87486895c792 | S00-002, S00-025 | Устранить прерывание: Выбрать IndexedDB wrapper и migration policy | | [S00-024](tasks/S00-024.md) | S00 | ci-cd | qa | todo | | S00-001, S00-002, S00-017, S00-018, S00-019 | Устранить прерывание: Restore access to the pinned Linux XMPP experiment toolchain | +| [S00-025](tasks/S00-025.md) | S00 | storage | qa | todo | | S00-002 | Устранить прерывание: Устранить прерывание: Выбрать IndexedDB wrapper и migration policy | | [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 d4946e7..00ee46c 100644 --- a/planning/stages/S00.md +++ b/planning/stages/S00.md @@ -27,8 +27,9 @@ - [S00-020](../tasks/S00-020.md): Restore access to the pinned Linux XMPP experiment toolchain — ci-cd; blocked. - [S00-021](../tasks/S00-021.md): Устранить прерывание: Проверить browser OMEMO backend — crypto; done. - [S00-022](../tasks/S00-022.md): Confirm or source a verified browser/WASM-capable OMEMO2 backend for the Web client endpoint — crypto; blocked. -- [S00-023](../tasks/S00-023.md): Устранить прерывание: Выбрать IndexedDB wrapper и migration policy — storage; todo. +- [S00-023](../tasks/S00-023.md): Устранить прерывание: Выбрать IndexedDB wrapper и migration policy — storage; blocked. - [S00-024](../tasks/S00-024.md): Устранить прерывание: Restore access to the pinned Linux XMPP experiment toolchain — ci-cd; todo. +- [S00-025](../tasks/S00-025.md): Устранить прерывание: Устранить прерывание: Выбрать IndexedDB wrapper и migration policy — storage; todo. - [S00-010](../tasks/S00-010.md): Gate: Профиль и проверка стека — qa; todo. ## Граница этапа diff --git a/planning/task_matrix.csv b/planning/task_matrix.csv index 9507ca1..f30dd1a 100644 --- a/planning/task_matrix.csv +++ b/planning/task_matrix.csv @@ -20,8 +20,9 @@ S00-019,S00,crypto,security,done,auto-crypto-c68801170fa4,"S00-001, S00-002, S00 S00-020,S00,ci-cd,qa,blocked,auto-ci-cd-5a18c8aa1b42,"S00-001, S00-002, S00-017, S00-018, S00-019, S00-024",Restore access to the pinned Linux XMPP experiment toolchain S00-021,S00,crypto,security,done,auto-crypto-fcef9b6781bf,"S00-001, S00-002",Устранить прерывание: Проверить browser OMEMO backend S00-022,S00,crypto,security,blocked,,"S00-001, S00-002, S00-021",Confirm or source a verified browser/WASM-capable OMEMO2 backend for the Web client endpoint -S00-023,S00,storage,qa,todo,,S00-002,Устранить прерывание: Выбрать IndexedDB wrapper и migration policy +S00-023,S00,storage,qa,blocked,auto-storage-87486895c792,"S00-002, S00-025",Устранить прерывание: Выбрать IndexedDB wrapper и migration policy S00-024,S00,ci-cd,qa,todo,,"S00-001, S00-002, S00-017, S00-018, S00-019",Устранить прерывание: Restore access to the pinned Linux XMPP experiment toolchain +S00-025,S00,storage,qa,todo,,S00-002,Устранить прерывание: Устранить прерывание: Выбрать IndexedDB wrapper и migration policy 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 5e9fa7a..9229f47 100644 --- a/planning/tasks.json +++ b/planning/tasks.json @@ -1295,7 +1295,8 @@ "title": "Устранить прерывание: Выбрать IndexedDB wrapper и migration policy", "outcome": "Устранить одну указанную причину прерывания и доказать готовность исходной задачи к новому запуску; не выполнять соседние задачи.", "depends_on": [ - "S00-002" + "S00-002", + "S00-025" ], "requirements": [], "scope": [ @@ -1381,6 +1382,55 @@ ], "context_budget_chars": 48000 }, + { + "id": "S00-025", + "stage": "S00", + "kind": "blocker", + "root_task": "S00-005", + "blocker_depth": 2, + "unblocks": [ + "S00-023" + ], + "role": "storage", + "reviewer_role": "qa", + "title": "Устранить прерывание: Устранить прерывание: Выбрать IndexedDB wrapper и migration policy", + "outcome": "Устранить одну указанную причину прерывания и доказать готовность исходной задачи к новому запуску; не выполнять соседние задачи.", + "depends_on": [ + "S00-002" + ], + "requirements": [], + "scope": [ + "docs/decisions/0004-storage-design.md", + "experiments/0004-storage-design/**" + ], + "inputs": [ + "docs/WEB_PROFILE.md", + "docs/ARCHITECTURE.md", + "docs/CONTRACTS.md", + "docs/TESTING.md", + "roles/storage.md", + "docs/decisions/README.md", + "state/blockers/S00-023.md", + "state/blockers/S00-025.md" + ], + "spec_sections": [], + "ui_sections": [], + "steps": [ + "Прочитать blocker report и handoff.", + "Воспроизвести конкретную причину.", + "Исправить только локальную причину в scope или уточнить внешний input.", + "Выполнить focused проверку и submit." + ], + "acceptance": [ + "Причина воспроизводимо устранена.", + "Исходная задача не завершена обходом требований." + ], + "checks": [ + "Повторить сценарий прерывания.", + "Проверить отсутствие изменений вне scope." + ], + "context_budget_chars": 48000 + }, { "id": "S00-010", "stage": "S00", diff --git a/planning/tasks/S00-023.md b/planning/tasks/S00-023.md index 70c5035..59d93fb 100644 --- a/planning/tasks/S00-023.md +++ b/planning/tasks/S00-023.md @@ -7,7 +7,7 @@ - Этап: S00 - Оператор: storage - Reviewer: qa -- Зависимости: S00-002 +- Зависимости: S00-002, S00-025 - Требования: инженерная подготовка ## Один результат diff --git a/planning/tasks/S00-025.md b/planning/tasks/S00-025.md new file mode 100644 index 0000000..afbeb9c --- /dev/null +++ b/planning/tasks/S00-025.md @@ -0,0 +1,58 @@ +# S00-025: Устранить прерывание: Устранить прерывание: Выбрать IndexedDB wrapper и migration policy + +- Remediation для: S00-023; root: S00-005; depth: 2 + +> Generated from planning/tasks.json; status is in state/tasks.json. + +- Этап: S00 +- Оператор: storage +- Reviewer: qa +- Зависимости: S00-002 +- Требования: инженерная подготовка + +## Один результат + +Устранить одну указанную причину прерывания и доказать готовность исходной задачи к новому запуску; не выполнять соседние задачи. + +## Разрешённые пути + +- `docs/decisions/0004-storage-design.md` +- `experiments/0004-storage-design/**` + +Не изменять другие 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/storage.md +- docs/decisions/README.md +- state/blockers/S00-023.md +- state/blockers/S00-025.md + +## Шаги + +1. Прочитать blocker report и handoff. +2. Воспроизвести конкретную причину. +3. Исправить только локальную причину в scope или уточнить внешний input. +4. Выполнить focused проверку и submit. + +## Приёмка + +1. Причина воспроизводимо устранена. +2. Исходная задача не завершена обходом требований. + +## Focused checks + +1. Повторить сценарий прерывания. +2. Проверить отсутствие изменений вне scope. + +## Блокер и завершение запуска + +Для всех ролей 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-025.md b/state/blockers/S00-025.md new file mode 100644 index 0000000..760ab96 --- /dev/null +++ b/state/blockers/S00-025.md @@ -0,0 +1,22 @@ +# Blocker S00-025 + +- Original task: S00-023 +- Root task: S00-005 +- Reporter: auto-storage-87486895c792 +- Role: storage +- Original owner: auto-storage-87486895c792 +- Waits for user/external condition: False + +## Cause + +Agent exited with code 2 + +## One remediation outcome + +Устранить одну указанную причину прерывания и доказать готовность исходной задачи к новому запуску; не выполнять соседние задачи. + +## Evidence / reproduction + +See original handoff and task evidence. + +The reporting agent must stop now. A new agent implements only S00-025. diff --git a/state/handoffs/S00-023.md b/state/handoffs/S00-023.md new file mode 100644 index 0000000..30f849a --- /dev/null +++ b/state/handoffs/S00-023.md @@ -0,0 +1,9 @@ + + +# Blocked handoff + +Original: S00-023; reporter: auto-storage-87486895c792; resolution: S00-025. + +Agent exited with code 2 + +Next: complete and review the remediation; only a fresh session may continue. diff --git a/state/tasks.json b/state/tasks.json index bf31d66..81dd55f 100644 --- a/state/tasks.json +++ b/state/tasks.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "revision": 65, + "revision": 67, "tasks": { "S00-001": { "status": "done", @@ -1315,12 +1315,26 @@ "reason": "S00-004 acceptance requires establishing legacy/OMEMO2 AND worker/wasm AND persistence without a homegrown ratchet. Reproduced (this run) probes and live public-registry queries confirm only the audited session/ratchet engine + persistence are verified (@signalapp/libsignal-client@0.105.0, Node native addon, zero .wasm). The browser/worker/WASM deployment and the OMEMO/OMEMO2 wire layer are not available from any maintained package on the reachable registry (@signalapp/libsignal, @converse/omemo, @xmpp/omemo, omemo2, omemo-js, omemo-client, omemo-top, omemo-wasm all E404). ENC-009 forbids a homegrown algorithm/ratchet and ENC-011 forbids substituting media AES-GCM for the OMEMO2 wire format, so the spike cannot synthesize a browser backend inside S00-004 scope." }, "S00-023": { + "status": "blocked", + "owner": "auto-storage-87486895c792", + "external_wait": false, + "reason": "Agent exited with code 2", + "started_at": "2026-10-15T09:33:36+00:00", + "updated_at": "2026-10-15T09:33:36+00:00", + "blocked_by": [ + "S00-025" + ], + "resume_status": "in_progress", + "blocker_report": "state/blockers/S00-025.md", + "handoff": "state/handoffs/S00-023.md" + }, + "S00-024": { "status": "todo", "owner": null, "external_wait": false, "reason": null }, - "S00-024": { + "S00-025": { "status": "todo", "owner": null, "external_wait": false, @@ -2161,6 +2175,29 @@ "from": "in_progress", "to": "blocked", "reason": "Previous runner session was interrupted before submit/escalate; processes stopped. User now explicitly requests resuming development. Preserve partial artifacts, verify them in a fresh bounded remediation, and return original to a new executor only after independent review." + }, + { + "revision": 66, + "at": "2026-10-15T09:33:36+00:00", + "action": "claim", + "task": "S00-023", + "agent": "auto-storage-87486895c792", + "role": "storage", + "from": "todo", + "to": "in_progress", + "reason": null + }, + { + "revision": 67, + "at": "2026-10-15T09:33:36+00:00", + "action": "escalate", + "task": "S00-023", + "resolution_task": "S00-025", + "agent": "auto-storage-87486895c792", + "role": "storage", + "from": "in_progress", + "to": "blocked", + "reason": "Agent exited with code 2" } ], "retired_agents": [ @@ -2177,6 +2214,7 @@ "auto-crypto-8bf3dcf711b9", "auto-crypto-fe1c81c17ded", "auto-storage-88c3286c6641", - "auto-ci-cd-5a18c8aa1b42" + "auto-ci-cd-5a18c8aa1b42", + "auto-storage-87486895c792" ] }