Skip to content

v1.22.2 - #53

Merged
bethropolis merged 1 commit into
mainfrom
dev/next
Oct 11, 2026
Merged

bethropolis merged 1 commit into
mainfrom
dev/next

Conversation

@bethropolis

@bethropolis bethropolis commented Oct 11, 2026 •

Copy link
Copy Markdown
Owner

Small release. Note the range: PR #52 merged to main after the v1.22.1 tag, so its four commits ship here for the first time, plus the new CLI flags. Compare v1.22.1...v1.22.2, not the PR diff.

Fixed

  • pair with reject: true accepted the request instead of declining it: the payload parsed into a shape with no reject field. Now declines or unpairs, matching the docs.
  • Omitted SMS range fields defaulted to 0, which Android reads as "older than the epoch", so conversation requests returned nothing. Omitted fields stay out of the packet; the whole thread comes back.
  • sms.incoming u_id was empty: Android sends the message id as _id. Now read and published.
  • notification events carry id, as documented, so reply/dismiss have a stable target.

Added

  • kcd sms conversation [--before <ms-epoch>] [--limit <n>] <device-id> <thread-id>. Flags map 1:1 to rangeStartTimestamp/numberToRequest; omitted flags stay out of the packet. SmsRequestConversation keeps its signature and delegates with nils.

Upgrading

Nothing required. No config, wire, or IPC changes. One behavioral inversion to know: pair with reject: true now declines — previously it accepted, which was the bug.

Live note: the default conversation path was verified end to end against a connected phone (whole thread returned); the capped path is payload-asserted by test but not yet phone-confirmed.

The #52 range fix (omitted fields stay out of the packet) was reachable
only over raw IPC: the CLI sent no range fields at all. This exposes
them as flags mapping 1:1 to rangeStartTimestamp/numberToRequest.

Unset stays unset. IsSet, not a zero default, decides whether a field
goes in the packet, because the phone reads an explicit 0 as "older
than the epoch" or "zero messages" and returns nothing. Negatives are
rejected: neither a ms epoch nor a count can be negative.

SmsRequestConversation keeps its signature and delegates with nils, so
the public client API does not break; the range form is additive.

Live note: verified the default path end to end (126 messages, whole
thread) and the payload shapes by test. The capped path could not be
confirmed live: the phone stopped answering SMS requests mid-session
(its SMS plugin has since been disabled device-side, which is also the
documented way to end the latch). Retest with the app awake and
unrestricted if the cap's phone-side handling is ever in doubt.
@bethropolis
bethropolis merged commit 2ca7427 into main Oct 11, 2026
9 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