Scope
apps/web edited in place: Web3Auth Core Kit on the UI thread with the one-shot login-secret handoff (transferred buffer, own copy zeroed), SIWE via wagmi signature forwarding, the two cold-start states; routes keyed on the stable node id (/, /files/:nodeId) — no root sentinel, no ipnsName params; the single useSyncExternalStore adapter over the event stream with no independent writers (rendered state = the engine's word, pending-op overlay pre-applied); progressive listing hydration; upload/download via facade; staleness-ladder chrome, offline banner, manual refresh with nocache semantics. HARVEST reusable presentational components/styling and the Web3Auth login glue from the v1 branch (git checkout v1 -- apps/web/src/...) while rewiring ALL data flow to engine state — no Zustand folderTree, no web-side crypto, no api-client singleton. Lands the DEV-gated facade introspection hook and ports the tests/web-e2e Playwright skeleton (page objects, wallet-mock, test-login helpers) rewired to it.
Blueprint anchors
blueprint/web-client.md: Composition (apps/web); UI state law; Login and identity; Content paths; Testing hooks
Gate
The e2e smoke slice in the PR gate — web login-and-CRUD against the production build served statically, deterministic waits polling the introspection hook, retries: 0.
Depends on
Scope
apps/web edited in place: Web3Auth Core Kit on the UI thread with the one-shot login-secret handoff (transferred buffer, own copy zeroed), SIWE via wagmi signature forwarding, the two cold-start states; routes keyed on the stable node id (
/,/files/:nodeId) — no root sentinel, no ipnsName params; the single useSyncExternalStore adapter over the event stream with no independent writers (rendered state = the engine's word, pending-op overlay pre-applied); progressive listing hydration; upload/download via facade; staleness-ladder chrome, offline banner, manual refresh with nocache semantics. HARVEST reusable presentational components/styling and the Web3Auth login glue from the v1 branch (git checkout v1 -- apps/web/src/...) while rewiring ALL data flow to engine state — no Zustand folderTree, no web-side crypto, no api-client singleton. Lands the DEV-gated facade introspection hook and ports the tests/web-e2e Playwright skeleton (page objects, wallet-mock, test-login helpers) rewired to it.Blueprint anchors
blueprint/web-client.md: Composition (apps/web); UI state law; Login and identity; Content paths; Testing hooksGate
The e2e smoke slice in the PR gate — web login-and-CRUD against the production build served statically, deterministic waits polling the introspection hook, retries: 0.
Depends on