design(app-creator): S6 — forfatt ios-app referanse-domain-pack + start claude-code-plugin-pakke
- domain-packs/ios-app/: komplett referanse-pakke (8 komponenter) — pack.json med components-map, conventions.md, 4 patterns/, gotchas.md, checklist.md splittet i 3 (App Store-submission + security-privacy/MASVS 2.1 + accessibility/WCAG 2.2 AA), 3 scaffold/-maler (PrivacyInfo.xcprivacy-plist, NSUsageDescription-inventar, ASC-metadata), eksempel-feature-brief i Voyage strict-mode-format, glossary.md. Hver teknisk påstand verifisert mot Apple Developer / W3C WAI / OWASP MAS. - domain-packs/claude-code-plugin/: stub — pack.json + conventions.md + gotchas.md + checklist.md + glossary.md ferdige (ekstrahert fra ktg-privat-konvensjoner); patterns/scaffold/examples er stubs. - docs/domain-pack-spec.md: § D2/D3/D4/D7 + restrisiko oppdatert — pack.json components-felt, core/supplementary låst til manifestet, checklist-splitt-konvensjon, snapshot-materialiserings-mekanikk presisert, iOS-versjons-korreksjon (iOS 26, ikke "iOS 18/19"), D7 → "forfattet i S6". - prototype-run/friksjon.md: #9 (Akashic-briefen refererer "iOS 19" som ikke finnes — rettes i S7) + S6-prosessnotater (checklist-splitt bekreftet nødvendig, components-gap fylt, verifiserings-asymmetri ios-app vs claude-code-plugin notert). - CLAUDE.md: peker til domain-packs/ under § Status. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
e4ae4ac5b4
commit
2011507ea1
27 changed files with 1059 additions and 17 deletions
|
|
@ -0,0 +1,94 @@
|
|||
<!-- domain-pack: ios-app · component: examples · supplementary -->
|
||||
<!-- Eksempel-feature-brief i Voyage Handover-1 strict-mode-format (jf. phase-design-draft.md § Fase 7).
|
||||
Avledet fra en Akashic-feature ("lokale notifikasjoner når et soltidsvindu åpner"). Illustrerende — ikke en
|
||||
ekte handover. Unntatt domain-pack-lengde-grensen (referanse-materiale, ikke instruksjon).
|
||||
Brukes av fase 6/7-brief-generatoren som "slik ser en god iOS-feature-brief ut". -->
|
||||
|
||||
---
|
||||
# --- 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/
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue