summaryrefslogtreecommitdiff
path: root/RELEASE_ROADMAP.md
Commit message (Collapse)AuthorAgeFilesLines
* convert readme to nfo; convert docs to txt; relicense to 0bsdHEADmainChristian Cleberg47 hours1-346/+0
|
* chore: cut v5.0.2 (krazywarez migration release)Christian Cleberg2 days1-1/+13
| | | | | | | | Release cut for the zerolabs -> krazywarez / krz.sh migration: MARKETING_VERSION 5.0.1 -> 5.0.2, CURRENT_PROJECT_VERSION 46 -> 47 across all targets, AppVersion.current in lockstep, roadmap updated. App builds clean; unit suite 63/63.
* feat: owner Pro+ allowlist via CloudKit, cut v5.0.1v5.0.1Christian Cleberg10 days1-1/+12
| | | | | | | | | | | | | | | | | | | | | Grants the app owner Pro+ without a purchase, keyed to their CloudKit user-record ID so it works on the release App Store build. - OwnerAccess holds the owner's CloudKit user-record ID (opaque, per-Apple-ID, scoped to the app's container; safe to publish — CloudKit verifies identity server-side, so it can't be presented by anyone else). - PurchaseService resolves the allowlist against CloudKit once per launch and, on a match, records a persisted owner grant so it applies instantly and offline thereafter. The grant only ever elevates the tier to .proPlus and defers to the existing #if DEBUG overrides, so real purchases and free/pro testing are unaffected. cachedTier / cachedEntitlement were refactored to fall back to the owner grant only when no debug override or stored purchase applies. - Supersedes the DEBUG record-ID reveal (PR #60): its only purpose was to read the owner's ID, which is now hardcoded, so the reveal is not shipped. Release cut: MARKETING_VERSION 5.0.0 -> 5.0.1, CURRENT_PROJECT_VERSION 45 -> 46, AppVersion.current -> 5.0.1, roadmap updated. App builds clean; unit suite 63/63.
* chore: cut v5.0.0 release (version bump)v5.0.0Christian Cleberg10 days1-7/+7
| | | | | | | | | | | | | Bumps the app to 5.0.0 now that all four v5.0.0 workstreams have landed: - AppVersion.current 4.9.0 -> 5.0.0 - MARKETING_VERSION 4.9.0 -> 5.0.0 across all targets (app, widget, share extension, and both test bundles) - CURRENT_PROJECT_VERSION 44 -> 45 across all targets - RELEASE_ROADMAP.md: v5.0.0 marked shipped, "Current version" -> v5.0.0 The three version sources are kept in lockstep, matching the v4.4.1 alignment policy. App Store archive/submit remains a manual step outside the repo.
* docs: mark v5.0.0 engineering complete in the roadmapChristian Cleberg11 days1-23/+53
| | | | | | | | | | | All four v5.0.0 workstreams have landed on main: the deterministic-core test net (#43), the Local API v1 contract (#45), the versioned store-migration policy (#46), and the god-file decomposition (#47-#53, DomainViewModel 4864->4170 and ContentView 3881->1625). Rewrites the v5.0.0 section to record what shipped per item with PR references, notes the inspection-core split is deferred as a design change rather than a mechanical move, and lists cutting the release (version bump + submission) as the only remaining step. Refreshes the now-stale cross-cutting note (the "no XCTest target" gap was closed first).
* docs: repair roadmap references after the verification-doc cleanupChristian Cleberg12 days1-6/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | The docs cleanup removed Docs/ACCESSIBILITY_VERIFICATION.md and the results doc, but the v4.9.0 roadmap entry still linked to the checklist in two places — dead links, and with issue #21 now closed the roadmap is the only durable record left. - Both dangling links removed. - The deferred list was stale in the other direction too: it listed the Liquid Glass runtime check as outstanding, but PR #38 ran it on simulator alongside the classic-chrome floor. It now names only what a Simulator genuinely cannot do — VoiceOver speech and the rotor, Voice Control, iPad Full Keyboard Access, Smart Invert — and notes that the underlying accessibility metadata is asserted in tests even though its spoken output is not. - Records the Phase 6 verification work itself (#38), which landed after the v4.9.0 entry was written: the metadata and screenshot test suites, the middle-band Dynamic Type sweep, and the enforced iOS 27.0 dynamicType finding it caught. Verified the suppression that finding produced rather than taking it on trust: it is scoped to .dynamicType plus an exact allowlist of the five Settings section titles, all of which are plain `Section("…")` with no app-applied font, so UIKit owns the scaling. Enforcement on app-controlled text is intact.
* chore: bump to v4.9.0; record the release in the roadmapv4.9.0Christian Cleberg13 days1-5/+65
| | | | | | | | | | | | | | | | | | MARKETING_VERSION 4.8.3 -> 4.9.0 and CURRENT_PROJECT_VERSION 43 -> 44 across all targets, with AppVersion.current aligned — the three-way consistency v4.4.1 established. The roadmap gains the v4.9.0 entry: the full accessibility pass (#21 phases 0-5 — semantic colours, light mode and the appearance setting, Dynamic Type reflow and tap targets, VoiceOver, colour independence and motion/transparency), the audit harness with seeded fixtures and the engaged enforcement ratchet, the manual verification checklist, and Swift 6 language mode adoption (#27). Deferred device passes are named rather than implied. The v5.0.0 "establish a test target" bullet is rewritten to match reality: a UI test target now exists with an enforcement gate; what remains for v5.0.0 is unit coverage of the deterministic core.
* v4.8.3: Clear SonarCloud new-code issuesChristian Cleberg2026-07-201-1/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes the 4 reported bugs and ~97 code smells flagged in the new-code period. No behavior changes. Bugs (swift:S3923) — DomainInspectionService's confidenceFor* helpers each returned `error == nil ? .low : .low`, an inert conditional. Simplified to `return .low` and dropped the now-unused `error` parameter. Smells: - Merged 14 identical `.empty`/`.error` switch branches in DomainViewModel - Consolidated duplicate implementations (clearPresentedResults/reset, String.nonEmpty/nilIfEmpty, ExportFormat.id/fileExtension) - Extracted nested ternaries into TLSGrade.tone, EmailSecurityGrade.tone, and ChangeImpactClassification.color; removed ContentView.impactColor and the duplicate mapping in BatchResultsView - Documented empty closures and singleton inits - Marked unused protocol-conformance parameters `_` - Renamed CloudSyncTrigger.`import` to `imported` (raw value preserved) and SSLSessionDelegate's _serverTrust/_tlsMetadata - Merged nested ifs in the DER parser; flattened closure nesting in PortScanService and IntegrationService - Replaced two-case switches with if/else Left open: S107 (init parameter counts), S115 (constants mirroring DoH and ipapi JSON keys), S1075 (false positives on https:// literals), and two S117 hits on SwiftUI $binding shorthand. These want a Won't Fix resolution in SonarCloud, not a code change.
* v4.8.2: Bump version and mark shipped in roadmapv4.8.2Christian Cleberg2026-07-201-5/+30
| | | | | | | | 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.
* docs: record the IAP fixes in the v4.8.1 roadmap sectionv4.8.1Christian Cleberg2026-07-201-0/+9
| | | | | | | PR #11 merged after the v4.8.1 version bump, so the roadmap's v4.8.1 section omitted the product ID correction and the StoreKit configuration file. Both are in the 4.8.1 tree; document them alongside the other fixes.
* v4.8.1: Bump version and mark shipped in roadmapChristian Cleberg2026-07-201-1/+25
| | | | | | | | 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.
* v4.8.0: Bump version and mark shipped in roadmapChristian Cleberg2026-07-201-5/+25
| | | | | | | 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.
* v4.7.0: Bump version and mark shipped in roadmapv4.7.0Christian Cleberg2026-07-171-10/+21
| | | | | | | 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.
* docs: mark v4.6.0 shipped in roadmap and READMEChristian Cleberg2026-07-171-9/+15
|
* docs: mark v4.4.1/v4.5.0 shipped in roadmap and READMEv4.5.0Christian Cleberg2026-07-171-22/+19
| | | | | | Update RELEASE_ROADMAP.md to show v4.4.1 and v4.5.0 as shipped (with the actual delivered scope), set the current version to v4.5.0, and note the deferred Lock Screen widget families. Refresh the README release target to v4.5.0.
* DomainDig v4.4.1: Consolidate Audit Mode and remove the CLI targetv4.4.1Christian Cleberg2026-07-161-0/+90
- Make DomainDig/DomainDig/Audit* the single active Audit Mode implementation (models, views, exporter) with an Audit tab and session/export UI - Include audit sessions in backup/restore lifecycle counts, summaries, and merge behavior via DomainDataPortabilityService - Remove the DomainDigCLI target, source file, scheme, and all project references; keep the shared inspection/report pipeline for the app - Align AppVersion.current to 4.4.1 and refresh README/architecture docs - Add RELEASE_ROADMAP.md