The content script runs on every http(s) page and carries the extension id, so the worker could not tell it from an extension page. Only page hints are accepted from a content script now; every other worker and offscreen message must come from an extension URL. A failed cache write no longer fails the read that produced it.
Tests cover the four sender kinds and a rejected storage write. Typecheck, the affected suites, and the build pass; the live smoke and store-identity auth probe pass on the integrated 2.1.0 tree.
🤖 Generated with Claude Code