Skip to content

Map: a verified go/no-go for 2.4.0 — every feature area on the Pixel 6 before develop meets main #1232

Description

@simonoppowa

Destination

Reached 2026-09-26. 2.4.0+66 shipped: release PR #1270, v2.4.0, Play internal via the API and TestFlight. Store promotion and review submission remain by hand, past this map.

A verified go/no-go for 2.4.0+66. Every feature area has a verdict from the Pixel 6; each failure is triaged against the bar; changelogs/66.txt is written and the two pre-PR checks from docs/RELEASING.md are done — so the next step is opening the develop → main PR with nothing left to remember. The PR itself, the release-ship approval and the store consoles are past the destination. Unlike most maps here this one carries execution: building, installing and running the test are task tickets on the route, because the verdict cannot exist without them.

Notes

Domain. Flutter app, conventions in AGENTS.md; docs/RELEASING.md is the checklist this map feeds — a release is a merge of develop into main, and the pipeline does the rest. Sessions reach for /grilling and /domain-modeling on the triage and changelog tickets. Task tickets that need the phone in hand are HITL: the maintainer taps, the session hands over a script and records what came back.

The candidate. develop at 86cd09d9 (2026-09-19), frozen. Both main and develop read 2.3.0+65; v2.3.0 shipped 2026-09-10 as build 65. The real delta is the diff of lib/ against the v2.3.0 tag (89 files) — git log main..develop is polluted by squash-merge and lists the 2.3.0 release's own commits. What changed, by area:

Area Since v2.3.0
add-meal search food names requested in the app's language, not the device's (#1215); Spanish and Hungarian names from Open Food Facts and the backend (#1213, #1229); canonical FDC sibling + full backend descriptions (#1170); has_portion read at the search cut (#1209); scan / create-custom actions on the no-results state (#995)
AI meal assistance the model's portion word matched on the English label, bare ties broken toward the middle rung, misses marked (#1208); elapsed time, hint and cancel while an own server answers (#1149)
Open Food Facts data micronutrients converted into app units on new writes (#775); niacin read from vitamin-pp_100g (#1168); a startup repair rewrites OFF rows logged before #775 (#1193, OffMicronutrientRepair, keyed on MealDBO.dataVersion)
meal detail quick-serving chips 0.5×/1×/2×/100 g (#1101); opt-in Settings toggle for grams-first default (#1195); hydrated record kept across the unit menu (#1221)
profile 7-day moving-average overlay on the weight-trend chart (#1197)
recipes totalWeightOverridden threaded through JSON and CSV import (#1169, #1196)
settings export/import failures logged and explained to the user (#1150); grams-first toggle; Spanish + Hungarian in the language picker
l10n Spanish and Hungarian shipped; Weblate pipeline live (#1171), 15 locale files updated
deps hive_ce 2.19.3→2.20.0, mobile_scanner 7.4.0→7.4.1, sentry_flutter 9.26→9.30, cached_network_image 3→4, archive 4.0.9→4.2.0, flutter_local_notifications 22.3.0→22.3.1
icons launcher artwork inset inside the adaptive mask (#1161)

Untouched since v2.3.0, smoke depth only: diary, fasting, add-activity / activity detail, Health Connect, scanner UI, onboarding (on the candidate, after pm clear of .develop), theme, notifications.

Known issues the candidate carries — recorded here so a tester does not re-find them, and none is a blocker under the bar: the weight-trend chart windows by 24-hour spans, so a DST change inside the window drops a day (#1207, fix in #1222); several activity picker rows share an English name (#1200, fix in #1223); a cleared per-app language override is re-pushed on the next cold start (#810, fix in #1230). All three PRs wait for the next release.

The phone. Pixel 6 (oriole, 18101FDF60010M) on Android 17, running the app in German. Its history matters: at charting it held full 2.2.0 with the maintainer's real data and .develop 2.3.0; both were wiped on 2026-09-19, so the 2.2.0 real-data upgrade is gone for good. It now carries one install — full, first installed 2026-09-19 as v2.3.0, upgraded in place to the candidate on 2026-09-25 — over a box holding two Open Food Facts intakes and the product cache, and nothing else. Since 2026-09-25 the session drives the phone itself via adb, re-checking mCurrentFocus after every event and stopping if it leaves the package; the system file picker during export is the one expected hand-off. The maintainer is still needed for the AI provider key and a barcode.

Builds. Debug-signed (0bdae1d6…5ff5), which is the key every install on this phone carries, so adb install -r is a true upgrade. Recipe: scratch worktree with .env copied in, then flutter pub get, flutter gen-l10n, dart run build_runner build --delete-conflicting-outputs, flutter build apk --flavor full --debug — about four minutes. The scratchpad is tmpfs: APKs and worktrees do not survive a reboot and have been rebuilt twice; durable evidence goes to ~/Documents/ont-release-2.4.0-evidence/.

Evidence. The exports (ont-develop-230.zip, ont-full-220.zip, pulled to the session) are the numeric baseline for the #1193 repair — the screens round pre-#775 values to 0.0 — and the repair recomputes a recipe's aggregate while leaving recipe-sourced intakes alone. Scripts live on research/release-2.4.0-pixel-test under docs/release-tests/2.4.0/.

Reporting. A HITL run reports per area: pass / fail (what you did, what you saw, what you expected) / skipped (why). The ticket's resolution comment holds that table; the triage ticket reads it.

Decisions so far

Not yet specified

Nothing — the map closed at its destination. The three patches still open at the end were settled on the way:

  • The grams-first toggle shipping untranslated — ruled at Go or no-go: ships, as the Weblate pipeline working as designed. Its semantics identifier was added in #1270 / #1271 after the Codex review.
  • The lost 2.2.0 install — accepted: the 65 → 66 upgrade is verified on device, the 63 → 66 jump by the migration's unit suite only.
  • Health Connect on Android 17 — the smoke passed (screen renders, disclosure before any system UI); the permission grant stayed the maintainer's and was not exercised.

Out of scope

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    backlog:infoInformational — meta tracker / pending external answer / deferredwayfinder:map

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions