<feed xmlns='http://www.w3.org/2005/Atom'>
<title>domain-dig.git/DomainDig.xcodeproj, branch v4.8.2</title>
<subtitle>local-first ios domain inspection toolkit. dns, tls, rdap, audit.
</subtitle>
<id>http://git.krz.sh/krz/domain-dig.git/atom?h=v4.8.2</id>
<link rel='self' href='http://git.krz.sh/krz/domain-dig.git/atom?h=v4.8.2'/>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/'/>
<updated>2026-07-20T20:54:10+00:00</updated>
<entry>
<title>v4.8.2: Bump version and mark shipped in roadmap</title>
<updated>2026-07-20T20:54:10+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-20T20:54:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=28f6ed976a3397e794371e5587c85e5207c62b63'/>
<id>urn:sha1:28f6ed976a3397e794371e5587c85e5207c62b63</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>chore: rename StoreKit configuration to SyncedProducts.storekit</title>
<updated>2026-07-20T20:52:38+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-20T20:47:24+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=d9bd61cc745b3f1d6ff481fd300abf3216d07d48'/>
<id>urn:sha1:d9bd61cc745b3f1d6ff481fd300abf3216d07d48</id>
<content type='text'>
DomainDig.storekit sat beside the DomainDig/ source folder, and Xcode
treated the two as conflicting when creating the synced configuration —
the resulting confirmation dialog offered to replace the folder. Naming
the file SyncedProducts.storekit removes the collision entirely and
matches the convention Xcode uses for synced configurations elsewhere.

Updates the project file reference and the scheme's
StoreKitConfigurationFileReference to match.
</content>
</entry>
<entry>
<title>chore: adopt synced StoreKit configuration</title>
<updated>2026-07-20T20:52:38+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-20T20:44:36+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=aeb671a8152c51c710f82d07cddc8f50c49f39d2'/>
<id>urn:sha1:aeb671a8152c51c710f82d07cddc8f50c49f39d2</id>
<content type='text'>
Xcode synced DomainDig.storekit against App Store Connect, replacing the
hand-authored placeholders with real values: the app's internal ID
(6760368004), the real subscription group ID (22051301), a synchronized
timestamp, and group localizations.

Also registers the file in the project so Xcode can find and re-sync it,
but without target membership. Xcode's default added it to the Resources
build phase of all three targets, which would ship the test configuration
inside the app, widget, and share extension bundles. The scheme
references it by path for the Run action; it does not need bundling.
</content>
</entry>
<entry>
<title>fix: StoreKit config path and Swift 6 concurrency warnings</title>
<updated>2026-07-20T20:52:38+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-20T20:29:50+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=f834c8a8223c40bd17b90be8f6ab7db843d0914c'/>
<id>urn:sha1:f834c8a8223c40bd17b90be8f6ab7db843d0914c</id>
<content type='text'>
The StoreKitConfigurationFileReference added in #11 used one '../' too
many, resolving outside the repository. Xcode resolves it relative to
the .xcodeproj's xcshareddata directory, so two levels reaches the repo
root.

SweepActivityAttributes is now explicitly nonisolated. The app target
sets SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor while the widget target
does not, so a type shared by both inferred a main-actor-isolated
ActivityAttributes conformance that ActivityKit cannot use from its
concurrent contexts.

LocalAPIService's logger closures captured self strongly while their
inner Tasks declared [weak self]. The weak capture is now on the outer
closure and bound before the Task, so the concurrently-executing closure
references an immutable strong local rather than the weak capture.
</content>
</entry>
<entry>
<title>test: add StoreKit configuration for local IAP testing</title>
<updated>2026-07-20T20:07:40+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-20T19:08:09+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=b5d67f42b7f7e009eb60a80857a306414117969f'/>
<id>urn:sha1:b5d67f42b7f7e009eb60a80857a306414117969f</id>
<content type='text'>
Adds DomainDig.storekit mirroring the App Store Connect setup: one
subscription group with Pro+ at level 1 and Pro at level 2, using the
corrected product IDs.

Wires it into the Run action so purchases resolve locally against
StoreKit instead of the App Store, and disables the
DOMAIN_DIG_FORCE_PRO_PLUS launch argument, which bypasses StoreKit
entirely and would mask whether the purchase path works.

Prices in the configuration are local-testing placeholders and do not
need to match App Store Connect.
</content>
</entry>
<entry>
<title>v4.8.1: Bump version and mark shipped in roadmap</title>
<updated>2026-07-20T20:07:16+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-20T20:05:19+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=d69aa35d8843e45e1d13bae82259043787a661b0'/>
<id>urn:sha1:d69aa35d8843e45e1d13bae82259043787a661b0</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>fix: Generate Now tap target, remove keyboard dismiss button and launch focus</title>
<updated>2026-07-20T19:42:07+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-20T19:16:52+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=91041af60b5a98ef01f5588478302c1ef04e043d'/>
<id>urn:sha1:91041af60b5a98ef01f5588478302c1ef04e043d</id>
<content type='text'>
Scheduled Reports: the entire Overview section was wrapped in a single
VStack inside one List row, so SwiftUI collapsed every control into one
tap target and the menu-style Cadence Picker captured taps intended for
the Generate Now button. Unwraps the VStack so each control is its own
row, matching the pattern used in IntegrationsView and elsewhere.

Also extends the .automatedMonitoring gate to the two Pickers and the
Generate Now button. Previously only the Toggle was disabled, leaving a
button that appeared active on Free but silently no-opped against the
guard in ScheduledReportService.

Inspect tab: removes the keyboard toolbar's Dismiss Keyboard button and
the onAppear that focused the single-domain field at launch.
</content>
</entry>
<entry>
<title>misc. cleanup</title>
<updated>2026-07-20T18:56:41+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-20T17:11:48+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=ce71e6d93f5200972b9baff0fd17f55d93dbd2b9'/>
<id>urn:sha1:ce71e6d93f5200972b9baff0fd17f55d93dbd2b9</id>
<content type='text'>
</content>
</entry>
<entry>
<title>v4.8.0: Bump version and mark shipped in roadmap</title>
<updated>2026-07-20T18:56:41+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-17T16:20:50+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=6e9dea95d015c0f2d335d9b89b8ee843b4c2b05e'/>
<id>urn:sha1:6e9dea95d015c0f2d335d9b89b8ee843b4c2b05e</id>
<content type='text'>
Bump AppVersion/marketing version to 4.8.0 and build number to 40 across the
app, widget, and share extension targets. Mark v4.8.0 (markdown/PDF export,
scheduled reports, stronger share affordances, verified local API consistency)
shipped in RELEASE_ROADMAP.md.
</content>
</entry>
<entry>
<title>v4.7.0: Bump version and mark shipped in roadmap</title>
<updated>2026-07-17T15:57:30+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-17T15:47:27+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=54c151e22f8a5d4d7a9c290e79fc7626415f7083'/>
<id>urn:sha1:54c151e22f8a5d4d7a9c290e79fc7626415f7083</id>
<content type='text'>
Bump AppVersion/marketing version to 4.7.0 and build number to 39 across the
app, widget, and share extension targets. Mark v4.7.0 (comparison, reputation,
tags/saved views) shipped in RELEASE_ROADMAP.md and escalate the overdue
XCTest-target gap ahead of v5.0.0.
</content>
</entry>
</feed>
