Skip to content

ForgeCast Weather v0.3.3

Choose a tag to compare

@lazelife420-spec lazelife420-spec released this 12 Jul 00:00
· 0 commits to feature/v0.2.9-widget-trust-setup-polish since this release

ForgeCast Weather v0.3.3 — Release Notes

Release: v0.3.3 — DayForge UX Consolidation
Date: 2026-07-11
Platform: Android
Minimum SDK: as per v0.3.2 baseline


What's new

DayForge UX consolidation

Each tab now has one job instead of overlapping into a mini-homepage: Today is the immediate decision, Plan is the detailed daily timeline, Forecast leads with upcoming-day decisions, Widgets is setup-only, Settings is controls plus custody information.

Decision-first Today experience

The primary decision card (what to wear, best outside time, bring/skip) sits above the feed and motion bar, so the most important answer is visible without scrolling.

Three-preset widget setup

The widget picker is reduced to 3 curated styles (Weather Now, Daily Planner, Compact Temp), with a legacy stored preset migrating automatically instead of silently breaking.

Improved outfit confidence and cold/wet guidance

A new "Best outfit · NN% sure" confidence indicator scores how certain the app is, based on proximity to temperature-tier boundaries, rain ambiguity, borderline wind, and road risk. Cold-and-wet days now get rain protection and warmth, instead of rain-only advice that ignored the cold.

Fixed tomorrow leakage and stale-time guidance

"Best outside" no longer leaks tomorrow's raw clock time onto today's card. Night-time copy no longer shows stale afternoon guidance (e.g. Warmer after 2 p.m. at 9 p.m.) — the motion bar and next-shift copy correctly reflect time-appropriate evening and night states.

Fixed contradictory Bring/Skip recommendations

An item could previously appear in both the Bring and Skip lists at once — e.g. "Bring: Rain shell, Umbrella" and "Skip: Heavy coat, Winter gear, Umbrella" simultaneously, when immediate conditions were dry but the day's forecast still called for rain later. Bring/Skip conflicts are now resolved generically in the decision-data layer, not with umbrella-specific string handling.

Preserved urgent drive-now road alerts

A "Drive now"-worthy imminent rain warning could be silently hidden whenever the aggregate road-risk band read "low." The urgent alert now stays visible in that case, while ordinary low-risk days still stay clean.

Hardened Android E2E device preflight

The device smoke-test harness now wakes and unlocks the device, dismisses the keyguard, collapses the notification shade, extends the screen timeout, and enables (and verifies) stay-awake-while-powered before running — closing a false-PASS failure mode where a locked or asleep screen could silently pass validation. All device settings are restored afterward regardless of outcome.


Under the hood

  • Deep-audit remediation: widget-migration self-healing, temperature-unit display consistency, four new crash guards on malformed API shapes, a request-race guard against stale fetches overwriting newer state, and per-tab crash isolation (one tab's crash no longer takes down all five)
  • 7 of 11 duplicated-logic patterns closed via shared helpers (wet-condition checks, slot-picking, local-hour routing, capitalize(), safe AsyncStorage, boolean-driven road/change/rain-risk state replacing fragile string-matching, memoized plan/feed builders)
  • 48 stale tracked dist/ build artifacts removed — a stale precompiled JS bundle had been silently shipping in release builds regardless of source changes
  • Full repo lint: 0 errors, 0 warnings
  • 724 unit/integration tests, 64 suites, 17/17 smoke, 8/8 device E2E — all deterministic (no time-of-day-dependent flakes)

What stays the same

  • Local-first privacy: no background telemetry, no user accounts, no cloud sync
  • OpenWeather data — no new API calls, no rate limit changes
  • Widget deep links unchanged

Upgrading

Direct APK install — replace the v0.3.2 APK with the v0.3.3 APK. No data migration needed.

SHA256: 50ABE59E52B6DC7E8649C0CA63EB065425F8EDC607187E3844D90CE5F1EED833