Skip to content

v0.0.3: fix settings ignored on real watches + splash version - #4

Merged
eldios merged 3 commits into
watchfacefrom
fix/v0.0.3-settings
Jun 14, 2026
Merged

v0.0.3: fix settings ignored on real watches + splash version#4
eldios merged 3 commits into
watchfacefrom
fix/v0.0.3-settings

Conversation

@eldios

@eldios eldios commented Jun 14, 2026

Copy link
Copy Markdown
Owner

Summary

Hotfix release for the 0.0.2 regression where the settings page did nothing on a real watch.

  • Settings save restored. 0.0.2 sent every setting by name in the pebblejs://close payload. On a real watch that payload is length-limited, so it was truncated mid-JSON, JSON.parse threw in webviewclosed, and the save was silently dropped — settings appeared completely dead. The emulator uses a file:// return_to path and was unaffected, which is why the regression slipped through. Numeric settings now travel positionally (values only, in a fixed shared order in wirekeys.js); app.js expands them back to keys before forwarding the full state to the watch. Payload drops ~3.6× (835 → 232 URL bytes) so it always fits, while WYSIWYG is preserved — every shown value is still applied, no ghost settings. The two string settings and changed translations ride along by name; a legacy flat payload is still decoded for safety.
  • Splash version. The calendar-loading splash showed a hard-coded "3.0" (a PebbleTimely leftover); it now shows the real app version.

Versioning

  • App version bumped to 0.0.3 everywhere it is stated: package.json, the splash APP_VERSION, the README badge, CHANGELOG.md, and the PUBLISHING.md release notes.
  • CONFIG_VERSION (the config-protocol version reported to the JS, on its own sequence — not the app version) is major-bumped 2.6 → 3.0 because the save wire format changed.

Test plan

Verified inside nix develop:

  • Encode→decode round-trip with node: all 34 settings survive; the drift/"ghost" case (a shown-but-untouched value) is applied; negative clock2_tz survives; close payload is 232 URL bytes (was ~835).
  • wirekeys.js is bundled into build/pebble-js-app.js (require resolves).
  • Host unit suite 18/18; pebble build on basalt/diorite/emery/flint; strict-check clean under the cloud -Werror flags.
  • Built basalt ELF contains the "0.0.3" splash string.
  • Not verified on a physical watch — please confirm a save sticks after install.

eldios added 3 commits June 14, 2026 14:20
0.0.2 sent every setting by name in the pebblejs://close payload. On a real
watch that payload is length-limited: it was truncated mid-JSON, JSON.parse
threw in webviewclosed, and the save was silently dropped — so settings did
nothing. (The emulator uses a file:// return_to path, so it was unaffected and
the regression slipped through.)

Numeric settings now travel positionally — values only, in a fixed shared order
(wirekeys.js) — so the close payload drops ~3.6x (835 -> 232 URL bytes) and
always fits. app.js expands the array back to keys before forwarding the full
state to the watch, so WYSIWYG is preserved: every shown value is still applied,
no ghost settings. The two string settings and changed translations ride along
by name. A legacy flat payload is still decoded, for safety.
The calendar-loading splash showed a hard-coded "3.0" (left over from the
PebbleTimely ancestor). Show APP_VERSION instead, kept in sync with
package.json.
Fixes settings being ignored on real watches and the splash version string.
@eldios eldios self-assigned this Jun 14, 2026
@eldios
eldios merged commit 8148975 into watchface Jun 14, 2026
2 checks passed
@eldios
eldios deleted the fix/v0.0.3-settings branch June 14, 2026 12:22
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.

1 participant