From f2afe1ab0d8375463c1e975675ee2b5cb98ef7e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20F=C3=B6rtsch?= Date: Sun, 1 Mar 2026 11:44:10 +0100 Subject: [PATCH] sync current state --- AGENTS.md | 30 ---------------------- CODEX_REPORT.md | 68 ------------------------------------------------- 2 files changed, 98 deletions(-) delete mode 100644 AGENTS.md delete mode 100644 CODEX_REPORT.md diff --git a/AGENTS.md b/AGENTS.md deleted file mode 100644 index fd3fde1..0000000 --- a/AGENTS.md +++ /dev/null @@ -1,30 +0,0 @@ -# Agent Instructions - -These instructions are authoritative for work in this repository. - -## Product & UX -- Always adhere to the latest Apple Human Interface Guidelines (iOS). -- Always use native platform components whenever possible. -- On iOS, use native icons from SF Symbols. -- Always implement accessibility best practices (labels, traits, dynamic type, sufficient contrast). -- On iOS, always use default system colors unless explicitly told otherwise (e.g., `.green`). -- Use English as the primary language in the app and design with localization in mind from the start. Implement localization scaffolding for English, German, Spanish, and French. -- Use proper language-specific characters and diacritics in localizations (e.g., German `ä/ö/ü/ß`), never ASCII substitutions like `ae/oe/ue`. -- Date/time conventions are fixed: Monday is the first day of the week. Do not vary by locale. -- Units are always metric; do not use imperial units. - -## Privacy & Permissions -- Follow the principle of least privilege. For sensitive access (e.g., contacts), always offer the user a choice between limited and full access when the platform supports it. - -## Engineering Standards -- Always use SwiftUI when possible. -- Git commit messages must start with a lower-case letter. -- Always use `tmux` for CLI interactions so sessions can be resumed. -- The calling shell may often be `fish`; run agent command calls in `bash` to avoid shell compatibility issues. -- Keep `CODEX_REPORT.md` updated whenever it makes sense so work can be resumed after context is dropped. -- Always implement tests, especially for fixed bugs, so regressions are not re-introduced. -- When setting up a remote server, the chance is high that you are working on Uberspace. For that, check https://lab.uberspace.de/ and https://manual.uberspace.de/ -- Prefer self-contained builds. The app should run on first launch without extra setup when feasible. -- For iOS development, target the latest available iOS version when creating new projects. -- For iOS project setup, use Team ID `NG5W75WE8U`. -- Avoid accounts unless absolutely necessary. Prefer account-less flows; for iOS apps, use iCloud as a backend by default. If we go to web, discuss accounts explicitly. diff --git a/CODEX_REPORT.md b/CODEX_REPORT.md deleted file mode 100644 index b0cedda..0000000 --- a/CODEX_REPORT.md +++ /dev/null @@ -1,68 +0,0 @@ -# Codex Report — Kontakte - -Date: 2026-02-11 - -## Goal -Copy-cat the default iOS 26 Contacts app UI/behavior, then extend later. Use the new Contacts access API so users can choose full vs limited access. - -## Current State -- App uses native SwiftUI + Contacts components: `List`, `NavigationStack`, native `contextMenu`, and `CNContactViewController` for detail/create flows. -- Contacts list is fetched via `CNContactStore` and shown in native sectioned list: My Card, Favorites, All Contacts, with search and add. -- Access flow supports least privilege: **Allow Full Access** (`requestAccess`) and **Select Contacts** (`.contactAccessPicker` for limited access). -- My Card and Favorites are implemented via metadata persisted in contact Notes using a lightweight DSL block. -- Row context menu actions: - - Set / Remove My Card - - Favorite / Remove Favorite - - Delete contact (destructive confirmation) -- Favorites are rendered in the Favorites section with a yellow star marker in rows. -- Localizations exist for `en`, `de`, `es`, `fr` and were normalized to proper language-specific symbols/diacritics. - -## Key Implementation Notes -- Notes DSL format: - - `[[kontakte]]` - - `favorite=1` - - `my_card=1` - - `[[/kontakte]]` -- DSL is merged into Notes while preserving user text. -- If notes key access is not allowed, app falls back to note-less contact fetch and surfaces a localized warning for metadata actions. -- `CNErrorDomain` code `102` (`Unauthorized Keys` for `note`) handling was hardened further: - - contact list fetch no longer requests `note` at all - - `supportsMetadataDSL` defaults to disabled to prevent repeated note-key warnings - - contacts remain functional without metadata DSL editing -- Contact fetch runs off-main thread and updates UI on main. -- Unused high-privilege capabilities were removed: - - `UIBackgroundModes` remote-notification removed from `Info.plist` - - push/iCloud/CloudKit entitlements removed from app entitlements - -## Files Added/Updated -- `Kontakte/ContactMetadataDSL.swift` (new) -- `Kontakte/ContactsViewModel.swift` -- `Kontakte/ContactsAccessView.swift` -- `Kontakte/ListsView.swift` -- `Kontakte/ContactRowView.swift` -- `Kontakte/ContactDetailView.swift` -- `Kontakte/ContentView.swift` -- `Kontakte/Info.plist` -- `Kontakte/Kontakte.entitlements` -- `Kontakte.xcodeproj/project.pbxproj` (known regions include `de/es/fr`) -- `Kontakte/en.lproj/Localizable.strings` -- `Kontakte/de.lproj/Localizable.strings` -- `Kontakte/es.lproj/Localizable.strings` -- `Kontakte/fr.lproj/Localizable.strings` -- `KontakteTests/KontakteTests.swift` (regression tests for DSL parse/update behavior) -- `Kontakte/Item.swift` (deleted unused template model) - -## Known Issues / Caveats -- System logs may still include framework-level remote service noise on device/simulator (not always app defects). -- Some devices/profiles may restrict note-key access; in that case metadata actions are disabled gracefully. -- Native `contextMenu` row highlight persistence can still be briefly visible depending on OS behavior. -- Lists/Groups parity and alphabetical index are still incomplete vs Apple Contacts. -- System-level "helper app"/remote object warnings can still appear in console even when app behavior is correct. - -## Next Steps -1. Add tests for `ContactsViewModel` metadata transitions and deletion paths (mocked store abstraction). -2. Improve parity for Lists/Groups and alphabetical index behavior. -3. Add UI tests for first-run permission flows (full, limited, denied) with deterministic test fixtures. - -## Git -- Worktree currently contains uncommitted local changes from iterative implementation and guideline-alignment passes.