Skip to content

spec: sync to RNS 1.3.5 / LXMF 1.0.1; reactions/replies follow upstream#16

Merged
thatSFguy merged 2 commits into
masterfrom
spec/upstream-sync-rns1.3.5-lxmf1.0.1
Jun 19, 2026
Merged

spec: sync to RNS 1.3.5 / LXMF 1.0.1; reactions/replies follow upstream#16
thatSFguy merged 2 commits into
masterfrom
spec/upstream-sync-rns1.3.5-lxmf1.0.1

Conversation

@thatSFguy

@thatSFguy thatSFguy commented Jun 19, 2026

Copy link
Copy Markdown
Owner

What

Re-verified every tools/verify_*.py against rns==1.3.5 / lxmf==1.0.1 (previously pinned at 1.2.4 / 0.9.7). 13/15 passed unchanged. The two LXMF failures were real upstream changes, now reflected in the spec.

Upstream changes captured (all landed in LXMF 1.0.0)

  • §4.3get_announce_app_data now emits a 3-element app_data array [display_name, stamp_cost, [SF_COMPRESSION]] (the 0.9.x producer computed but never appended the third element). Receivers must accept both 2- and 3-element forms.
  • §5.9 — five field constants the spec previously treated as app-extensions or didn't cover at all are now official: FIELD_REPLY_TO (0x30), FIELD_REPLY_QUOTE (0x31), FIELD_REACTION (0x40), FIELD_COMMENT (0x41), FIELD_CONTINUATION (0x42).

Trust principle: recommendations follow upstream only

  • §5.9.8 reactions — recommend emitting the upstream 0x40 (int-keyed) form, not the third-party 0x10 (string-keyed) app-extension previously documented.
  • §5.9.9 reply-to — promoted from "app extension / UNVERIFIED" to official; 0x30/0x31 match the upstream allocation exactly.
  • Non-upstream third-party forms (0x10 reactions, Columba {"reply_to"} legacy reply) are kept for inbound parsing only, quarantined in a clearly non-normative §5.9.12.

Ecosystem status (2026-06-19)

Client Reaction form
MeshChatX ✅ fully on 0x40 (dropped 0x10)
Columba 0x40, with 0x10 fallback for un-upgraded peers
reticulum-mobile-app ✅ fully on 0x40 (dropped 0x10)

Verifier / tooling changes

  • tools/verify_announce_app_data.py — asserts the 3-element producer + both wire-byte forms.
  • tools/verify_lxmf_fields.py — +5 FIELD_* constants and REACTION_*/COMMENT_*/CONTINUATION_* dict-index groups.
  • tools/requirements.txt — pins → rns==1.3.5 / lxmf==1.0.1.
  • README.md — "Spec corrections" entry (2026-06-19); tools/README.md — version bump + added the missing verify_lxmf_fields.py row.

Release

Intended to be tagged v2026.06.19 after merge — Verified against RNS 1.3.5 / LXMF 1.0.1.

🤖 Generated with Claude Code

thatSFguy and others added 2 commits June 19, 2026 08:59
Re-verified every tools/verify_*.py against rns==1.3.5 / lxmf==1.0.1
(was 1.2.4 / 0.9.7). 13/15 passed unchanged; the two LXMF failures were
real upstream changes, now reflected in the spec:

- §4.3: get_announce_app_data now emits a 3-element app_data array
  [display_name, stamp_cost, [SF_COMPRESSION]] (LXMF 1.0.0). Receivers
  must accept both 2- and 3-element forms. Verifier updated to assert the
  3-element producer + both wire-byte forms.
- §5.9: LXMF 1.0.0 blessed five field constants the spec had as
  app-extensions or not at all — FIELD_REPLY_TO (0x30), FIELD_REPLY_QUOTE
  (0x31), FIELD_REACTION (0x40), FIELD_COMMENT (0x41), FIELD_CONTINUATION
  (0x42). Added table rows, §5.9.10/§5.9.11, and the dict-index groups to
  verify_lxmf_fields.py.

Recommendations now follow upstream only, so the spec stays trustworthy:
- §5.9.8 reactions: emit the upstream 0x40 (int-keyed) form, not the
  third-party 0x10 (string-keyed) app-extension the spec used to document.
- §5.9.9 reply-to: promoted from "app extension / UNVERIFIED" to official
  (0x30/0x31 match the upstream allocation exactly).

Non-upstream third-party forms (0x10 reactions, Columba {"reply_to"}
legacy reply) are kept for inbound parsing only, quarantined in a clearly
non-normative §5.9.12. Ecosystem already largely converged: MeshChatX
fully on 0x40, Columba on 0x40 with 0x10 fallback; reticulum-mobile-app
is the remaining 0x10 emitter.

Pins bumped to rns==1.3.5 / lxmf==1.0.1; README "Spec corrections" entry
(2026-06-19) added for the reaction-allocation change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Dependabot watches the rns/lxmf pins in tools/requirements.txt and opens
a PR when upstream releases to PyPI. The verify workflow re-runs every
tools/verify_*.py on each PR, so a bump PR shows exactly which wire-format
claims drift against the new upstream version before merge.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@thatSFguy thatSFguy merged commit 0e3e8be into master Jun 19, 2026
2 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