docs: reconcile design spec with implementation decisions

Identifiers, the AutoFillExtension -> AutoFill rename, and the KDBX
library choice had all drifted from the approved spec since it was
written in May. Updates the spec to match what was actually built and
closes the now-resolved "which KDBX library" open question.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYqycDFsynHH9VnnK7LNSf
This commit is contained in:
2026-09-19 15:41:43 +02:00
co-authored by Claude Sonnet 5
parent f017387dd5
commit a97c0546a2
@@ -46,18 +46,21 @@ MyPass (Main App Target) ──links──► MyPassCore
├── BiometricAuthService — LAContext wrapper
└── ClipboardService — copy with 30 s expiry
AutoFillExtension (App Extension Target) ──links──► MyPassCore
AutoFill (App Extension Target) ──links──► MyPassCore
├── ASCredentialProviderViewController subclass
├── CredentialListView — filtered by serviceIdentifier URL/domain
└── UnlockView (mini) — Face ID → password fallback
Shared App Group (group.com.christophevila.mypass)
Shared App Group (group.org.antiloop222.mypass)
├── UserDefaults — security-scoped bookmark, last-opened vault, settings
└── Keychain Access Group — master password, biometric token
└── Keychain Access Group — master password, biometric token (org.antiloop222.mypass)
```
**External dependencies (SPM)**
- A KDBX parsing library (to be confirmed during implementation — evaluate available Swift/ObjC options supporting KDBX 3.1 and 4.0 with Argon2 KDF)
- KDBX parsing: KeePassKit (Objective-C, MIT). No upstream SPM support, so vendored locally as a git submodule (`Vendor/KeePassKit`) with a hand-written `Package.swift`. This pulled in the same problem three more times — none of the following had clean drop-in SPM support either, so all are vendored the same way:
- KissXML (`Vendor/KissXML`) — XML parsing KeePassKit depends on
- Argon2 (nested git submodule inside `Vendor/KeePassKit`) — KDBX4 key derivation
- ChaCha20 / TwoFish — cipher implementations already bundled in KeePassKit's own source tree, wired into the SPM target
- Apple CryptoKit (built-in)
- LocalAuthentication (built-in)
- AuthenticationServices (built-in)
@@ -231,8 +234,8 @@ Entry URL field is matched against the `serviceIdentifier` using host comparison
---
## Open Questions (resolved at implementation time)
## Open Questions
1. **KDBX library:** Evaluate Swift Package Manager options that support KDBX 3.1 + 4.0 with Argon2. Fallback: KeePassKit (Objective-C via bridging header).
1. ~~**KDBX library:** Evaluate Swift Package Manager options that support KDBX 3.1 + 4.0 with Argon2. Fallback: KeePassKit (Objective-C via bridging header).~~ **Resolved:** no SPM-native option was found; KeePassKit is used, vendored locally (see External dependencies above).
2. **macOS AutoFill:** `ASCredentialProviderExtension` on macOS 13+ has reduced scope vs iOS — verify which apps support third-party fill on macOS and document limitations.
3. **Associated Domains:** For bundle-ID-based AutoFill matching, an associated domains file may be needed for first-party apps. Evaluate at implementation time.