Skip to content

Pro: the license honors a pack on the Armed family; pack plan and Restore wording (#705) - #771

Merged
Skeyelab merged 1 commit into
mainfrom
packs-license-705
Oct 16, 2026
Merged

Skeyelab merged 1 commit into
mainfrom
packs-license-705

Conversation

@Skeyelab

Copy link
Copy Markdown
Member

#705, Kit. Stacked on #770. Auto-merge goes on once its base is main. No app change in this PR; the app PR stacked on it uses these.

What it adds

  • ProStatus.license(proOffered:armedFamily:now:): the Armed input's mixer family goes through to tier(now:armedFamily:), so a pack on that family counts as Pro at record press. The default nil keeps every existing caller exactly as before.
  • PackOffer.planTitle(tier:ownsPro:ownedPacks:): the plan line in Settings.
    • Unknown tier: "Checking with the App Store…".
    • Pro owned: "Pro".
    • A running Trial: its days left.
    • A pack owner: "X Air pack".
    • Otherwise: the tier.
    • Pass the tier without the Armed family, so the line doesn't change with the input. The doc comment says so (from review).
  • PackOffer.restoreNote(ownsPro:ownedPacks:):
    • nil when Pro came back, including through the upgrade;
    • "Restored: X Air pack" when only a pack did (Eric);
    • otherwise the old "No Pro purchase found…".
  • MixerFamily.name is public, for copy ("X Air", "X32").

Tests, written first (PackOfferTests.licenseWithFamily, planTitle, restoreNote): red (compile: no armedFamily:, no planTitle, no restoreNote), then green. None passed on its first run. Review then made licenseWithFamily use one fixed date.

Reviewed: a code-review agent found no blockers. Its finding, that a Trial could be hidden by a pack on the Armed family, is handled by the doc rule here and by ProStore.planLicense() in the app PR.

Checked: full package tests (1,034) pass, and VERIFY_QUICK=1 ./scripts/verify.sh passes.

@codecov

codecov Bot commented Oct 16, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

…tore wording (#705)

ProStatus.license(proOffered:armedFamily:now:) passes the Armed input's mixer
family through, so a pack on it counts as Pro at record press; without a family
it's as before. PackOffer.planTitle names a pack owner's plan ("X Air pack")
unless Pro or a running Trial says more; PackOffer.restoreNote says "Restored:
X Air pack" when only a pack came back. MixerFamily.name is public for copy.

Claude-Session: https://claude.ai/code/session_01K4ihr1i6m1uuUswAENvJKJ
Assisted-by: Claude Code:claude-opus-5-5
@Skeyelab
Skeyelab changed the base branch from packs-offer-705 to main October 16, 2026 05:37
@Skeyelab
Skeyelab enabled auto-merge (squash) October 16, 2026 05:37
@Skeyelab Skeyelab closed this Oct 16, 2026
auto-merge was automatically disabled October 16, 2026 05:39

Pull request was closed

@Skeyelab Skeyelab reopened this Oct 16, 2026
@Skeyelab
Skeyelab enabled auto-merge (squash) October 16, 2026 05:39
@Skeyelab
Skeyelab merged commit e462701 into main Oct 16, 2026
14 of 19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant