Skip to content

Phase B: workerized container build, streaming, multi-project recovery, quota (#403 follow-ups) #452

Description

@maboa

Umbrella for the concurrency/responsiveness work deliberately deferred from the #403/#404 Phase A push. None of these gate the format freeze or the explicit-save model; they harden it.

  • Worker ZIP: build/extract containers in a module Worker against OPFS handles (sync access handles are Worker-only). Pass handles/Files, never main-thread media ArrayBuffers. Generation checks on completion.
  • Streaming: Worker-hosted JSZip fixes stalls, not peak memory — evaluate a streaming ZIP writer (incremental STORED media, CRC in Worker, chunked output) and streaming extraction into OPFS. Safari lacks a reliable streamed save sink; the fallback may still materialize a Blob.
  • Per-project work directories (work/<projectId>/) with a work index, recovery discovery/chooser for multiple dirty projects, and GC of stale snapshots/orphan media under locks.
  • BroadcastChannel advisory coordination and the focus/read-only/fork second-tab UX (upgrade of the Phase A single-lock guard).
  • Quota and environment handling: navigator.storage.estimate() UI, OPFS-unavailable Private Browsing fallback, suspended/killed-tab behavior, iOS memory pressure (don't rely on navigator.deviceMemory).
  • Cross-browser/iOS test matrix: Private Browsing, low storage, backgrounded tabs, large media, interrupted downloads.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions