Skip to content

Pluggable Policies

Without the protocol/policy distinction, the Synixolis spec is either too rigid or too loose. Too rigid: if decay rates, classification heuristics, and condensation triggers are hardwired into the protocol, every deployment must use identical parameters regardless of domain, workload, or operating constraints — the spec becomes a straitjacket that prevents adaptation. Too loose: if everything is configurable, “Synixolis-conforming” degrades to “does whatever it wants” — the spec provides no guarantees.

Pluggable policies resolve this by separating what MUST be true (protocol) from what CAN vary (policy). The protocol defines structural invariants derived from CDR theory and the node contract (Section 3). Policies define the parameters within those invariants that implementations tune for their environment. Human priors set the starting configuration. Modification gates control what the system can change autonomously versus what requires human approval.

This maps directly to the distributed systems distinction between algorithm (fixed — the consensus protocol, the replication strategy, the consistency model) and configuration (tunable — timeout values, replication factor, batch sizes). Modification gates are access control on configuration — the same concept as IAM policies on infrastructure settings, or the distinction between sysctl parameters a process can tune and those that require root.

OperationTimescale
Policy evaluation (reading current configuration)Per-operation (ms) — policies are always loaded
Human prior initializationOnce, at node creation
System-proposed policy changesDays to weeks — requires accumulated evidence from eval traces
Human-approved policy changesDays to weeks — human review cycle
Protocol changesNever within a deployment. Protocol evolves only through the spec evolution process (Section 7).

Policy changes operate on days-to-weeks timescales because the evidence required to justify a change (eval traces, pattern detection, counterfactual evaluation) accumulates over that period. The protocol itself is permanent within a given spec version — it does not change during operation.

ConceptDS Analogue
Protocol requirementsAlgorithm invariants (consensus safety properties, consistency guarantees)
Policy parametersConfiguration (timeouts, batch sizes, replication factors)
Human priorsInitial configuration / bootstrap parameters
Modification gatesAccess control on configuration (IAM, RBAC on infrastructure settings)
system_auto gateProcess-tunable parameters (sysctl values a service can adjust)
system_propose_human_approve gateChange management with approval workflow (Terraform plan/apply, GitOps PR review)
human_only gateRoot-only parameters (kernel parameters, security policy)
locked gateImmutable infrastructure (read-only filesystem, signed configuration)

5.1 Protocol Requirements (Non-Negotiable)

Section titled “5.1 Protocol Requirements (Non-Negotiable)”

These are structural invariants derived from CDR theory and the node contract. They are not configurable. A system that violates any of these is non-conforming regardless of its policy configuration.

Memory MUST be divided into regions with different metabolic rates.

  • Source: CDR Theorem 2 (Temporal Partitioning) — multi-timescale sources require timescale-matched partitions.
  • What is fixed: The requirement that regions exist and that each region has a distinct lifecycle (timescale, decay behavior, renewal mechanism). The minimum region count is three (fast, slow, permanent).
  • What is policy: The number of regions beyond the minimum, their names, and their specific timescale boundaries (Section 5.2.1).

Every memory entry MUST carry a provenance chain that terminates at a verifiable source.

  • Source: Traceability is the foundation of the eval loop, the fault isolation subsystem, and colony trust. Without provenance, entries cannot be audited, contradictions cannot be traced to their origin, and fault isolation cannot determine blast radius.
  • What is fixed: The requirement that provenance exists, that it is acyclic, and that it terminates at a verifiable source (user input or tool output).
  • What is policy: Nothing. Provenance format is defined in the entry schema (Section 3.2). There are no tunable provenance parameters.

Regions with active lifecycle MUST implement decay (confidence degradation over time) and renewal (confidence restoration on positive evidence).

  • Source: CDR Theorem 3 (Finite Optimal Lifespan) — every compression scheme degrades under distributional drift. Renewal at the optimal interval is computable.
  • What is fixed: The requirement that decay occurs, that renewal occurs, and that the maintenance path implements both. Entries that are never renewed MUST eventually fall below archival threshold.
  • What is policy: Decay rates, renewal amounts, archival thresholds, decay schedules (Section 5.2.2).

The node MUST emit structured telemetry conforming to the event classes defined in Section 3.6.

  • Source: The eval trace is the measurement system. Without it, the evolution path has no data, the maintenance path has no scheduling signal, and fault isolation has no detection input. The feedback loop is structural — remove it and CDR renewal becomes guesswork.
  • What is fixed: The requirement that traces are emitted, that they conform to defined event classes, that they are append-only, and that they are queryable by the dimensions specified in Section 3.6.
  • What is policy: Trace retention period beyond the required minimum, sampling rate for high-volume event types, storage format.

The system MUST support the progression from Level 0 (pure inference) through Level 2 (convention compilation), with compiled rules carrying provenance and a finite lifespan.

  • Source: Without the optimization ladder, the system has no path to reducing inference cost. Without lifespan on compiled rules, optimization is a one-way ratchet that accumulates stale rules (violating CDR Theorem 3 applied to the protocol itself).
  • What is fixed: The requirement that the evolution path exists (trace, analyze, propose, evaluate, compile, demote), that compiled rules carry provenance and review dates, and that degraded rules are demoted.
  • What is policy: Compilation thresholds (how much evidence is enough), review intervals for compiled rules, demotion thresholds (Section 5.2.6).

The node MUST run per-operation invariant validation: provenance chain validation, schema enforcement, and rate limiting.

  • Source: Section 3 (node contract) and Section 7b (fault isolation). Invariant checks are the fast-path fault detection layer. Without them, Byzantine faults propagate through shared state before any other detection mechanism can respond.
  • What is fixed: The requirement that invariant checks run on every write, spawn, and convention proposal. The specific invariants (provenance acyclicity, schema conformance, rate limits).
  • What is policy: Rate limit values, conflict detection sensitivity (Section 5.2.8).

Each policy parameter has a default value (the reference configuration), a valid range, and a modification gate controlling who can change it (Section 5.4).

policy:
regions:
count: 5 # Valid range: [3, 7]. Default: 5.
# Minimum 3 required: fast (active decay),
# slow (review cycle), permanent (human-gated).
# Glacier is implicit (archive target).
names:
- ephemeral # Policy. Any name is valid.
- operational # The protocol requires distinct lifecycle
- structural # per region, not specific names.
- identity
- glacier
timescale_boundaries:
ephemeral_max: 24h # Default: 24h. Entries older than this in
# ephemeral are protocol violations.
operational_max: 30d # Default: 30d. Guidance, not hard boundary.
structural_max: 365d # Default: 365d. Guidance, not hard boundary.

Constraints: Each region MUST have a distinct lifecycle configuration (timescale, decay behavior). Two regions with identical lifecycle parameters are redundant — the implementation SHOULD merge them or differentiate their decay/renewal behavior.

policy:
decay:
operational:
rate: 0.05 # Confidence loss per day. Default: 0.05.
unit: day # Time unit for rate. Default: day.
schedule: 24h # How often decay is applied. Default: 24h.
structural:
rate: 0.01 # Confidence loss per day. Default: 0.01.
unit: day
schedule: 7d # Structural decay applied weekly. Default: 7d.
archival_threshold:
operational: 0.3 # Below this confidence → archive. Default: 0.3.
structural: 0.2 # Default: 0.2.

Constraints: Decay rates MUST be non-negative. A rate of 0.0 is valid (no decay) but the implementation MUST still run the decay pass — the protocol requires the mechanism to exist even if the current configuration sets the rate to zero. This preserves the ability to increase the rate later without structural changes.

policy:
classification:
method: timescale_heuristic # One of: timescale_heuristic, triad_decomposition,
# domain_rules, llm_inference.
# Default: timescale_heuristic.
rules: # Compiled classification rules (populated by evolution path).
- pattern: "source:meeting-transcript"
region: operational
confidence: 0.95
compiled_from: "traces 2026-01-15 to 2026-02-01"
review_date: "2026-04-01"
- pattern: "source:architecture-review"
region: structural
confidence: 0.90
compiled_from: "traces 2026-02-01 to 2026-02-15"
review_date: "2026-05-01"
fallback: llm_inference # When no rule matches. Default: llm_inference.

Constraints: The rules list is populated by the evolution path (Section 3.3.4). Rules MUST carry provenance (compiled_from) and a review date. Rules past their review date MUST be re-evaluated before continued use.

policy:
condensation:
min_observations: 3 # Minimum observation count before pattern promotion.
# Default: 3.
min_time_span: 14d # Observations must span at least this duration.
# Default: 14 days.
min_confidence: 0.5 # Minimum average confidence of source observations.
# Default: 0.5.
promotion_target: structural # Default target region for condensed entries.
# Default: structural.

Constraints: min_observations MUST be >= 2 (a single observation is not a pattern). min_time_span MUST be > 0 (observations at a single point in time do not demonstrate persistence).

policy:
confidence:
initial_values:
ephemeral: 1.0 # Ephemeral entries start at full confidence.
operational: 0.8 # Default: 0.8.
structural: 0.9 # Structural entries require higher initial confidence.
identity: 1.0 # Identity entries are fully confident by definition.
renewal_amount:
operational: 0.3 # Confidence boost on renewal. Default: 0.3.
structural: 0.2 # Default: 0.2.
contradiction_penalty: 0.2 # Confidence reduction on lower-confidence entry
# when contradiction detected. Default: 0.2.

Constraints: All confidence values MUST be within [0.0, 1.0]. initial_values + renewal_amount MUST NOT exceed 1.0 (confidence is clamped at ceiling).

policy:
evolution:
compilation_threshold:
min_traces: 50 # Minimum trace count supporting a pattern. Default: 50.
min_accuracy: 0.95 # Minimum accuracy across traces. Default: 0.95.
rule_review_interval: 60d # How often compiled rules are re-evaluated. Default: 60 days.
demotion_threshold: 0.7 # Accuracy below this triggers demotion. Default: 0.7.
demotion_window: 50 # Trailing number of classifications to evaluate. Default: 50.
policy:
ingestion:
method: passthrough # One of: passthrough, triad, entity_extraction,
# custom. Default: passthrough.
triad_config: # Only relevant if method is triad.
facets: [E, R, V, X] # Epistemic, Relational, Values, eXceptions.
parallel: true # Process facets in parallel. Default: true.
entity_extraction_config: # Only relevant if method is entity_extraction.
model: llm # Extraction model. Default: llm.

Constraints: The ingestion method determines how raw input is decomposed into candidate entries at the ingest stage of the write path (Section 3.3.1). The ingestion output MUST conform to the entry schema — regardless of decomposition strategy, each candidate entry MUST have content and source populated.

policy:
query_routing:
cascade_order:
- ephemeral
- operational
- structural
- identity
- glacier
early_termination: true # Stop cascade on first sufficient result. Default: true.
glacier_on_miss: true # Always check glacier on complete miss. Default: true.
max_results_per_region: 10 # Default: 10.

Constraints: The cascade MUST include all active regions. The cascade MUST terminate at glacier (if glacier_on_miss is true) or return empty (if false). Skipping regions in the cascade is a protocol violation — the page-fault model requires ordered traversal.

policy:
fault_detection:
rate_limits:
writes_per_node_per_hour: 100 # Default: 100.
spawns_per_node_per_day: 5 # Default: 5.
convention_proposals_per_week: 3 # Default: 3.
conflict_sensitivity:
self_conflict_window: 20 # Trailing writes to check for self-contradiction.
# Default: 20.
self_conflict_threshold: 0.3 # Fraction of self-conflicting writes triggering
# anomaly elevation. Default: 0.3.
cross_node_conflict_threshold: 0.2 # Fraction of cross-node conflicts triggering
# anomaly elevation. Default: 0.2.
fence_duration: 24h # Default auto-lift duration for fences
# without confirming evidence. Default: 24h.
provenance_audit:
interval: 14d # Default audit cycle. Default: 14 days.
post_incident_interval: 3d # Tightened cycle after fault incidents. Default: 3 days.
budget_fraction: 0.1 # Fraction of inference budget for auditing.
# Default: 0.1.
policy:
fault_response:
monitor: system_auto # System can elevate monitoring autonomously.
fence: system_auto # System can fence nodes autonomously.
rollback: system_propose_human_approve # Shared state rollback requires human approval.
excise: system_propose_human_approve # Targeted removal requires human approval.
reset: human_only # Node reset always requires human approval.
policy:
lifecycle_gates:
newborn_grace_period: 10 # Interactions before a new node can spawn.
# Default: 10.
minimum_context_tokens: 2048 # Free tokens required before spawn is permitted.
# Default: 2048.
drift_threshold: 0.7 # Scope drift level triggering spawn consideration.
# Default: 0.7.
drift_weight: 1.0 # Weight of scope drift in handle_cost calculation.
# Default: 1.0.
state_digest_max_tokens: 512 # Maximum size of compressed state passed to
# successor on renewal spawn. Default: 512.
policy:
maintenance:
budget_fraction: 0.15 # Fraction of inference budget for maintenance.
# Default: 0.15 (15%).
priority_order: # When budget is insufficient, run in this order.
- fault_response # Always first — containment before cleanup.
- expire # Ephemeral TTL enforcement.
- decay # Confidence reduction pass.
- condensation # Observation-to-pattern promotion.
- provenance_audit # Cross-reference integrity.
- convention_review # Compiled rule re-evaluation.

Human priors are the starting configuration provided at node creation. They set the initial policy values before the system has any operational evidence to inform adaptation. The system operates on these priors until the evolution path accumulates enough trace evidence to propose changes.

priors:
# Ingestion strategy
ingestion: triad # Use E/R/V/X facet decomposition
# Region tuning
operational_decay_rate: 0.07 # Faster decay than default (7% per day vs 5%)
structural_review_interval: 30d # Monthly structural review (vs default quarterly)
# Condensation tuning
condensation_min_observations: 5 # Require more evidence before pattern promotion
condensation_min_time_span: 21d # Require longer observation window
# Classification shortcuts
classification_rules:
- pattern: "source:meeting"
region: operational
- pattern: "source:architecture-review"
region: structural
- pattern: "source:user-correction"
region: identity
# Fault detection tuning
fence_duration: 48h # Longer fence window for environments
# with infrequent sessions
# Maintenance budget
maintenance_budget_fraction: 0.20 # Allocate more budget to maintenance
# in high-volume environments
  1. Priors MUST be valid policy values. A prior that violates policy constraints (e.g., condensation_min_observations: 1) MUST be rejected at node initialization with a logged error.
  2. Any policy parameter not specified in priors takes its default value.
  3. Priors are the Level 0 (pure inference) starting point. They are subject to the evolution path — if the system accumulates evidence that a prior is suboptimal, it MAY propose a change (subject to modification gates, Section 5.4).
  4. Priors themselves carry implicit provenance: they originate from the human operator. Changes proposed by the evolution path carry trace-based provenance. This provenance distinction is visible in the compiled rules list.

The reference implementation ships with a default prior set corresponding to the default values in Section 5.2. Implementations MAY provide domain-specific prior templates:

TemplateDescriptionKey Differences from Default
defaultGeneral-purpose single nodeAll defaults as specified in 5.2
high-volumeEnvironments with frequent interactionsHigher rate limits, faster decay, shorter condensation windows
researchKnowledge-heavy, low-frequency interactionsSlower decay, higher condensation thresholds, larger audit budget
team-colonyMulti-node colony for team knowledgeColony-aware defaults, longer fence durations, stricter promotion thresholds

Modification gates define the access control policy on configuration changes. They answer: who can change this parameter, and through what process?

gate_types:
locked:
description: Immutable within a spec version. Cannot be changed by the system
or by human configuration. Changes require a new spec version.
who_changes: spec authors only (protocol evolution)
process: out-of-band spec revision
applies_to: protocol requirements (Section 5.1)
human_only:
description: Only the human operator can change this value. The system MUST NOT
propose changes. The system MAY surface information relevant to the
parameter (e.g., "identity entries have not been reviewed in 6 months")
but MUST NOT frame it as a change proposal.
who_changes: human operator
process: direct configuration edit
applies_to: identity region content, colony steering parameters (max colony size,
budget, protected domains), node reset approval
system_propose_human_approve:
description: The system MAY propose a change based on accumulated evidence.
The proposal MUST include the evidence (trace IDs, accuracy metrics,
counterfactual evaluation results). The change takes effect only
after human approval.
who_changes: system proposes, human approves
process: proposal logged to protocol/changelog.md, human reviews and accepts/rejects
applies_to: decay rates, confidence thresholds, fault detection thresholds,
shared state rollback, fault excision
system_auto:
description: The system MAY make changes autonomously based on accumulated evidence,
subject to the evolution path requirements (Section 3.3.4). All changes
MUST be logged with full provenance and are subject to demotion if
they degrade.
who_changes: system (autonomous)
process: evolution path (trace → analyze → propose → evaluate → compile)
applies_to: classification rules, query routing patterns, condensation templates,
contradiction detection heuristics, fault fencing, monitoring escalation

The complete mapping of policy parameters to modification gates:

Policy ParameterGateRationale
Region count and nameshuman_onlyChanging the region topology is a structural decision
Region timescale boundariessystem_propose_human_approveSystem may learn better boundaries, but structural change needs oversight
Decay ratessystem_propose_human_approveDecay rate changes affect retention globally; human should validate
Archival thresholdssystem_propose_human_approveDetermines what gets preserved; human oversight warranted
Classification rulessystem_autoHigh-frequency optimization target; evolution path handles lifecycle
Classification methodhuman_onlySwitching ingestion strategy is a structural decision
Condensation triggerssystem_propose_human_approveAffects pattern quality; human should validate evidence
Confidence initial valuessystem_propose_human_approveAffects entry lifecycle trajectory
Confidence renewal amountssystem_propose_human_approveAffects how quickly entries recover from decay
Contradiction penaltysystem_propose_human_approveAffects how aggressively conflicts degrade existing knowledge
Evolution compilation thresholdssystem_propose_human_approveMeta-parameter: controls how aggressively the system self-modifies
Rule review intervalssystem_autoRoutine lifecycle management
Demotion thresholdssystem_propose_human_approveMeta-parameter: controls when the system abandons learned rules
Ingestion methodhuman_onlyStructural choice
Query routing cascade ordersystem_propose_human_approveAffects retrieval behavior; human should validate
Early terminationsystem_autoPerformance optimization, low risk
Rate limitssystem_propose_human_approveSecurity-relevant; human oversight warranted
Conflict sensitivity thresholdssystem_propose_human_approveAffects fault detection sensitivity
Fence durationsystem_propose_human_approveAffects how long a suspected node is isolated
Provenance audit intervalsystem_autoRoutine scheduling; adaptive tightening after incidents is autonomous
Audit budget fractionsystem_propose_human_approveBudget allocation is a resource decision
Fault response gates (per-level)human_onlyDetermines the autonomy boundary for fault response
Lifecycle gate parameterssystem_propose_human_approveAffects spawn behavior; human should validate
Maintenance budget fractionsystem_propose_human_approveBudget allocation is a resource decision
Maintenance priority orderhuman_onlyDefines triage policy; structural decision
Identity region entrieshuman_onlyIdentity is human-defined by protocol requirement
Colony max sizehuman_onlyResource boundary
Colony budgethuman_onlyResource boundary
Colony protected domainshuman_onlyOrganizational decision
Colony spawn approval modehuman_onlyAutonomy boundary
Protocol requirements (Section 5.1)lockedCDR-derived invariants; not configurable

Every policy change MUST be logged to protocol/changelog.md with:

policy_change:
timestamp: ISO-8601
parameter: string # which parameter changed
old_value: any # previous value
new_value: any # new value
gate: string # which gate authorized the change
initiator: system | human # who initiated the change
evidence: string | null # trace evidence (for system-initiated changes)
approved_by: string | null # human approver (for system_propose_human_approve gates)

This log is append-only. It provides the audit trail for all configuration changes and is a primary input for diagnosing policy-related issues in the fault isolation subsystem.


5.5 Protocol vs. Policy: The Decision Rule

Section titled “5.5 Protocol vs. Policy: The Decision Rule”

When deciding whether a new mechanism belongs in protocol or policy, apply the following test:

  1. Is it derivable from CDR theory? If removing this mechanism would violate one of the four CDR theorems, it is protocol. Example: decay exists because CDR Theorem 3 proves compression schemes degrade. The specific decay rate is not derivable from the theorem — it depends on the domain.

  2. Do other subsystems depend on its existence (not its value)? If the eval loop, the fault isolation layer, or colony coordination structurally depend on this mechanism existing, it is protocol. Example: telemetry emission is protocol because the evolution path cannot function without traces. The trace retention period beyond the minimum is policy.

  3. Can a reasonable implementation choose differently without breaking the system? If yes, it is policy. Example: a 14-day operational decay rate is reasonable. So is a 7-day rate. So is a 30-day rate. The system functions correctly with any of these values. Therefore the specific rate is policy.

  4. Would removing this mechanism require a different protocol to compensate? If yes, it is protocol. Example: provenance is protocol — without it, you would need an entirely different trust and audit mechanism to compensate.

This test is not algorithmic — it requires judgment. When in doubt, make it protocol. It is easier to relax a protocol requirement into a policy parameter in a future spec version than to harden a policy parameter into a protocol requirement after implementations have diverged.