LXMF reference symbol inventory (frozen)
This file is the frozen ground-truth enumeration of every symbol and wire surface in the vendored Python LXMF reference. The specification is written against it; the coverage ledger (Coverage ledger) maps every entry here to a specification section and a proof.
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.
Pin
| Component | Version | Submodule commit |
|---|---|---|
LXMF (vendor/LXMF) | 0.9.6 | 8499729024a4cddfceb47ca07188bb5b1d11d179 |
Reticulum (vendor/Reticulum) | RNS 1.3.5 | d5e62d4e15c5fe2e170f7bd9e120551671f21a27 |
Reference files under vendor/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
| Symbol | Value | Line | Class |
|---|---|---|---|
state GENERATING/OUTBOUND/SENDING/SENT/DELIVERED/REJECTED/CANCELLED/FAILED | 0x00,0x01,0x02,0x04,0x08,0xFD,0xFE,0xFF | 14-21 | I |
representation UNKNOWN/PACKET/RESOURCE | 0x00,0x01,0x02 | 24-26 | N |
method OPPORTUNISTIC/DIRECT/PROPAGATED/PAPER | 0x01,0x02,0x03,0x05 | 29-32 | N |
unverified SOURCE_UNKNOWN/SIGNATURE_INVALID | 0x01,0x02 | 35-36 | N |
DESTINATION_LENGTH | 16 | 39 | N |
SIGNATURE_LENGTH | 64 | 40 | N |
TICKET_LENGTH | 16 | 41 | N |
TICKET_EXPIRY/GRACE/RENEW/INTERVAL | 21d/5d/14d/1d | 48-51 | N |
COST_TICKET | 0x100 | 52 | N |
TIMESTAMP_SIZE | 8 | 60 | N |
STRUCT_OVERHEAD | 8 | 61 | N |
LXMF_OVERHEAD | 112 | 62 | N |
ENCRYPTED_PACKET_MDU | derived | 67 | N |
ENCRYPTED_PACKET_MAX_CONTENT | 295 | 78 | N |
LINK_PACKET_MDU | RNS.Link.MDU | 83 | N |
LINK_PACKET_MAX_CONTENT | 319 | 89 | N |
PLAIN_PACKET_MDU | RNS.Packet.PLAIN_MDU | 93 | N |
PLAIN_PACKET_MAX_CONTENT | 368 | 94 | N |
ENCRYPTION_DESCRIPTION_AES/EC/UNENCRYPTED | strings | 97-99 | I |
URI_SCHEMA | “lxm” | 102 | N |
QR_ERROR_CORRECTION | “ERROR_CORRECT_L” | 103 | I |
QR_MAX_STORAGE | 2953 | 104 | N |
PAPER_MDU | 2210 | 105 | N |
Methods (wire-relevant marked N)
| Method | Line | Class |
|---|---|---|
__init__ | 113 | N (field defaults) |
set_title_from_string/bytes, title_as_string | 190-196 | N |
set_content_from_string/bytes, content_as_string | 199-205 | N |
set_fields, get_fields | 212-218 | N |
validate_stamp | 270 | N |
get_stamp | 293 | N |
get_propagation_stamp | 326 | N |
pack | 352 | N |
send | 460 | I |
determine_compression_support | 507 | N |
determine_transport_encryption | 517 | I |
__mark_delivered/propagated/paper_generated | 558-582 | I |
__resource_concluded, __propagation_resource_concluded | 594-605 | I |
__link_packet_timed_out, __update_transfer_progress | 613-620 | I |
__as_packet | 623 | N |
__as_resource | 637 | N |
packed_container | 657 | N |
write_to_directory | 672 | I |
as_uri | 687 | N |
as_qr | 707 | I |
unpack_from_bytes (static) | 735 | N |
unpack_from_file (static) | 810 | I |
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
| Symbol | Value | Line | Class |
|---|---|---|---|
APP_NAME | “lxmf” | 1 | N |
FIELD_EMBEDDED_LXMS..FIELD_RENDERER | 0x01..0x0F | 8-22 | N |
FIELD_CUSTOM_TYPE/DATA/META | 0xFB-0xFD | 34-36 | N |
FIELD_NON_SPECIFIC/DEBUG | 0xFE-0xFF | 40-41 | N |
AM_CODEC2_* | 0x01..0x09 | 55-63 | N |
AM_OPUS_* | 0x10..0x19 | 66-75 | N |
AM_CUSTOM | 0xFF | 79 | N |
RENDERER_PLAIN/MICRON/MARKDOWN/BBCODE | 0x00-0x03 | 89-92 | N |
PN_META_VERSION..PN_META_CUSTOM | 0x00..0xFF | 98-104 | N |
SF_COMPRESSION | 0x00 | 108 | N |
Functions
| Function | Line | Class |
|---|---|---|
display_name_from_app_data | 117 | N |
stamp_cost_from_app_data | 141 | N |
compression_support_from_app_data | 154 | N |
pn_name_from_app_data | 169 | N |
pn_stamp_cost_from_app_data | 182 | N |
pn_announce_data_is_valid | 191 | N |
msgpack sites
123, 146, 159, 173, 186, 194 (all unpack of announce app_data, N).
LXStamper.py (396 lines) — module
Constants
| Symbol | Value | Line | Class |
|---|---|---|---|
WORKBLOCK_EXPAND_ROUNDS | 3000 | 10 | N |
WORKBLOCK_EXPAND_ROUNDS_PN | 1000 | 11 | N |
WORKBLOCK_EXPAND_ROUNDS_PEERING | 25 | 12 | N |
STAMP_SIZE | 32 | 13 | N |
PN_VALIDATION_POOL_MIN_SIZE | 256 | 14 | I |
Functions
| Function | Line | Class |
|---|---|---|
stamp_workblock | 18 | N |
stamp_value | 31 | N |
stamp_valid | 42 | N |
validate_peering_key | 48 | N |
validate_pn_stamp | 53 | N |
validate_pn_stamps_job_simple/multip, validate_pn_stamps | 67-87 | I (parallelism) |
generate_stamp | 92 | N (algorithm) |
cancel_work | 113 | I |
job_simple/linux/android | 145-260 | I (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 / method | Line | Class |
|---|---|---|
LXMFDeliveryAnnounceHandler.received_announce | 9/15 | N (announce parsing) |
LXMFPropagationAnnounceHandler.received_announce | 35/41 | N + 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
| Symbol | Line | Class |
|---|---|---|
get_propagation_node_announce_metadata | 302 | N |
get_propagation_node_app_data | 307 | N |
get_announce_app_data | 986 | N |
generate_ticket | 1025 | N |
message_get_request | 1427 | N (/get request shape) |
message_list_response | 1507 | N |
message_get_response | 1552 | N |
offer_request | 2142 | N (/offer handler) |
propagation_packet | 2110 | N |
propagation_resource_concluded | 2194 | N |
lxmf_propagation | 2310 | N (transient ingest) |
ingest_lxm_uri | 2370 | N (paper ingest) |
lxmf_delivery | 1732 | N (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)
| Symbol | Line | Class |
|---|---|---|
OFFER_REQUEST_PATH="/offer", MESSAGE_GET_PATH="/get" | 14-15 | N |
state IDLE..RESOURCE_TRANSFERRING | 17-22 | I |
ERROR_NO_IDENTITY..ERROR_TIMEOUT | 24-31 | N (/offer response codes) |
STRATEGY_LAZY/PERSISTENT, DEFAULT_SYNC_STRATEGY | 33-35 | I |
MAX_UNREACHABLE=14d, SYNC_BACKOFF_STEP=12m, PATH_REQUEST_GRACE=7.5 | 39-50 | I |
from_bytes/to_bytes (peer persistence) | 52/138 | I |
generate_peering_key | 242 | N |
sync | 267 | I + N (offer payload shape) |
offer_response | 396 | N |
resource_concluded | 488 | N (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 vendor/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.