<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.34 (Ruby 3.3.8) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-bellis-unheaded-sophia-dictionary-00" category="exp" submissionType="independent">
  <front>
    <title abbrev="Sophia Dictionary Format">Sophia Dictionary Format for the Unheaded Protocol</title>

    <author initials="S." surname="Bellis" fullname="Stevie Bellis">
      <organization>Unheaded</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>stevie@bellis.tech</email>
      </address>
    </author>

    <date year="2026" month="March" day="19"/>

    <area>Internet</area>
    <workgroup>Independent Submission</workgroup>
    

    <abstract>


<?line 63?>

<t>The Sophia Dictionary Format defines the serialization, storage, and distribution
mechanism for semantic metadata that accompanies the Unheaded Protocol.  Sophia
dictionaries are exponent-decoding tables that translate compact byte values
(0x00-0xFF) into meaningful human-readable categories (service identifiers,
QoS classes, flow actions, etc.) and their associated metadata.</t>

<t>This memo specifies the CBOR serialization format for dictionary entries,
the BPF map representation for in-kernel storage, the atomic update protocol
for cluster-wide distribution via the Wotan memory bus, and the minimum
required dictionary entries for any conformant Unheaded deployment.</t>

<t>Draft-03 introduces sub-dictionary type systems for hierarchical knowledge
representation and QPACK compression headers for efficient dictionary entry
encoding over the wire.</t>

<t>Sophia dictionaries support atomic replacement: updates propagate to all
nodes in under 10 milliseconds without packet loss or service interruption.</t>



    </abstract>



  </front>

  <middle>


<?line 83?>

<section anchor="introduction"><name>Introduction</name>

<section anchor="problem-statement"><name>Problem Statement</name>

<t>The Unheaded Protocol <xref target="UNHEADED-FOUNDATION"></xref> defines a 20-byte
register file (the Monad) that travels with every packet.  Each byte in the
Monad is exponent-encoded: the actual value is reconstructed as base^exponent
* multiplier.  But where do the base, multiplier, and the semantic meaning of
each byte position come from?</t>

<t>The answer is Sophia: a distributed, versioned dictionary system that maps
byte values to meanings.  Sophia is the semantic layer.  Without it, the
Monad fields carry no application semantics.  With it, a 0x03 byte value
resolves to "architect" or "realtime" or "forward" or "open" depending on
the field position and active dictionary version.</t>

<t>This memo specifies:</t>

<t><list style="numbers" type="1">
  <t>How Sophia dictionaries are represented on the wire (CBOR format per RFC 8949)</t>
  <t>How they are stored in BPF maps for nanosecond-latency lookups</t>
  <t>How they are distributed to all nodes atomically via Wotan <xref target="WOTAN"></xref></t>
  <t>The minimum dictionary entries that all implementations MUST support</t>
  <t>Version negotiation and backward-compatibility rules</t>
  <t>Sub-dictionary type systems for hierarchical knowledge representation (NEW in draft-03)</t>
  <t>QPACK compression headers for efficient dictionary encoding (NEW in draft-03)</t>
</list></t>

</section>
<section anchor="cross-references"><name>Cross-References</name>

<t>This document is part of the Unheaded Protocol specification family:</t>

<t><list style="symbols">
  <t><strong>Protocol Foundation</strong> <xref target="UNHEADED-FOUNDATION"></xref>: Defines the Monad wire
format (20 bytes, FROZEN at v0x01), per-hop processing, IANA registries,
and the IANA registration procedures for new metric types.</t>
  <t><strong>Wotan Memory Protocol</strong> <xref target="WOTAN"></xref>: Defines the memory and I/O bus
including error code taxonomy, helper return codes, and error recovery
procedures.</t>
</list></t>

</section>
</section>
<section anchor="requirements-language"><name>Requirements Language</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119">RFC2119</xref> <xref target="RFC8174">RFC8174</xref>
when, and only when, they appear in all capitals, as shown here.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>Root Dictionary:</dt>
  <dd>
    <t>The top-level BPF map (type BPF_MAP_TYPE_HASH) keyed by root entry ID
(0x00-0xFF) that points to sub-dictionaries.</t>
  </dd>
  <dt>Sub-Dictionary:</dt>
  <dd>
    <t>A BPF map (type BPF_MAP_TYPE_ARRAY_OF_MAPS) indexed by sub-entry ID
(0x00-0xFF) that contains semantic metadata.</t>
  </dd>
  <dt>Nested Sub-Dictionary:</dt>
  <dd>
    <t>A sub-dictionary that itself contains references to further sub-
dictionaries, enabling hierarchical (tree-structured) knowledge
representation. (NEW in draft-03)</t>
  </dd>
  <dt>Sophia Lookup:</dt>
  <dd>
    <t>A two-level (or deeper for nested sub-dictionaries) hash table
traversal: root_map[key0] -&gt; sub_dict_id, then
sub_dict[key0][key1] -&gt; value.</t>
  </dd>
  <dt>Dictionary Version:</dt>
  <dd>
    <t>An unsigned 8-bit counter (0-255) that increments with each dictionary
update.  Used for consistency validation across nodes.</t>
  </dd>
  <dt>Atomic Update:</dt>
  <dd>
    <t>The act of replacing an entire BPF map and updating the array-of-maps
reference in a single atomic kernel operation.</t>
  </dd>
  <dt>Wotan Topic:</dt>
  <dd>
    <t>A publish-subscribe channel through which dictionary updates are
broadcast.  Format: sophia.dictionary.v{N} where N is the version number.</t>
  </dd>
  <dt>BPF (Berkeley Packet Filter):</dt>
  <dd>
    <t>Per RFC 9669, the in-kernel virtual machine and map storage system.
This memo uses "BPF" not "eBPF" per RFC 9669 conventions.</t>
  </dd>
  <dt>QPACK:</dt>
  <dd>
    <t>Header compression format defined in RFC 9204, adapted in this
specification for Sophia dictionary entry compression. (NEW in draft-03)</t>
  </dd>
  <dt>Anamnesis:</dt>
  <dd>
    <t>The event sourcing subsystem that emits and logs system events
(such as instruction traces, anomalies, and profiling metrics) for observability
and debugging purposes.</t>
  </dd>
</dl>

</section>
<section anchor="dictionary-model"><name>Dictionary Model</name>

<section anchor="tree-structure"><name>Tree Structure</name>

<t>Sophia dictionaries are trees, not flat tables.  The root level maps
entry categories to sub-dictionaries.  Each sub-dictionary maps specific
values within that category to metadata.</t>

<t>Example:</t>

<figure><artwork><![CDATA[
Root entry 0x01 -> "service_identity" -> sub-dict #1
  Sub-dict #1[0x01] -> {name: "captain", ...}
  Sub-dict #1[0x02] -> {name: "timeguru", ...}
  Sub-dict #1[0x03] -> {name: "architect", ...}

Root entry 0x02 -> "flow_action" -> sub-dict #2
  Sub-dict #2[0x01] -> {name: "forward", ...}
  Sub-dict #2[0x02] -> {name: "trace", ...}
  Sub-dict #2[0x03] -> {name: "sample", ...}

The SAME byte 0x03 means:
  [0x01, 0x03] = service "architect"
  [0x02, 0x03] = action "sample"
  [0x03, 0x03] = qos "realtime"
]]></artwork></figure>

<t>This compositional structure provides 256^K total expressible meanings
with K key positions, using only 2*K bytes on the wire (K bytes per lookup).</t>

</section>
<section anchor="sub-dictionary-type-system-new-in-draft-03"><name>Sub-Dictionary Type System (NEW in draft-03)</name>

<section anchor="overview"><name>Overview</name>

<t>Sub-dictionaries in draft-02 were flat: each sub-dictionary entry
contained leaf metadata (name, endpoint, key material, etc.).  Draft-03
introduces typed sub-dictionaries that MAY themselves contain references
to nested sub-dictionaries, enabling hierarchical knowledge graphs.</t>

</section>
<section anchor="sub-dictionary-types"><name>Sub-Dictionary Types</name>

<t>Each sub-dictionary entry includes a type field that determines its
structure:</t>

<figure><artwork><![CDATA[
Sub-Dictionary Type Codes:

  0x00  LEAF        Leaf node: contains metadata only (draft-02 behavior)
  0x01  BRANCH      Branch node: contains a reference to a nested
                    sub-dictionary
  0x02  COMPOSITE   Contains both metadata AND a nested sub-dictionary
                    reference
  0x03  ALIAS       Alias to another sub-dictionary entry (indirection)
  0x04-0xFF         Reserved for future use
]]></artwork></figure>

</section>
<section anchor="nested-sub-dictionary-structure"><name>Nested Sub-Dictionary Structure</name>

<t>A BRANCH or COMPOSITE entry includes a nested_dict_id field:</t>

<figure><artwork><![CDATA[
struct sophia_typed_sub_entry {
    u8   entry_type;          // 0x00=LEAF, 0x01=BRANCH, 0x02=COMPOSITE,
                              // 0x03=ALIAS
    u8   name[32];            // Null-terminated name string
    u32  endpoint_ip;         // Service IPv6 last 32 bits (LEAF/COMPOSITE)
    u16  endpoint_port;       // Service port (LEAF/COMPOSITE)
    u8   pqc_algo;            // PQC algorithm ID (LEAF/COMPOSITE)
    u8   key_epoch;           // Key rotation counter (LEAF/COMPOSITE)
    u8   fingerprint[32];     // SHA3-256 of PQC public key (LEAF/COMPOSITE)
    u32  nested_dict_id;      // Nested sub-dict index (BRANCH/COMPOSITE)
    u16  reserved;
};  // Total: 84 bytes per entry
]]></artwork></figure>

</section>
<section anchor="lookup-chain-for-nested-dictionaries"><name>Lookup Chain for Nested Dictionaries</name>

<t>A nested Sophia lookup performs:</t>

<figure><artwork><![CDATA[
1. Look up root_key in sophia_root map
2. Extract sub_dict_id from the result
3. Look up sub_dict_id in sophia_dicts (array of maps)
4. Look up sub_key in the obtained sub-dictionary map
5. If entry_type == BRANCH or COMPOSITE:
   a. Extract nested_dict_id from the entry
   b. Look up nested_dict_id in sophia_dicts
   c. Look up next_key in the nested sub-dictionary
   d. Repeat until LEAF node is reached
6. Return the final LEAF value
]]></artwork></figure>

<t>Cost: Each additional nesting level adds one BPF hash lookup (~100ns).
Total: ~300ns + 100ns per nesting level.</t>

</section>
<section anchor="maximum-nesting-depth"><name>Maximum Nesting Depth</name>

<t>Implementations MUST enforce a maximum nesting depth of 8 levels.
If a lookup exceeds 8 levels of nesting, the implementation MUST:</t>

<t><list style="numbers" type="1">
  <t>Abort the lookup</t>
  <t>Return an error (SOPHIA_EVT_MISS)</t>
  <t>Emit an EVENT_ANOMALY to Anamnesis</t>
  <t>Use the default value for the field</t>
</list></t>

<t>This prevents infinite loops from circular references in the
dictionary graph.</t>

</section>
<section anchor="circular-reference-detection"><name>Circular Reference Detection</name>

<t>Implementations MUST detect circular references during lookup.
A circular reference occurs when a nested lookup revisits a
sub-dictionary index that was previously visited in the same
lookup chain.</t>

<t>Detection is performed by maintaining a visited set (bitmask of
up to 256 sub-dictionary indices) during each lookup:</t>

<figure><artwork><![CDATA[
visited = 0  // 256-bit bitmask
for each level:
  if visited & BIT(sub_dict_id):
    // Circular reference detected
    abort_lookup()
    emit EVENT_ANOMALY
    return default_value
  visited |= BIT(sub_dict_id)
  proceed_to_next_level()
]]></artwork></figure>

</section>
<section anchor="use-cases-for-hierarchical-dictionaries"><name>Use Cases for Hierarchical Dictionaries</name>

<t><list style="numbers" type="1">
  <t><strong>Service Topology</strong>: Model service dependencies as a tree.
Root -&gt; service_group -&gt; service_instance -&gt; endpoint.</t>
  <t><strong>Policy Hierarchies</strong>: Inherit QoS policies from parent
categories. Root -&gt; department -&gt; team -&gt; service -&gt; policy.</t>
  <t><strong>Geographic Routing</strong>: Organize routing prefixes by region.
Root -&gt; continent -&gt; country -&gt; datacenter -&gt; rack.</t>
  <t><strong>Tenant Isolation</strong>: Multi-tenant deployments where each tenant
has its own sub-dictionary namespace.
Root -&gt; tenant_id -&gt; service_identity -&gt; endpoint.</t>
</list></t>

</section>
<section anchor="cbor-encoding-for-nested-entries"><name>CBOR Encoding for Nested Entries</name>

<t>Nested sub-dictionary entries are serialized in CBOR as:</t>

<figure><artwork><![CDATA[
typed_sub_entry = {
  "entry_type": uint,              ; 0=LEAF, 1=BRANCH, 2=COMPOSITE, 3=ALIAS
  "name": tstr,                    ; Human-readable name
  ? "endpoint": tstr,              ; Service endpoint (LEAF/COMPOSITE)
  ? "pqc_algorithm": uint,         ; PQC algorithm ID (LEAF/COMPOSITE)
  ? "pqc_pubkey": bstr,            ; Public key bytes (LEAF/COMPOSITE)
  ? "pqc_fingerprint": bstr,       ; SHA3-256 truncation (LEAF/COMPOSITE)
  ? "key_epoch": uint,             ; Rotation counter (LEAF/COMPOSITE)
  ? "key_expires": tstr,           ; ISO 8601 timestamp (LEAF/COMPOSITE)
  ? "nested_dict_id": uint,        ; Nested sub-dict index (BRANCH/COMPOSITE)
  ? "alias_target": [uint, uint],  ; [sub_dict_id, sub_key] (ALIAS only)
  ? "description": tstr,           ; Additional metadata
}
]]></artwork></figure>

</section>
<section anchor="bpf-map-representation-for-nested-dictionaries"><name>BPF Map Representation for Nested Dictionaries</name>

<t>Nested dictionaries use the same BPF_MAP_TYPE_ARRAY_OF_MAPS
indirection as top-level sub-dictionaries. The sophia_dicts array
is shared between top-level and nested sub-dictionaries:</t>

<figure><artwork><![CDATA[
sophia_dicts[0-63]:    Reserved for top-level sub-dictionaries
sophia_dicts[64-191]:  Available for nested sub-dictionaries
sophia_dicts[192-255]: Reserved for future use
]]></artwork></figure>

<t>Nested sub-dictionary indices MUST be in the range [64-191].
Top-level sub-dictionary indices MUST be in the range [0-63].
This partitioning prevents accidental conflicts between top-level
and nested dictionaries.</t>

</section>
</section>
<section anchor="root-dictionary"><name>Root Dictionary</name>

<t>The root dictionary is a single BPF hash map with 256 slots.  Each key
(0x00-0xFF) maps to a root entry structure.</t>

<t>Root entries occupy the following key ranges:</t>

<t><list style="symbols">
  <t>0x00: Reserved (MUST NOT be used by any implementation)</t>
  <t>0x01-0x0F: Standard categories (see Section 8)</t>
  <t>0x10-0xFE: Available for operator assignment</t>
  <t>0xFF: Reserved (Yaldabaoth chaos injection)</t>
</list></t>

</section>
<section anchor="initialization-guarantee"><name>Initialization Guarantee</name>

<t>The root dictionary MUST be fully initialized before any Monad packets are
processed by Shim programs. Wotan <xref target="WOTAN"></xref> or system initialization logic
MUST:</t>

<t><list style="numbers" type="1">
  <t>Load all root entries from persistent storage</t>
  <t>Verify that each standard root key (0x01-0x06) has a corresponding entry</t>
  <t>Initialize default values for any missing entries using base=2, multiplier=1</t>
  <t>Signal readiness to shield/shim components only after this initialization
is complete</t>
</list></t>

<t>Any attempt to process a packet before Sophia is initialized is a fatal
configuration error and MUST be logged.</t>

</section>
<section anchor="dictionary-size-constraints"><name>Dictionary Size Constraints</name>

<t>Dictionary capacity is bounded by both entry count and total byte size to
prevent denial-of-service attacks via unbounded memory exhaustion.</t>

<section anchor="per-flow-dictionary-capacity"><name>Per-Flow Dictionary Capacity</name>

<t>Each flow maintains its own dictionary with strict limits:</t>

<t><list style="symbols">
  <t>Maximum 128 entries per flow</t>
  <t>Maximum 1 MB total size per flow</t>
</list></t>

<t>When adding a new entry would exceed either limit:
- Reject the new entry
- Return error code 0x09 (Insufficient buffer space)
- Do NOT evict existing entries
- Emit audit event with reason "dictionary_full"</t>

</section>
<section anchor="global-dictionary-capacity"><name>Global Dictionary Capacity</name>

<t>System-wide dictionary capacity MUST NOT exceed 100 MB.</t>

</section>
</section>
</section>
<section anchor="qpack-compression-headers-for-dictionary-entries-new-in-draft-03"><name>QPACK Compression Headers for Dictionary Entries (NEW in draft-03)</name>

<section anchor="motivation"><name>Motivation</name>

<t>Sophia dictionary entries can be large, especially when carrying PQC
key material (ML-KEM-768 public keys are 1184 bytes, ML-DSA-65 public
keys are 1952 bytes). Distributing full dictionary entries over Wotan
topics <xref target="WOTAN"></xref> at cluster-wide scale incurs significant bandwidth.</t>

<t>QPACK (RFC 9204) is a header compression format designed for HTTP/3
that provides efficient encoding of key-value pairs with static and
dynamic table references. This section adapts QPACK for Sophia
dictionary entry compression.</t>

</section>
<section anchor="qpack-adaptation-for-sophia"><name>QPACK Adaptation for Sophia</name>

<section anchor="static-table"><name>Static Table</name>

<t>The Sophia QPACK static table contains pre-defined entries for
frequently-used dictionary field names and values:</t>

<figure><artwork><![CDATA[
Index   Name                    Value
-----   --------------------    --------------------
0       type                    service_identity
1       type                    flow_action
2       type                    qos_class
3       type                    deploy_ring
4       type                    circuit_state
5       type                    mesh_flags
6       name                    (empty)
7       endpoint                (empty)
8       pqc_algorithm           1 (ML-KEM-768)
9       pqc_algorithm           3 (ML-DSA-65)
10      key_epoch               (empty)
11      key_expires             (empty)
12      entry_type              0 (LEAF)
13      entry_type              1 (BRANCH)
14      entry_type              2 (COMPOSITE)
15      entry_type              3 (ALIAS)
16      description             (empty)
17      nested_dict_id          (empty)
18      base                    2
19      multiplier              1
20      unit                    microseconds
21      unit                    milliseconds
22      unit                    nanoseconds
23      unit                    packets
]]></artwork></figure>

</section>
<section anchor="dynamic-table"><name>Dynamic Table</name>

<t>Each Wotan subscriber maintains a per-connection dynamic table for
Sophia entries. The dynamic table is populated as dictionary updates
are received and provides reference-based encoding for subsequent
updates.</t>

<t>Dynamic table capacity: 4096 bytes (configurable via SETTINGS).</t>

</section>
<section anchor="encoding-format"><name>Encoding Format</name>

<t>Sophia QPACK-compressed entries use the following wire format:</t>

<figure><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Compression  |  Entry Count  |  Encoded Fields...            |
|  Flags (8b)   |  (8b)         |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<dl>
  <dt>Compression Flags:</dt>
  <dd>
    <t>Bit 7: QPACK enabled (1=compressed, 0=raw CBOR)</t>
  </dd>
  <dt/>
  <dd>
    <t>Bit 6: Static table reference present</t>
  </dd>
  <dt/>
  <dd>
    <t>Bit 5: Dynamic table reference present</t>
  </dd>
  <dt/>
  <dd>
    <t>Bit 4: Huffman encoding used for string values</t>
  </dd>
  <dt/>
  <dd>
    <t>Bits 3-0: Reserved (MUST be zero)</t>
  </dd>
  <dt>Entry Count:</dt>
  <dd>
    <t>Number of field entries in this compressed block (0-255).</t>
  </dd>
  <dt>Encoded Fields:</dt>
  <dd>
    <t>QPACK-encoded field entries per RFC 9204 Section 4.5.</t>
  </dd>
</dl>

</section>
<section anchor="encoding-rules"><name>Encoding Rules</name>

<t><list style="numbers" type="1">
  <t>Fields with values matching static table entries MUST use static
table references (1-byte encoding vs. full field encoding).</t>
  <t>Fields with values matching dynamic table entries SHOULD use
dynamic table references.</t>
  <t>String values longer than 16 bytes SHOULD use Huffman encoding
per RFC 9204.</t>
  <t>PQC key material (pqc_pubkey, signature_pubkey) SHOULD NOT be
Huffman-encoded (binary data has poor Huffman compression ratios).</t>
  <t>New field values MUST be inserted into the dynamic table for
future reference, unless the dynamic table is full.</t>
</list></t>

</section>
<section anchor="compression-ratio"><name>Compression Ratio</name>

<t>Expected compression ratios for common Sophia entries:</t>

<figure><artwork><![CDATA[
Entry Type                    Raw CBOR    QPACK       Ratio
--------------------------    ---------   ---------   -----
service_identity (no PQC)     ~120 bytes  ~40 bytes   3:1
service_identity (with PQC)   ~1400 bytes ~1250 bytes 1.1:1
flow_action                   ~60 bytes   ~12 bytes   5:1
qos_class                     ~50 bytes   ~10 bytes   5:1
typed_sub_entry (BRANCH)      ~80 bytes   ~25 bytes   3:1
typed_sub_entry (COMPOSITE)   ~200 bytes  ~60 bytes   3:1
]]></artwork></figure>

<t>PQC key material is incompressible; compression primarily benefits
metadata fields (names, types, endpoints).</t>

</section>
<section anchor="decompression-limits"><name>Decompression Limits</name>

<t>To prevent decompression bomb attacks:</t>

<t><list style="numbers" type="1">
  <t>Maximum decompressed entry size: 1 MB (per Section 3.3)</t>
  <t>Maximum decompression time: 10 milliseconds</t>
  <t>Maximum dynamic table size: 4096 bytes (prevents memory exhaustion)</t>
  <t>Decompression MUST fail-safe: on error, reject entry with
SOPHIA_EVT_DECOMP_FAIL and emit EVENT_ANOMALY</t>
</list></t>

</section>
<section anchor="backward-compatibility"><name>Backward Compatibility</name>

<t>QPACK compression is OPTIONAL. Dictionary entries with Compression
Flags bit 7 = 0 are raw CBOR and are processed identically to
draft-02 entries. Implementations that do not support QPACK MUST:</t>

<t><list style="numbers" type="1">
  <t>Check Compression Flags bit 7</t>
  <t>If bit 7 = 1: reject entry with error SOPHIA_EVT_DECOMP_FAIL</t>
  <t>If bit 7 = 0: process as raw CBOR (draft-02 compatible)</t>
</list></t>

<t>This ensures that draft-02 and draft-03 implementations can coexist
during rolling upgrades.</t>

</section>
</section>
</section>
<section anchor="dictionary-distribution"><name>Dictionary Distribution</name>

<t>Sophia dictionaries are distributed to all nodes via the Wotan <xref target="WOTAN"></xref>
publish-subscribe topics.  The distribution model ensures atomic,
cluster-wide updates with zero packet loss.</t>

<section anchor="wotan-distribution-channel"><name>Wotan Distribution Channel</name>

<t>Dictionaries are published on a versioned topic:</t>

<figure><artwork><![CDATA[
Topic: sophia.dictionary.v{N}

Where N = version number (0-255).

Each topic publication contains:
  1. Complete serialized dictionary (CBOR or QPACK-compressed CBOR)
  2. Version number (repeated for idempotence)
  3. Timestamp (ISO 8601)
  4. Signature (ML-DSA-65, optional for integrity)
  5. Compression Flags (indicating whether QPACK is used) (NEW in draft-03)
]]></artwork></figure>

</section>
<section anchor="version-negotiation"><name>Version Negotiation</name>

<t>Implementations MUST support at least 2 concurrent dictionary versions.
When a new version is published:</t>

<t><list style="numbers" type="1">
  <t>Subscriber receives dictionary on sophia.dictionary.v{N+1}</t>
  <t>New maps are created (sophia_dict_1_v{N+1}, etc.)</t>
  <t>Old version maps remain active</t>
  <t>Array-of-maps references are atomically updated</t>
  <t>Old version maps are retained for grace_period (default: 60 seconds)</t>
  <t>After grace_period, old maps are deleted</t>
</list></t>

</section>
<section anchor="atomic-update-protocol"><name>Atomic Update Protocol</name>

<t>The update sequence is:</t>

<figure><artwork><![CDATA[
1. [Provisioning] Publish new dictionary to sophia.dictionary.v{N+1}
2. [Wotan] Receive on subscriber
3. [Wotan] Deserialize CBOR (decompress if QPACK) -> in-memory dictionary
4. [Wotan] Create new BPF maps with suffix _v{N+1}
5. [Wotan] Load all entries into new maps (including nested sub-dicts)
6. [Wotan] Update sophia_dicts[0..255] pointers atomically
   (single atomic map write per sub-dict)
7. [Wotan] Update sophia_version map (key 0, value = N+1)
8. [Wotan] Retain old maps for grace_period
9. [Wotan] After grace_period, delete old maps
]]></artwork></figure>

<t>All Shim/Shield nodes see the update within one polling cycle
(typically &lt;10ms) of the Wotan write.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="dictionary-poisoning-attack-vectors"><name>Dictionary Poisoning Attack Vectors</name>

<t>Dictionary poisoning attacks attempt to corrupt semantic metadata, enabling:
- Service misidentification (0x01 maps to wrong endpoint)
- Policy bypass (0x02 maps to permissive action instead of drop)
- Cache invalidation (Shim programs crash on bad dictionary entry)</t>

<t>Defense mechanisms are specified throughout this document:</t>

<t><list style="numbers" type="1">
  <t><strong>ML-DSA-65 Signature Verification</strong>: All entries from provisioning
nodes MUST be signed with ML-DSA-65.</t>
  <t><strong>Timestamp Validation</strong>: Reject updates with timestamps &gt; 5 minutes
in future/past.</t>
  <t><strong>CRC32 Integrity Checks</strong>: CBOR payloads include CRC32 checksums.</t>
  <t><strong>Source Authentication</strong>: Whitelist of provisioning node public keys.</t>
</list></t>

</section>
<section anchor="nested-dictionary-security"><name>Nested Dictionary Security</name>

<section anchor="depth-limit-enforcement"><name>Depth Limit Enforcement</name>

<t>The maximum nesting depth of 8 levels MUST be enforced in all lookup
paths. Exceeding this limit is treated as a security violation (potential
DoS via deeply nested dictionaries).</t>

</section>
<section anchor="circular-reference-prevention"><name>Circular Reference Prevention</name>

<t>Circular reference detection (Section 3.2.5) MUST be performed on every
nested lookup. Circular references in dictionary data could cause
infinite loops in BPF programs, leading to verifier timeouts or
denial of service.</t>

</section>
<section anchor="namespace-partitioning"><name>Namespace Partitioning</name>

<t>The partitioning of sophia_dicts indices (0-63 for top-level, 64-191
for nested, 192-255 reserved) MUST be enforced. An attacker who can
control nested_dict_id values could reference top-level dictionaries
as nested dictionaries, causing semantic confusion.</t>

</section>
</section>
<section anchor="qpack-decompression-security"><name>QPACK Decompression Security</name>

<section anchor="decompression-bomb-mitigation"><name>Decompression Bomb Mitigation</name>

<t>QPACK-compressed dictionary entries are subject to the same
decompression limits as draft-02 compressed entries:</t>

<t><list style="numbers" type="1">
  <t>Maximum decompressed output: 1 MB</t>
  <t>Maximum decompression time: 10 milliseconds</t>
  <t>Explicit compression flags (no implicit detection)</t>
</list></t>

</section>
<section anchor="dynamic-table-poisoning"><name>Dynamic Table Poisoning</name>

<t>An attacker could send dictionary updates designed to fill the dynamic
table with malicious entries, causing subsequent legitimate entries
to reference attacker-controlled values.</t>

<t>Mitigation:
- Dynamic table entries MUST be validated against Sophia schema
- Dynamic table MUST be flushed on dictionary version change
- Dynamic table capacity is limited to 4096 bytes</t>

</section>
</section>
<section anchor="cross-reference-with-foundation-and-wotan"><name>Cross-Reference with Foundation and Wotan</name>

<t>Security considerations in this memo are aligned with:</t>

<t><list style="numbers" type="1">
  <t><strong><xref target="UNHEADED-FOUNDATION"></xref> Section 10 - Security Considerations</strong>:
Wire format immutability threat model, parser divergence attacks,
and verification procedures.</t>
  <t><strong><xref target="WOTAN"></xref> Section 12 - Security Considerations</strong>:
Topic injection attacks, ring buffer memory exhaustion, cross-flow
memory access, and WAL tampering detection.</t>
</list></t>

</section>
</section>
<section anchor="pqc-key-dictionary-integration-new-in-draft-03-update"><name>PQC Key Dictionary Integration (NEW in draft-03 update)</name>

<section anchor="overview-1"><name>Overview</name>

<t>Sophia provides the key management layer for the post-quantum
cryptographic (PQC) authentication system defined in
<xref target="UNHEADED-FOUNDATION"></xref>.  Full PQC signatures and public keys are
stored in Sophia BPF maps, while the Monad wire format carries only
12-byte references (see <xref target="UNHEADED-FOUNDATION"></xref> PQC Authentication
Value Format).</t>

</section>
<section anchor="pqc-signature-map-pqcsigmap"><name>PQC Signature Map (PQC_SIG_MAP)</name>

<t>The PQC_SIG_MAP is a BPF hash map keyed by the 32-bit SigRef value
from the PQC authentication value.</t>

<figure><artwork><![CDATA[
struct {
    __uint(type, BPF_MAP_TYPE_HASH);
    __uint(max_entries, 65536);
    __type(key, u32);        // SigRef from PQC value
    __type(value, struct pqc_sig_entry);
} pqc_sig_map SEC(".maps");

struct pqc_sig_entry {
    u8   algo_id;            // PQC algorithm (0x01-0x05)
    u8   status;             // Verification status
    u16  key_ref;            // Cross-reference to PQC_KEY_MAP
    u32  sig_len;            // Signature length in bytes
    u8   hash_pfx[4];        // SHA-256(signature)[0:4]
    u8   signature[];        // Variable-length signature data
};
]]></artwork></figure>

</section>
<section anchor="pqc-key-map-pqckeymap"><name>PQC Key Map (PQC_KEY_MAP)</name>

<t>The PQC_KEY_MAP stores public keys indexed by the 16-bit KeyRef
value.</t>

<figure><artwork><![CDATA[
struct {
    __uint(type, BPF_MAP_TYPE_HASH);
    __uint(max_entries, 4096);
    __type(key, u16);        // KeyRef from PQC value
    __type(value, struct pqc_key_entry);
} pqc_key_map SEC(".maps");

struct pqc_key_entry {
    u8   algo_id;            // PQC algorithm identifier
    u8   key_epoch;          // Key rotation counter
    u16  reserved;
    u32  key_len;            // Public key length in bytes
    u8   fingerprint[32];    // SHA3-256 of public key
    u8   expires[8];         // Expiry timestamp (Unix ns, BE)
    u8   pubkey[];           // Variable-length public key data
};
]]></artwork></figure>

</section>
<section anchor="pqc-dictionary-operations"><name>PQC Dictionary Operations</name>

<section anchor="signature-lookup"><name>Signature Lookup</name>

<t>When a BPF program verifies a PQC authentication value:</t>

<figure><artwork><![CDATA[
1. Extract SigRef (u32) from Monad scratch bytes [0x0E..0x11]
2. Look up SigRef in pqc_sig_map
3. Compare hash_pfx with SHA-256(sig_entry.signature)[0:4]
4. If match: use cached verification status
5. If miss or mismatch: emit EVENT_ANOMALY, use default policy
]]></artwork></figure>

</section>
<section anchor="key-rotation"><name>Key Rotation</name>

<t>Key rotation is managed through the key_epoch counter:</t>

<figure><artwork><![CDATA[
1. New key published to sophia.pqc.keys.v{N+1} Wotan topic
2. Subscribers create new pqc_key_map entries with epoch+1
3. Old keys retained for grace_period (default: 300 seconds)
4. After grace_period: old key entries deleted
5. Signatures referencing expired keys receive status=Expired (0x03)
]]></artwork></figure>

</section>
</section>
<section anchor="pqc-algorithm-support-matrix"><name>PQC Algorithm Support Matrix</name>

<figure><artwork><![CDATA[
Algo ID   Algorithm    Key Size    Sig Size     Use Case
-------   ---------    --------    ---------    --------------------------
0x01      SLH-DSA      32-64 B     7856-49856 B Hash-based (conservative)
0x02      ML-DSA       1312-2592 B 2420-4627 B  Lattice-based (standard)
0x03      FN-DSA       897-1793 B  666-1280 B   Lattice-based (compact)
0x04      ML-KEM       800-1568 B  768-1568 B   Key encapsulation
0x05      HQC          2249-7245 B 4497-14469 B Code-based (conservative)
]]></artwork></figure>

<t>Implementations MUST support at least ML-DSA (0x02) and SHOULD
support SLH-DSA (0x01) for defense-in-depth.</t>

</section>
</section>
<section anchor="upc-opcode-dictionary-for-sophia-driven-instruction-decode-new-in-draft-03-update"><name>UPC Opcode Dictionary for Sophia-Driven Instruction Decode (NEW in draft-03 update)</name>

<section anchor="overview-2"><name>Overview</name>

<t>The UPC compute engine uses Sophia dictionaries for instruction decode,
enabling runtime-reconfigurable instruction semantics.  Instead of
hardcoding opcode meanings, the MBC ISA opcodes are mapped through a
Sophia dictionary that provides human-readable names, execution
metadata, and instruction class information.</t>

</section>
<section anchor="opcode-dictionary-structure"><name>Opcode Dictionary Structure</name>

<t>The opcode dictionary is a Sophia sub-dictionary (root key 0x10,
"code" category) that maps 8-bit opcodes to instruction metadata.</t>

<figure><artwork><![CDATA[
Root entry 0x10 -> "code" -> sub-dict #16
  Sub-dict #16[0x00] -> {name: "NOP", class: "control", cycles: 1}
  Sub-dict #16[0x01] -> {name: "ADD", class: "arithmetic", cycles: 1}
  Sub-dict #16[0x30] -> {name: "LD", class: "memory", cycles: 2}
  Sub-dict #16[0x40] -> {name: "SYSCALL", class: "system", cycles: 0}
]]></artwork></figure>

</section>
<section anchor="instruction-class-types"><name>Instruction Class Types</name>

<figure><artwork><![CDATA[
Class          Value   Description
-----------    -----   ------------------------------------------
arithmetic     0x01    ALU operations (ADD, SUB, MUL, DIV, etc.)
logical        0x02    Bitwise operations (AND, OR, XOR, NOT, shifts)
stack          0x03    Stack operations (PUSH, POP)
register       0x04    Register operations (MOV, MOVI, CMP)
branch         0x05    Control flow (JMP, JZ, CALL, RET, etc.)
memory         0x06    Memory access (LD, ST, LDB, STB, etc.)
atomic         0x07    Atomic operations (CLI, STI, XCHG, CAS)
system         0x08    System operations (SYSCALL, HALT)
interrupt      0x09    Interrupt handling (INT, IRET)
extended       0x0A    Extended operations (LOAD_IMM32, ADDI, etc.)
]]></artwork></figure>

</section>
<section anchor="bpf-map-representation"><name>BPF Map Representation</name>

<figure><artwork><![CDATA[
struct sophia_opcode_entry {
    u8   opcode;              // MBC opcode value
    u8   insn_class;          // Instruction class (0x01-0x0A)
    u8   base_cycles;         // Base cycle count (1-4)
    u8   flags;               // Bit 0: modifies flags
                              // Bit 1: reads memory
                              // Bit 2: writes memory
                              // Bit 3: modifies PC
    u8   name[24];            // Null-terminated mnemonic
    u32  reserved;            // Reserved (MUST be zero)
};  // Total: 32 bytes per entry (matches SophiaEntry size)
]]></artwork></figure>

</section>
<section anchor="sophia-driven-decode-in-bpf"><name>Sophia-Driven Decode in BPF</name>

<t>During instruction execution, the MBC CPU MAY look up the opcode
in the Sophia opcode dictionary for:</t>

<t><list style="numbers" type="1">
  <t><strong>Instruction tracing</strong>: Emit human-readable instruction name in
Anamnesis events instead of raw opcode values</t>
  <t><strong>Dynamic dispatch</strong>: Runtime-reconfigurable instruction behavior
via dictionary updates (experimental)</t>
  <t><strong>Profiling</strong>: Per-instruction-class cycle counting and metrics</t>
  <t><strong>Validation</strong>: Verify opcode is in the valid set before execution</t>
</list></t>

<t>Implementations MAY cache opcode dictionary entries in a per-CPU
BPF array map for fast lookup (~50 ns vs. ~150 ns for hash lookup).</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="sophia-root-key-registry"><name>Sophia Root Key Registry</name>

<t>IANA SHOULD establish a new registry:</t>

<figure><artwork><![CDATA[
Registry Name:  Unheaded Sophia Root Dictionary Keys
Template:       Root Key (0x00-0xFF), Category Name, Type,
                Specification Reference
Policy:         0x00-0x0F: Specification Required
                0x10-0xFE: First Come First Served
                0xFF: Specification Required (reserved)

Initial entries:
  0x00: RESERVED
  0x01: service_identity
  0x02: flow_action
  0x03: qos_class
  0x04: deploy_ring
  0x05: circuit_state
  0x06: mesh_flags
  0x07-0x0F: RESERVED for future standardization
  0x10: routing (routing entry type)
  0x11: firewall (firewall entry type)
  0x12: observability (observability entry type)
  0x13: ids (IDS entry type)
  0x14: health (health entry type)
  0xFF: RESERVED (Yaldabaoth)
]]></artwork></figure>

</section>
<section anchor="sophia-sub-dictionary-type-registry-new-in-draft-03"><name>Sophia Sub-Dictionary Type Registry (NEW in draft-03)</name>

<t>IANA SHOULD establish a new registry:</t>

<figure><artwork><![CDATA[
Registry Name:  Unheaded Sophia Sub-Dictionary Types
Template:       Type Code (0x00-0xFF), Type Name, Description,
                Specification Reference
Policy:         Specification Required

Initial entries:
  0x00: LEAF (leaf node, metadata only)
  0x01: BRANCH (branch node, nested sub-dictionary reference)
  0x02: COMPOSITE (metadata + nested sub-dictionary)
  0x03: ALIAS (indirection to another entry)
  0x04-0xFF: Reserved for future use
]]></artwork></figure>

</section>
<section anchor="sophia-qpack-static-table-registry-new-in-draft-03"><name>Sophia QPACK Static Table Registry (NEW in draft-03)</name>

<figure><artwork><![CDATA[
Registry Name:  Unheaded Sophia QPACK Static Table Entries
Template:       Index (uint), Field Name, Default Value,
                Specification Reference
Policy:         Specification Required

Initial entries: See Section 5.2.1 (24 entries, indices 0-23)
]]></artwork></figure>

<?line 970?>

</section>
</section>
<section anchor="authors-address"><name>Author's Address</name>

<t>Stevie Bellis
Unheaded
Email: stevie@bellis.tech</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>
<reference anchor="RFC8610">
  <front>
    <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <author fullname="C. Vigano" initials="C." surname="Vigano"/>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <date month="June" year="2019"/>
    <abstract>
      <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8610"/>
  <seriesInfo name="DOI" value="10.17487/RFC8610"/>
</reference>
<reference anchor="RFC8949">
  <front>
    <title>Concise Binary Object Representation (CBOR)</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <date month="December" year="2020"/>
    <abstract>
      <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
      <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="94"/>
  <seriesInfo name="RFC" value="8949"/>
  <seriesInfo name="DOI" value="10.17487/RFC8949"/>
</reference>
<reference anchor="RFC9204">
  <front>
    <title>QPACK: Field Compression for HTTP/3</title>
    <author fullname="C. Krasic" initials="C." surname="Krasic"/>
    <author fullname="M. Bishop" initials="M." surname="Bishop"/>
    <author fullname="A. Frindell" initials="A." role="editor" surname="Frindell"/>
    <date month="June" year="2022"/>
    <abstract>
      <t>This specification defines QPACK: a compression format for efficiently representing HTTP fields that is to be used in HTTP/3. This is a variation of HPACK compression that seeks to reduce head-of-line blocking.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9204"/>
  <seriesInfo name="DOI" value="10.17487/RFC9204"/>
</reference>
<reference anchor="RFC9669">
  <front>
    <title>BPF Instruction Set Architecture (ISA)</title>
    <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler"/>
    <date month="October" year="2024"/>
    <abstract>
      <t>eBPF (which is no longer an acronym for anything), also commonly referred to as BPF, is a technology with origins in the Linux kernel that can run untrusted programs in a privileged context such as an operating system kernel. This document specifies the BPF instruction set architecture (ISA).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9669"/>
  <seriesInfo name="DOI" value="10.17487/RFC9669"/>
</reference>

<reference anchor="FIPS204" >
  <front>
    <title>Module-Lattice-Based Digital Signature Standard</title>
    <author >
      <organization>NIST</organization>
    </author>
    <date year="2024" month="August"/>
  </front>
</reference>
<reference anchor="UNHEADED-FOUNDATION" >
  <front>
    <title>Unheaded: Protocol Foundation</title>
    <author initials="S." surname="Bellis">
      <organization></organization>
    </author>
    <date year="2026" month="March"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-bellis-unheaded-protocol-foundation-00"/>
</reference>
<reference anchor="WOTAN" >
  <front>
    <title>Wotan Memory Protocol for the Unheaded Protocol</title>
    <author initials="S." surname="Bellis">
      <organization></organization>
    </author>
    <date year="2026" month="March"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-bellis-unheaded-wotan-memory-00"/>
</reference>


    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC0768">
  <front>
    <title>User Datagram Protocol</title>
    <author fullname="J. Postel" initials="J." surname="Postel"/>
    <date month="August" year="1980"/>
  </front>
  <seriesInfo name="STD" value="6"/>
  <seriesInfo name="RFC" value="768"/>
  <seriesInfo name="DOI" value="10.17487/RFC0768"/>
</reference>
<reference anchor="RFC0791">
  <front>
    <title>Internet Protocol</title>
    <author fullname="J. Postel" initials="J." surname="Postel"/>
    <date month="September" year="1981"/>
  </front>
  <seriesInfo name="STD" value="5"/>
  <seriesInfo name="RFC" value="791"/>
  <seriesInfo name="DOI" value="10.17487/RFC0791"/>
</reference>
<reference anchor="RFC0792">
  <front>
    <title>Internet Control Message Protocol</title>
    <author fullname="J. Postel" initials="J." surname="Postel"/>
    <date month="September" year="1981"/>
  </front>
  <seriesInfo name="STD" value="5"/>
  <seriesInfo name="RFC" value="792"/>
  <seriesInfo name="DOI" value="10.17487/RFC0792"/>
</reference>
<reference anchor="RFC0793">
  <front>
    <title>Transmission Control Protocol</title>
    <author fullname="J. Postel" initials="J." surname="Postel"/>
    <date month="September" year="1981"/>
  </front>
  <seriesInfo name="RFC" value="793"/>
  <seriesInfo name="DOI" value="10.17487/RFC0793"/>
</reference>
<reference anchor="RFC8799">
  <front>
    <title>Limited Domains and Internet Protocols</title>
    <author fullname="B. Carpenter" initials="B." surname="Carpenter"/>
    <author fullname="B. Liu" initials="B." surname="Liu"/>
    <date month="July" year="2020"/>
    <abstract>
      <t>There is a noticeable trend towards network behaviors and semantics that are specific to a particular set of requirements applied within a limited region of the Internet. Policies, default parameters, the options supported, the style of network management, and security requirements may vary between such limited regions. This document reviews examples of such limited domains (also known as controlled environments), notes emerging solutions, and includes a related taxonomy. It then briefly discusses the standardization of protocols for limited domains. Finally, it shows the need for a precise definition of "limited domain membership" and for mechanisms to allow nodes to join a domain securely and to find other members, including boundary nodes.</t>
      <t>This document is the product of the research of the authors. It has been produced through discussions and consultation within the IETF but is not the product of IETF consensus.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8799"/>
  <seriesInfo name="DOI" value="10.17487/RFC8799"/>
</reference>
<reference anchor="RFC9197">
  <front>
    <title>Data Fields for In Situ Operations, Administration, and Maintenance (IOAM)</title>
    <author fullname="F. Brockners" initials="F." role="editor" surname="Brockners"/>
    <author fullname="S. Bhandari" initials="S." role="editor" surname="Bhandari"/>
    <author fullname="T. Mizrahi" initials="T." role="editor" surname="Mizrahi"/>
    <date month="May" year="2022"/>
    <abstract>
      <t>In situ Operations, Administration, and Maintenance (IOAM) collects operational and telemetry information in the packet while the packet traverses a path between two points in the network. This document discusses the data fields and associated data types for IOAM. IOAM-Data-Fields can be encapsulated into a variety of protocols, such as Network Service Header (NSH), Segment Routing, Generic Network Virtualization Encapsulation (Geneve), or IPv6. IOAM can be used to complement OAM mechanisms based on, e.g., ICMP or other types of probe packets.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9197"/>
  <seriesInfo name="DOI" value="10.17487/RFC9197"/>
</reference>



    </references>

</references>


<?line 906?>

<section anchor="changes-from-draft-bellis-unheaded-sophia-dictionary-02"><name>Changes from draft-bellis-unheaded-sophia-dictionary-02</name>

<t>The following changes are made in draft-03:</t>

<t><list style="numbers" type="1">
  <t><strong>Sub-Dictionary Type System (NEW)</strong>: Added Section 3.2 defining
typed sub-dictionary entries (LEAF, BRANCH, COMPOSITE, ALIAS) for
hierarchical knowledge representation. Includes nested lookup
chains, maximum nesting depth (8 levels), circular reference
detection, BPF map representation, CBOR encoding, and use cases.</t>
  <t><strong>QPACK Compression Headers (NEW)</strong>: Added Section 5 defining
QPACK-based compression for dictionary entries. Includes static
table (24 entries), dynamic table management, encoding format,
compression ratios, decompression limits, and backward
compatibility with draft-02 raw CBOR entries.</t>
  <t><strong>Cross-References to Foundation draft-06 (UPDATED)</strong>: Updated
UNHEADED-FOUNDATION reference from draft-04 to draft-06. Added
Section 1.1 documenting the specification family structure. Added
cross-references to Wotan draft-03 throughout.</t>
  <t><strong>Sophia Sub-Dictionary Type Registry (NEW IANA)</strong>: Added IANA
registry for sub-dictionary type codes (0x00-0xFF).</t>
  <t><strong>Sophia QPACK Static Table Registry (NEW IANA)</strong>: Added IANA
registry for QPACK static table entries.</t>
  <t><strong>Nested Dictionary Security (NEW)</strong>: Added security considerations
for depth limit enforcement, circular reference prevention,
namespace partitioning, QPACK decompression bomb mitigation, and
dynamic table poisoning.</t>
  <t><strong>PQC Key Dictionary Integration (NEW)</strong>: Added PQC_SIG_MAP and
PQC_KEY_MAP BPF map definitions for storing full post-quantum
signatures and public keys.  Defines signature lookup, key rotation
protocol, and algorithm support matrix covering SLH-DSA, ML-DSA,
FN-DSA, ML-KEM, and HQC.</t>
  <t><strong>UPC Opcode Dictionary (NEW)</strong>: Added Sophia-driven instruction
decode for the MBC ISA.  Defines opcode dictionary structure
(root key 0x10, "code" category), 10 instruction class types,
32-byte BPF map entry format, and Sophia-driven decode use cases
(tracing, dynamic dispatch, profiling, validation).</t>
  <t><strong>Updated Date</strong>: Changed date from 2026-03-05 to 2026-03-15.</t>
</list></t>

<t>All changes in draft-03 are purely additive. No existing dictionary
format, wire encoding, or processing rule from draft-02 is modified
or removed. Draft-02 CBOR entries remain valid in draft-03.</t>

</section>
<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>The Linux kernel BPF community (Alexei Starovoitov, Daniel Borkmann,
Song Liu) for the infrastructure enabling per-packet computation in the
kernel datapath.</t>

<t>The authors of RFC 9669 (BPF ISA), RFC 8799 (Limited Domains), and
RFC 9204 (QPACK) for the foundational protocols that make this design
possible.</t>

<t>This document was co-authored with assistance from Claude (Anthropic).</t>

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

