[{"data":1,"prerenderedAt":2065},["ShallowReactive",2],{"sidebar-pages":3,"doc-/architecture":20},[4,8,12,16],{"_path":5,"title":6,"order":7},"/abi","ABI & boundary",2,{"_path":9,"title":10,"order":11},"/architecture","Architecture",1,{"_path":13,"title":14,"order":15},"/l3-modules","L3 — Provider SDK",3,{"_path":17,"title":18,"order":19},"/l4-apps","L4 — App SDK",4,{"_path":9,"_dir":21,"_draft":22,"_partial":22,"_locale":21,"title":10,"description":21,"order":11,"body":23,"_type":2058,"_id":2059,"_source":2060,"_file":2061,"_stem":2062,"_extension":2063,"sitemap":2064},"",false,{"type":24,"children":25,"toc":2040},"root",[26,35,107,114,126,138,184,196,258,266,478,484,496,522,548,666,677,711,723,785,841,927,938,1043,1145,1156,1168,1215,1289,1295,1340,1346,1354,1396,1404,1437,1442,1553,1559,1578,1686,1733,1739,1908,1946,1952,2034],{"type":27,"tag":28,"props":29,"children":31},"element","h1",{"id":30},"legion-architecture-the-4-layer-api-model",[32],{"type":33,"value":34},"text","Legion Architecture — the 4-layer API model",{"type":27,"tag":36,"props":37,"children":38},"blockquote",{},[39],{"type":27,"tag":40,"props":41,"children":42},"p",{},[43,49,51,56,58,63,65,71,73,78,80,85,87,92,94,105],{"type":27,"tag":44,"props":45,"children":46},"strong",{},[47],{"type":33,"value":48},"Status: DRAFT",{"type":33,"value":50}," (Foundation 09, 2026-06-18). This documents the L1–L4\nlayering and, in particular, makes the ",{"type":27,"tag":44,"props":52,"children":53},{},[54],{"type":33,"value":55},"L3 (provider)",{"type":33,"value":57}," and ",{"type":27,"tag":44,"props":59,"children":60},{},[61],{"type":33,"value":62},"L4 (consumer)",{"type":33,"value":64},"\nsurfaces ",{"type":27,"tag":66,"props":67,"children":68},"em",{},[69],{"type":33,"value":70},"visible",{"type":33,"value":72}," for the first time. The L3/L4 public APIs described here are\n",{"type":27,"tag":44,"props":74,"children":75},{},[76],{"type":33,"value":77},"drafts, not release candidates",{"type":33,"value":79}," — expect discussion and changes before any\nsurface is frozen. Feedback welcome. The export ",{"type":27,"tag":66,"props":81,"children":82},{},[83],{"type":33,"value":84},"boundary",{"type":33,"value":86}," is CI-locked; the\nspecific symbol ",{"type":27,"tag":66,"props":88,"children":89},{},[90],{"type":33,"value":91},"set",{"type":33,"value":93}," is pre-release (see ",{"type":27,"tag":95,"props":96,"children":97},"a",{"href":5},[98],{"type":27,"tag":99,"props":100,"children":102},"code",{"className":101},[],[103],{"type":33,"value":104},"abi.md",{"type":33,"value":106},").",{"type":27,"tag":108,"props":109,"children":111},"h2",{"id":110},"read-this-first",[112],{"type":33,"value":113},"Read this first",{"type":27,"tag":40,"props":115,"children":116},{},[117,119,124],{"type":33,"value":118},"Legion is a distributed ",{"type":27,"tag":44,"props":120,"children":121},{},[122],{"type":33,"value":123},"capability mesh",{"type":33,"value":125}," for individual data sovereignty: a\ncohort of nodes (your phone, your machines) that discover and invoke each\nother's capabilities — speech-to-text, an LLM, storage, audio — without routing\nyour data through a big-cloud dependency.",{"type":27,"tag":40,"props":127,"children":128},{},[129,131,136],{"type":33,"value":130},"Its API is a ",{"type":27,"tag":44,"props":132,"children":133},{},[134],{"type":33,"value":135},"4-layer stack",{"type":33,"value":137},". As a developer you almost always work at exactly\none of the top two layers:",{"type":27,"tag":139,"props":140,"children":141},"ul",{},[142,160],{"type":27,"tag":143,"props":144,"children":145},"li",{},[146,151,153,158],{"type":27,"tag":44,"props":147,"children":148},{},[149],{"type":33,"value":150},"Building an app?",{"type":33,"value":152}," You work at ",{"type":27,"tag":44,"props":154,"children":155},{},[156],{"type":33,"value":157},"L4",{"type":33,"value":159}," (consume capabilities).",{"type":27,"tag":143,"props":161,"children":162},{},[163,168,170,175,177,182],{"type":27,"tag":44,"props":164,"children":165},{},[166],{"type":33,"value":167},"Providing a capability?",{"type":33,"value":169}," You write a ",{"type":27,"tag":44,"props":171,"children":172},{},[173],{"type":33,"value":174},"module",{"type":33,"value":176}," at ",{"type":27,"tag":44,"props":178,"children":179},{},[180],{"type":33,"value":181},"L3",{"type":33,"value":183},".",{"type":27,"tag":40,"props":185,"children":186},{},[187,189,194],{"type":33,"value":188},"L1 and L2 are the machinery underneath — they are ",{"type":27,"tag":66,"props":190,"children":191},{},[192],{"type":33,"value":193},"not",{"type":33,"value":195}," application-facing and\nyou should never need to call into them directly.",{"type":27,"tag":197,"props":198,"children":202},"pre",{"className":199,"code":200,"language":201,"meta":21,"style":21},"language-mermaid shiki shiki-themes github-dark github-dark","flowchart TB\n    L4[\"\u003Cb>L4 — Consumer / application\u003C/b>\u003Cbr/>legion.h · l4_node.h · legion_ffi_*.h\u003Cbr/>\u003Ci>apps + bindings — the dynamic ABI (~131 legion_* exports)\u003C/i>\"]\n    L3[\"\u003Cb>L3 — Capability provider\u003C/b>\u003Cbr/>sdk.h · legion_identity.h\u003Cbr/>\u003Ci>module authors — in-process header contract (not exported)\u003C/i>\"]\n    L2[\"\u003Cb>L2 — Consensus · membership · identity\u003C/b>\u003Cbr/>consensus VM + BFT · cert-gated membership · signed beacon\u003Cbr/>\u003Ci>internal\u003C/i>\"]\n    L1[\"\u003Cb>L1 — Transport / mesh\u003C/b>\u003Cbr/>LNMP · discovery · bridge tunnels · E2E encryption\u003Cbr/>\u003Ci>internal\u003C/i>\"]\n    L4 --- L3 --- L2 --- L1\n","mermaid",[203],{"type":27,"tag":99,"props":204,"children":205},{"__ignoreMap":21},[206,216,224,232,240,249],{"type":27,"tag":207,"props":208,"children":210},"span",{"class":209,"line":11},"line",[211],{"type":27,"tag":207,"props":212,"children":213},{},[214],{"type":33,"value":215},"flowchart TB\n",{"type":27,"tag":207,"props":217,"children":218},{"class":209,"line":7},[219],{"type":27,"tag":207,"props":220,"children":221},{},[222],{"type":33,"value":223},"    L4[\"\u003Cb>L4 — Consumer / application\u003C/b>\u003Cbr/>legion.h · l4_node.h · legion_ffi_*.h\u003Cbr/>\u003Ci>apps + bindings — the dynamic ABI (~131 legion_* exports)\u003C/i>\"]\n",{"type":27,"tag":207,"props":225,"children":226},{"class":209,"line":15},[227],{"type":27,"tag":207,"props":228,"children":229},{},[230],{"type":33,"value":231},"    L3[\"\u003Cb>L3 — Capability provider\u003C/b>\u003Cbr/>sdk.h · legion_identity.h\u003Cbr/>\u003Ci>module authors — in-process header contract (not exported)\u003C/i>\"]\n",{"type":27,"tag":207,"props":233,"children":234},{"class":209,"line":19},[235],{"type":27,"tag":207,"props":236,"children":237},{},[238],{"type":33,"value":239},"    L2[\"\u003Cb>L2 — Consensus · membership · identity\u003C/b>\u003Cbr/>consensus VM + BFT · cert-gated membership · signed beacon\u003Cbr/>\u003Ci>internal\u003C/i>\"]\n",{"type":27,"tag":207,"props":241,"children":243},{"class":209,"line":242},5,[244],{"type":27,"tag":207,"props":245,"children":246},{},[247],{"type":33,"value":248},"    L1[\"\u003Cb>L1 — Transport / mesh\u003C/b>\u003Cbr/>LNMP · discovery · bridge tunnels · E2E encryption\u003Cbr/>\u003Ci>internal\u003C/i>\"]\n",{"type":27,"tag":207,"props":250,"children":252},{"class":209,"line":251},6,[253],{"type":27,"tag":207,"props":254,"children":255},{},[256],{"type":33,"value":257},"    L4 --- L3 --- L2 --- L1\n",{"type":27,"tag":40,"props":259,"children":260},{},[261],{"type":27,"tag":66,"props":262,"children":263},{},[264],{"type":33,"value":265},"Each layer is built on the one below; an app at the top never reaches past L3.",{"type":27,"tag":267,"props":268,"children":269},"table",{},[270,304],{"type":27,"tag":271,"props":272,"children":273},"thead",{},[274],{"type":27,"tag":275,"props":276,"children":277},"tr",{},[278,284,289,294,299],{"type":27,"tag":279,"props":280,"children":281},"th",{},[282],{"type":33,"value":283},"Layer",{"type":27,"tag":279,"props":285,"children":286},{},[287],{"type":33,"value":288},"Name",{"type":27,"tag":279,"props":290,"children":291},{},[292],{"type":33,"value":293},"Responsibility",{"type":27,"tag":279,"props":295,"children":296},{},[297],{"type":33,"value":298},"Who uses it",{"type":27,"tag":279,"props":300,"children":301},{},[302],{"type":33,"value":303},"Exposed as",{"type":27,"tag":305,"props":306,"children":307},"tbody",{},[308,352,418,449],{"type":27,"tag":275,"props":309,"children":310},{},[311,319,324,329,334],{"type":27,"tag":312,"props":313,"children":314},"td",{},[315],{"type":27,"tag":44,"props":316,"children":317},{},[318],{"type":33,"value":157},{"type":27,"tag":312,"props":320,"children":321},{},[322],{"type":33,"value":323},"Consumer / app",{"type":27,"tag":312,"props":325,"children":326},{},[327],{"type":33,"value":328},"Discover + consume capabilities; node lifecycle; language bindings",{"type":27,"tag":312,"props":330,"children":331},{},[332],{"type":33,"value":333},"App developers (native desktop · embedded/MCU); language bindings",{"type":27,"tag":312,"props":335,"children":336},{},[337,342,344,350],{"type":27,"tag":44,"props":338,"children":339},{},[340],{"type":33,"value":341},"Dynamic ABI",{"type":33,"value":343}," — exported ",{"type":27,"tag":99,"props":345,"children":347},{"className":346},[],[348],{"type":33,"value":349},"legion_*",{"type":33,"value":351}," symbols",{"type":27,"tag":275,"props":353,"children":354},{},[355,362,367,379,384],{"type":27,"tag":312,"props":356,"children":357},{},[358],{"type":27,"tag":44,"props":359,"children":360},{},[361],{"type":33,"value":181},{"type":27,"tag":312,"props":363,"children":364},{},[365],{"type":33,"value":366},"Capability provider",{"type":27,"tag":312,"props":368,"children":369},{},[370,372,377],{"type":33,"value":371},"Declare + serve capabilities (declaring ",{"type":27,"tag":66,"props":373,"children":374},{},[375],{"type":33,"value":376},"is",{"type":33,"value":378}," advertising); identity/cert primitives",{"type":27,"tag":312,"props":380,"children":381},{},[382],{"type":33,"value":383},"Module authors",{"type":27,"tag":312,"props":385,"children":386},{},[387,392,394,400,402,408,410,416],{"type":27,"tag":44,"props":388,"children":389},{},[390],{"type":33,"value":391},"In-process header contract",{"type":33,"value":393}," — ",{"type":27,"tag":99,"props":395,"children":397},{"className":396},[],[398],{"type":33,"value":399},"sdk.h",{"type":33,"value":401},", ",{"type":27,"tag":99,"props":403,"children":405},{"className":404},[],[406],{"type":33,"value":407},"legion_identity.h",{"type":33,"value":409}," (hidden from the ",{"type":27,"tag":99,"props":411,"children":413},{"className":412},[],[414],{"type":33,"value":415},".so",{"type":33,"value":417},")",{"type":27,"tag":275,"props":419,"children":420},{},[421,429,434,439,444],{"type":27,"tag":312,"props":422,"children":423},{},[424],{"type":27,"tag":44,"props":425,"children":426},{},[427],{"type":33,"value":428},"L2",{"type":27,"tag":312,"props":430,"children":431},{},[432],{"type":33,"value":433},"Consensus / membership / identity",{"type":27,"tag":312,"props":435,"children":436},{},[437],{"type":33,"value":438},"Cohort agreement (consensus VM + BFT), cert-gated membership, capability advertisement",{"type":27,"tag":312,"props":440,"children":441},{},[442],{"type":33,"value":443},"Internal",{"type":27,"tag":312,"props":445,"children":446},{},[447],{"type":33,"value":448},"— (not app-facing)",{"type":27,"tag":275,"props":450,"children":451},{},[452,460,465,470,474],{"type":27,"tag":312,"props":453,"children":454},{},[455],{"type":27,"tag":44,"props":456,"children":457},{},[458],{"type":33,"value":459},"L1",{"type":27,"tag":312,"props":461,"children":462},{},[463],{"type":33,"value":464},"Transport / mesh",{"type":27,"tag":312,"props":466,"children":467},{},[468],{"type":33,"value":469},"Peer discovery, LNMP framing, bridge tunnels (WAN), encryption",{"type":27,"tag":312,"props":471,"children":472},{},[473],{"type":33,"value":443},{"type":27,"tag":312,"props":475,"children":476},{},[477],{"type":33,"value":448},{"type":27,"tag":108,"props":479,"children":481},{"id":480},"the-layers-in-detail",[482],{"type":33,"value":483},"The layers in detail",{"type":27,"tag":485,"props":486,"children":488},"h3",{"id":487},"l1-transport-mesh-foundation-req-01",[489,491],{"type":33,"value":490},"L1 — Transport / mesh ",{"type":27,"tag":66,"props":492,"children":493},{},[494],{"type":33,"value":495},"(foundation req 01)",{"type":27,"tag":40,"props":497,"children":498},{},[499,501,506,508,514,515,521],{"type":33,"value":500},"The mesh that moves bytes between nodes: LAN multicast discovery, the LNMP\nframing/wire format, WAN bridge tunnels (for class-B devices like phones behind\ncarrier NAT), and end-to-end encryption. Everything above L1 is oblivious to\n",{"type":27,"tag":66,"props":502,"children":503},{},[504],{"type":33,"value":505},"how",{"type":33,"value":507}," a peer is reached. Internal headers: ",{"type":27,"tag":99,"props":509,"children":511},{"className":510},[],[512],{"type":33,"value":513},"legion_wire.h",{"type":33,"value":401},{"type":27,"tag":99,"props":516,"children":518},{"className":517},[],[519],{"type":33,"value":520},"legion_lnmp.h",{"type":33,"value":183},{"type":27,"tag":40,"props":523,"children":524},{},[525,527,532,534,539,541,546],{"type":33,"value":526},"On the LAN, peers discover and reach each other directly (LNMP multicast). A\n",{"type":27,"tag":44,"props":528,"children":529},{},[530],{"type":33,"value":531},"class-B",{"type":33,"value":533}," device — e.g. a phone on cellular, behind carrier NAT — can't be\nreached that way, so it opens an ",{"type":27,"tag":44,"props":535,"children":536},{},[537],{"type":33,"value":538},"end-to-end-encrypted bridge tunnel",{"type":33,"value":540}," to a WAN\nrelay that forwards opaque frames to the cohort. The relay is ",{"type":27,"tag":44,"props":542,"children":543},{},[544],{"type":33,"value":545},"untrusted",{"type":33,"value":547},": it\nroutes bytes it cannot read, and it takes no part in consensus.",{"type":27,"tag":197,"props":549,"children":551},{"className":199,"code":550,"language":201,"meta":21,"style":21},"flowchart LR\n    subgraph lan[\"Home LAN — direct peers\"]\n        D[\"Desktop\"]\n        S[\"Server\"]\n        K[\"Speaker\"]\n        D \u003C-->|\"LNMP multicast\"| S\n        D \u003C--> K\n        S \u003C--> K\n    end\n    P[\"Phone · 4G\u003Cbr/>\u003Ci>class-B — behind carrier NAT,\u003Cbr/>no multicast\u003C/i>\"]\n    R{{\"WAN relay\u003Cbr/>\u003Ci>untrusted · consensus-blind\u003Cbr/>forwards opaque frames\u003C/i>\"}}\n    P \u003C-->|\"bridge tunnel · E2E encrypted\"| R\n    R \u003C-->|\"delivers to the cohort\"| S\n",[552],{"type":27,"tag":99,"props":553,"children":554},{"__ignoreMap":21},[555,563,571,579,587,595,603,612,621,630,639,648,657],{"type":27,"tag":207,"props":556,"children":557},{"class":209,"line":11},[558],{"type":27,"tag":207,"props":559,"children":560},{},[561],{"type":33,"value":562},"flowchart LR\n",{"type":27,"tag":207,"props":564,"children":565},{"class":209,"line":7},[566],{"type":27,"tag":207,"props":567,"children":568},{},[569],{"type":33,"value":570},"    subgraph lan[\"Home LAN — direct peers\"]\n",{"type":27,"tag":207,"props":572,"children":573},{"class":209,"line":15},[574],{"type":27,"tag":207,"props":575,"children":576},{},[577],{"type":33,"value":578},"        D[\"Desktop\"]\n",{"type":27,"tag":207,"props":580,"children":581},{"class":209,"line":19},[582],{"type":27,"tag":207,"props":583,"children":584},{},[585],{"type":33,"value":586},"        S[\"Server\"]\n",{"type":27,"tag":207,"props":588,"children":589},{"class":209,"line":242},[590],{"type":27,"tag":207,"props":591,"children":592},{},[593],{"type":33,"value":594},"        K[\"Speaker\"]\n",{"type":27,"tag":207,"props":596,"children":597},{"class":209,"line":251},[598],{"type":27,"tag":207,"props":599,"children":600},{},[601],{"type":33,"value":602},"        D \u003C-->|\"LNMP multicast\"| S\n",{"type":27,"tag":207,"props":604,"children":606},{"class":209,"line":605},7,[607],{"type":27,"tag":207,"props":608,"children":609},{},[610],{"type":33,"value":611},"        D \u003C--> K\n",{"type":27,"tag":207,"props":613,"children":615},{"class":209,"line":614},8,[616],{"type":27,"tag":207,"props":617,"children":618},{},[619],{"type":33,"value":620},"        S \u003C--> K\n",{"type":27,"tag":207,"props":622,"children":624},{"class":209,"line":623},9,[625],{"type":27,"tag":207,"props":626,"children":627},{},[628],{"type":33,"value":629},"    end\n",{"type":27,"tag":207,"props":631,"children":633},{"class":209,"line":632},10,[634],{"type":27,"tag":207,"props":635,"children":636},{},[637],{"type":33,"value":638},"    P[\"Phone · 4G\u003Cbr/>\u003Ci>class-B — behind carrier NAT,\u003Cbr/>no multicast\u003C/i>\"]\n",{"type":27,"tag":207,"props":640,"children":642},{"class":209,"line":641},11,[643],{"type":27,"tag":207,"props":644,"children":645},{},[646],{"type":33,"value":647},"    R{{\"WAN relay\u003Cbr/>\u003Ci>untrusted · consensus-blind\u003Cbr/>forwards opaque frames\u003C/i>\"}}\n",{"type":27,"tag":207,"props":649,"children":651},{"class":209,"line":650},12,[652],{"type":27,"tag":207,"props":653,"children":654},{},[655],{"type":33,"value":656},"    P \u003C-->|\"bridge tunnel · E2E encrypted\"| R\n",{"type":27,"tag":207,"props":658,"children":660},{"class":209,"line":659},13,[661],{"type":27,"tag":207,"props":662,"children":663},{},[664],{"type":33,"value":665},"    R \u003C-->|\"delivers to the cohort\"| S\n",{"type":27,"tag":485,"props":667,"children":669},{"id":668},"l2-consensus-membership-identity-foundation-req-02-03-07",[670,672],{"type":33,"value":671},"L2 — Consensus, membership & identity ",{"type":27,"tag":66,"props":673,"children":674},{},[675],{"type":33,"value":676},"(foundation req 02, 03, 07)",{"type":27,"tag":40,"props":678,"children":679},{},[680,682,687,689,694,696,702,704,709],{"type":33,"value":681},"The agreement-and-trust layer. A cert-gated ",{"type":27,"tag":44,"props":683,"children":684},{},[685],{"type":33,"value":686},"membership",{"type":33,"value":688}," model (master →\nauth-node → service-node certificate chains, req 07) decides who is in a cohort;\na ",{"type":27,"tag":44,"props":690,"children":691},{},[692],{"type":33,"value":693},"consensus VM + BFT engine",{"type":33,"value":695}," (req 02/03) give the cohort a convergent, ordered\nview of shared state — including which capabilities each member advertises.\nInternal header: ",{"type":27,"tag":99,"props":697,"children":699},{"className":698},[],[700],{"type":33,"value":701},"legion_vm.h",{"type":33,"value":703},". Apps and modules never call this directly; they\nsee only its ",{"type":27,"tag":66,"props":705,"children":706},{},[707],{"type":33,"value":708},"effects",{"type":33,"value":710}," (a peer's capabilities appear; a write converges).",{"type":27,"tag":40,"props":712,"children":713},{},[714,716,721],{"type":33,"value":715},"Membership is ",{"type":27,"tag":44,"props":717,"children":718},{},[719],{"type":33,"value":720},"cert-gated",{"type":33,"value":722},": a master signs an auth-node, which admits members\nby signing service-node certificates. A node is in the cohort only if it presents\na certificate that chains to the cohort master.",{"type":27,"tag":197,"props":724,"children":726},{"className":199,"code":725,"language":201,"meta":21,"style":21},"flowchart TB\n    M[\"Master\u003Cbr/>\u003Ci>cohort root of trust\u003C/i>\"]\n    AN[\"Auth-node\u003Cbr/>\u003Ci>admits members\u003C/i>\"]\n    SN[\"Service-node\u003Cbr/>\u003Ci>a device · capability provider\u003C/i>\"]\n    M -->|signs cert| AN\n    AN -->|signs cert| SN\n    M -.->|may sign directly| SN\n",[727],{"type":27,"tag":99,"props":728,"children":729},{"__ignoreMap":21},[730,737,745,753,761,769,777],{"type":27,"tag":207,"props":731,"children":732},{"class":209,"line":11},[733],{"type":27,"tag":207,"props":734,"children":735},{},[736],{"type":33,"value":215},{"type":27,"tag":207,"props":738,"children":739},{"class":209,"line":7},[740],{"type":27,"tag":207,"props":741,"children":742},{},[743],{"type":33,"value":744},"    M[\"Master\u003Cbr/>\u003Ci>cohort root of trust\u003C/i>\"]\n",{"type":27,"tag":207,"props":746,"children":747},{"class":209,"line":15},[748],{"type":27,"tag":207,"props":749,"children":750},{},[751],{"type":33,"value":752},"    AN[\"Auth-node\u003Cbr/>\u003Ci>admits members\u003C/i>\"]\n",{"type":27,"tag":207,"props":754,"children":755},{"class":209,"line":19},[756],{"type":27,"tag":207,"props":757,"children":758},{},[759],{"type":33,"value":760},"    SN[\"Service-node\u003Cbr/>\u003Ci>a device · capability provider\u003C/i>\"]\n",{"type":27,"tag":207,"props":762,"children":763},{"class":209,"line":242},[764],{"type":27,"tag":207,"props":765,"children":766},{},[767],{"type":33,"value":768},"    M -->|signs cert| AN\n",{"type":27,"tag":207,"props":770,"children":771},{"class":209,"line":251},[772],{"type":27,"tag":207,"props":773,"children":774},{},[775],{"type":33,"value":776},"    AN -->|signs cert| SN\n",{"type":27,"tag":207,"props":778,"children":779},{"class":209,"line":605},[780],{"type":27,"tag":207,"props":781,"children":782},{},[783],{"type":33,"value":784},"    M -.->|may sign directly| SN\n",{"type":27,"tag":40,"props":786,"children":787},{},[788,790,795,797,802,804,809,811,817,819,824,826,832,834,839],{"type":33,"value":789},"Identity is ",{"type":27,"tag":44,"props":791,"children":792},{},[793],{"type":33,"value":794},"single-seed at the root",{"type":33,"value":796},": a member's ",{"type":27,"tag":44,"props":798,"children":799},{},[800],{"type":33,"value":801},"master",{"type":33,"value":803}," identity derives\nfrom ",{"type":27,"tag":44,"props":805,"children":806},{},[807],{"type":33,"value":808},"one BIP-39 seed",{"type":33,"value":810}," through a SLIP-0010 HD tree (",{"type":27,"tag":99,"props":812,"children":814},{"className":813},[],[815],{"type":33,"value":816},"did:legion:user:…",{"type":33,"value":818},") — the\nwhole fleet's root of trust. Each node carries its ",{"type":27,"tag":44,"props":820,"children":821},{},[822],{"type":33,"value":823},"own",{"type":33,"value":825}," Ed25519 keypair and\n",{"type":27,"tag":99,"props":827,"children":829},{"className":828},[],[830],{"type":33,"value":831},"did:legion:node:…",{"type":33,"value":833}," DID (not seed-derived); the master signs it a service\ncertificate ",{"type":27,"tag":44,"props":835,"children":836},{},[837],{"type":33,"value":838},"offline",{"type":33,"value":840}," to admit it, so a node proves cohort membership without\ncontacting any online authority. One mnemonic backs up the root that authorises\nthe entire fleet.",{"type":27,"tag":197,"props":842,"children":844},{"className":199,"code":843,"language":201,"meta":21,"style":21},"flowchart TB\n    SEED[\"\u003Cb>One BIP-39 seed\u003C/b>\u003Cbr/>\u003Ci>a single mnemonic\u003C/i>\"]\n    SEED --> HD[\"SLIP-0010 HD derivation\"]\n    HD --> MK[\"\u003Cb>Master\u003C/b> identity\u003Cbr/>\u003Ci>did:legion:user:… — cohort root of trust\u003C/i>\"]\n    P[\"Phone\u003Cbr/>\u003Ci>own Ed25519 key · did:legion:node:…\u003C/i>\"]\n    D[\"Desktop\u003Cbr/>\u003Ci>own Ed25519 key · did:legion:node:…\u003C/i>\"]\n    K[\"Speaker\u003Cbr/>\u003Ci>own Ed25519 key · did:legion:node:…\u003C/i>\"]\n    MK -->|signs service cert| P\n    MK -->|signs service cert| D\n    MK -->|signs service cert| K\n",[845],{"type":27,"tag":99,"props":846,"children":847},{"__ignoreMap":21},[848,855,863,871,879,887,895,903,911,919],{"type":27,"tag":207,"props":849,"children":850},{"class":209,"line":11},[851],{"type":27,"tag":207,"props":852,"children":853},{},[854],{"type":33,"value":215},{"type":27,"tag":207,"props":856,"children":857},{"class":209,"line":7},[858],{"type":27,"tag":207,"props":859,"children":860},{},[861],{"type":33,"value":862},"    SEED[\"\u003Cb>One BIP-39 seed\u003C/b>\u003Cbr/>\u003Ci>a single mnemonic\u003C/i>\"]\n",{"type":27,"tag":207,"props":864,"children":865},{"class":209,"line":15},[866],{"type":27,"tag":207,"props":867,"children":868},{},[869],{"type":33,"value":870},"    SEED --> HD[\"SLIP-0010 HD derivation\"]\n",{"type":27,"tag":207,"props":872,"children":873},{"class":209,"line":19},[874],{"type":27,"tag":207,"props":875,"children":876},{},[877],{"type":33,"value":878},"    HD --> MK[\"\u003Cb>Master\u003C/b> identity\u003Cbr/>\u003Ci>did:legion:user:… — cohort root of trust\u003C/i>\"]\n",{"type":27,"tag":207,"props":880,"children":881},{"class":209,"line":242},[882],{"type":27,"tag":207,"props":883,"children":884},{},[885],{"type":33,"value":886},"    P[\"Phone\u003Cbr/>\u003Ci>own Ed25519 key · did:legion:node:…\u003C/i>\"]\n",{"type":27,"tag":207,"props":888,"children":889},{"class":209,"line":251},[890],{"type":27,"tag":207,"props":891,"children":892},{},[893],{"type":33,"value":894},"    D[\"Desktop\u003Cbr/>\u003Ci>own Ed25519 key · did:legion:node:…\u003C/i>\"]\n",{"type":27,"tag":207,"props":896,"children":897},{"class":209,"line":605},[898],{"type":27,"tag":207,"props":899,"children":900},{},[901],{"type":33,"value":902},"    K[\"Speaker\u003Cbr/>\u003Ci>own Ed25519 key · did:legion:node:…\u003C/i>\"]\n",{"type":27,"tag":207,"props":904,"children":905},{"class":209,"line":614},[906],{"type":27,"tag":207,"props":907,"children":908},{},[909],{"type":33,"value":910},"    MK -->|signs service cert| P\n",{"type":27,"tag":207,"props":912,"children":913},{"class":209,"line":623},[914],{"type":27,"tag":207,"props":915,"children":916},{},[917],{"type":33,"value":918},"    MK -->|signs service cert| D\n",{"type":27,"tag":207,"props":920,"children":921},{"class":209,"line":632},[922],{"type":27,"tag":207,"props":923,"children":924},{},[925],{"type":33,"value":926},"    MK -->|signs service cert| K\n",{"type":27,"tag":485,"props":928,"children":930},{"id":929},"l3-capability-provider-surface-foundation-req-04-05-08",[931,933],{"type":33,"value":932},"L3 — Capability provider surface ",{"type":27,"tag":66,"props":934,"children":935},{},[936],{"type":33,"value":937},"(foundation req 04, 05, 08)",{"type":27,"tag":40,"props":939,"children":940},{},[941,943,948,950,956,958,963,965,976,978,983,985,991,993,998,1000,1006,1007,1013,1014,1020,1021,1027,1029,1035,1037,1042],{"type":33,"value":942},"What a ",{"type":27,"tag":44,"props":944,"children":945},{},[946],{"type":33,"value":947},"module author",{"type":33,"value":949}," writes against. A module declares the capabilities it\nprovides (",{"type":27,"tag":99,"props":951,"children":953},{"className":952},[],[954],{"type":33,"value":955},"provided_caps",{"type":33,"value":957},"), implements their method handlers, and — once its\nnode is certified — those capabilities are ",{"type":27,"tag":44,"props":959,"children":960},{},[961],{"type":33,"value":962},"automatically advertised",{"type":33,"value":964}," on\nconsensus + the signed beacon. ",{"type":27,"tag":44,"props":966,"children":967},{},[968,970,974],{"type":33,"value":969},"Declaring a capability ",{"type":27,"tag":66,"props":971,"children":972},{},[973],{"type":33,"value":376},{"type":33,"value":975}," advertising it",{"type":33,"value":977},";\nthere is no separate \"publish\" step, and apps never advertise — advertising is\npurely a provider (L3) concern, driven by a certified module's ",{"type":27,"tag":99,"props":979,"children":981},{"className":980},[],[982],{"type":33,"value":955},{"type":33,"value":984},".\nA capability is a ",{"type":27,"tag":99,"props":986,"children":988},{"className":987},[],[989],{"type":33,"value":990},"(name, semantic)",{"type":33,"value":992}," pair (req 08), where the semantic is one of\na ",{"type":27,"tag":44,"props":994,"children":995},{},[996],{"type":33,"value":997},"closed set",{"type":33,"value":999}," (",{"type":27,"tag":99,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":33,"value":1005},"replicate",{"type":33,"value":401},{"type":27,"tag":99,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":33,"value":1012},"any_one",{"type":33,"value":401},{"type":27,"tag":99,"props":1015,"children":1017},{"className":1016},[],[1018],{"type":33,"value":1019},"specific",{"type":33,"value":401},{"type":27,"tag":99,"props":1022,"children":1024},{"className":1023},[],[1025],{"type":33,"value":1026},"follow_focus",{"type":33,"value":1028},") — e.g.\n",{"type":27,"tag":99,"props":1030,"children":1032},{"className":1031},[],[1033],{"type":33,"value":1034},"ai.stt.transcribe",{"type":33,"value":1036}," declared ",{"type":27,"tag":99,"props":1038,"children":1040},{"className":1039},[],[1041],{"type":33,"value":1012},{"type":33,"value":183},{"type":27,"tag":40,"props":1044,"children":1045},{},[1046,1048,1053,1055,1060,1062,1073,1075,1081,1083,1089,1091,1096,1098,1104,1106,1112,1114,1120,1122,1133,1135,1143],{"type":33,"value":1047},"L3 lives in ",{"type":27,"tag":99,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":33,"value":399},{"type":33,"value":1054}," (module register/dispatch, the L3 KV wrapper, caps &\nmembership queries) and ",{"type":27,"tag":99,"props":1056,"children":1058},{"className":1057},[],[1059],{"type":33,"value":407},{"type":33,"value":1061}," (cert/identity primitives). ",{"type":27,"tag":44,"props":1063,"children":1064},{},[1065,1067,1071],{"type":33,"value":1066},"These\nare an in-process header contract, ",{"type":27,"tag":66,"props":1068,"children":1069},{},[1070],{"type":33,"value":193},{"type":33,"value":1072}," part of the dynamic ABI",{"type":33,"value":1074}," — the host\nruntime/tool links the static ",{"type":27,"tag":99,"props":1076,"children":1078},{"className":1077},[],[1079],{"type":33,"value":1080},"liblegion.a",{"type":33,"value":1082}," with ",{"type":27,"tag":99,"props":1084,"children":1086},{"className":1085},[],[1087],{"type":33,"value":1088},"--whole-archive --export-dynamic",{"type":33,"value":1090},", so the L3 symbols live in the ",{"type":27,"tag":44,"props":1092,"children":1093},{},[1094],{"type":33,"value":1095},"host executable's",{"type":33,"value":1097}," dynamic\nsymbol table. A built-in module resolves them directly; a dynamically-loaded\n(",{"type":27,"tag":99,"props":1099,"children":1101},{"className":1100},[],[1102],{"type":33,"value":1103},"dlopen",{"type":33,"value":1105},") module resolves them against that host executable at load time (its\n",{"type":27,"tag":99,"props":1107,"children":1109},{"className":1108},[],[1110],{"type":33,"value":1111},"init",{"type":33,"value":1113}," receives a ",{"type":27,"tag":99,"props":1115,"children":1117},{"className":1116},[],[1118],{"type":33,"value":1119},"legion_plugin_manager_t *",{"type":33,"value":1121}," handle to register against). They\nstay ",{"type":27,"tag":44,"props":1123,"children":1124},{},[1125,1127],{"type":33,"value":1126},"hidden in ",{"type":27,"tag":99,"props":1128,"children":1130},{"className":1129},[],[1131],{"type":33,"value":1132},"liblegion.so",{"type":33,"value":1134},", which is the L4 surface. (See ",{"type":27,"tag":95,"props":1136,"children":1137},{"href":5},[1138],{"type":27,"tag":99,"props":1139,"children":1141},{"className":1140},[],[1142],{"type":33,"value":104},{"type":33,"value":1144},".)",{"type":27,"tag":485,"props":1146,"children":1148},{"id":1147},"l4-consumer-application-surface-foundation-req-06",[1149,1151],{"type":33,"value":1150},"L4 — Consumer / application surface ",{"type":27,"tag":66,"props":1152,"children":1153},{},[1154],{"type":33,"value":1155},"(foundation req 06)",{"type":27,"tag":40,"props":1157,"children":1158},{},[1159,1161,1166],{"type":33,"value":1160},"What an ",{"type":27,"tag":44,"props":1162,"children":1163},{},[1164],{"type":33,"value":1165},"app developer",{"type":33,"value":1167}," (or a language binding) works against. An app:",{"type":27,"tag":139,"props":1169,"children":1170},{},[1171,1198,1210],{"type":27,"tag":143,"props":1172,"children":1173},{},[1174,1176,1182,1183,1189,1190,1196],{"type":33,"value":1175},"manages a node's lifecycle (",{"type":27,"tag":99,"props":1177,"children":1179},{"className":1178},[],[1180],{"type":33,"value":1181},"legion_node_create_from_file",{"type":33,"value":401},{"type":27,"tag":99,"props":1184,"children":1186},{"className":1185},[],[1187],{"type":33,"value":1188},"_start",{"type":33,"value":401},{"type":27,"tag":99,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":33,"value":1195},"_stop",{"type":33,"value":1197},"),",{"type":27,"tag":143,"props":1199,"children":1200},{},[1201,1203,1208],{"type":33,"value":1202},"discovers available capabilities and ",{"type":27,"tag":44,"props":1204,"children":1205},{},[1206],{"type":33,"value":1207},"consumes",{"type":33,"value":1209}," them via callbacks,",{"type":27,"tag":143,"props":1211,"children":1212},{},[1213],{"type":33,"value":1214},"and never touches consensus, BFT, or LNMP.",{"type":27,"tag":40,"props":1216,"children":1217},{},[1218,1220,1225,1227,1232,1234,1240,1242,1248,1250,1256,1258,1264,1266,1271,1273,1278,1280,1288],{"type":33,"value":1219},"L4 is the ",{"type":27,"tag":44,"props":1221,"children":1222},{},[1223],{"type":33,"value":1224},"dynamic ABI",{"type":33,"value":1226},": the ~131 exported ",{"type":27,"tag":99,"props":1228,"children":1230},{"className":1229},[],[1231],{"type":33,"value":349},{"type":33,"value":1233}," symbols across ",{"type":27,"tag":99,"props":1235,"children":1237},{"className":1236},[],[1238],{"type":33,"value":1239},"legion.h",{"type":33,"value":1241},"\n(version/logging/config), ",{"type":27,"tag":99,"props":1243,"children":1245},{"className":1244},[],[1246],{"type":33,"value":1247},"l4_node.h",{"type":33,"value":1249}," (node lifecycle), and the ",{"type":27,"tag":99,"props":1251,"children":1253},{"className":1252},[],[1254],{"type":33,"value":1255},"legion_ffi_*.h",{"type":33,"value":1257},"\nfamily (audio, bridge, connection, display, focus, identity, js, node, objectstore — plus the\n",{"type":27,"tag":99,"props":1259,"children":1261},{"className":1260},[],[1262],{"type":33,"value":1263},"legion_ffi.h",{"type":33,"value":1265}," binding helpers). This is the ",{"type":27,"tag":44,"props":1267,"children":1268},{},[1269],{"type":33,"value":1270},"native C ABI any consumer links\nagainst",{"type":33,"value":1272}," — native desktop applications, embedded / microcontroller targets, and\nlanguage bindings alike — and it is the sovereignty boundary. (The Android NDK\nvoice-loop app was the first proof-of-concept exercising L1–L4 end to end;\nAndroid is ",{"type":27,"tag":66,"props":1274,"children":1275},{},[1276],{"type":33,"value":1277},"one",{"type":33,"value":1279}," consumer, not a constraint.) Full inventory + stability status\nin ",{"type":27,"tag":95,"props":1281,"children":1282},{"href":5},[1283],{"type":27,"tag":99,"props":1284,"children":1286},{"className":1285},[],[1287],{"type":33,"value":104},{"type":33,"value":183},{"type":27,"tag":108,"props":1290,"children":1292},{"id":1291},"provider-consumer-not-client-server",[1293],{"type":33,"value":1294},"Provider & consumer — not client & server",{"type":27,"tag":40,"props":1296,"children":1297},{},[1298,1300,1305,1306,1311,1313,1318,1320,1325,1327,1332,1334,1338],{"type":33,"value":1299},"L3 and L4 are ",{"type":27,"tag":44,"props":1301,"children":1302},{},[1303],{"type":33,"value":1304},"provider",{"type":33,"value":57},{"type":27,"tag":44,"props":1307,"children":1308},{},[1309],{"type":33,"value":1310},"consumer",{"type":33,"value":1312}," roles, not a client/server split. A\nsingle process commonly wears ",{"type":27,"tag":44,"props":1314,"children":1315},{},[1316],{"type":33,"value":1317},"both hats",{"type":33,"value":1319},": the on-device voice-loop app\n",{"type":27,"tag":66,"props":1321,"children":1322},{},[1323],{"type":33,"value":1324},"provides",{"type":33,"value":1326}," microphone/playback capabilities (L3) ",{"type":27,"tag":44,"props":1328,"children":1329},{},[1330],{"type":33,"value":1331},"and",{"type":33,"value":1333}," ",{"type":27,"tag":66,"props":1335,"children":1336},{},[1337],{"type":33,"value":1207},{"type":33,"value":1339}," remote\nspeech-to-text, LLM, and text-to-speech capabilities (L4) — all in one process,\nno separate service. The mesh makes \"local capability\" and \"a cohort peer's\ncapability\" look the same to the consumer.",{"type":27,"tag":108,"props":1341,"children":1343},{"id":1342},"how-a-capability-flows-the-layers-in-motion",[1344],{"type":33,"value":1345},"How a capability flows (the layers in motion)",{"type":27,"tag":40,"props":1347,"children":1348},{},[1349],{"type":27,"tag":44,"props":1350,"children":1351},{},[1352],{"type":33,"value":1353},"Provider side (a module on node B):",{"type":27,"tag":1355,"props":1356,"children":1357},"ol",{},[1358,1375,1386],{"type":27,"tag":143,"props":1359,"children":1360},{},[1361,1363,1368,1370,1374],{"type":33,"value":1362},"The module declares ",{"type":27,"tag":99,"props":1364,"children":1366},{"className":1365},[],[1367],{"type":33,"value":955},{"type":33,"value":1369}," and implements handlers — ",{"type":27,"tag":44,"props":1371,"children":1372},{},[1373],{"type":33,"value":181},{"type":33,"value":183},{"type":27,"tag":143,"props":1376,"children":1377},{},[1378,1380,1385],{"type":33,"value":1379},"Node B's certificate authorises those caps — ",{"type":27,"tag":44,"props":1381,"children":1382},{},[1383],{"type":33,"value":1384},"L2 (identity/membership)",{"type":33,"value":183},{"type":27,"tag":143,"props":1387,"children":1388},{},[1389,1391,1395],{"type":33,"value":1390},"The caps are advertised on consensus + the signed beacon — ",{"type":27,"tag":44,"props":1392,"children":1393},{},[1394],{"type":33,"value":428},{"type":33,"value":183},{"type":27,"tag":40,"props":1397,"children":1398},{},[1399],{"type":27,"tag":44,"props":1400,"children":1401},{},[1402],{"type":33,"value":1403},"Consumer side (an app on node A):",{"type":27,"tag":1355,"props":1405,"children":1406},{},[1407,1417,1427],{"type":27,"tag":143,"props":1408,"children":1409},{},[1410,1412,1416],{"type":33,"value":1411},"The app discovers B's capability (via an L4 callback) — ",{"type":27,"tag":44,"props":1413,"children":1414},{},[1415],{"type":33,"value":157},{"type":33,"value":183},{"type":27,"tag":143,"props":1418,"children":1419},{},[1420,1422,1426],{"type":33,"value":1421},"It invokes the capability; the request is routed over the mesh to B — ",{"type":27,"tag":44,"props":1423,"children":1424},{},[1425],{"type":33,"value":459},{"type":33,"value":183},{"type":27,"tag":143,"props":1428,"children":1429},{},[1430,1432,1436],{"type":33,"value":1431},"B's L3 handler runs; the result returns to A's callback — ",{"type":27,"tag":44,"props":1433,"children":1434},{},[1435],{"type":33,"value":157},{"type":33,"value":183},{"type":27,"tag":40,"props":1438,"children":1439},{},[1440],{"type":33,"value":1441},"The app at A sees only steps 1 and 3 (L4). Discovery, ordering, trust, and\ntransport (L1/L2) are handled beneath it.",{"type":27,"tag":197,"props":1443,"children":1445},{"className":199,"code":1444,"language":201,"meta":21,"style":21},"sequenceDiagram\n    autonumber\n    participant A as App · node A (L4)\n    participant N as Mesh · L1 / consensus L2\n    participant B as Module · node B (L3)\n    Note over N,B: B declares provided_caps — its cert authorises them,\u003Cbr/>caps advertised on consensus + the signed beacon\n    A->>N: discover B's capability\n    N-->>A: available — L4 callback\n    A->>N: invoke capability\n    N->>B: route request over the mesh (L1)\n    B->>B: L3 handler runs\n    B-->>A: result → A's callback (L4)\n    Note over A: A sees only discover + result (both L4)\n",[1446],{"type":27,"tag":99,"props":1447,"children":1448},{"__ignoreMap":21},[1449,1457,1465,1473,1481,1489,1497,1505,1513,1521,1529,1537,1545],{"type":27,"tag":207,"props":1450,"children":1451},{"class":209,"line":11},[1452],{"type":27,"tag":207,"props":1453,"children":1454},{},[1455],{"type":33,"value":1456},"sequenceDiagram\n",{"type":27,"tag":207,"props":1458,"children":1459},{"class":209,"line":7},[1460],{"type":27,"tag":207,"props":1461,"children":1462},{},[1463],{"type":33,"value":1464},"    autonumber\n",{"type":27,"tag":207,"props":1466,"children":1467},{"class":209,"line":15},[1468],{"type":27,"tag":207,"props":1469,"children":1470},{},[1471],{"type":33,"value":1472},"    participant A as App · node A (L4)\n",{"type":27,"tag":207,"props":1474,"children":1475},{"class":209,"line":19},[1476],{"type":27,"tag":207,"props":1477,"children":1478},{},[1479],{"type":33,"value":1480},"    participant N as Mesh · L1 / consensus L2\n",{"type":27,"tag":207,"props":1482,"children":1483},{"class":209,"line":242},[1484],{"type":27,"tag":207,"props":1485,"children":1486},{},[1487],{"type":33,"value":1488},"    participant B as Module · node B (L3)\n",{"type":27,"tag":207,"props":1490,"children":1491},{"class":209,"line":251},[1492],{"type":27,"tag":207,"props":1493,"children":1494},{},[1495],{"type":33,"value":1496},"    Note over N,B: B declares provided_caps — its cert authorises them,\u003Cbr/>caps advertised on consensus + the signed beacon\n",{"type":27,"tag":207,"props":1498,"children":1499},{"class":209,"line":605},[1500],{"type":27,"tag":207,"props":1501,"children":1502},{},[1503],{"type":33,"value":1504},"    A->>N: discover B's capability\n",{"type":27,"tag":207,"props":1506,"children":1507},{"class":209,"line":614},[1508],{"type":27,"tag":207,"props":1509,"children":1510},{},[1511],{"type":33,"value":1512},"    N-->>A: available — L4 callback\n",{"type":27,"tag":207,"props":1514,"children":1515},{"class":209,"line":623},[1516],{"type":27,"tag":207,"props":1517,"children":1518},{},[1519],{"type":33,"value":1520},"    A->>N: invoke capability\n",{"type":27,"tag":207,"props":1522,"children":1523},{"class":209,"line":632},[1524],{"type":27,"tag":207,"props":1525,"children":1526},{},[1527],{"type":33,"value":1528},"    N->>B: route request over the mesh (L1)\n",{"type":27,"tag":207,"props":1530,"children":1531},{"class":209,"line":641},[1532],{"type":27,"tag":207,"props":1533,"children":1534},{},[1535],{"type":33,"value":1536},"    B->>B: L3 handler runs\n",{"type":27,"tag":207,"props":1538,"children":1539},{"class":209,"line":650},[1540],{"type":27,"tag":207,"props":1541,"children":1542},{},[1543],{"type":33,"value":1544},"    B-->>A: result → A's callback (L4)\n",{"type":27,"tag":207,"props":1546,"children":1547},{"class":209,"line":659},[1548],{"type":27,"tag":207,"props":1549,"children":1550},{},[1551],{"type":33,"value":1552},"    Note over A: A sees only discover + result (both L4)\n",{"type":27,"tag":108,"props":1554,"children":1556},{"id":1555},"layers-vs-tiers-do-not-confuse-them",[1557],{"type":33,"value":1558},"Layers vs Tiers — do not confuse them",{"type":27,"tag":40,"props":1560,"children":1561},{},[1562,1564,1569,1571,1576],{"type":33,"value":1563},"Legion has ",{"type":27,"tag":44,"props":1565,"children":1566},{},[1567],{"type":33,"value":1568},"two",{"type":33,"value":1570}," distinct \"4-part\" models, and they are ",{"type":27,"tag":44,"props":1572,"children":1573},{},[1574],{"type":33,"value":1575},"orthogonal",{"type":33,"value":1577},":",{"type":27,"tag":267,"props":1579,"children":1580},{},[1581,1619],{"type":27,"tag":271,"props":1582,"children":1583},{},[1584],{"type":27,"tag":275,"props":1585,"children":1586},{},[1587,1590,1602],{"type":27,"tag":279,"props":1588,"children":1589},{},[],{"type":27,"tag":279,"props":1591,"children":1592},{},[1593,1595,1600],{"type":33,"value":1594},"The 4 ",{"type":27,"tag":44,"props":1596,"children":1597},{},[1598],{"type":33,"value":1599},"layers",{"type":33,"value":1601}," (this doc)",{"type":27,"tag":279,"props":1603,"children":1604},{},[1605,1606,1611,1612,1618],{"type":33,"value":1594},{"type":27,"tag":44,"props":1607,"children":1608},{},[1609],{"type":33,"value":1610},"tiers",{"type":33,"value":999},{"type":27,"tag":99,"props":1613,"children":1615},{"className":1614},[],[1616],{"type":33,"value":1617},"specs/05_tiers.md",{"type":33,"value":417},{"type":27,"tag":305,"props":1620,"children":1621},{},[1622,1640,1658],{"type":27,"tag":275,"props":1623,"children":1624},{},[1625,1630,1635],{"type":27,"tag":312,"props":1626,"children":1627},{},[1628],{"type":33,"value":1629},"What it is",{"type":27,"tag":312,"props":1631,"children":1632},{},[1633],{"type":33,"value":1634},"API abstraction stack",{"type":27,"tag":312,"props":1636,"children":1637},{},[1638],{"type":33,"value":1639},"Data-placement / privacy policy",{"type":27,"tag":275,"props":1641,"children":1642},{},[1643,1648,1653],{"type":27,"tag":312,"props":1644,"children":1645},{},[1646],{"type":33,"value":1647},"Values",{"type":27,"tag":312,"props":1649,"children":1650},{},[1651],{"type":33,"value":1652},"L1 transport · L2 consensus · L3 provider · L4 consumer",{"type":27,"tag":312,"props":1654,"children":1655},{},[1656],{"type":33,"value":1657},"T0 Sovereign · T1 Pragmatic · T2 Group · T3 Interface",{"type":27,"tag":275,"props":1659,"children":1660},{},[1661,1666,1676],{"type":27,"tag":312,"props":1662,"children":1663},{},[1664],{"type":33,"value":1665},"Applies to",{"type":27,"tag":312,"props":1667,"children":1668},{},[1669,1674],{"type":27,"tag":66,"props":1670,"children":1671},{},[1672],{"type":33,"value":1673},"Code",{"type":33,"value":1675}," (which API you call)",{"type":27,"tag":312,"props":1677,"children":1678},{},[1679,1684],{"type":27,"tag":66,"props":1680,"children":1681},{},[1682],{"type":33,"value":1683},"Data & capabilities",{"type":33,"value":1685}," (where they may live / who may reach them)",{"type":27,"tag":40,"props":1687,"children":1688},{},[1689,1691,1695,1697,1702,1704,1710,1712,1718,1720,1725,1727,1732],{"type":33,"value":1690},"The ",{"type":27,"tag":44,"props":1692,"children":1693},{},[1694],{"type":33,"value":1610},{"type":33,"value":1696}," classify how sensitive a piece of data or a capability is and where\nit may travel — Sovereign (private, air-gapped) → Pragmatic (controlled) → Group\n(shared on the local cohort) → Interface (public/external). The tier travels with\ndata and capabilities through the API as a tier ",{"type":27,"tag":66,"props":1698,"children":1699},{},[1700],{"type":33,"value":1701},"level",{"type":33,"value":1703}," (e.g. a method's\n",{"type":27,"tag":99,"props":1705,"children":1707},{"className":1706},[],[1708],{"type":33,"value":1709},"min_tier",{"type":33,"value":1711},", a dispatch's ",{"type":27,"tag":99,"props":1713,"children":1715},{"className":1714},[],[1716],{"type":33,"value":1717},"caller_tier",{"type":33,"value":1719},", a tiered L3 KV write) and is a per-node,\ncert-gated policy — enforced ",{"type":27,"tag":66,"props":1721,"children":1722},{},[1723],{"type":33,"value":1724},"within",{"type":33,"value":1726}," the layers, not as a layer of its own. The\ndetailed cross-tier movement policy is specified in ",{"type":27,"tag":99,"props":1728,"children":1730},{"className":1729},[],[1731],{"type":33,"value":1617},{"type":33,"value":183},{"type":27,"tag":108,"props":1734,"children":1736},{"id":1735},"the-public-api-surface-what-you-link-against",[1737],{"type":33,"value":1738},"The public API surface (what you link against)",{"type":27,"tag":267,"props":1740,"children":1741},{},[1742,1768],{"type":27,"tag":271,"props":1743,"children":1744},{},[1745],{"type":27,"tag":275,"props":1746,"children":1747},{},[1748,1753,1758,1763],{"type":27,"tag":279,"props":1749,"children":1750},{},[1751],{"type":33,"value":1752},"Surface",{"type":27,"tag":279,"props":1754,"children":1755},{},[1756],{"type":33,"value":1757},"Headers",{"type":27,"tag":279,"props":1759,"children":1760},{},[1761],{"type":33,"value":1762},"Linkage",{"type":27,"tag":279,"props":1764,"children":1765},{},[1766],{"type":33,"value":1767},"Audience",{"type":27,"tag":305,"props":1769,"children":1770},{},[1771,1827,1867],{"type":27,"tag":275,"props":1772,"children":1773},{},[1774,1782,1803,1822],{"type":27,"tag":312,"props":1775,"children":1776},{},[1777],{"type":27,"tag":44,"props":1778,"children":1779},{},[1780],{"type":33,"value":1781},"L4 (dynamic ABI)",{"type":27,"tag":312,"props":1783,"children":1784},{},[1785,1790,1791,1796,1797],{"type":27,"tag":99,"props":1786,"children":1788},{"className":1787},[],[1789],{"type":33,"value":1239},{"type":33,"value":401},{"type":27,"tag":99,"props":1792,"children":1794},{"className":1793},[],[1795],{"type":33,"value":1247},{"type":33,"value":401},{"type":27,"tag":99,"props":1798,"children":1800},{"className":1799},[],[1801],{"type":33,"value":1802},"legion_ffi*.h",{"type":27,"tag":312,"props":1804,"children":1805},{},[1806,1808,1813,1815,1820],{"type":33,"value":1807},"Exported from ",{"type":27,"tag":99,"props":1809,"children":1811},{"className":1810},[],[1812],{"type":33,"value":1132},{"type":33,"value":1814}," (~131 ",{"type":27,"tag":99,"props":1816,"children":1818},{"className":1817},[],[1819],{"type":33,"value":349},{"type":33,"value":1821}," symbols)",{"type":27,"tag":312,"props":1823,"children":1824},{},[1825],{"type":33,"value":1826},"App developers, language bindings",{"type":27,"tag":275,"props":1828,"children":1829},{},[1830,1838,1852,1863],{"type":27,"tag":312,"props":1831,"children":1832},{},[1833],{"type":27,"tag":44,"props":1834,"children":1835},{},[1836],{"type":33,"value":1837},"L3 (in-process)",{"type":27,"tag":312,"props":1839,"children":1840},{},[1841,1846,1847],{"type":27,"tag":99,"props":1842,"children":1844},{"className":1843},[],[1845],{"type":33,"value":399},{"type":33,"value":401},{"type":27,"tag":99,"props":1848,"children":1850},{"className":1849},[],[1851],{"type":33,"value":407},{"type":27,"tag":312,"props":1853,"children":1854},{},[1855,1857,1861],{"type":33,"value":1856},"Header contract; static-link or vtable-at-init (",{"type":27,"tag":44,"props":1858,"children":1859},{},[1860],{"type":33,"value":193},{"type":33,"value":1862}," exported)",{"type":27,"tag":312,"props":1864,"children":1865},{},[1866],{"type":33,"value":383},{"type":27,"tag":275,"props":1868,"children":1869},{},[1870,1878,1898,1903],{"type":27,"tag":312,"props":1871,"children":1872},{},[1873],{"type":27,"tag":44,"props":1874,"children":1875},{},[1876],{"type":33,"value":1877},"Internal (L1/L2)",{"type":27,"tag":312,"props":1879,"children":1880},{},[1881,1886,1887,1892,1893],{"type":27,"tag":99,"props":1882,"children":1884},{"className":1883},[],[1885],{"type":33,"value":513},{"type":33,"value":401},{"type":27,"tag":99,"props":1888,"children":1890},{"className":1889},[],[1891],{"type":33,"value":701},{"type":33,"value":401},{"type":27,"tag":99,"props":1894,"children":1896},{"className":1895},[],[1897],{"type":33,"value":520},{"type":27,"tag":312,"props":1899,"children":1900},{},[1901],{"type":33,"value":1902},"Not installed",{"type":27,"tag":312,"props":1904,"children":1905},{},[1906],{"type":33,"value":1907},"—",{"type":27,"tag":40,"props":1909,"children":1910},{},[1911,1913,1921,1923,1929,1931,1937,1938,1944],{"type":33,"value":1912},"See ",{"type":27,"tag":95,"props":1914,"children":1915},{"href":5},[1916],{"type":27,"tag":99,"props":1917,"children":1919},{"className":1918},[],[1920],{"type":33,"value":104},{"type":33,"value":1922}," for the exact exported-symbol set, the enforcement stack\n(",{"type":27,"tag":99,"props":1924,"children":1926},{"className":1925},[],[1927],{"type":33,"value":1928},"LEGION_API",{"type":33,"value":1930}," + ",{"type":27,"tag":99,"props":1932,"children":1934},{"className":1933},[],[1935],{"type":33,"value":1936},"C_VISIBILITY_PRESET hidden",{"type":33,"value":1930},{"type":27,"tag":99,"props":1939,"children":1941},{"className":1940},[],[1942],{"type":33,"value":1943},"-Wl,--exclude-libs,ALL",{"type":33,"value":1945}," + the\nheader-install split), the CI gate, and stability status.",{"type":27,"tag":108,"props":1947,"children":1949},{"id":1948},"status-how-this-evolves",[1950],{"type":33,"value":1951},"Status & how this evolves",{"type":27,"tag":40,"props":1953,"children":1954},{},[1955,1957,1962,1964,1968,1970,1975,1977,1981,1982,1987,1989,1994,1996,2000,2002,2010,2012,2021,2023,2032],{"type":33,"value":1956},"This is a ",{"type":27,"tag":44,"props":1958,"children":1959},{},[1960],{"type":33,"value":1961},"draft",{"type":33,"value":1963},". The L3 and L4 surfaces are now ",{"type":27,"tag":66,"props":1965,"children":1966},{},[1967],{"type":33,"value":70},{"type":33,"value":1969}," precisely so they\ncan be reviewed and revised — names, signatures, and groupings may change before\nanything is declared a release candidate. What is already ",{"type":27,"tag":44,"props":1971,"children":1972},{},[1973],{"type":33,"value":1974},"locked",{"type":33,"value":1976}," is the export\n",{"type":27,"tag":66,"props":1978,"children":1979},{},[1980],{"type":33,"value":84},{"type":33,"value":999},{"type":27,"tag":99,"props":1983,"children":1985},{"className":1984},[],[1986],{"type":33,"value":1132},{"type":33,"value":1988}," exports only ",{"type":27,"tag":99,"props":1990,"children":1992},{"className":1991},[],[1993],{"type":33,"value":349},{"type":33,"value":1995},", CI-enforced); the specific\n",{"type":27,"tag":66,"props":1997,"children":1998},{},[1999],{"type":33,"value":91},{"type":33,"value":2001}," of symbols is pre-release. Companion docs in this series:\n",{"type":27,"tag":95,"props":2003,"children":2004},{"href":5},[2005],{"type":27,"tag":99,"props":2006,"children":2008},{"className":2007},[],[2009],{"type":33,"value":104},{"type":33,"value":2011}," (the exported ABI), ",{"type":27,"tag":95,"props":2013,"children":2014},{"href":13},[2015],{"type":27,"tag":99,"props":2016,"children":2018},{"className":2017},[],[2019],{"type":33,"value":2020},"l3_modules.md",{"type":33,"value":2022}," (writing\na capability-providing module), and ",{"type":27,"tag":95,"props":2024,"children":2025},{"href":17},[2026],{"type":27,"tag":99,"props":2027,"children":2029},{"className":2028},[],[2030],{"type":33,"value":2031},"l4_apps.md",{"type":33,"value":2033}," (building an app\nthat discovers + consumes capabilities).",{"type":27,"tag":2035,"props":2036,"children":2037},"style",{},[2038],{"type":33,"value":2039},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":21,"searchDepth":7,"depth":7,"links":2041},[2042,2043,2053,2054,2055,2056,2057],{"id":110,"depth":7,"text":113},{"id":480,"depth":7,"text":483,"children":2044},[2045,2047,2049,2051],{"id":487,"depth":15,"text":2046},"L1 — Transport / mesh (foundation req 01)",{"id":668,"depth":15,"text":2048},"L2 — Consensus, membership & identity (foundation req 02, 03, 07)",{"id":929,"depth":15,"text":2050},"L3 — Capability provider surface (foundation req 04, 05, 08)",{"id":1147,"depth":15,"text":2052},"L4 — Consumer / application surface (foundation req 06)",{"id":1291,"depth":7,"text":1294},{"id":1342,"depth":7,"text":1345},{"id":1555,"depth":7,"text":1558},{"id":1735,"depth":7,"text":1738},{"id":1948,"depth":7,"text":1951},"markdown","content:architecture.md","content","architecture.md","architecture","md",{"loc":9},1784532242628]