chore: final portfolio polish — changelog, ADRs, test hygiene, CI coverage#55
Conversation
…tory PRs #18–39 used plain imperative messages; conventional commits were adopted consistently from v1.0.0 onward.
Covers v1.0.0 with Added/Changed/Fixed sections pulled from the release tag message and git log.
Add makeTestDefaults(suiteName:) helper using try #require so a missing suite surfaces a clear test failure instead of a crash. All six AppStoreSecurityTests functions are now throws.
- 0002: on-device-first AI with Apple FoundationModels (privacy rationale, Ollama fallback) - 0003: SwiftData over Core Data (modern persistence, migration story) - 0004: no backend / serverless architecture (privacy-by-design, no data liability) - 0005: Keychain for credential storage (over UserDefaults, includes migration backstory)
Add -enableCodeCoverage YES and -resultBundlePath to the xcodebuild test step, then parse the .xcresult with xccov to print coverage% in the job log. Hard threshold is deferred to a follow-on PR.
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 8 minutes and 45 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughVery good, sir. This pull request prepares the Lumen application for its 1.0.0 public release. It introduces code coverage instrumentation to the CI pipeline, establishes formal release documentation via a comprehensive changelog, implements four new Architecture Decision Records articulating critical design choices regarding on-device AI inference, persistence mechanisms, serverless deployment, and credential management, and refines test suite error handling to employ proper requirement assertions. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request adds a CHANGELOG.md for the 1.0.0 release, updates the README.md with project details, and introduces several Architecture Decision Records (ADRs) covering on-device AI, SwiftData, and security. Unit tests were refactored to use Swift Testing's #require for improved safety. Feedback was provided regarding a discrepancy in ADR 0005, where the documented Keychain cleanup logic does not align with the actual implementation.
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/adr/0002-on-device-first-ai-with-apple-foundation-models.md`:
- Line 36: Update the vague Apple reference in
docs/adr/0002-on-device-first-ai-with-apple-foundation-models.md by replacing
the phrase "Apple `FoundationModels` framework documentation (WWDC 2025)" with a
precise citation: include the WWDC session number and title and add the session
URL (or Apple developer docs URL) so future readers can locate the source
directly; edit the line containing "Apple `FoundationModels` framework
documentation (WWDC 2025)" to append or substitute the specific session
identifier and link.
In `@docs/adr/0005-keychain-for-credential-storage.md`:
- Around line 24-26: The ADR claims Keychain items are purged on first launch
after reinstall but AppStore.swift currently detects first-launch (around the
first-launch detection in AppStore.swift lines ~47–50) without calling the
existing removal routine; add an explicit purge during initialization that calls
the existing removeValue() for ollamaLocalBearerTokenKey and
ollamaCloudAPIKeyKey before any load/migration logic runs, and extend
AppStoreSecurityTests to cover the fresh-install purge scenario (simulate fresh
install state and assert keys are removed/not loaded); alternatively, if you
prefer not to implement purge, update the ADR text to remove the “app deletes
its Keychain items on first launch after re-install” claim and reference
AppStore.swift and AppStoreSecurityTests accordingly.
In `@docs/adr/README.md`:
- Around line 61-64: The ADR index rows for
[0002](0002-on-device-first-ai-with-apple-foundation-models.md),
[0003](0003-swiftdata-over-core-data.md),
[0004](0004-no-backend-serverless-architecture.md) and
[0005](0005-keychain-for-credential-storage.md) show "Accepted 2025-10-01" which
conflicts with ADRs 0000/0001 (Accepted 2026-04-16); update these entries in
docs/adr/README.md to either set their status to "Proposed" if they are not yet
merged, or change the acceptance date to the actual acceptance date (or add a
parenthetical note stating they are retrospective) so the audit trail is
consistent and unambiguous.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 7e0df181-f2f3-4fa9-a871-2daa1cb1e753
📒 Files selected for processing (9)
.github/workflows/ci.ymlCHANGELOG.mdLumenTests/MemoryStoreTests.swiftREADME.mddocs/adr/0002-on-device-first-ai-with-apple-foundation-models.mddocs/adr/0003-swiftdata-over-core-data.mddocs/adr/0004-no-backend-serverless-architecture.mddocs/adr/0005-keychain-for-credential-storage.mddocs/adr/README.md
- ADR 0005: remove unimplemented first-launch Keychain purge claim from Neutral consequences; AppStore.swift detects isFirstLaunch but does not call removeValue on that path - ADR 0002: replace vague WWDC 2025 reference with Meet Foundation Models session title and documentation URL - ADR 0002-0005: mark status as retrospective to explain date predating the ADR practice established in 0000 (2026-04-16)
Summary
Six portfolio hygiene improvements across docs, tests, and CI. None affect runtime behavior.
portfolioGitHub topictestflight,swiftdata,local-llm— keywords that match how developers search for this stack. (Applied viagh repo edit; no source file.)MemoryStoreTests.swiftUserDefaults(suiteName:)!crashes the test runner on failure instead of surfacing a readable assertion. Replaced with amakeTestDefaults(suiteName:) throwshelper usingtry #require(Swift Testing idiom).-enableCodeCoverage YESand-resultBundlePathto thexcodebuild teststep, then parses the.xcresultto printCode Coverage: X.X%in the job log. Hard threshold deferred to a follow-on PR.Test plan
CHANGELOG.mdrenders correctly on GitHubdocs/adr/README.mdresolveMemoryStoreTests— no force-unwrap crash paths remain (grep -c '!' LumenTests/MemoryStoreTests.swiftshould show only logical-not uses)🤖 Generated with Claude Code
Summary by CodeRabbit