clone

a deno framework for local-first web apps that open instantly, work offline and sync when users choose

feat/prf-provision-custody
lofi / docs / spikes / opfs-device / evidence / 2026-07-15.md
2026-07-15.md 3.5K source

OPFS desktop preflight and device evidence — 2026-07-15

Issue: #4
Exact stack: Jazz 2.0.0-alpha.53, Astro 7.0.9, Preact 10.29.7, Deno 2.9.0
Desktop preflight: macOS 26.5.1, Headless Chrome 150.0.0.0

Enforced behavior

The graduated runtime requests only Jazz's persistent driver and rejects boot before creating an identity/database when secure context, OPFS, SharedWorker, Web Locks, or MessageChannel is missing. There is no memory configuration or automatic fallback. UI separately reports:

  • capability eligibility;
  • persistent-driver-open only after createDb() resolves;
  • per-write local durability only after WriteHandle.wait({ tier: "local" });
  • navigator.storage.persisted() state and the result of an explicit persistence request.

Desktop preflight

  • capability report: secure context, OPFS available, SharedWorker available, Web Locks available;
  • initial eviction-persistence state: not granted;
  • a write updated both islands, survived reload, and survived explicit/concurrent client recreation;
  • two same-origin pages and the exact Jazz control exercised the SharedWorker baseline in #7;
  • production service worker reached ready, controlled the page, and installed a revisioned cache;
  • with browser networking forced offline, a cold page reload rendered the prerendered shell;
  • while still offline, a new local write appeared in both islands, reached local durability, and survived another offline reload plus a subsequent online reload;
  • recursive build scan found no server-secret name or value in the client artifact.

Returning online is recorded only as retained local behavior. The pinned Jazz API exposes no public connection-state or convergence signal, so this evidence makes no transport-reconnection claim.

This is preflight only. It does not replace the required physical iPhone and Android evidence.

Physical matrix status

Surface Status
iPhone Safari tab deferred to M3
iPhone Home Screen app deferred to M3
Android Chrome 148+ tab deferred to M3
Android installed app deferred to M3

M1 approval

The product owner approved the M1 OPFS/PWA feasibility decision on 2026-07-15 from the stable HTTPS artifact at https://n.zip/2c6d/. The live page hydrated both islands, reported a secure context, OPFS, SharedWorker, Web Locks, and persistent-driver-open, retained a write across reload, and preserved the 1 / 2 / 1 / 1 runtime cardinality.

The host exposed one integration defect: its explicit index.html canonical redirect used HTTP, which made a service-worker precache transaction redundant. Lofi now caches and falls back to the canonical scope root (./) and reports a redundant worker as failed; an nzip host patch is being prepared upstream. This does not change the durability decision.

After republishing that workaround as artifact sequence 3, the live worker activated with scope https://n.zip/2c6d/, installed the revisioned cache, controlled the next load, and rendered the hydrated persistent-driver UI after a forced offline reload. The only offline console failure was nzip's Cloudflare browser-analytics request; no application resource or hydration failed.

This approval validates the M1 capability gate; it is not a claim that the physical matrix above ran. The full checklist remains required for M3 production PWA hardening. The shared nzip origin is also accepted only for OPFS/PWA feasibility, not as passkey or identity-isolation evidence.