Releases: darkpandawarrior/Doori
Release list
v2026.08.35.36.843
v2026.08.35.36.840
- perf(fdroid): enable R8 for the F-Droid build (151MB->66MB) (#137)
Visual changes
Since v2026.08.35.36.839: 0 new, 0 changed, 0 removed screens.
v2026.08.35.36.839
v2026.08.35.36.837
- fix(ci): report store-deploy skip status instead of a silent green check (#134)
- chore(fdroid): metadata yml and store copy (#132)
- chore: add GPL-3.0-or-later LICENSE (#131)
- chore: bump kmp-toolkit to 3bf91b9 (#122)
- build(detekt): make
./gradlew detektactually analyse KMP modules - build(detekt): baseline every source set, so the checks can actually be run
- build(deps): re-land library bumps and migrate kmpworkmanager to 3.3.1
- Revert five dependency bumps I committed by accident
- build: detekt 2.0.0-alpha.5 -> 2.0.0-alpha.6
- build(detekt): exclude generated sources, so the source-set tasks can be used
- refactor(theme): delete PaperNightSpecDay, which nothing could ever reference
- docs: README counts and sentinel baseline for the 40 counterpart captures
- feat(theme): a counterpart for every direction, so all five follow the device
- test(screenshots): capture Paper's night face for all eight direction screens
- feat(widget): paint the home-screen widget in the app's actual theme
- feat(wear): start and stop a trip from the watch
- build: re-baseline dependency-guard for the Calf and Compass absorption
- ci(quality): run screenshotTest as the crash gate it says it is
- docs: refresh README counts after removing the blank widget capture
- fix(sentinel): --accept was silencing broken captures, and fix the black widget
- ci(screenshots): the baselines job never told the tests to record
- ci(sentinel): install Pillow — the blank-check decodes pixels now
- style: finish the ktlint queue — orphan file-header KDocs were the real cause
- style: fix most ktlint violations, rename direction files to PascalCase
- fix(sentinel): the blank-capture check never decoded the image
- ci: check out submodules in the sentinel workflow, refresh README counts
- fix(ui): stop previews pinning MATRIX, add a reproducible screenshot gallery
- test(screenshots): re-record all 327 captures under the Paper default
- fix(web-preview): repair the rotted theme allowlist, unbreak a geo check-in test
- feat(theme): make Paper the default, with its night face wired in
- test(screenshots): 40 design-direction renders, 70 new captures, direction gallery
- refactor(ui): migrate 313 raw colours onto the layered theme, add real actions
- feat(theme): three-layer colour system — base, semantic, domain
- feat(theme): five design directions, with typography actually switching
- fix(test): unify the second screenshot producer, and correct my own diagnosis
- feat(sentinel): an autonomous watcher for capture rot, drift and scope creep
- fix(ui): round 2 state coverage, three more silent-failure bugs, +12 captures
- fix(ui): state coverage pass, and a silent check-in data-loss bug
- test(screenshots): re-record every surface with recording actually working
- feat(ui): three-tier sheet system, live-drive reduction, +41 captures
- fix(ios): derive the screenshot output dir from source location
- test(app): let roborazzi own the capture path, and record why :app still cannot fail
- fix(test): guard against hardcoded absolute output paths
- fix(test): make screenshot regressions representable (D2, 2 of 3 surfaces)
- chore: ignore graphify-out/ code-graph output
- fix(ios): iOS screenshot tests were writing outside the repo
- build: add desktop to the screenshot aggregate, fix its broken compile
- build: fix the screenshot flake with a pre-loaded ByteBuddy agent
- build: record the confirmed root cause of the screenshot aggregate flake
- build: add a screenshotTest aggregate, with its limitation documented
- feat(wear,widget): drive ambient surfaces from the shared state mapper
- fix(test): repair the screenshot gallery, cover the two new screens
- feat(tracking): bump toolkit, run the new algorithms in shadow mode
- feat(platform): system settings deep-link, and wire the permission primer
- feat(tracking): wire TrackEvidenceScreen behind an EVIDENCE route
- feat(tracking): render LiveDriveScreen once a journey is live
- feat(tracking): route submission through DriveReviewSheet
- feat(tracking): live drive, drive review, evidence and permission surfaces
- feat(ui,maps): confidence meter, motion tokens, and a no-SDK route surface
- feat(ui): distance ledger showing how a raw GPS figure became the claim
- fix(tracking): stop fabricating odometer readings
- feat(ui): config-driven details renderer and in-app update flow
- fix(hooks): restore commit-msg leak guard lost to the history rewrite (#110)
- feat(ios): register 7 missing Koin modules in the iOS composition root (#108)
- ci(bump-toolkit): push as the PAT so bump PRs get real checks (#107)
- ci(bump-toolkit): revert the PAT wiring, restore GITHUB_TOKEN (#106)
- ci(bump-toolkit): re-baseline dependency-guard as part of the bump (#105)
- chore: bump kmp-toolkit to b7ffc80 (#99)
- fix(nogms): make the FOSS guard runnable again, and catch bare ML Kit (#104)
- ci: re-baseline dependency-guard on Dependabot PRs, after verifying the build
- build(deps): bump io.github.darkokoa:datetime-wheel-picker from 1.3.3 to 1.4.0 (#97)
- build(deps): bump the androidx group with 11 updates (#95)
- build(deps): bump peter-evans/create-pull-request from 7 to 8 (#91)
- build(deps): bump gradle/actions from 4 to 6 (#92)
- build(deps): bump actions/setup-java from 4 to 5.6.0 (#93)
- build(deps): bump ch.qos.logback:logback-classic from 1.6.0 to 1.6.1 (#96)
- chore: align toolchain and bump toolkit pins (#90)
- docs: owner-actions checklist, honest FOSS status, README upgrade (#88)
- build(deps): bump org.jlleitschuh.gradle.ktlint from 12.2.0 to 12.3.0 (#82)
- build(deps): concurrent-futures 1.3.0, ktlint 12.3.0; correct the FOSS leak count (#87)
- feat: ViewModel coverage for travel/payables, and make :server deployable (#86)
- build: guard the FOSS classpath, tighten the config cache, close a silent-pass hole (#85)
- ci: stop the release and deploy paths reporting success while doing nothing (#84)
- test(tracking): make the iOS CLLocation mapping testable, and test it (#83)
- build(deps): logback 1.6.0; widen the ktlint ignore to >=13 (#80)
- fix(build): unbreak the androidTest classpath so instrumented tests can run (#79)
- test(tracking): cover HardwareEventsViewModel and CheckInViewModel (#76)
- build(deps): kotlin Beta2, zxing 3.5.4, maplibre 0.13.1; fix the AGP ignore (#75)
- chore(screenshots): refresh baselines for 3e43a0e (#74)
- feat(tracking): bind HardwareEventSyncer so journey telemetry can actually sync (#73)
- test+ci: stop the screenshot treadmill, cover two untested modules, make GMD gate (#72)
Visual changes
Since v2026.07.30.36.742: 232 new, 141 changed, 1 removed screens.
v2026.07.30.36.742
- feat: wire the dead validators, fix iOS 0.00km, add a backend dev toggle (#64)
- fix: stub/server money parity, duplicate-trip bug, shared-sensor teardown (#63)
- docs+ci: make README claims true, fix CI hygiene bugs (#62)
- chore(screenshots): refresh baselines for b21f02a (#58)
- build(deps): batch compose/wear/nav3/kover/roborazzi/kmpworkmanager bumps (#60)
- fix(build): capture version at config time in printFingerprint/printMarketing (fixes null this$0 → empty release) (#59)
Visual changes
Since v2026.07.30.36.736: 0 new, 3 changed, 0 removed screens.
v2026.07.30.36.736 — Mileway
Release of Mileway — snapshot as of 2026-07-24.
Three-tier versioning: FINGERPRINT 2026.07.30.36.736 (YYYY.0M.0W.MILESTONE.commitCount), MARKETING 2026.7.36.
v0.25.0 — On-Device Intelligence & Feature Parity 🧠
[v0.25.0] — On-Device Intelligence & Feature Parity 🧠
The V25→V32 series: a 3-module foundation (
core:media·core:ai·core:forms) that lands an
on-device document-intelligence pipeline — OCR field-fill, document-type classification and
duplicate detection combined into one result — then builds full feature-parity depth on top of it.
Everything stays offline/on-device: real where the platform supports it (ML Kit GenAI on Android,
Apple Foundation Models on iOS), degrading gracefully everywhere else.
✨ Highlights
- On-device document intelligence — a unified
core:aipipeline (ML Kit GenAI + text-recognition +
heuristics on Android; Apple Foundation Models + Vision on iOS via a Swift bridge) auto-fills a
captured receipt's merchant / amount / date, classifies the document, and flags duplicates — one
result, degrading to text + heuristics on devices without on-device AI. - On-device AI assistant — the in-app assistant now runs a real on-device LLM (ML Kit GenAI /
Foundation Models), falling back to the offline retrieval engine when unavailable. - Unified media capture — every capture surface (7 legacy call sites) converges on one launcher:
camera / gallery / files / PDF / document-scanner / QR-barcode, watermarking, and shared OCR sheets.
🧾 Expenses & forms
- Full 16-type dynamic form engine with GST auto-calc, conditional visibility, and EXPERIMENTAL
AI field-suggestions; the two hand-rolled forms are unified onto one renderer (a duplicate-validation
bug removed in the process). - 2-step add-expense wizard with entry-context linking (trip / card / advance / event / scanner),
concurrent semaphore-bounded bulk-submit, voucher drill-down, and multi-currency.
🗂️ Transactions & approvals
- Shared
TransactionDetailScaffoldacross approvals / expense / purchase-request detail screens. - Persistent clarification rooms — lifecycle, per-room metadata, history tabs, and rich chat with
attachments; plus comments, audit/violation flags, and per-item action gating.
📊 Feature depth
- Master search (5 live providers + a Koin-collision fix), analytics state layer (filters / trend /
real CSV export / leaderboard), event detail + workflow, cards KYC / QR / dispute / limits, and
config-gated home depth.
🧭 Shell, platform & housekeeping
- Fixed a shell-nav bug (the bubble bar was silently hidden on 3 of 6 top-level tabs).
- Shake-to-report, storage-management screen, deterministic Wear screenshots.
- Room schema v39 → v47 (all explicit migrations); dependency modernization (navgraph, Roborazzi,
materialKolor, AGP, KSP, Gradle).
Visual changes
Since v0.24.0: 0 new, 18 changed, 0 removed screens.
v0.24.0 — Super Profile 🧑🚀
[v0.24.0] — Super Profile 🧑🚀
The largest single milestone: a full super-profile build-out where one account renders as a
visibly different app per persona (consumer, gig driver, corporate, guest) — every surface
plugin-gated so features appear and disappear live. This is the reference release: future versions
follow this changelog's structure (themed sections, highlights, visual-diff footer).
✨ Highlights
- Persona-driven UI — a plugin registry gates ~25 profile destinations, home tiles, carousels and
banners; four preset personas walk visibly different end-to-end stories, all offline. - On-device everything — every capability is backed by Room + DataStore mock data; no backend.
🔐 Identity & security
- Phone-number + OTP login, MFA step, tiered PIN lockout, password change with a credential store,
and duplicate-account resolution. - Verification centre, document requirements with status, a 5-step card-KYC wizard, and corporate-
email verification.
👤 Profile & account
- Config-driven signup onboarding; grouped super-profile hub (identity, vehicles, growth, membership,
payments, security, support). - Account-deletion request/cancel lifecycle, session-detail enrichment, and delegate act-on-behalf.
- Wallet / payout account linkage.
🚗 Vehicles & tracking
- Vehicle garage with per-km policy rates and computed trip amounts, "head home" destination mode,
and an ecometer. - Track-Miles customization: persisted settings, mileage-sync card, a categorized fine-tuning editor,
bubble/overlay/reverse-geocode toggles, experimental-optimizations, and a manager/reportee view.
🎁 Growth, rewards & engagement
- Earned badges + compliments, "Mileway Club" membership, subscription plans, incentive programs.
- Unified support hub (FAQ / tickets / chat bot / call / mail), persistent review gate with a native
rate sheet, animated what's-new indicator, favourite routes, and an offers hub with a one-shot popup.
📣 Announcements
- A priority banner stack with persisted dismissals, an auto-advancing typed banner carousel,
and a one-shot forced-popup coordinator (at most one announcement per app-open).
🧰 Also
- Vehicle self-audit checklist with a simulated review verdict; draw-to-sign digital signature;
interactive training tour with coach marks.
Visual changes
Since v0.23.0: 0 new, 0 changed, 0 removed screens.
v0.23.0 — Watch platform build-out
v0.23.0 — Watch platform build-out
[v0.23.0] — Watch platform build-out
Wear OS app, tile and complication on a shared KMP core; Apple watchOS umbrella framework and app
target; groundwork for home/lock-screen widgets across both platforms.
v0.10.0 — Compose navigation graph + exhaustive previews
v0.10.0 — Compose navigation graph + exhaustive previews
[v0.10.0] — Compose navigation graph + exhaustive previews
Nav-graph-based navigation and a broad, diverse Compose preview catalog.