--- # --- Voyage-påkrevde (Handover 1, brief_version 2.0) --- type: trekbrief brief_version: "2.0" created: 2026-06-01 task: "Lokale notifikasjoner som varsler brukeren når hvert av de tre daglige soltidsvinduene åpner, av/på per vindu, Focus-bevisst" slug: notification-on-window-open project_dir: .claude/projects/2026-06-01-notification-on-window-open/ research_topics: 0 research_status: complete brief_quality: complete source: manual # --- app-creator-interne (Voyage ignorerer / strippes ved handover) --- brief_type: feature phase: 7 parent_app: akashic-intelligence parent_feature: F-002 domain_pack: "ios-app@0.1.0" revision: 0 length_words: 480 voyage_run_dir: null voyage_run_status: null --- # Task: Lokale notifikasjoner når et soltidsvindu åpner > Generert av app-creator fase 7 på 2026-06-01 fra akashic-intelligence feature F-002. ## Intent Praksisen Akashic støtter krever at brukeren bukker innenfor tre tidsvinduer som flytter seg med soltidene der brukeren er. Det definerende problemet er at det er lett å glemme — uten en påminnelse i tide forsvinner vanen. Denne featuren leverer den primære eksterne forsterkningen: én notifikasjon når hvert vindu åpner, slik at brukeren kan handle der og da. Den henger sammen med, men er separat fra, den visuelle in-app-klokka (F-003) — notifikasjonen er for når appen *ikke* er åpen. ## Goal Når et soltidsvindu åpner, mottar brukeren én lokal notifikasjon (med mindre vinduet er slått av eller allerede markert fullført den dagen). Notifikasjonen kan trykkes for å åpne appen direkte til markeringssjermen for det vinduet. Brukeren kan slå hver av de tre notifikasjonene av/på uavhengig i innstillinger. Notifikasjonene respekterer brukerens Focus-modus. Tidene re-beregnes og re-planlegges når appen kommer i forgrunnen og posisjonen har endret seg vesentlig (delt logikk med F-001). Ingen notifikasjon fyrer på feil tidspunkt etter en lokasjons- eller dato-endring. ## Non-Goals - Push-notifikasjoner / server (appen er all-local, ingen backend). - Snooze, gjentatte påminnelser innenfor samme vindu, eller "du glemte i går"-varsler. - Notifikasjons-handlinger utover "åpne appen" (in-notification "marker gjort" vurderes i en senere feature, ikke her). - Konfigurerbar tekst / lyd per notifikasjon (standard system-lyd, fast tekst i v1). - Time Sensitive / Critical interruption-nivå (krever Apple-entitlement; bruk standard `.active` i v1). ## Constraints - Ingen nye tredjeparts-deps (app-invariant). - All in-app- og notifikasjons-tekst skal være forsiktig med effekt-claims — speil kildens framing, hevd ingenting (app-brief constraint-signal, [enforce]). - Permission-transparens: notifikasjons-tillatelsen forklares på en onboarding-skjerm *før* `requestAuthorization` (GDPR + App Review-forventning, [enforce]). - Maks ~64 ventende lokale notifikasjoner per app (iOS-grense) — planlegg rullerende (f.eks. neste N dager), ikke et helt år. ## Preferences - `UNUserNotificationCenter` + `UNCalendarNotificationTrigger`; re-planlegging ved `scenePhase == .active` (jf. domain-pack `patterns/local-notifications.md` og `patterns/current-location-regeneration.md`). - Del soltids-/vindu-beregningen med F-001 og F-003 — ikke dupliser logikken. - MVVM, SwiftUI; interruption-nivå `.active`. ## Non-Functional Requirements - Re-planlegging ved app-foreground fullfører på < 100 ms (synkron del); ingen merkbar UI-stall. - Appen krasjer ikke og viser ingen dead-end hvis notifikasjons-tillatelse er nektet — degraderer til in-app-klokka (F-003) med en CTA for å aktivere varsler. - Ingen sensitiv data i notifikasjons-payload (det er ingen — men prinsippet står). ## Success Criteria - Given notifikasjons-tillatelse gitt og alle tre vinduer på, When et vindu åpner mens appen er i bakgrunnen, Then leveres nøyaktig én notifikasjon for det vinduet, og trykk åpner markeringssjermen for det vinduet. - Given et vindu er slått av ELLER allerede markert fullført i dag, When vinduet åpner, Then leveres ingen notifikasjon for det vinduet. - Given brukeren flytter seg vesentlig (eller krysser midnatt), When appen kommer i forgrunnen, Then er ventende notifikasjoner re-planlagt mot de nye soltidene, og ingen utdatert notifikasjon gjenstår. - Given notifikasjons-tillatelse er nektet, When brukeren åpner appen, Then vises in-app-klokka og en CTA for å aktivere varsler — ingen krasj, ingen tom skjerm. - Alle eksisterende tester passerer: `xcodebuild test -scheme Akashic` exit 0. - Ingen nye Swift Package-dependencies i `Package.resolved`. ## Research Plan No external research needed — the codebase and this brief contain sufficient context for planning. (Soltids-beregning og vindu-modell etableres av F-001, som er en avhengighet; se context.md.) ## Open Questions / Assumptions - [ANTAKELSE] F-001 (soltids-/vindu-beregning) er ferdig og eksponerer en stabil API for "neste vindu-åpningstider" — denne featuren bygger på den. Hvis F-001 ikke er klar, blokkér. - [ANTAKELSE] Standard `.active`-interruption-nivå er godt nok i v1. Hvis bruker-feedback senere tilsier at varslene drukner i Focus, vurder time-sensitive-entitlement (egen feature). ## How to continue ```bash /trekplan --project .claude/projects/2026-06-01-notification-on-window-open/ /trekexecute --project .claude/projects/2026-06-01-notification-on-window-open/ ```