Commit 28f6ed976a

28f6ed976a3397e794371e5587c85e5207c62b63

parent: 7b880ea410

Unsigned

cmc <hello@cleberg.net> · 2026-07-20 20:54 UTC

v4.8.2: Bump version and mark shipped in roadmap

Bump AppVersion/marketing version to 4.8.2 and build number to 42 across the
app, widget, and share extension targets. Mark v4.8.2 (delivery visibility for
disabled integrations, forced queue retries, unreachable-domain reporting,
Swift 6 concurrency warnings, synced StoreKit configuration) shipped in
RELEASE_ROADMAP.md and record the UAT follow-ups as resolved.

Layout: unified · split

DomainDig.xcodeproj/project.pbxproj +12 −12
@@ -497,7 +497,7 @@
497497 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
498498 CODE_SIGN_ENTITLEMENTS = DomainDig/DomainDig.entitlements;
499499 CODE_SIGN_STYLE = Automatic;
500 CURRENT_PROJECT_VERSION = 41;
500 CURRENT_PROJECT_VERSION = 42;
501501 DEVELOPMENT_TEAM = ZCNAX3VL9D;
502502 ENABLE_PREVIEWS = YES;
503503 GENERATE_INFOPLIST_FILE = YES;
@@ -514,7 +514,7 @@
514514 "$(inherited)",
515515 "@executable_path/Frameworks",
516516 );
517 MARKETING_VERSION = 4.8.1;
517 MARKETING_VERSION = 4.8.2;
518518 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DomainDig;
519519 PRODUCT_NAME = "$(TARGET_NAME)";
520520 STRING_CATALOG_GENERATE_SYMBOLS = YES;
@@ -534,7 +534,7 @@
534534 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
535535 CODE_SIGN_ENTITLEMENTS = DomainDig/DomainDig.entitlements;
536536 CODE_SIGN_STYLE = Automatic;
537 CURRENT_PROJECT_VERSION = 41;
537 CURRENT_PROJECT_VERSION = 42;
538538 DEVELOPMENT_TEAM = ZCNAX3VL9D;
539539 ENABLE_PREVIEWS = YES;
540540 GENERATE_INFOPLIST_FILE = YES;
@@ -551,7 +551,7 @@
551551 "$(inherited)",
552552 "@executable_path/Frameworks",
553553 );
554 MARKETING_VERSION = 4.8.1;
554 MARKETING_VERSION = 4.8.2;
555555 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DomainDig;
556556 PRODUCT_NAME = "$(TARGET_NAME)";
557557 STRING_CATALOG_GENERATE_SYMBOLS = YES;
@@ -570,7 +570,7 @@
570570 APPLICATION_EXTENSION_API_ONLY = YES;
571571 CODE_SIGN_ENTITLEMENTS = DomainDigWidget/DomainDigWidget.entitlements;
572572 CODE_SIGN_STYLE = Automatic;
573 CURRENT_PROJECT_VERSION = 41;
573 CURRENT_PROJECT_VERSION = 42;
574574 DEVELOPMENT_TEAM = ZCNAX3VL9D;
575575 GENERATE_INFOPLIST_FILE = NO;
576576 INFOPLIST_FILE = DomainDigWidget/Info.plist;
@@ -581,7 +581,7 @@
581581 "@executable_path/Frameworks",
582582 "@executable_path/../../Frameworks",
583583 );
584 MARKETING_VERSION = 4.8.1;
584 MARKETING_VERSION = 4.8.2;
585585 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DomainDig.DomainDigWidget;
586586 PRODUCT_NAME = "$(TARGET_NAME)";
587587 SKIP_INSTALL = YES;
@@ -599,7 +599,7 @@
599599 APPLICATION_EXTENSION_API_ONLY = YES;
600600 CODE_SIGN_ENTITLEMENTS = DomainDigWidget/DomainDigWidget.entitlements;
601601 CODE_SIGN_STYLE = Automatic;
602 CURRENT_PROJECT_VERSION = 41;
602 CURRENT_PROJECT_VERSION = 42;
603603 DEVELOPMENT_TEAM = ZCNAX3VL9D;
604604 GENERATE_INFOPLIST_FILE = NO;
605605 INFOPLIST_FILE = DomainDigWidget/Info.plist;
@@ -610,7 +610,7 @@
610610 "@executable_path/Frameworks",
611611 "@executable_path/../../Frameworks",
612612 );
613 MARKETING_VERSION = 4.8.1;
613 MARKETING_VERSION = 4.8.2;
614614 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DomainDig.DomainDigWidget;
615615 PRODUCT_NAME = "$(TARGET_NAME)";
616616 SKIP_INSTALL = YES;
@@ -628,7 +628,7 @@
628628 APPLICATION_EXTENSION_API_ONLY = YES;
629629 CODE_SIGN_ENTITLEMENTS = DomainDigShareExtension/DomainDigShareExtension.entitlements;
630630 CODE_SIGN_STYLE = Automatic;
631 CURRENT_PROJECT_VERSION = 41;
631 CURRENT_PROJECT_VERSION = 42;
632632 DEVELOPMENT_TEAM = ZCNAX3VL9D;
633633 GENERATE_INFOPLIST_FILE = NO;
634634 INFOPLIST_FILE = DomainDigShareExtension/Info.plist;
@@ -639,7 +639,7 @@
639639 "@executable_path/Frameworks",
640640 "@executable_path/../../Frameworks",
641641 );
642 MARKETING_VERSION = 4.8.1;
642 MARKETING_VERSION = 4.8.2;
643643 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DomainDig.DomainDigShareExtension;
644644 PRODUCT_NAME = "$(TARGET_NAME)";
645645 SKIP_INSTALL = YES;
@@ -657,7 +657,7 @@
657657 APPLICATION_EXTENSION_API_ONLY = YES;
658658 CODE_SIGN_ENTITLEMENTS = DomainDigShareExtension/DomainDigShareExtension.entitlements;
659659 CODE_SIGN_STYLE = Automatic;
660 CURRENT_PROJECT_VERSION = 41;
660 CURRENT_PROJECT_VERSION = 42;
661661 DEVELOPMENT_TEAM = ZCNAX3VL9D;
662662 GENERATE_INFOPLIST_FILE = NO;
663663 INFOPLIST_FILE = DomainDigShareExtension/Info.plist;
@@ -668,7 +668,7 @@
668668 "@executable_path/Frameworks",
669669 "@executable_path/../../Frameworks",
670670 );
671 MARKETING_VERSION = 4.8.1;
671 MARKETING_VERSION = 4.8.2;
672672 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DomainDig.DomainDigShareExtension;
673673 PRODUCT_NAME = "$(TARGET_NAME)";
674674 SKIP_INSTALL = YES;
DomainDig/AppVersion.swift +1 −1
@@ -2,6 +2,6 @@ import Foundation
22
33enum AppVersion {
44 nonisolated static var current: String {
5 "4.8.1"
5 "4.8.2"
66 }
77}
RELEASE_ROADMAP.md +30 −5
@@ -6,7 +6,7 @@ ports, geolocation, subdomains, availability). The next several releases invest
66in *reach and surfacing* — getting that data onto more iOS surfaces and into more
77workflows — rather than adding raw protocol checks.
88
9Current version: `v4.8.1`.
9Current version: `v4.8.2`.
1010
1111## v4.4.1 Patch: Release Readiness — ✅ shipped
1212
@@ -124,10 +124,35 @@ Goal: fix what UAT of v4.8.0 turned up.
124124 action, so the purchase and entitlement paths can be exercised without the
125125 `DOMAIN_DIG_FORCE_PRO_PLUS` launch argument that bypasses StoreKit entirely.
126126
127Known open follow-ups filed during UAT: integration events to a disabled target
128vanish with no delivery-log row (#8), "Process Queue Now" does not force a
129backed-off retry (#9), and a monitoring snapshot fallback silently reports "No
130meaningful changes" (#10).
127Follow-ups filed during UAT (#8, #9, #10) were all resolved in v4.8.2.
128
129## v4.8.2 Patch: Delivery Visibility & Build Health — ✅ shipped
130
131Goal: close the UAT follow-ups and make failures legible instead of silent.
132
133- **Disabled integrations no longer swallow events** (#8) — `enqueue(events:)`
134 filtered to enabled targets before writing any `DeliveryRecord`, so events
135 routed to a disabled integration vanished entirely. They now log a `.skipped`
136 entry with a reason. `sendTest` also respects `isEnabled`, which previously
137 delivered against targets that dropped every real event.
138- **"Process Queue Now" forces backed-off retries** (#9) — it only restarted the
139 processing task, never moving `nextAttemptAt`, so an item in backoff (up to an
140 hour) stayed undue and the button appeared inert. It now pulls queued items
141 forward, and reports an empty queue instead of doing nothing silently.
142- **Unreachable domains report as unreachable** (#10) — when the snapshot
143 fallback fired, the run compared old data against itself and claimed "No
144 meaningful changes" for a domain it never reached. `MonitoringDomainResult`
145 now carries `unreachableReason`, the summary says so, and a warning-severity
146 `monitoringFailure` reaches configured integrations.
147- **Swift 6 concurrency warnings cleared** — `SweepActivityAttributes` is
148 explicitly `nonisolated` (the app target sets
149 `SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor` while the widget target does not),
150 and `LocalAPIService`'s logger closures capture `self` coherently. Build is
151 warning-free.
152- **StoreKit configuration corrected and synced** — the scheme's path was wrong,
153 and the hand-authored file has been replaced by `SyncedProducts.storekit`,
154 synced against App Store Connect. Registered in the project without target
155 membership so it is not bundled into shipping builds.
131156
132157## v5.0.0 Major: Contract Stabilization & Engineering Health
133158