Skip to content

fix(android/i18n): German strings for the compact widget (fixes Android CI on main) - #303

Merged
ryanbr merged 1 commit into
ryanbr:mainfrom
vishk23:fix-widget-compact-de
Jul 12, 2026
Merged

ryanbr merged 1 commit into
ryanbr:mainfrom
vishk23:fix-widget-compact-de

Conversation

@vishk23

@vishk23 vishk23 commented Jul 12, 2026

Copy link
Copy Markdown

Android CI on main fails since the compact widget (#77):
GermanLocalizationTest.germanResourcesResolveForEveryLocalizedKey — widget_compact_name and widget_compact_description were added to values/strings.xml but not values-de/.

This adds the two German strings, reusing the established terms from widget_description (Ruhe/Ladung/Anstrengung, Live-Herzfrequenz, Band-Akku):

  • widget_compact_name → "NOOP Kompakt"
  • widget_compact_description → "Kompaktes Widget für Ruhe, Ladung und Anstrengung, mit Live-Herzfrequenz und Band-Akku."

Verified the test's key-parity check passes with the same XML parse it uses (every non-app_name key in values/ now resolves in values-de/, none blank, app_name not redeclared). I can't run the Gradle suite locally (no Android toolchain), so CI here is the proof.

GermanLocalizationTest.germanResourcesResolveForEveryLocalizedKey fails on
main since the compact widget landed (#77): widget_compact_name and
widget_compact_description exist in values/ but not values-de/. Adds both,
reusing the app's established German terms (Ruhe/Ladung/Anstrengung,
Live-Herzfrequenz, Band-Akku) from widget_description.
@ryanbr
ryanbr merged commit 5cba382 into ryanbr:main Jul 12, 2026
DX23876 pushed a commit to DX23876/noop that referenced this pull request Jul 22, 2026
GermanLocalizationTest.germanResourcesResolveForEveryLocalizedKey fails on
main since the compact widget landed (ryanbr#77): widget_compact_name and
widget_compact_description exist in values/ but not values-de/. Adds both,
reusing the app's established German terms (Ruhe/Ladung/Anstrengung,
Live-Herzfrequenz, Band-Akku) from widget_description.
@vishk23
vishk23 deleted the fix-widget-compact-de branch July 30, 2026 19:59
simoncad7 pushed a commit to simoncad7/noop that referenced this pull request Aug 17, 2026
GermanLocalizationTest.germanResourcesResolveForEveryLocalizedKey fails on
main since the compact widget landed (ryanbr#77): widget_compact_name and
widget_compact_description exist in values/ but not values-de/. Adds both,
reusing the app's established German terms (Ruhe/Ladung/Anstrengung,
Live-Herzfrequenz, Band-Akku) from widget_description.
ryanbr added a commit that referenced this pull request Aug 25, 2026
Diagnostic only. The detector is untouched and no number moves.

A WHOOP 4.0 field log showed 22 days of `kept=0`: 2211 candidate runs, 1661 after
the #303 bridge, 1271 that never reached minExerciseMin, and 390 that DID and
failed the intensity bar instead. `droppedShort` is tested first and
short-circuits, so that last figure means sustained five-minute-plus efforts were
reaching the intensity gate every one of those days. The detector was right to
reject them — the reporter confirmed they had not trained, and sustained walking
is not a workout.

What the counts cannot say is how SUBSTANTIAL the best survivor was, and that is
the whole verdict: a five-minute stroll rejected on intensity is routine, while an
hour-long effort rejected on intensity is a defect. Both print identical counts.

DetectionFunnel now carries longestRunS and meanRunS, measured on the bridged runs
before any qualification gate:

  … runs=89 bridged=79 longestRunS=312 meanRunS=41 short=64 lowIntensity=15 kept=0

Read longestRunS against 290 s, not 300 — the gate is `minDurS - motionSmoothS`,
because the smoothing window costs a run its first samples. Both docs name that
figure and both tests pin it against the constants it derives from, so tuning
either cannot leave it silently stale.

Byte-identical line on both platforms. A test per side pins the case that matters:
two fixtures carrying IDENTICAL counts from the log, separated only by
longestRunS — 312 s against 3600 s. The counts alone cannot tell those apart,
which is the point of the field.

Verified: full Android suite green, assembleFullDebug, doc lint, and
swift-packages CI green including StrandAnalytics (which cannot build on Linux —
GRDB's CSQLite needs sqlite3.h — so the Swift twin was CI-verified rather than run
locally).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants