experiments in a post-browser web
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

docs(tasks): mark web-permissions feature complete (Phases 1-5 + polish)

Final summary entry capturing all the work that landed on 2026-04-27
across 11 commits. The web permissions feature now ships with:

* Backend handler + per-permission policy + stored-decision persistence
* Page-host prompt overlay (favicon, queueing, remember-checkbox,
glyphs)
* Settings → Permissions section (revocation UI, sorted by origin,
count badge, relative timestamps)
* Pure `resolveWithStored` invariant unit-tested
* 22 unit tests + 12 Playwright tests (6 prompt + 6 settings)

Future work tracked: per-origin "Revoke all" affordance, per-permission
default policy override, live pubsub refresh.

+1 -1
+1 -1
docs/tasks.md
··· 23 23 24 24 ## Bugs 25 25 26 - - [x] **Web permission requests — feature complete (Phases 1-5).** All shipped 2026-04-27. **Phase 5**: favicon next to origin in both the page-host prompt overlay and each Settings → Permissions row (Google s2 favicon service with globe-emoji SVG fallback, same pattern as search-result cards). Multi-prompt queueing UX replaces the old vertical-stack model — only ONE prompt is visible at a time, queued by arrival order; resolving the active prompt advances the queue; "+N more pending" badge surfaces queue depth on the active prompt. Renderer-only change (`permissionQueue` + `activePermissionPrompt` in `app/page/page.js`); no backend wire-protocol change. Coverage: `tests/desktop/permission-prompt.spec.ts` 5/5 (incl. queueing via synthetic publishes + favicon src assertion), `tests/desktop/permissions-settings.spec.ts` 4/4 (incl. favicon row check). Future work: per-permission default policy override in settings (e.g. "always deny notifications by default") if user demand surfaces. 26 + - [x] **Web permission requests — feature complete (Phases 1-5 + extended polish).** All shipped 2026-04-27. **Phase 5 + extended polish:** favicon next to origin in both the prompt overlay and Settings → Permissions row (Google s2 favicon service + globe-emoji SVG fallback). Multi-prompt queueing UX (one prompt at a time, "+N more pending" badge, resolution advances queue). Allow+Remember + Deny+Remember test coverage. Settings rows grouped/sorted by origin so same-site decisions cluster. Per-permission emoji glyphs (📍 geolocation / 🎤 media / 🎹 midi / 📺 display-capture / 🔔 notifications / 📋 clipboard / 🖱️ pointerLock / ⤢ fullscreen / 🔗 openExternal) shared between prompt + settings. Live `Permissions (N)` count badge on settings sidebar. Relative timestamps ("3 hours ago"). Pure `resolveWithStored` extracted from permission-handler — full unit coverage of the policy-vs-stored-decision invariant ("stored decisions only override 'prompt'", never override hard allow/deny). Test coverage: `tests/unit/permission-handler.test.js` 22/22, `tests/desktop/permission-prompt.spec.ts` 6/6, `tests/desktop/permissions-settings.spec.ts` 6/6. Future work: per-origin "Revoke all" affordance (UX), per-permission default-policy override in settings ("always deny notifications by default"), live pubsub refresh of settings when prompts elsewhere persist new decisions. 27 27 28 28 - [x] **Server-not-found / page-load failure shows blank white page forever.** User-reported 2026-04-27 with `http://www.metikmusic.com/`. DNS-failure / connection-refused paths were covered earlier via `did-fail-load` + `.load-error-overlay`. The remaining gap (and the actual repro) was hung loads — server accepts the connection, never responds. The 30s loading-timeout safety net silently flipped the spinner off and left the user staring at a blank page. Fixed 2026-04-27: timeout now surfaces the same `.load-error-overlay` ("The page took too long to load.") with the in-flight URL (read from `latestNavigationUrl`, not `webview.getURL()` which returns the previously-displayed URL during a pending navigation). Loading timeout is now overridable via `window.__loadingTimeoutMs` so the Playwright spec can fire the path in 1.5s instead of 30s. Test: `tests/desktop/page-load-failure.spec.ts` "Hung load: …" (6/6, was 5/5). Future polish (HTTP 4xx/5xx, TLS errors, certificate-error on session) tracked separately if/when reported. 29 29