From 237a72a03102319638c5b0572ca3ab543238b821 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Sun, 26 Apr 2026 00:39:28 -0500 Subject: DomainDig v3.5.0: Expand the Pro+ Data+ intelligence layer with deeper local historical context and inferred enrichment. - add derived intelligence fields for provider fingerprinting, classification, ownership transitions, hosting transitions, subdomain history, risk signals, and inferred timeline events - expand DNS history beyond A/NS snapshots to retain A, AAAA, MX, NS, TXT, and CNAME change state - persist enriched intelligence in snapshots and history entries so analysis is local-first and incremental - add a dedicated Data+ Intelligence panel to current and historical domain detail views - surface intelligence events in timeline rows and include Data+ changes in diff output - preserve non-blocking inspection behavior by keeping enrichment additive to the main lookup path This makes Pro+ materially deeper for investigative workflows by improving historical ownership visibility, infrastructure context, hosting change detection, subdomain intelligence, and explainable risk signals. --- DomainDig/TimelineView.swift | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'DomainDig/TimelineView.swift') diff --git a/DomainDig/TimelineView.swift b/DomainDig/TimelineView.swift index b163c76..8680d15 100644 --- a/DomainDig/TimelineView.swift +++ b/DomainDig/TimelineView.swift @@ -25,7 +25,7 @@ struct TimelineView: View { NavigationLink { HistoryDetailView(viewModel: viewModel, entry: entry) } label: { - TimelineRow(summary: summary) + TimelineRow(summary: summary, entry: entry) } .swipeActions(edge: .trailing, allowsFullSwipe: false) { Button { @@ -102,6 +102,7 @@ struct TimelineView: View { private struct TimelineRow: View { @Environment(\.appDensity) private var appDensity let summary: SnapshotSummary + let entry: HistoryEntry var body: some View { VStack(alignment: .leading, spacing: appDensity.metrics.rowSpacing + 1) { @@ -138,6 +139,17 @@ private struct TimelineRow: View { .font(appDensity.font(.caption2)) .foregroundStyle(.secondary) + if !entry.intelligenceTimeline.isEmpty { + VStack(alignment: .leading, spacing: 4) { + ForEach(Array(entry.intelligenceTimeline.prefix(2))) { event in + Text("\(event.title): \(event.detail)") + .font(appDensity.font(.caption2)) + .foregroundStyle(.secondary) + .lineLimit(1) + } + } + } + HStack(spacing: 8) { if let primaryIP = summary.primaryIP { Text(primaryIP) -- cgit v1.2.3