feat: persistent tip thank-you, feedback/rating rows and 1.0.0 release prep - #43
Conversation
The thank-you bubble only showed right after purchase and vanished when leaving and re-entering the tip jar. Persist the last tip purchase date and show the note for 7 days afterwards. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
A verified tip purchase can fail to show the thank-you section immediately if the device clock is behind the transaction purchaseDate (clock-skew regression introduced by gating on showsThankYou).
Get a fresh assessment by requesting another Copilot review.
Review effort: Lite
Findings: 1
Open (1)
What changed in this PR
Adds a Core-level policy for persisting and re-displaying the Tip Jar thank-you note for 7 days after the last tip, so the UI stays consistent across leaving/re-entering the screen.
Changes:
- Introduces
TipThankYouPolicy(UserDefaults-based) to record last tip purchase date and decide thank-you visibility within a 7‑day window. - Records the transaction
purchaseDateon both StoreKit purchase paths inTipJarStore, and drives the UI offstore.showsThankYou. - Adds unit tests covering the thank-you visibility window and boundary/future-date behavior.
| File | Description |
|---|---|
| Packages/LogWeightCore/Tests/LogWeightCoreTests/TipThankYouPolicyTests.swift | Adds tests for the thank-you visibility policy (no tip, inside/outside window, future date). |
| Packages/LogWeightCore/Sources/LogWeightCore/Support/TipThankYouPolicy.swift | Implements the UserDefaults-backed 7-day visibility policy. |
| Packages/LogWeightCore/Sources/LogWeightCore/Settings/SettingsKeys.swift | Adds a new canonical SettingsKey for last tip purchase date storage. |
| App/iOS/Views/TipJarView.swift | Switches thank-you section visibility to store.showsThankYou so it persists across navigation. |
| App/iOS/Support/TipJarStore.swift | Records tip purchase dates and exposes showsThankYou to drive the view. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Settings gets a Feedback section: a prefilled mailto draft (app, iOS and device model only, no health data) with clipboard fallback when no mail app exists, and a deep link to the App Store review page. Documented in Privacy.md and localized in all 11 locales. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Curate store scenes to three, cover all 11 App Store locales, derive kg/lb from the region's measurement system, and match the History tab label in every locale. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Update the logic to show thank-you message based on transaction date. Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
It bundles an entire undescribed user-facing Feedback feature alongside the stated tip-jar change plus StoreKit, screenshot, and cross-platform UI-test infrastructure edits, which warrants human review of the full scope.
Review effort: Balanced
Findings: 1
Open (1)
Resolved since last review (1)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Capture scripts now write to per-locale keys so the three English storefront variants get their own directories. Screenshot test cases only treat the US region as imperial, since en-GB displays kg. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Replace the en set with en-GB, en-US and en-CA and add screenshots for fr, es, it, nl, pt-BR, ja, ko, zh-Hans and zh-Hant. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
The change bundles multiple undescribed features plus manual release-version edits that bypass the documented release-please/CI flow and a screenshot unit-default that diverges from the app's own .metric rule, all needing human judgment.
Review effort: Balanced
Findings: 3
Open (3)
Resolved since last review (1)
| /// non-`.metric` measurement system. | ||
| func launchApp(seed: String? = nil) { | ||
| let unit = Locale.current.region?.identifier == "DE" ? "kg" : "lb" | ||
| let unit = Locale.current.measurementSystem == .us ? "lb" : "kg" |
| /// into the app process the same way `-AppleLanguages` did). | ||
| func launchApp(seed: String? = nil, extraArguments: [String] = []) { | ||
| let unit = Locale.current.region?.identifier == "DE" ? "kg" : "lb" | ||
| let unit = Locale.current.measurementSystem == .us ? "lb" : "kg" |
| CODE_SIGN_STYLE: Automatic | ||
| VERSIONING_SYSTEM: apple-generic | ||
| MARKETING_VERSION: "0.5.0" # x-release-please-version | ||
| MARKETING_VERSION: "1.0.0" # x-release-please-version |
There was a problem hiding this comment.
But when i merged the last release please pr the bump did fail.


Summary
logweight_last_tip_purchase_date) and show the bubble on every visit for 7 days after the last tip.TipThankYouPolicy(pureUserDefaults, no StoreKit).TipJarStorerecords the transaction'spurchaseDateon both purchase paths;TipJarViewkeys offstore.showsThankYou.Notes
Test plan
swift testinPackages/LogWeightCore(108 pass, incl. 5 newTipThankYouPolicyTests)🤖 Generated with Claude Code