Repository navigation
ForgeCast Weather v0.3.3
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