19. Configuration — MMP Specification

19. Configuration

Wire limits and syntax constants are fixed by the specification. Operational defaults are local policy and are labelled as such. Implementations MUST respect the wire limits; they SHOULD expose operational policy rather than presenting one runtime’s defaults as interoperability law.

19.1 Protocol Constants

ConstantValueNotes
MAX_FRAME_SIZE 1,048,576 bytes Frames exceeding this MUST be rejected
MAX_CATEGORY_TEXT 262,144 bytes UTF-8 length of one category text after NFC (§8.8.6)
MAX_RECORD_TEXT 524,288 bytes Sum of the seven category texts (§8.8.6)
MAX_RECORD_BYTES 737,280 bytes RFC 8785 serialization of the two-section record; fits one sealed frame (§8.8.6)
HANDSHAKE_TIMEOUT 10,000 ms Inbound identification deadline
HEARTBEAT_INTERVAL local policy SYM reference default: 10,000 ms
HEARTBEAT_TIMEOUT local policy SYM reference default: 120,000 ms
WAKE_COOLDOWN 300,000 ms Default per-peer wake rate limit
RELAY_MIN_RATE 25 messages/s A relay that limits a client’s message rate MUST allow at least this, sustained (§4.4.4)
RELAY_MIN_BURST 300 messages A relay that limits a client’s message rate MUST allow at least this burst (§4.4.4)
RELAY_MIN_FANOUT 64 entries A relay that lists fanout MUST accept at least this many entries in one envelope (§4.4.4)
RELAY_ENVELOPE_ALLOWANCE 4,096 bytes A client MUST accept a delivered relay message of up to MAX_FRAME_SIZE plus this, for the from and fromName the relay adds (§4.4.4)
PEER_RETENTION 300,000 ms Stale peer eviction age (peer-registry eviction; see §5.5)
archiveAfterSeconds profile-dependent Inactivity window after which a validated CMB MAY decay to archived (§6.3–§6.4; implementation status §17.6)
MAX_DELEGATION_DEPTH 4 Longest grant chain below the anchor (depth 0); a deeper statement is invalid (§6.6.2)
ANCHOR_MAX_KEYS 16 Most keys in a pinned anchor set; its threshold t is configured with the pin, 1 ≤ t ≤ n (§6.6.1)
AUTHORITY_QUOTA 256 statements Kept per bucket authorised by a grant, its own and those its endorses rescue: revokes and endorses first, then grants, each by ascending id (§6.6.6)
AUTHORITY_ANCHOR_QUOTA 4,096 statements Kept in the anchor’s bucket, by the same rule (§6.6.6)
AUTHORITY_DELEGATE_QUOTA 16 grants Delegating grants (admin, validator, issuer) kept per bucket authorised by a grant, own and rescued (§6.6.6)
AUTHORITY_SCOPE_MAX 256 characters Longest grant scope (§6.6.2)
AUTHORITY_MAX_TARGETS 64 Targets one revoke or endorse may name (§6.6.3)
AUTHORITY_PAGE 64 Ids per authority-fetch, and statements per authority-set (§6.6.8)
AUTHORITY_PENDING_MAX 64 per session Pending statements held in memory per session while their chain is fetched (§6.6.8)
AUTHORITY_PENDING_TIMEOUT 10,000 ms A pending statement is released after this, or when its session closes (§6.6.8)
SELF_SELECT_THRESHOLD 0.1 Minimum own-store relevance for Ask self-selection (§12.10)
DNS-SD_SERVICE_TYPE _sym._tcp Service type for Bonjour discovery
DNS-SD_DOMAIN local. Discovery domain

19.2 Agent Profiles

Each agent type has a pre-built configuration. The profile determines which CMB categories matter most (αf weights), how long signals stay relevant for SVAF evaluation (freshness), and how long remixed CMBs are retained in local storage (retention). New agent types join the mesh by defining their profile — no protocol changes needed.

Freshness and retention are different: freshness controls SVAF temporal drift (how quickly incoming signals become “stale” for evaluation). Retention controls how long the agent’s own remixed CMBs are kept in local storage. Regulated deployments SHOULD set retention according to their compliance obligations — deployment guidance, non-normative; consult counsel for the applicable regime.

Profile Best for Freshness Retention Notes
music Music, ambience 30min 24h Old curations irrelevant. Mood changes fast.
coding Coding assistants, dev tools 2h 7d Session context fades. Weekly patterns useful.
fitness Fitness, health, movement 3h 30d Sedentary patterns need weeks of history.
messaging Chat, notifications, social 1h 7d Conversation context is short-lived.
knowledge News feeds, research, digests 24h 30d News is daily. Trends need monthly context.
legal Legal, compliance, contracts 24h Per regulation Set by jurisdiction. May require years or indefinite.
health Health monitoring, clinical 3h Per regulation Retention is jurisdiction-specific; consult compliance.
finance Finance, trading, compliance 2h Per regulation Retention is jurisdiction-specific; set per applicable regime.
uniform General purpose, prototyping 30min 7d Good starting point. Adjust to your domain.

19.3 CAT7 category weights (αf)

Per-agent category weights control which CMB categories matter most for each agent type. Higher weight = this category has more influence on SVAF evaluation and remix relevance. The schema is fixed (7 categories). The weights are per-agent.

Agent foc iss int mot com per mood
Coding 2 1.5 1.5 1 1.2 1 0.8
Music 1 0.8 0.8 0.8 0.8 1.2 2
Fitness 1.5 1.5 1 1.5 1 1 2
Knowledge 2 1.5 1.5 1 0.5 1.5 0.3
Legal 2 2 1.5 1 2 1.5 0.5
Health 1.5 2 1 1.5 1 1.5 2
Finance 2 2 1.5 1 2 2 0.3

Regulated domains (legal, finance): issue and commitment always high — risks and obligations are non-negotiable. Human-facing domains (music, fitness, health): mood always high — affect drives the experience. Knowledge domains (coding, research): focus always high — subject matter is core.

Custom weights: derive from your domain using these patterns. Implementations SHOULD expose category weights as configuration, not hardcode them.

19.4 SVAF Drift Thresholds

SVAF computes a totalDrift score (0–1) for each incoming memory. Three zones determine acceptance:

Zone Drift Action Default
Redundantmax(δf) < TredundantDiscarded — no category carries novel content0.10
Alignedδtotal ≤ TalignedAccepted, full blending0.25
GuardedTaligned < δtotal ≤ TguardedAccepted, attenuated blending0.50
Rejectedδtotal > TguardedDiscarded — irrelevant domain—

Defaults work for most agents. Override only with domain-specific reason: tighter thresholds for high-precision domains (legal, health), wider for exploratory domains (research, knowledge).

19.5 Mood vs Memory Thresholds

Mood and memory use different acceptance paths:

Signal Gate Default Why
CMB (cmb)SVAF per-category drift0.50 (selective)Full CMB acceptance — domain-specific
Mood categoryExtracted from rejected CMBsAlways deliveredAffect crosses all domain boundaries (Section 9.3)

19.6 Drift Formula

totalDrift = (1 - λ) × fieldDrift + λ × temporalDrift

fieldDrift    = Σ(α_f × δ_f) / Σ(α_f)
temporalDrift = 1 - exp(-age / τ_freshness)
λ             = temporalLambda (default 0.3 = 70% content, 30% time)

At default settings (temporalLambda: 0.3, freshnessSeconds: 1800):

Signal ageTemporal drift contribution
1 minute~0.01 — negligible
30 minutes~0.19 — noticeable
2 hours~0.29 — likely pushes over threshold