Extension seams¶
The MVP is local only. These are the places a hosted backend would attach. None of them is implemented.
| Seam | Today | Where |
|---|---|---|
| Content store | LocalStore over IndexedDB |
ContentStore in packages/store/src/types.ts |
| Bundle codec | Shared zip reader and writer. Its doc comment says it is shared by LocalStore and a remote store |
BundleCodec |
| Store mode | storeMode is local or remote, and storage.managed can pin it. The popup shows a Remote badge and "Not signed in" for remote. No remote store exists behind it |
apps/extension/lib/settings.ts |
| Authentication | auth.status always returns signed in with two fixed roles |
apps/extension/lib/background.ts |
| Telemetry | events.push accepts up to 100 guidance events per call and discards them |
apps/extension/lib/background.ts |
| Manifest refresh | A 5-minute alarm is created on install; nothing listens for it | apps/extension/lib/background.ts |
identity permission |
Declared; no code uses it | manifest |
| Roles and segments | In the schema; not evaluated | packages/schema |
What a remote store would need¶
- Implement
ContentStore(fourteen methods) against an API. - Honour
storeMode: remotewhere the store is chosen. - Replace the fixed
auth.statusresponse with a real session. - Add a handler for the alarm, or remove the alarm.
- Decide what
events.pushsends and where. - Revisit permissions and the privacy policy. Both state that nothing is transmitted.
Gotchas¶
- The
alarmsandidentitypermissions are declared ahead of use. A store reviewer may ask why; see store readiness. ConflictErrorand the etag exist because a shared store has concurrent editors. A single local user rarely hits them.