<feed xmlns='http://www.w3.org/2005/Atom'>
<title>domain-dig.git/DomainDig/IntegrationService.swift, 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:52:42+00:00</updated>
<entry>
<title>fix: make disabled targets and forced queue processing visible</title>
<updated>2026-07-20T20:52:42+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-20T20:31:51+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=8b661d9f36381ee432ece5e77a17d5ae6357d327'/>
<id>urn:sha1:8b661d9f36381ee432ece5e77a17d5ae6357d327</id>
<content type='text'>
Closes #8, closes #9.

enqueue(events:) filtered to enabled targets before writing any
DeliveryRecord, so events routed to a disabled integration disappeared
with nothing in the Delivery Log. Disabled targets now record a .skipped
entry with a reason, matching how filter mismatches are already surfaced.

sendTest bypassed the isEnabled check entirely, so a test event
delivered against a target that silently dropped every real event —
exactly the wrong signal when someone is verifying their setup. It now
skips with the same reason.

processQueueNow only restarted the processing task; it never moved
nextAttemptAt, so an item in retry backoff stayed undue and the fresh
task went straight back to sleep. Backoff reaches an hour, so the button
appeared inert for the one case it exists to handle. It now pulls every
queued item forward, and reports when the queue is empty instead of
returning silently.
</content>
</entry>
<entry>
<title>fix: reject non-HTTPS webhook URLs at save time</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:05:18+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=6f8a441b622987ffe102cf7153e1bcdd1b730cfc'/>
<id>urn:sha1:6f8a441b622987ffe102cf7153e1bcdd1b730cfc</id>
<content type='text'>
Validating only at send time meant an http:// URL saved fine and then
failed silently on delivery. Validate in upsert so the integration editor
surfaces it, and give the failure its own error case rather than reusing
the generic invalid-URL message.

The send-time guard stays as defense in depth for URLs saved before this.
</content>
</entry>
<entry>
<title>fix: harden webhook transport and gate debug logging</title>
<updated>2026-07-20T18:56:41+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-07-20T16:56:37+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=77a42a8b4f3dd89e631f8246bdea3e95f83bac6a'/>
<id>urn:sha1:77a42a8b4f3dd89e631f8246bdea3e95f83bac6a</id>
<content type='text'>
Require HTTPS for outbound integration webhooks. Webhook URLs are
themselves secrets (Slack in particular), so an http:// endpoint leaked
both the URL and the alert payload in cleartext.

Disable DomainDebugLog in release builds. Every message used
privacy: .public, which opted out of OSLog redaction and wrote looked-up
domains to the unified log in shipped builds.
</content>
</entry>
<entry>
<title>DomainDig v4.1.0: Add a full local data reset flow in Data Management</title>
<updated>2026-04-25T05:41:34+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-25T05:41:34+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=535bb0ff0f64d57be1074e33ceb42f598f80205b'/>
<id>urn:sha1:535bb0ff0f64d57be1074e33ceb42f598f80205b</id>
<content type='text'>
- add a destructive Delete All Data action with confirmation, progress, success,
  and failure handling
- centralize wipe behavior in DataResetService instead of scattering delete
  logic in views
- clear local persistence, temp/export files, integration secrets,
  notifications, caches, and in-memory app state
- reset sync, purchase, and integration services after wipe so the app returns
  to a clean first-launch state

Polish batch and empty-state UX

- present the batch sweep summary after manual bulk searches complete, not only
  from Watchlist
- align the Workflows empty state styling with other empty states by removing
  the extra background card treatment

Bump the project version from 4.0.0 to 4.1.0
</content>
</entry>
<entry>
<title>DomainDig v4.0.0 — Integrations</title>
<updated>2026-04-25T05:25:18+00:00</updated>
<author>
<name>Christian Cleberg</name>
<email>hello@cleberg.net</email>
</author>
<published>2026-04-25T05:25:18+00:00</published>
<link rel='alternate' type='text/html' href='http://git.krz.sh/krz/domain-dig.git/commit/?id=1715e59287a7b48b29ed8cbf2cd45fcc92ec3126'/>
<id>urn:sha1:1715e59287a7b48b29ed8cbf2cd45fcc92ec3126</id>
<content type='text'>
* Outbound webhook delivery
* Native Slack webhook integration
* SMTP-based email alerts
* Per-integration event filtering
* Reliable local delivery queue
* Delivery logs and retry visibility
* Integration management UI
* Normalized event severity model
* Canonical structured event payloads
</content>
</entry>
</feed>
