spec: sync to RNS 1.3.5 / LXMF 1.0.1; reactions/replies follow upstream#16
Merged
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Re-verified every
tools/verify_*.pyagainstrns==1.3.5/lxmf==1.0.1(previously pinned at1.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)
get_announce_app_datanow emits a 3-elementapp_dataarray[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.FIELD_REPLY_TO(0x30),FIELD_REPLY_QUOTE(0x31),FIELD_REACTION(0x40),FIELD_COMMENT(0x41),FIELD_CONTINUATION(0x42).Trust principle: recommendations follow upstream only
0x40(int-keyed) form, not the third-party0x10(string-keyed) app-extension previously documented.0x30/0x31match the upstream allocation exactly.0x10reactions, 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)
0x40(dropped0x10)0x40, with0x10fallback for un-upgraded peers0x40(dropped0x10)Verifier / tooling changes
tools/verify_announce_app_data.py— asserts the 3-element producer + both wire-byte forms.tools/verify_lxmf_fields.py— +5FIELD_*constants andREACTION_*/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 missingverify_lxmf_fields.pyrow.Release
Intended to be tagged
v2026.06.19after merge — Verified against RNS 1.3.5 / LXMF 1.0.1.🤖 Generated with Claude Code