LXMF reference symbol inventory (frozen)

This file is the historical, frozen enumeration of every symbol and wire surface in the Python LXMF 0.9.6 audit baseline. The coverage ledger (Coverage ledger) maps every entry here to a specification section and a proof. The active implementation and canonical fixture are pinned separately to LXMF 1.1.0 (795fdaa).

Do not edit by hand to reflect wishful coverage. To refresh, re-enumerate the source at the pinned commit and diff. A new symbol that appears unclassified is a coverage gap.

The inventory is broader than the Rust implementation. In particular, /offer, propagation-node hosting/storage, and LXMPeer synchronisation are reference-only; leviculum-lxmf implements origin uploads and the recipient /get client.

Pin

ComponentVersionSubmodule commit
LXMF (reference/LXMF)0.9.68499729024a4cddfceb47ca07188bb5b1d11d179
Reticulum (reference/Reticulum)RNS 1.3.5d5e62d4e15c5fe2e170f7bd9e120551671f21a27

Reference files under reference/LXMF/LXMF/: LXMessage.py, LXMF.py, LXMRouter.py, LXMPeer.py, LXStamper.py, Handlers.py, _version.py, Utilities/lxmd.py.

Classification key

  • N normative: crosses the wire or is observable by a Python peer; must be specified exactly and proven.
  • I informative: internal behaviour an implementer may diverge on without breaking interop; described, not byte-proven.
  • X out of scope: daemon, CLI, build or test scaffolding.

LXMessage.py (827 lines) — class LXMessage (line 13)

Constants

SymbolValueLineClass
state GENERATING/OUTBOUND/SENDING/SENT/DELIVERED/REJECTED/CANCELLED/FAILED0x00,0x01,0x02,0x04,0x08,0xFD,0xFE,0xFF14-21I
representation UNKNOWN/PACKET/RESOURCE0x00,0x01,0x0224-26N
method OPPORTUNISTIC/DIRECT/PROPAGATED/PAPER0x01,0x02,0x03,0x0529-32N
unverified SOURCE_UNKNOWN/SIGNATURE_INVALID0x01,0x0235-36N
DESTINATION_LENGTH1639N
SIGNATURE_LENGTH6440N
TICKET_LENGTH1641N
TICKET_EXPIRY/GRACE/RENEW/INTERVAL21d/5d/14d/1d48-51N
COST_TICKET0x10052N
TIMESTAMP_SIZE860N
STRUCT_OVERHEAD861N
LXMF_OVERHEAD11262N
ENCRYPTED_PACKET_MDUderived67N
ENCRYPTED_PACKET_MAX_CONTENT29578N
LINK_PACKET_MDURNS.Link.MDU83N
LINK_PACKET_MAX_CONTENT31989N
PLAIN_PACKET_MDURNS.Packet.PLAIN_MDU93N
PLAIN_PACKET_MAX_CONTENT36894N
ENCRYPTION_DESCRIPTION_AES/EC/UNENCRYPTEDstrings97-99I
URI_SCHEMA"lxm"102N
QR_ERROR_CORRECTION"ERROR_CORRECT_L"103I
QR_MAX_STORAGE2953104N
PAPER_MDU2210105N

Methods (wire-relevant marked N)

MethodLineClass
__init__113N (field defaults)
set_title_from_string/bytes, title_as_string190-196N
set_content_from_string/bytes, content_as_string199-205N
set_fields, get_fields212-218N
validate_stamp270N
get_stamp293N
get_propagation_stamp326N
pack352N
send460I
determine_compression_support507N
determine_transport_encryption517I
__mark_delivered/propagated/paper_generated558-582I
__resource_concluded, __propagation_resource_concluded594-605I
__link_packet_timed_out, __update_transfer_progress613-620I
__as_packet623N
__as_resource637N
packed_container657N
write_to_directory672I
as_uri687N
as_qr707I
unpack_from_bytes (static)735N
unpack_from_file (static)810I

msgpack sites

364 (pack payload, N), 378 (pack payload, N), 433 (propagation envelope, N), 669 (packed_container, N), 741 (unpack payload, N), 747 (re-pack for hash, N), 812 (unpack from file, I).

RNS primitives

Identity.full_hash 365/431, Identity.truncated_hash 274, source.sign 375, identity.validate 794, Destination.encrypt 427/446, Destination.SINGLE/PLAIN/LINK/GROUP 395-548, Packet 476, Link.ACTIVE 647, Resource 651/653, Identity.recall 759/765, size constants Identity.TRUNCATED_HASHLENGTH/SIGLENGTH 39/40, Packet.ENCRYPTED_MDU/PLAIN_MDU 67/93, Link.MDU 83.

Filesystem / time

open/write 677-679 (write_to_directory, I). time.time() 354, 433 (N: payload and envelope timestamps).


LXMF.py (217 lines) — module

Constants

SymbolValueLineClass
APP_NAME"lxmf"1N
FIELD_EMBEDDED_LXMS..FIELD_RENDERER0x01..0x0F8-22N
FIELD_CUSTOM_TYPE/DATA/META0xFB-0xFD34-36N
FIELD_NON_SPECIFIC/DEBUG0xFE-0xFF40-41N
AM_CODEC2_*0x01..0x0955-63N
AM_OPUS_*0x10..0x1966-75N
AM_CUSTOM0xFF79N
RENDERER_PLAIN/MICRON/MARKDOWN/BBCODE0x00-0x0389-92N
PN_META_VERSION..PN_META_CUSTOM0x00..0xFF98-104N
SF_COMPRESSION0x00108N

Functions

FunctionLineClass
display_name_from_app_data117N
stamp_cost_from_app_data141N
compression_support_from_app_data154N
pn_name_from_app_data169N
pn_stamp_cost_from_app_data182N
pn_announce_data_is_valid191N

msgpack sites

123, 146, 159, 173, 186, 194 (all unpack of announce app_data, N).


LXStamper.py (396 lines) — module

Constants

SymbolValueLineClass
WORKBLOCK_EXPAND_ROUNDS300010N
WORKBLOCK_EXPAND_ROUNDS_PN100011N
WORKBLOCK_EXPAND_ROUNDS_PEERING2512N
STAMP_SIZE3213N
PN_VALIDATION_POOL_MIN_SIZE25614I

Functions

FunctionLineClass
stamp_workblock18N
stamp_value31N
stamp_valid42N
validate_peering_key48N
validate_pn_stamp53N
validate_pn_stamps_job_simple/multip, validate_pn_stamps67-87I (parallelism)
generate_stamp92N (algorithm)
cancel_work113I
job_simple/linux/android145-260I (platform PoW workers)

msgpack sites

24 (salt packb(n), N). RNS: Cryptography.hkdf 22, Identity.full_hash 24/34/44.


Handlers.py (92 lines)

Class / methodLineClass
LXMFDeliveryAnnounceHandler.received_announce9/15N (announce parsing)
LXMFPropagationAnnounceHandler.received_announce35/41N + I (auto-peer is I)

msgpack: 46 (unpack announce, N). RNS: Transport.hops_to 71/72 (I).


LXMRouter.py (2733 lines) — class LXMRouter (line 29)

Mostly I (router internals: jobloop, queues, persistence, peer rotation, retry cadences). The N surfaces are the announce/app-data builders and the propagation request handlers and packers.

Normative surfaces

SymbolLineClass
get_propagation_node_announce_metadata302N
get_propagation_node_app_data307N
get_announce_app_data986N
generate_ticket1025N
message_get_request1427N (/get request shape)
message_list_response1507N
message_get_response1552N
offer_request2142N (/offer handler)
propagation_packet2110N
propagation_resource_concluded2194N
lxmf_propagation2310N (transient ingest)
ingest_lxm_uri2370N (paper ingest)
lxmf_delivery1732N (inbound delivery dispatch)

Informative constants (selected; full set in Router internals)

MAX_DELIVERY_ATTEMPTS=5(30), PROCESSING_INTERVAL=4(31), DELIVERY_RETRY_WAIT=10(32), PATH_REQUEST_WAIT=7(33), MESSAGE_EXPIRY=30d(38), STAMP_COST_EXPIRY=45d(39), MAX_PEERS=20(43), AUTOPEER_MAXDEPTH=4(45), PEERING_COST=18(50), PROPAGATION_COST=16(54), PROPAGATION_LIMIT=256(55), SYNC_LIMIT=256*40(56), DELIVERY_LIMIT=1000(57), PN_STAMP_THROTTLE=180(60), PR_* states 62-77 (N: appear in /get FSM signalling), request paths STATS_GET/SYNC_REQUEST/UNPEER_REQUEST 81-83 (I), JOB_* intervals 853-860 (I).

Persistence / time

Extensive filesystem use (message store, peers, tickets, costs, stats) — all I. 80+ time.time() calls — I except where a value is signed or hashed.


LXMPeer.py (642 lines) — class LXMPeer (line 13)

SymbolLineClass
OFFER_REQUEST_PATH="/offer", MESSAGE_GET_PATH="/get"14-15N
state IDLE..RESOURCE_TRANSFERRING17-22I
ERROR_NO_IDENTITY..ERROR_TIMEOUT24-31N (/offer response codes)
STRATEGY_LAZY/PERSISTENT, DEFAULT_SYNC_STRATEGY33-35I
MAX_UNREACHABLE=14d, SYNC_BACKOFF_STEP=12m, PATH_REQUEST_GRACE=7.539-50I
from_bytes/to_bytes (peer persistence)52/138I
generate_peering_key242N
sync267I + N (offer payload shape)
offer_response396N
resource_concluded488N (sync resource payload)

msgpack: 54/172 (peer persistence, I), 462 (sync resource packb([time, lxm_list]), N).


_version.py (2 lines)

__version__ = "0.9.6" (1) — N (reference pin).

Utilities/lxmd.py (1127 lines)

Daemon and CLI. X out of scope (not protocol). Listed for completeness only.


Deferred RNS primitives (cited into reference/Reticulum, not re-specified)

RNS.Identity.full_hash (SHA-256), truncated_hash, Ed25519 sign/validate, RNS.Destination.encrypt/decrypt (ECDH + AES token + ratchets), RNS.Cryptography.hkdf, and the size constants RNS.Identity.TRUNCATED_HASHLENGTH (128), SIGLENGTH (512), HASHLENGTH (256), RNS.Packet.ENCRYPTED_MDU/PLAIN_MDU, RNS.Link.MDU. Their exact behaviour-as-used is pinned by the test vectors.