diff --git a/experiments/0004-storage-design/RECOVERY.md b/experiments/0004-storage-design/RECOVERY.md new file mode 100644 index 0000000..6f4e007 --- /dev/null +++ b/experiments/0004-storage-design/RECOVERY.md @@ -0,0 +1,47 @@ +# Interrupted S00-005 checkpoint + +Recovery task: S00-023; executor: auto-storage-e6946c6f94e3; 2026-10-15. +This directory contains unfinished research, not an accepted storage design. +S00-023 inventories preserved work and supplies a bounded restart point; +S00-005 must still implement and independently review its original acceptance. + +## Preserved inputs + +- package.json / package-lock.json agree on fake-indexeddb 6.2.5. + Lock metadata lists Apache-2.0, HTTPS registry URL and SHA512 integrity. + This inventory does not replace S00-005 license/API/browser research. +- .nvmrc and manifest select Node 24.21.0; manifest selects npm 11.19.0, + consistent with accepted ADR 0001. Keep these pins for execution. +- .npmrc retains registry HTTPS and strict-ssl. No TLS bypass is needed. +- src/_probe.mjs is an exploratory in-memory open/delete probe. +- src/rollback.mjs is an unfinished migration experiment. Both files pass + node --check, but neither has been executed or accepted by this recovery. +- docs/decisions/0004-storage-design.md has not been created. +- check:quota points to missing src/quota-blocked.mjs; npm run check is + not a completed test suite and must not be reported as passing. + +## Known unfinished rollback code + +Static inspection shows failedUpgradeRollsBack and retryAfterRollbackSucceeds +attempt createObjectStore("accounts") although seedV1 already created it. +The intended unique-index data failure therefore has not been demonstrated. +The promise in failedUpgradeRollsBack also overwrites req.onsuccess/onerror; +its aborted flag cannot reliably distinguish success from failure. Assertions +must verify the actual failure, preserved schema/data/indexes, and successful +corrected retry. Do not rely on the existing PASS text as evidence. + +## Next assigned S00-005 session + +Read the original card, STORE-001/STORE-004, ADR 0001 and this checkpoint. +Complete candidate research and ADR, repair the incomplete rollback experiment, +and implement the required quota/blocked-upgrade scenario within the original +scope. Execute with the pinned runtime and locked dependencies, retaining normal +HTTPS verification. Record actual outcomes and explicit fixture/browser limits. +In-memory fake-indexeddb is not browser durability, quota or restart evidence. +No shared persistence contract or application adapter has been established here. + +The historical S00-005 interruption is recorded in +state/runs/auto-storage-88c3286c6641/run.json (recovered_interruption=true). +S00-025 independently resolved the subsequent launcher interruption. This fresh +S00-023 session received its inputs and produced a reviewable recovery checkpoint. +After independent QA and coordinator commit, a new executor may resume S00-005. diff --git a/planning/TASK_MATRIX.md b/planning/TASK_MATRIX.md index 95f81d3..d80f44a 100644 --- a/planning/TASK_MATRIX.md +++ b/planning/TASK_MATRIX.md @@ -1,6 +1,6 @@ # Матрица задач -Generated; state revision **109**. Canonical status: state/tasks.json. +Generated; state revision **111**. Canonical status: state/tasks.json. | ID | Этап | Оператор | Reviewer | Статус | Owner | Зависимости | Задача | | --- | --- | --- | --- | --- | --- | --- | --- | @@ -25,7 +25,7 @@ Generated; state revision **109**. Canonical status: state/tasks.json. | [S00-020](tasks/S00-020.md) | S00 | ci-cd | qa | done | auto-ci-cd-2a0186c54ce9 | 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 | auto-crypto-bcd7f2a71667 | S00-001, S00-002, S00-021, S00-027, S00-029 | 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, S00-025 | Устранить прерывание: Выбрать IndexedDB wrapper и migration policy | +| [S00-023](tasks/S00-023.md) | S00 | storage | qa | review | auto-storage-e6946c6f94e3 | S00-002, S00-025 | Устранить прерывание: Выбрать IndexedDB wrapper и migration policy | | [S00-024](tasks/S00-024.md) | S00 | ci-cd | qa | done | auto-ci-cd-49907d48a6d1 | S00-001, S00-002, S00-017, S00-018, S00-019, S00-026 | Устранить прерывание: Restore access to the pinned Linux XMPP experiment toolchain | | [S00-025](tasks/S00-025.md) | S00 | storage | qa | done | auto-storage-8b47cee148df | S00-002, S00-028 | Устранить прерывание: Устранить прерывание: Выбрать IndexedDB wrapper и migration policy | | [S00-026](tasks/S00-026.md) | S00 | ci-cd | qa | done | auto-ci-cd-4255c34da227 | S00-001, S00-002, S00-017, S00-018, S00-019 | Provide approved access to the pinned Linux experiment artifacts | diff --git a/planning/stages/S00.md b/planning/stages/S00.md index 69db336..63c0e01 100644 --- a/planning/stages/S00.md +++ b/planning/stages/S00.md @@ -27,7 +27,7 @@ - [S00-020](../tasks/S00-020.md): Restore access to the pinned Linux XMPP experiment toolchain — ci-cd; done. - [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; review. - [S00-024](../tasks/S00-024.md): Устранить прерывание: Restore access to the pinned Linux XMPP experiment toolchain — ci-cd; done. - [S00-025](../tasks/S00-025.md): Устранить прерывание: Устранить прерывание: Выбрать IndexedDB wrapper и migration policy — storage; done. - [S00-026](../tasks/S00-026.md): Provide approved access to the pinned Linux experiment artifacts — ci-cd; done. diff --git a/planning/task_matrix.csv b/planning/task_matrix.csv index e71f232..7e2ceea 100644 --- a/planning/task_matrix.csv +++ b/planning/task_matrix.csv @@ -20,7 +20,7 @@ S00-019,S00,crypto,security,done,auto-crypto-c68801170fa4,"S00-001, S00-002, S00 S00-020,S00,ci-cd,qa,done,auto-ci-cd-2a0186c54ce9,"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,auto-crypto-bcd7f2a71667,"S00-001, S00-002, S00-021, S00-027, S00-029",Confirm or source a verified browser/WASM-capable OMEMO2 backend for the Web client endpoint -S00-023,S00,storage,qa,todo,,"S00-002, S00-025",Устранить прерывание: Выбрать IndexedDB wrapper и migration policy +S00-023,S00,storage,qa,review,auto-storage-e6946c6f94e3,"S00-002, S00-025",Устранить прерывание: Выбрать IndexedDB wrapper и migration policy S00-024,S00,ci-cd,qa,done,auto-ci-cd-49907d48a6d1,"S00-001, S00-002, S00-017, S00-018, S00-019, S00-026",Устранить прерывание: Restore access to the pinned Linux XMPP experiment toolchain S00-025,S00,storage,qa,done,auto-storage-8b47cee148df,"S00-002, S00-028",Устранить прерывание: Устранить прерывание: Выбрать IndexedDB wrapper и migration policy S00-026,S00,ci-cd,qa,done,auto-ci-cd-4255c34da227,"S00-001, S00-002, S00-017, S00-018, S00-019",Provide approved access to the pinned Linux experiment artifacts diff --git a/state/commit_messages/auto-storage-e6946c6f94e3.txt b/state/commit_messages/auto-storage-e6946c6f94e3.txt new file mode 100644 index 0000000..50f7616 --- /dev/null +++ b/state/commit_messages/auto-storage-e6946c6f94e3.txt @@ -0,0 +1,4 @@ +Document the interrupted storage experiment restart point + +Changes: Preserve existing storage artifacts and add a scoped recovery inventory with missing outputs, unfinished rollback logic and next steps for S00-005; record recovery evidence and handoff. +Validation: Assignment/packet, manifest-lock inventory assertions, both node --check commands and tasks.py validate passed. Storage runtime, quota and browser behavior were not tested; original storage task remains unaccepted. diff --git a/state/evidence/S00-023-auto-storage-e6946c6f94e3.md b/state/evidence/S00-023-auto-storage-e6946c6f94e3.md new file mode 100644 index 0000000..4bb2c80 --- /dev/null +++ b/state/evidence/S00-023-auto-storage-e6946c6f94e3.md @@ -0,0 +1,54 @@ +# S00-023 recovery evidence + +Executor: auto-storage-e6946c6f94e3 (storage), 2026-10-15. +Input: assigned card/packet, required startup and task documents, original and +current blocker/handoff, accepted ADR 0001 and direct S00-002/S00-025 evidence, +reviews and handoffs. Output: preserved-artifact inventory and explicit restart +checkpoint at experiments/0004-storage-design/RECOVERY.md. + +## Actual checks + +- python3 scripts/tasks.py resume --agent auto-storage-e6946c6f94e3, + show S00-023 and packet S00-023 --agent auto-storage-e6946c6f94e3: + exit 0 each; already assigned, no repeat claim; prerequisites done. +- Original run.json read: recovered_interruption=true, original S00-005 + transitioned to blocked with resolver S00-023; no acceptance evidence. + S00-025 executor/review records the resolved launcher failure; inspected, + not repeated through a new model launch. Current session received full inputs. +- Python manifest/lock/inventory assertions: exit 0; dependencies agree, + existing six files hashed, absent ADR and missing quota target confirmed. + package-lock SHA256: 4811ff344287daa6d2e0c01c6fb0a2f1f81021a157a833f9e8533c22e40b5d91. + rollback SHA256: 981516d6fcddeccef996c7520ab7c34bebb6b1af931653678714e9f149ef5dc9. + _probe SHA256: 80ad5b9705f7ea9ee380d2ca9cc6c89bb86fddf81118535e6eb1136085c9cbba. +- node --version: exit 0, v24.1.0 (host, not selected execution pin). + node --check experiments/0004-storage-design/src/rollback.mjs and + node --check experiments/0004-storage-design/src/_probe.mjs: exit 0 each. + Syntax only; no semantic/runtime storage success claimed. +- Static review found repeated creation of the existing accounts store and + overwritten request result handlers. RECOVERY.md records these as unfinished + original work; no code repaired or parent acceptance bypassed. +- python3 scripts/tasks.py validate: exit 0, 296 tasks, revision 110. +- Initial git status --short --untracked-files=all: exit 0; only coordinator + claim state/tasks.json. Final whitespace/scope inspection recorded below. + +Exploratory reads: guessed ADR 0004 read returned exit 1 because it is an absent +output, not a missing required input. Broad /tmp rg discovery returned exit 2 +with accessible runtime paths; no tool install or execution used those results. +No source/dependency files changed except the new scoped recovery document. + +## Acceptance and limits + +The interruption itself is historical, not safely re-created by terminating a +runner. Its persisted result and partial files were checked; a fresh bounded +session now provides an explicit reviewable continuation checkpoint. S00-005 +remains unaccepted. Missing ADR/quota scenario and incomplete rollback are its +original unfinished implementation, not new external obstacles to recovery. +No npm install, storage runtime test, browser, quota, migration, restart or +application readiness check was performed. No wrapper selection or dependency +approval is implied. Only RECOVERY.md and workflow metadata authored. +Coordinator commits; QA must independently review this recovery before the +original task returns to a new executor. + +Final git diff --check: exit 0. git status --short --untracked-files=all: +exit 0; only RECOVERY.md, current evidence/handoff/commit message and coordinator +claim state/tasks.json. No existing experiment code or dependency bytes changed. diff --git a/state/handoffs/S00-023.md b/state/handoffs/S00-023.md index 30f849a..4ce5c10 100644 --- a/state/handoffs/S00-023.md +++ b/state/handoffs/S00-023.md @@ -1,9 +1,20 @@ +# S00-023 recovery handoff +Executor: auto-storage-e6946c6f94e3; role: storage; 2026-10-15. +Historical S00-005 interruption preserved partial files. S00-025 resolved the +later launcher failure; this fresh session received all required inputs. +Created experiments/0004-storage-design/RECOVERY.md with checked inventory, +known incomplete code, missing outputs and precise original-task next steps. +No original source was changed and no storage design was accepted. -# Blocked handoff +Checks: CLI assignment/packet, manifest-lock agreement and artifact inventory, +both .mjs syntax checks, tasks.py validate passed. Full evidence: +state/evidence/S00-023-auto-storage-e6946c6f94e3.md. Storage runtime/browser +checks were not run. ADR 0004 and quota script remain original unfinished work; +rollback also needs repair as documented. Do not report npm run check passing. -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. +QA: inspect recovery document against preserved files and original interruption +record; repeat syntax/inventory/plan checks, verify scoped diff and message. +Approve only recovery readiness, not S00-005 acceptance. After independent review +and coordinator commit, a fresh S00-005 executor completes its original card. +No additional agent/process should be launched from this session. diff --git a/state/tasks.json b/state/tasks.json index e4d882f..a7e5c3d 100644 --- a/state/tasks.json +++ b/state/tasks.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "revision": 109, + "revision": 111, "tasks": { "S00-001": { "status": "done", @@ -1327,18 +1327,19 @@ "resumed_after_blocker": true }, "S00-023": { - "status": "todo", - "owner": null, + "status": "review", + "owner": "auto-storage-e6946c6f94e3", "external_wait": false, "reason": null, - "started_at": "2026-10-15T09:33:36+00:00", - "updated_at": "2026-10-15T11:02:01+00:00", + "started_at": "2026-10-15T11:04:06+00:00", + "updated_at": "2026-10-15T11:06:17+00:00", "blocked_by": [], "resume_status": "in_progress", "blocker_report": "state/blockers/S00-025.md", "handoff": "state/handoffs/S00-023.md", "previous_owner": "auto-storage-87486895c792", - "resumed_after_blocker": true + "resumed_after_blocker": true, + "evidence": "state/evidence/S00-023-auto-storage-e6946c6f94e3.md" }, "S00-024": { "status": "done", @@ -2853,6 +2854,29 @@ "to": "done", "reason": null, "evidence": "state/evidence/S00-025-review.md" + }, + { + "revision": 110, + "at": "2026-10-15T11:04:06+00:00", + "action": "claim", + "task": "S00-023", + "agent": "auto-storage-e6946c6f94e3", + "role": "storage", + "from": "todo", + "to": "in_progress", + "reason": null + }, + { + "revision": 111, + "at": "2026-10-15T11:06:17+00:00", + "action": "submit", + "task": "S00-023", + "agent": "auto-storage-e6946c6f94e3", + "role": null, + "from": "in_progress", + "to": "review", + "reason": null, + "evidence": "state/evidence/S00-023-auto-storage-e6946c6f94e3.md" } ], "retired_agents": [