Commit d69aa35d88

d69aa35d8843e45e1d13bae82259043787a661b0

parent: 1c3d19b233

Unsigned

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

v4.8.1: Bump version and mark shipped in roadmap

Bump AppVersion/marketing version to 4.8.1 and build number to 41 across the
app, widget, and share extension targets. Mark v4.8.1 (scheduled report tap
target, completed Pro gate, markdown underline rendering, DNS record dedup,
inspect tab keyboard behavior) shipped in RELEASE_ROADMAP.md, and note the
three follow-ups filed during UAT.

Layout: unified · split

DomainDig.xcodeproj/project.pbxproj +12 −12
@@ -495,7 +495,7 @@
495495 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
496496 CODE_SIGN_ENTITLEMENTS = DomainDig/DomainDig.entitlements;
497497 CODE_SIGN_STYLE = Automatic;
498 CURRENT_PROJECT_VERSION = 40;
498 CURRENT_PROJECT_VERSION = 41;
499499 DEVELOPMENT_TEAM = ZCNAX3VL9D;
500500 ENABLE_PREVIEWS = YES;
501501 GENERATE_INFOPLIST_FILE = YES;
@@ -512,7 +512,7 @@
512512 "$(inherited)",
513513 "@executable_path/Frameworks",
514514 );
515 MARKETING_VERSION = 4.8.0;
515 MARKETING_VERSION = 4.8.1;
516516 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DomainDig;
517517 PRODUCT_NAME = "$(TARGET_NAME)";
518518 STRING_CATALOG_GENERATE_SYMBOLS = YES;
@@ -532,7 +532,7 @@
532532 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
533533 CODE_SIGN_ENTITLEMENTS = DomainDig/DomainDig.entitlements;
534534 CODE_SIGN_STYLE = Automatic;
535 CURRENT_PROJECT_VERSION = 40;
535 CURRENT_PROJECT_VERSION = 41;
536536 DEVELOPMENT_TEAM = ZCNAX3VL9D;
537537 ENABLE_PREVIEWS = YES;
538538 GENERATE_INFOPLIST_FILE = YES;
@@ -549,7 +549,7 @@
549549 "$(inherited)",
550550 "@executable_path/Frameworks",
551551 );
552 MARKETING_VERSION = 4.8.0;
552 MARKETING_VERSION = 4.8.1;
553553 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DomainDig;
554554 PRODUCT_NAME = "$(TARGET_NAME)";
555555 STRING_CATALOG_GENERATE_SYMBOLS = YES;
@@ -568,7 +568,7 @@
568568 APPLICATION_EXTENSION_API_ONLY = YES;
569569 CODE_SIGN_ENTITLEMENTS = DomainDigWidget/DomainDigWidget.entitlements;
570570 CODE_SIGN_STYLE = Automatic;
571 CURRENT_PROJECT_VERSION = 40;
571 CURRENT_PROJECT_VERSION = 41;
572572 DEVELOPMENT_TEAM = ZCNAX3VL9D;
573573 GENERATE_INFOPLIST_FILE = NO;
574574 INFOPLIST_FILE = DomainDigWidget/Info.plist;
@@ -579,7 +579,7 @@
579579 "@executable_path/Frameworks",
580580 "@executable_path/../../Frameworks",
581581 );
582 MARKETING_VERSION = 4.8.0;
582 MARKETING_VERSION = 4.8.1;
583583 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DomainDig.DomainDigWidget;
584584 PRODUCT_NAME = "$(TARGET_NAME)";
585585 SKIP_INSTALL = YES;
@@ -597,7 +597,7 @@
597597 APPLICATION_EXTENSION_API_ONLY = YES;
598598 CODE_SIGN_ENTITLEMENTS = DomainDigWidget/DomainDigWidget.entitlements;
599599 CODE_SIGN_STYLE = Automatic;
600 CURRENT_PROJECT_VERSION = 40;
600 CURRENT_PROJECT_VERSION = 41;
601601 DEVELOPMENT_TEAM = ZCNAX3VL9D;
602602 GENERATE_INFOPLIST_FILE = NO;
603603 INFOPLIST_FILE = DomainDigWidget/Info.plist;
@@ -608,7 +608,7 @@
608608 "@executable_path/Frameworks",
609609 "@executable_path/../../Frameworks",
610610 );
611 MARKETING_VERSION = 4.8.0;
611 MARKETING_VERSION = 4.8.1;
612612 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DomainDig.DomainDigWidget;
613613 PRODUCT_NAME = "$(TARGET_NAME)";
614614 SKIP_INSTALL = YES;
@@ -626,7 +626,7 @@
626626 APPLICATION_EXTENSION_API_ONLY = YES;
627627 CODE_SIGN_ENTITLEMENTS = DomainDigShareExtension/DomainDigShareExtension.entitlements;
628628 CODE_SIGN_STYLE = Automatic;
629 CURRENT_PROJECT_VERSION = 40;
629 CURRENT_PROJECT_VERSION = 41;
630630 DEVELOPMENT_TEAM = ZCNAX3VL9D;
631631 GENERATE_INFOPLIST_FILE = NO;
632632 INFOPLIST_FILE = DomainDigShareExtension/Info.plist;
@@ -637,7 +637,7 @@
637637 "@executable_path/Frameworks",
638638 "@executable_path/../../Frameworks",
639639 );
640 MARKETING_VERSION = 4.8.0;
640 MARKETING_VERSION = 4.8.1;
641641 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DomainDig.DomainDigShareExtension;
642642 PRODUCT_NAME = "$(TARGET_NAME)";
643643 SKIP_INSTALL = YES;
@@ -655,7 +655,7 @@
655655 APPLICATION_EXTENSION_API_ONLY = YES;
656656 CODE_SIGN_ENTITLEMENTS = DomainDigShareExtension/DomainDigShareExtension.entitlements;
657657 CODE_SIGN_STYLE = Automatic;
658 CURRENT_PROJECT_VERSION = 40;
658 CURRENT_PROJECT_VERSION = 41;
659659 DEVELOPMENT_TEAM = ZCNAX3VL9D;
660660 GENERATE_INFOPLIST_FILE = NO;
661661 INFOPLIST_FILE = DomainDigShareExtension/Info.plist;
@@ -666,7 +666,7 @@
666666 "@executable_path/Frameworks",
667667 "@executable_path/../../Frameworks",
668668 );
669 MARKETING_VERSION = 4.8.0;
669 MARKETING_VERSION = 4.8.1;
670670 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.DomainDig.DomainDigShareExtension;
671671 PRODUCT_NAME = "$(TARGET_NAME)";
672672 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.0"
5 "4.8.1"
66 }
77}
RELEASE_ROADMAP.md +25 −1
@@ -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.0`.
9Current version: `v4.8.1`.
1010
1111## v4.4.1 Patch: Release Readiness — ✅ shipped
1212
@@ -96,6 +96,30 @@ Deferred/scoped out: scheduled-report settings and logs are UserDefaults-only
9696v4.7.0's watchlist saved views — this is local automation config, not
9797user-authored content.
9898
99## v4.8.1 Patch: Reporting & Sharing Fixes — ✅ shipped
100
101Goal: fix what UAT of v4.8.0 turned up.
102
103- **Scheduled reports were unreachable manually** — the Overview section wrapped
104 every control in a single `VStack` inside one `List` row, so SwiftUI collapsed
105 them into one tap target and the Cadence `Picker` captured taps meant for
106 "Generate Now". Each control is now its own row.
107- **Pro gate completed on that screen** — `.automatedMonitoring` previously
108 disabled only the toggle, leaving both pickers and "Generate Now" interactive
109 on Free where they silently no-opped against the service-side guard.
110- **Markdown/PDF reports rendered `=` underlines as bullets** — the plain-text
111 transform only recognized `-`, so `batchText`'s title underline and its
112 48-character inter-report separators leaked through as literal list items.
113- **Duplicate DNS record values** — the report concatenated apex and wildcard
114 records without dedup, listing every value twice on domains with wildcard DNS.
115- **Inspect tab keyboard behavior** — removed the "Dismiss Keyboard" toolbar
116 button and the launch-time focus that raised the keyboard on app open.
117
118Known open follow-ups filed during UAT: integration events to a disabled target
119vanish with no delivery-log row (#8), "Process Queue Now" does not force a
120backed-off retry (#9), and a monitoring snapshot fallback silently reports "No
121meaningful changes" (#10).
122
99123## v5.0.0 Major: Contract Stabilization & Engineering Health
100124
101125Goal: earn long-term compatibility promises — and pay down the debt that the