managarten/packages
Till JS 2b4494628e fix(mana/web): unblock voice capture — permissions policy, notification mount, dev SW
Three independent bugs that conspired to make the dreams + memoro mic
buttons completely unusable in production AND in dev. Each one alone
would have been the only blocker; they layered on top of each other so
fixing the top one just exposed the next.

1. Permissions-Policy header blocked the microphone API entirely.
   `packages/shared-utils/src/security-headers.ts` set
   `microphone=()` which means "no origin, including self, may use
   the microphone". `getUserMedia()` throws a `Permissions policy
   violation` and the browser never even shows the permission
   dialog — no amount of OS / browser / site settings can override
   it because the policy blocks the API at the document level.
   Fix: change to `microphone=(self)` so mana.how itself can use
   the API. Camera stays disallowed (no module needs it).

2. Notification permission was requested at layout mount time.
   `(app)/+layout.svelte` called
   `notificationService.requestPermission()` from `onMount()`. Modern
   browsers require permission requests to come from a user gesture
   — calling it without one queues the prompt until the next click.
   That meant the user's FIRST click on any button (in this case the
   dreams "Traum sprechen" mic button) showed the queued notifications
   prompt instead of the action they actually clicked. Worse,
   `getUserMedia()` was then silently dropped because Chrome only
   shows one permission dialog at a time.
   Fix: remove the mount-time call entirely. Notification permission
   must be requested from a button the user explicitly clicks
   ("Benachrichtigungen aktivieren" toggle in Settings or first time
   a reminder is created) — the reminder scheduler still runs without
   permission, it just won't fire OS notifications until granted.

3. vite-plugin-pwa registered a service worker in dev that cached
   the old layout chunks across reloads, so the fix for #2 was
   invisible until the user manually unregistered the SW in DevTools.
   `vite-plugin-pwa` defaults `devEnabled: true`, which is a
   well-known footgun for fast iteration. Production still gets the
   full SW (this only flips dev). The 2026-04-08 mic-button hunt
   took an extra hour for exactly this reason.
   Fix: pass `devEnabled: false` to createPWAConfig in vite.config.ts.

Verified: in a fresh incognito tab on `localhost:5173/`, opening the
Dreams app in the workbench and clicking the mic button now shows the
microphone permission dialog directly (no notifications hijack), and
recording → transcription works end-to-end against the production
mana-stt service on the GPU box.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 15:36:03 +02:00
..
cards-database fix(cards-database): add .js extensions to relative imports for NodeNext 2026-04-07 14:01:44 +02:00
credits feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
eslint-config fix(timeblocks): type errors from recurrence migration 2026-04-07 13:22:59 +02:00
feedback feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
help feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
local-llm feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
local-store fix(mana/web): sprint 2 — auth-aware data layer + guest migration 2026-04-07 13:07:12 +02:00
notify-client chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
qr-export chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
shared-api-client feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-auth feat(auth): structured error codes + conditional passkey UI 2026-04-08 12:40:51 +02:00
shared-auth-ui refactor(auth-ui): tighten LoginPage UX, a11y, and dead code 2026-04-08 12:41:19 +02:00
shared-branding feat(cycles): add menstrual cycle tracking module 2026-04-07 14:35:33 +02:00
shared-config chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-drizzle-config feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-error-tracking feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-errors chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-go chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-hono feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-i18n chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-icons chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-landing-ui chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-links feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-llm chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
shared-logger feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-pwa feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-python/manacore_auth feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-splitscreen feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-storage chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
shared-stores fix: type errors from ManaCore→Mana rename and stale templates 2026-04-07 13:42:17 +02:00
shared-tags chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-tailwind chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-theme chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-theme-ui chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-tsconfig feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-types chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-ui fix(mana,ui): integrate guest nudge into bottom stack + theme it 2026-04-08 12:13:05 +02:00
shared-uload feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-utils fix(mana/web): unblock voice capture — permissions policy, notification mount, dev SW 2026-04-08 15:36:03 +02:00
shared-vite-config chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
spiral-db chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
subscriptions feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
test-config chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
wallpaper-generator chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00