Skip to content

chore(release): version packages - #1624

Merged
frahlg merged 1 commit into
masterfrom
changeset-release/master
Oct 14, 2026
Merged

frahlg merged 1 commit into
masterfrom
changeset-release/master

Conversation

@frahlg

@frahlg frahlg commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to master, this PR will be updated.

Releases

ftw@0.143.0

Minor Changes

  • 6e05ac5: The plan an app reads (plan.get and the plan pushed after a command) now carries the battery's planned level at the end of each slot, socPermille, in thousandths: the same name and unit as the FTW Cloud plan class. A phone can then say where the battery ends up, not only what it does. A level the planner did not give as a number is left out. Older apps ignore the field.
  • 7c72a5b: An Apple Watch can charge the car and read the house without its phone (ADR 0009). The box keeps a second relay socket, /r/<epoch>/<handle>/exchange, beside its uplink, and answers a watch's one-shot HTTPS requests on it: a Noise IK handshake with prologue ftw.exchange.v1: that carries the watch's hello and the box's hello_ok, then cmd and now. Watch sessions live in a table of eight apart from the phones' four, so a watch never pushes a phone out, and each ends after four exchanges, a minute idle or three minutes. Every answer is two lane 0 frames, so a read, a command and a refusal have one length; a command's result that has not settled in 3 s leaves a tick in its place, and asking again with the same cmdId returns it. The box answers a command no sooner than 400 ms after it arrived, applied or refused, so the time to answer does not tell the relay which; a command that takes longer answers when it is done. The box takes at most 60 handshakes a minute and answers a stranger or a removed watch with silence. It now says cmd.exchange, so a phone can offer "Add watch". Losing the exchange socket changes nothing for the uplink or local control.

Patch Changes

  • 9fa327f: An app command retried in a new session no longer acts twice. Each app session kept its own list of command ids, so when a phone lost its connection mid-command and sent the command again, the box acted again. The box now keeps one list for all sessions, keyed by the device and its command id, and holds each id for 24 hours of uptime, as the protocol says. Another device's command with the same id still counts as new.
  • 5c1feae: The box streams the grid's three phase currents to the app and to FTW Cloud, so the phone can show each phase against the main fuse. They go as extra fields 11–13 in tenths of an ampere, signed by the site convention, with the main fuse as field 14. A meter that gives only the size of each current, such as Sungrow, gets its sign from the power on the same phase. The box sends only the phases the site has, and only while the site meter is online. When a field stops coming, the box resends the whole snapshot once, so a phone never keeps a phase at its last value. Lane 0 keeps its 512-byte frame, and these fields are the first to give way when a delta does not fit.
  • 5d2e7fe: Specify how an Apple Watch reads its home from FTW Cloud in one HTTPS request (ADR 0009). go/protocol/cloudwire gains the one-shot read: POST /v1/app/once, a Noise IK handshake with prologue ftw.cloud.once.v1:, read {have, hz} and token.get in message 1, and an answer of length-prefixed messages. push.register gains app, iphone or watch, so the service picks the APNs topic, and the roster may carry a device with role watch. Golden vectors for one read are in cloudwire/testdata/cloud-once-vectors.json. Nothing on the box changes; FTW Cloud serves the route in a later step.
  • 00d791c: Know the shared registry's new names for an Apple Watch: role watch and capability cmd.exchange (ADR 0009). The box claims neither yet. Its page and the app refuse a watch code, and refuse to change a phone into a watch, until a phone can add one.
  • a6ddfea: An owner's phone can add an Apple Watch as a device of its own (ADR 0009). The phone asks for a watch code over its session, with a passkey step-up on that request; the code binds to the phone and leaves a pending phone code alone. The box stores the watch with role watch and the phone as its parent. A watch holds the watch role's scopes that its phone holds at that moment, so demoting the phone narrows the watch at once. Removing a phone removes its watches; removing a watch touches nothing else. A watch never gets a stream session. The box's page and GET /api/app-link/devices list each watch under its phone, and FTW Cloud's roster carries it with the scopes the box derives. The box does not offer the watch path yet: cmd.exchange stays unsaid until the exchange socket lands.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-14T08:19:19.815322Z 48928eb PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@frahlg
frahlg force-pushed the changeset-release/master branch 5 times, most recently from 61fce0c to c069d0d Compare October 14, 2026 18:36
@frahlg
frahlg force-pushed the changeset-release/master branch from c069d0d to a049c9d Compare October 14, 2026 18:39
@frahlg
frahlg merged commit a51b5dc into master Oct 14, 2026
12 checks passed
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