Skip to content

Releases: chris-dev-at/BetterTrackMobile

BetterTrack App 0.56

BetterTrack App 0.56 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Jul 23:29
  • Idempotency keys ON (re-verified live post-#441) + money-prefill truncation + shared-screen inset fix

    Flip SyncFeatureFlags.IDEMPOTENCY_KEYS_ENABLED after the platform fixed the
    missing idempotency_keys table (PR #441): device E2E green — header on the
    wire, tx-create 201, exactly-once under reconnect flap and app-kill mid-POST
    (same key, no duplicates). Kill-switch retained.

    Owner directive: market-data money prefills (date->price autofill) truncate
    to cents, string-safe — 231.499320001 fills as 231.49, never rounded up;
    sub-cent prices keep 6 significant decimals; stored-value edit prefills and
    user input stay exact; quantities keep 8-decimal precision. Hardened
    formatDecimalForInput against float artifacts (shortest-decimal form).

    Owner bug: shared portfolio/watchlist/conglomerate views clipped their first
    item under the app bar (content lambdas dropped the Scaffold padding) —
    SharedScaffold now applies it centrally.

    343 unit tests green.

  • Web autofill-truncation LIVE (PR #443, prod fdd2c5d): as-shipped site map for mirroring; sub-cent autofill nuance pending owner decision

  • Owner clarification: the real target is market-data money AUTOFILL truncated to cents (231.499320001 -> 231.49), stored-value edit prefills stay exact, quantities never cut; web fix in flight

  • Web formatting sweep LIVE (PR #442, prod 08099f9): as-shipped rules verbatim (half-away-from-zero, symbol-last, em-dash null, DE %-space, 6 sig-dec unit prices) for 1:1 app matching

  • Owner directive both apps: unified number-display rules (2-dec money half-up locale-aware, 2-dec percents, 8-dec trimmed quantities, 6 sig-dec tiny unit prices) — display-only, API precision unchanged; web sweep in flight

  • Idempotency-500 FIXED + LIVE (PR #441, prod 230d510): root cause = migration 0034 skipped by future-dated journal stamp, table missing on prod; semantics unchanged — flip the flag, re-verify, post results; platform pausing per owner

  • Idempotency-500 P1 ack: fix in progress (real-postgres param-typing suspect, CI real-engine gap closing with it); semantics unchanged, hold kill-switch until tick

BetterTrack App 0.55

BetterTrack App 0.55 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Jul 20:13
  • Idempotency-key adoption (#432) gated off — header 500s tx-create on prod (P1 filed) + search-bar inset fix

    Full client adoption of Idempotency-Key on the offline queue's mutation
    endpoints, reusing the persisted per-op clientId UUID (no schema change):
    header attached on tx-create + cash ops + value points, 409 IN_PROGRESS
    retried, 409 MISMATCH permanent, 400 KEY_INVALID regenerated once. Shipped
    behind SyncFeatureFlags.IDEMPOTENCY_KEYS_ENABLED=false: an on-device A/B
    proved the header itself turns POST /portfolios/{id}/transactions into a
    500 on prod (same body without it: 201) — evidence + timestamps in
    PLATFORM_ASKS.md #15; flip the flag when the platform fix ticks.

    Owner ask: asset-search bar no longer draws under the status bar
    (statusBarsPadding on the hand-rolled topBar Row).

    337 unit tests green (15 new, incl. MockWebServer wire-level header
    coverage).

BetterTrack App 0.54

BetterTrack App 0.54 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Jul 18:54
  • Notification archive/delete live (#437/PR #440) + friend-alerts ungate + first-class activity rows

    Owner directive: inbox Active|Archived|All filter, per-row archive/unarchive/
    delete with undo snackbar, bulk archive-all-read / delete-all-archived /
    delete-all behind destructive confirms, bell badge = server unread-active.
    Wired to the as-shipped #440 semantics (view param, archivedAt, archive-
    implies-read, 204 deletes, archive-all-read path) behind the
    archiveDeleteEnabled kill-switch, ON — live-verified E2E on prod.

    Also: obsolete 'Coming soon' badge removed from friend activity-alerts
    (pipeline is live; toggle round-trip re-verified), and friend.activity /
    watchlist.shared / conglomerate.shared render first-class with deep-links.

    322 unit tests green; EN/DE parity 859=859.

  • Archive+delete LIVE (PR #440, prod fb09efd): exact wire semantics — view param (default active), archivedAt additive, unreadCount=active-unread, archive-implies-read, 204 deletes, scope-required bulk, 7d auto-archive; wire the app UX now

  • Owner nudge: notification archive/delete (#437) is in build platform-side NOW — start the app UX in parallel; as-shipped semantics + tick follow on merge

BetterTrack App 0.53

BetterTrack App 0.53 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Jul 15:12
  • Step 19 pass 2 — Social tab German complete + closed-app push PROVEN live. Social i18n: ui/social fully externalized (103 new bt_social_ keys EN+DE incl. gender-correct per-kind audience strings; ViewModel toasts via locale-safe SocialToast type; SocialRepository detail->count refactor so My-shares subtitles localize; one DE stat label shortened to fit) — device-verified DE walk + EN round-trip, EN/DE parity 831=831, 293 tests green. Push retest after platform worker fix (#435/#436): born-breached alert -> real FCM status-bar push in ~49s with app backgrounded -> deep-link Workboard/Alerts -> Triggered row -> inbox row; fan-out P1 closed both sides in PLATFORM_ASKS (update #11) — alerts, chat REST+WS, notifications v2 now ALL live end-to-end. Step 19 ticked complete in TODO.

  • Owner directive: notification archive+delete (platform #437) — bell = unread+recent only, All-notifications sub-menu, per-item + bulk delete; planned API shape for stub-first build

  • Push retest is GO: #436 adopted (worker fresh on aabe802, dispatch consumer + FCM channel confirmed in boot log, backlog drained) — re-arm a fresh born-breached alert, expect <=60s trigger + inbox row + closed-app push

BetterTrack App 0.52

BetterTrack App 0.52 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Jul 14:03
  • Step 19 (polish/i18n/release prep), pass 1: uncovered sell wired end-to-end per platform PR #429 (allowUncovered+uncoveredEntryPrice through offline queue, create AND edit replays; amber warning card with required 'Sell anyway' ack gating submit + optional native-currency buy-in price; EN+DE) — currency-aware price/fee/total labels (asset-native symbol via shared currencySymbol/formatMoney; cash-after stays EUR) — chat screens externalized (~24 strings EN+DE, was hardcoded) — a11y: password reveal toggle now TalkBack-labelled — R8 release build: minify+shrink with minimal keep rules (serialization DTOs/routes, SyncWorker), 82.8MB -> 7.19MB, device-verified clean across login/portfolio/tx/inbox in EN+DE — signing scaffold reads ~/.bettertrack via props, debug fallback, nothing committed — docs/PLAY_LISTING.md (owner checklist + EN/DE listing drafts + Data-safety draft). 293 tests green (+18), assembleDebug+assembleRelease clean. Known gap queued: Social screens still hardcoded EN (~85 strings, 4 files) — follow-up pass next.

  • Fan-out P1 root-caused+fixed (PR #435): prod worker frozen by the deploy loop since go-live — all v2 notifications dark since 02:27Z, queued not lost; born-breach notifies by design, expected latency ~60s; HOLD retest until ops adopt (#436), then re-arm fresh alert

  • Idempotency keys LIVE (PR #432, prod de45335): Idempotency-Key UUID header on all portfolio mutations — exact replay/409/retention semantics for the offline queue

  • WS realtime mobile-verified LIVE (101 -> Engine.IO -> Socket.IO ack 427ms with bearer; chat P1 closed both halves; poll cadence widens when connected) + E2E closed-app push retest: server flips born-breached alert to triggered (~10min) but emits no notification row and no FCM send to the armed device — new P1 'alert.triggered fan-out' filed in PLATFORM_ASKS §OPEN with full evidence + retest offer; TODO entries for both. Verification-only, zero app code changes.

  • Uncovered sell shipped (PR #429: allowUncovered/uncoveredEntryPrice semantics) + ack notifications-v2 go-live report; heads-up: idempotency keys (#417) in build

BetterTrack App 0.51

BetterTrack App 0.51 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Jul 12:17
  • Notifications v2 go-live: device-token register/deregister wired live (POST/DELETE /notifications/devices, bearer-gated — defers logged-out, fires on login/cold-start/rotation, best-effort DELETE before logout wipe), debug sample inbox removed with GET /notifications now authoritative, prefs matrix synced to the server's 4-channel cells incl. push (webpush echoed verbatim, chat.message server-modeled; per-type mute stays local), stubDeviceRegistration=false with tripwire. Live-verified on prod: registration 200 on login, 40-item real inbox incl. both BTC-EUR alert.triggered rows, mark-read persists server-side, push-toggle PATCH round-trip, deregister 200 on logout. Also: AuthRepository no longer logs username/email on login (PII-free logcat). 275 tests green (+16), assembleDebug clean. TODO + PLATFORM_ASKS updated (mobile->platform: v2 wired, only #421 key was pending).

  • WS is GO (edge adopted + publicly verified 101/Engine.IO; old 400s were an h2 probe artifact) + FCM ARMED on prod (#421 key landed) — retest direct WS + end-to-end push

  • Notifications v2 merged+deploying: device-token/inbox/prefs endpoints live, taxonomy matched, durable delivery; FCM sends gated on service-account key

BetterTrack App 0.50

BetterTrack App 0.50 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Jul 01:33
  • Price alerts LIVE: flip ALERTS_SCOPES_ENABLED on (platform migration 0030 tick) — fresh consent accepts alerts:read/alerts:write with no authorize reject, GET /alerts 200 with the owner's real alerts (2x BTC-EUR triggered + BAYN.DE active, untouched), create->delete round trip persisted server-side; tripwire test now guards the flag ON (259 tests green); PLATFORM_ASKS: /alerts P1 closed both-sides-verified with a reconcile note (an earlier full CRUD run also passed pre-0030 — instance skew or #423's deploy applied a seed); TODO alerts entry marked fully live.

  • Confirmations: alerts scopes live (prod on 244b232), /version returns real build info; WS still pending

  • Tick: alerts scopes migration-carried (0030 merged) — flip ALERTS_SCOPES_ENABLED after ~23:20 UTC + re-login

  • Alerts scopes: root cause (prod updater seeds not run) + migration 0030 deploy-channel fix in flight; keep flag off until ticked

BetterTrack App — latest debug build

Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Jul 23:29

Rolling debug build produced by CI (run #56 · version 0.56).

Commit: cc06cde
Built: 2026-07-11 23:29 UTC

What's new in 0.56

  • Idempotency keys ON (re-verified live post-#441) + money-prefill truncation + shared-screen inset fix

    Flip SyncFeatureFlags.IDEMPOTENCY_KEYS_ENABLED after the platform fixed the
    missing idempotency_keys table (PR #441): device E2E green — header on the
    wire, tx-create 201, exactly-once under reconnect flap and app-kill mid-POST
    (same key, no duplicates). Kill-switch retained.

    Owner directive: market-data money prefills (date->price autofill) truncate
    to cents, string-safe — 231.499320001 fills as 231.49, never rounded up;
    sub-cent prices keep 6 significant decimals; stored-value edit prefills and
    user input stay exact; quantities keep 8-decimal precision. Hardened
    formatDecimalForInput against float artifacts (shortest-decimal form).

    Owner bug: shared portfolio/watchlist/conglomerate views clipped their first
    item under the app bar (content lambdas dropped the Scaffold padding) —
    SharedScaffold now applies it centrally.

    343 unit tests green.

  • Web autofill-truncation LIVE (PR #443, prod fdd2c5d): as-shipped site map for mirroring; sub-cent autofill nuance pending owner decision

  • Owner clarification: the real target is market-data money AUTOFILL truncated to cents (231.499320001 -> 231.49), stored-value edit prefills stay exact, quantities never cut; web fix in flight

  • Web formatting sweep LIVE (PR #442, prod 08099f9): as-shipped rules verbatim (half-away-from-zero, symbol-last, em-dash null, DE %-space, 6 sig-dec unit prices) for 1:1 app matching

  • Owner directive both apps: unified number-display rules (2-dec money half-up locale-aware, 2-dec percents, 8-dec trimmed quantities, 6 sig-dec tiny unit prices) — display-only, API precision unchanged; web sweep in flight

  • Idempotency-500 FIXED + LIVE (PR #441, prod 230d510): root cause = migration 0034 skipped by future-dated journal stamp, table missing on prod; semantics unchanged — flip the flag, re-verify, post results; platform pausing per owner

  • Idempotency-500 P1 ack: fix in progress (real-postgres param-typing suspect, CI real-engine gap closing with it); semantics unchanged, hold kill-switch until tick

Full per-version history: see the v0.* releases below. Debug build signed with a CI keystore — to install over a copy installed from Android Studio, uninstall that first. Points at production BetterTrack.

BetterTrack App 0.49

BetterTrack App 0.49 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Jul 22:27
  • Smoothing-aware custom-asset detail chart + alerts scopes behind a safety flag — BtStepLineChart gains a Linear interpolation mode (identical grid/dots/fill/scale; Step path unchanged) and the asset-detail Value-over-time chart picks Linear when the asset's smoothing flag is on (design decision: smoothed = interpolated line, raw = step), device-verified both ways on prod; alerts:read/alerts:write are wired into OAuthConfig but held behind ALERTS_SCOPES_ENABLED=false because the platform's scope seed hasn't landed and requesting un-seeded scopes hard-rejects the whole authorize (device-confirmed twice — would have broken all logins); /alerts now 403s with a scope-missing message, proving the bearer-gate half of the platform fix IS deployed; flag-flip + full CRUD re-verify happens when the seed is confirmed. +5 tests (259 green: chart interpolation pick + 4 scope tripwires incl. shipped-flag-off guard).

  • Tick: /alerts bearer P1 fixed — PR #423 merged, re-login to pick up alerts scopes

BetterTrack App 0.48

BetterTrack App 0.48 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Jul 21:49
  • Platform-integration batch (main-dev handoff 2026-07-10): portfolio hard-DELETE + archived grouping + chat composer focus + API build info — switcher gets a collapsible Archived section (collapsed by default, count badge; active list stays flat; wobble height-cap preserved and re-verified byte-identical at rest) with Delete in both active and archived row menus behind a type-the-name-to-confirm dialog that warns the full transaction/cash/dividend history is removed and historical/tax figures change (EN+DE); DELETE /portfolios/{id} wired per PR #412 semantics (LAST_ACTIVE_PORTFOLIO surfaced inline, derived default re-resolved after delete, local Room cache purged); chat composer autofocuses on conversation open and keeps focus after send (adjustResize inset behavior intact); About + dev menu show the live API build via public GET /api/v1/version (fail-soft row, hidden on error) — live server currently returns unknown placeholders, flagged platform-side in PLATFORM_ASKS. 12 new tests (254 green); device-verified on prod incl. throwaway-portfolio full delete with zero residue.

  • Platform ack: /alerts bearer P1 — fix in flight (alerts:read/alerts:write), write-implies-read live, Live Mode overhaul heads-up