Ade Thompson apt
apt pushed to main at apt/fuelboard 2026-08-13 20:27:06 +01:00
553730681f A/B test: from-scratch minimal small widget (proven medium intent)
apt pushed to main at apt/fuelboard 2026-08-13 20:23:15 +01:00
8a9e77546f Small widget: remove @IntentParameterDependency from WidgetFavouriteQuery
apt pushed to main at apt/fuelboard 2026-08-13 20:13:25 +01:00
3cf1d5c9af Widget diagnostics: per-intent beacons (keychain slots + relay query)
apt pushed to main at apt/fuelboard 2026-08-13 19:52:13 +01:00
335a9751dc Widget diagnostics: beacon from makeEntry (keychain + relay) + app diagnostics section
apt pushed to main at apt/fuelboard 2026-08-13 19:35:48 +01:00
4d35b08533 Widget: keychain-free fresh defaults — drop defaultResult(), auto-populate at entry time
apt pushed to main at apt/fuelboard 2026-08-13 18:51:42 +01:00
8646521176 Small widget: fuel-only relay fetch when no location, so default/Cheapest/Closest faces populate with real stations instead of sample data. Root cause of the persistent skeleton: favourites mode reads keychain (works on free accounts), but the non-favourites path needs stations — the app-group cache can be absent on free accounts and keychain can't hold the station dump, so with no location fix the widget fell through to SampleFuelProvider and never populated. Now when location is nil the widget fetches /api/v1/stations?fuel=X&limit=500 (fuel-only, cheapest-first, verified against the relay).
apt pushed to main at apt/fuelboard 2026-08-13 18:39:32 +01:00
38b47eea38 Widget gallery order + default-widget skeleton fix. (1) Register FuelPriceSmallWidget BEFORE FuelPriceWidget so the gallery lists small, then medium (bundle order = gallery order). (2) Revert entity resolution to LENIENT: the timeline request resolves the full configuration through the entity queries, and the b1765b5 strict entities(for:) (nil for the empty default favourite 'fuel|') failed resolution for default-config small widgets, stranding them on the iOS skeleton placeholder. entities(for:) now always returns a value; defaultResult() still auto-populates fresh widgets to the first fuel with a favourite / first favourite of that fuel.
apt pushed to main at apt/fuelboard 2026-08-13 18:28:25 +01:00
b1765b5611 Widget favourites defaults: auto-populate Fuel and Favourite rows when Sort = Favourites. FavouriteFuelQuery gains defaultResult() (first fuel with a favourite, Unleaded→Diesel order) and strict entities(for:) — a stored fuel that no longer has favourites fails resolution and falls back to the default. WidgetFavouriteQuery gains defaultResult() (first favourite of the Fuel row's fuel, else first favourite overall) and strict entities(for:) — the empty static default ('fuel|') and removed favourites now resolve to nil so the sheet pre-selects a real favourite instead of showing a placeholder. Provider fallback (cheapest favourite of the fuel) unchanged.
apt pushed to main at apt/fuelboard 2026-08-13 18:21:06 +01:00
906f8a8429 Small widget: declare config params in display order for every summary branch. If iOS falls back to declaration order when re-rendering the sheet after a parameter change, the favourites branch previously re-ordered to Sort by first (sort was declared before favouriteFuel). Now favouriteFuel, fuel, sort, favourite, distance — Favourites mode reads Fuel · Sort by · Favourite under either ordering mechanism. No encoding change (config keys are identifiers, order-independent).
apt pushed to main at apt/fuelboard 2026-08-13 18:02:54 +01:00
926317236a Widget config sheets: unify row layout across both widgets — Fuel type first, then Sort by, then Favourite (Favourites sort only). Small widget's Favourites branch reordered from Sort/Fuel/Favourite to Fuel/Sort/Favourite, and the favourites-scoped fuel param retitled 'Fuel' so the row reads identically in every mode. Medium widget was already Fuel-first. No parameter type changes, so no stored-config reset beyond the normal reinstall.
apt pushed to main at apt/fuelboard 2026-08-13 17:48:35 +01:00
3e2d3775f2 Widget config sheet: revert WidgetSort to String-backed AppEnum. parameterSummary When(\.$sort, .equalTo, …) silently falls back to the otherwise branch for AppEntity parameters (iOS 17+ bug FB13263902), which hid the Favourite/Favourite Fuel rows on the small widget — the metadata compared against a literal 'WidgetSort.favourites' string instead of the enum case. String AppEnums match reliably (the d8506a0 form). Tradeoff: the Sort picker always offers Favourites; picking it with no favourites shows the empty state. FavouriteFuel entity + IntentParameterDependency filtering unchanged.
apt pushed to main at apt/fuelboard-editor 2026-08-13 17:34:19 +01:00
174cbb26a9 Packaging: sign appex (Widget.entitlements) then app (App.entitlements). Bare --deep -s - left the appex unsigned and embedded no entitlements, so SideStore re-signed without application-groups and the widget could not read favourites from the shared container
apt pushed to main at apt/fuelboard 2026-08-13 17:14:15 +01:00
d0bd4e7a8e Small widget favourites config: fuel dictates the favourite list (@IntentParameterDependency filters picker options by the chosen fuel), fuel picker shows only fuels with favourites (FavouriteFuel entity), Favourites sort hidden when no favourites exist (WidgetSort → dynamic AppEntity), fuel tags removed from favourite rows
apt pushed to main at apt/fuelboard 2026-08-13 17:00:18 +01:00
d8506a035f Small widget favourite picker: embed station name + multi-fuel flag in the WidgetFavourite entity so picker rows render with no storage read (config-sheet resolution can run without keychain/app-group access, which made every row show the 'Favourite' placeholder)
apt pushed to main at apt/fuelboard 2026-08-13 16:51:23 +01:00
7357eb98c3 Small widget favourites: fuel row returns to the config sheet (picks the default favourite); pinned favourite wins, fuel-tagged picker rows when favourites span >1 fuel; fallback = selected fuel's cheapest favourite
apt pushed to main at apt/fuelboard 2026-08-13 15:49:20 +01:00
1bdef59d78 Small widget: Favourites gains a picker to pin which favourite to show (separate FuelPriceWidgetSmall kind + AppEntity picker; medium keeps the list, no picker). Backlog: dual-unit widget picker labels
apt pushed to main at apt/fuelboard 2026-08-13 15:33:25 +01:00
26e724f48a Widget config: Distance picker as AppEntity so labels resolve dynamically from the app's units (AppEnum labels are static)
apt pushed to main at apt/fuelboard 2026-08-13 15:25:21 +01:00
64330f96a8 Widget config: Distance picker mirrors the app's units setting (5 mi = 8 km) via dynamic AppEnum displayRepresentation
apt pushed to main at apt/fuelboard 2026-08-13 15:10:24 +01:00
2409b71f2f Labels: pluralize miles (1 mile) and show true distances in the chosen unit (5 mi = 8 km) across Alerts/Stations pickers + captions
apt pushed to main at apt/fuelboard 2026-08-13 15:00:54 +01:00
490c343fd5 Alerts: mile-friendly radius 1/2/3/5/8 + Follow search (capped 8 mi); Live Activity Follow search; legacy radii clamped