Skip to content

feat(pwa): dashboard PWA parity polish — scoped manifest, PNG+maskable icons, SW auth/SSE bypass guards (PR-F, audit item 22) - #377

Merged
kh0pper merged 1 commit into
mainfrom
feat/perch-pr-f-pwa-polish
Sep 14, 2026
Merged

kh0pper merged 1 commit into
mainfrom
feat/perch-pr-f-pwa-polish

Conversation

@kh0pper

@kh0pper kh0pper commented Sep 14, 2026

Copy link
Copy Markdown
Owner

What

Audit item 22 recon found the dashboard already installable (bb1cb865 shipped manifest + SW + push + apple metas). This PR ships the measured gap list vs pi-lab's mobile PWA (operator-approved scope: "polish + guards"):

  • manifest: scope: /dashboard + id (installed app stops claiming the whole origin incl. /blog); real 192/512 PNG icons + 512 maskable variants (rsvg-convert from crow-icon.svg; maskable = full-bleed square bg, art scaled 0.78 into the safe zone); categories.
  • layout head: apple-mobile-web-app-title; apple-touch-icon → 180px PNG (iOS renders an SVG touch icon as a blank home-screen tile).
  • sw.js: explicit no-interception pass-through for /dashboard/perch-api/* and any eventsource/Accept: text/event-stream request — authed JSON never touches a cache path, SSE keeps native browser streaming. crow-v1crow-v2.
  • tests/dashboard-pwa.test.js: 5 pins incl. bypass ordering (perch bypass must precede the /dashboard/ respondWith branch) and per-line return shape.

Funnel invariant

None of the three enforcement layers touched; /sw.js remains outside PUBLIC_FUNNEL_PREFIXES (measured 403 through the funnel header on R4). No new bundle host ports.

Tests

  • new file + perch-hub page/render: 83/83 locally
  • node --check sw.js clean

…e icons, SW auth/SSE bypass guards (PR-F, audit item 22)

The dashboard was already installable (bb1cb86: manifest + sw + push).
This closes the measured gaps against pi-lab's installable mobile page:

- manifest: scope /dashboard (+id) so the installed app stops claiming
  the whole origin; 192/512 PNG icons and 512 maskable variants
  (rasterized from crow-icon.svg via rsvg-convert; maskable ships
  full-bleed square bg with art at 0.78 inside the safe zone);
  categories.
- layout head: apple-mobile-web-app-title 'Crow'; apple-touch-icon now
  points at a 180px PNG — iOS renders an SVG touch icon as a blank tile.
- sw.js: explicit pass-through (no respondWith) for /dashboard/perch-api/*
  and any eventsource / text/event-stream request — authed JSON never
  touches a cache path and SSE keeps native browser streaming instead of
  the SW fetch pipe. Bumped crow-v1 -> crow-v2.
- tests/dashboard-pwa.test.js: 5 static-asset pins incl. bypass ordering
  (perch bypass must precede the /dashboard/ branch) and return-shape.

Funnel invariant untouched: no enforcement-layer file changed; /sw.js
stays off PUBLIC_FUNNEL_PREFIXES (measured 403 via funnel header).
@kh0pper
kh0pper merged commit b12f9cd into main Sep 14, 2026
3 checks passed
@kh0pper
kh0pper deleted the feat/perch-pr-f-pwa-polish branch September 14, 2026 02:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant