Watchapp distribution: UUID, appinfo, versioning and install path #70

Closed
opened 2026-09-01 17:35:55 +02:00 by robert · 1 comment
robert commented 2026-09-01 17:35:55 +02:00 (Migrated from git.butzei.de)

Goal

Answer "how does anyone other than me install this?". The plan covers building and sideloading via Dev Connect (#3), and nothing else. For a public MIT repository that is a gap.

Acceptance criteria

  • Watchapp UUID generated once and recorded; the companion addresses it and it must never change casually
  • package.json / appinfo complete: name, author, version, capabilities, targetPlatforms for emery and gabbro
  • App icon and menu icon for both geometries
  • Versioning scheme for the watchapp, and how it relates to PROTO_VERSION (docs/PROTOCOL.md section 6) - they are not the same number
  • Companion APK versioning aligned, so a user can tell which pair they have
  • Install instructions in the README covering both halves, and what happens if only one is updated (#53 should catch it, and should be named)
  • Decide and document the distribution route for the watchapp - Rebble store, the Core Devices store, or GitHub releases with sideload instructions
  • Release checklist: both builds, both versions bumped, protocol version reviewed

Files

  • watchapp/package.json
  • README.md

Notes

PROTO_VERSION bumps on contract semantics; app versions bump on releases. Conflating them is a trap - most releases change neither side's protocol.

## Goal Answer "how does anyone other than me install this?". The plan covers building and sideloading via Dev Connect (#3), and nothing else. For a public MIT repository that is a gap. ## Acceptance criteria - [ ] Watchapp UUID generated once and recorded; the companion addresses it and it must never change casually - [ ] `package.json` / `appinfo` complete: name, author, version, capabilities, `targetPlatforms` for `emery` and `gabbro` - [ ] App icon and menu icon for both geometries - [ ] Versioning scheme for the watchapp, and how it relates to `PROTO_VERSION` (docs/PROTOCOL.md section 6) - they are not the same number - [ ] Companion APK versioning aligned, so a user can tell which pair they have - [ ] Install instructions in the README covering both halves, and what happens if only one is updated (#53 should catch it, and should be named) - [ ] Decide and document the distribution route for the watchapp - Rebble store, the Core Devices store, or GitHub releases with sideload instructions - [ ] Release checklist: both builds, both versions bumped, protocol version reviewed ## Files - `watchapp/package.json` - `README.md` ## Notes `PROTO_VERSION` bumps on contract semantics; app versions bump on releases. Conflating them is a trap - most releases change neither side's protocol.
Owner

Closed by PR #109 (merged). UUID (834379e0-d559-497d-8082-d02546fec8d1) already existed from the original scaffold, verified as a genuine pebble-tool-generated RFC 4122 v4 UUID rather than a hand-typed placeholder -- nothing regenerated, now documented as permanent (D64). PROTO_CONTRACT_VERSION and the watchapp/companion release version are two independent numbers by design (D64) -- one moves on wire-contract changes, the other on every tagged release; kept identical in value between watchapp/package.json and companion/build.gradle.kts right now so a mismatch is visually obvious. Icons are an honest placeholder (25x25 PNG, the SDK's real enforced ceiling per the installed waflib source, not recalled docs) pending Robert's actual design input. Distribution mechanism: Forgejo releases via the already-built dev-artifact/tag-lane CI (D63), not a Rebble/Core Devices store listing.

Bonus real fix: tag-lane.yml's G11 gate grepped package.json for a versionLabel field that only ever exists in the generated appinfo.json -- the check silently never fired since the day it was written. Corrected to the real field name, so G11 now actually enforces the tag-matches-version invariant.

Verified for real: pebble build clean on emery/gabbro/basalt including the new icon resource passing the SDK's dimension check, ./gradlew :companion:assembleDebug clean.

Closed by PR #109 (merged). UUID (834379e0-d559-497d-8082-d02546fec8d1) already existed from the original scaffold, verified as a genuine pebble-tool-generated RFC 4122 v4 UUID rather than a hand-typed placeholder -- nothing regenerated, now documented as permanent (D64). PROTO_CONTRACT_VERSION and the watchapp/companion release version are two independent numbers by design (D64) -- one moves on wire-contract changes, the other on every tagged release; kept identical in value between watchapp/package.json and companion/build.gradle.kts right now so a mismatch is visually obvious. Icons are an honest placeholder (25x25 PNG, the SDK's real enforced ceiling per the installed waflib source, not recalled docs) pending Robert's actual design input. Distribution mechanism: Forgejo releases via the already-built dev-artifact/tag-lane CI (D63), not a Rebble/Core Devices store listing. Bonus real fix: tag-lane.yml's G11 gate grepped package.json for a versionLabel field that only ever exists in the generated appinfo.json -- the check silently never fired since the day it was written. Corrected to the real field name, so G11 now actually enforces the tag-matches-version invariant. Verified for real: pebble build clean on emery/gabbro/basalt including the new icon resource passing the SDK's dimension check, ./gradlew :companion:assembleDebug clean.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
robert/PedalPebble#70
No description provided.