Resolved Runtime Defaults¶
Why resolved defaults are documented¶
Operators often debug failures in the gap between declared bindings and inferred execution state. This page closes that gap by listing exact inferences made from input declarations before runtime.
Operator perspective¶
This page is the “intent-to-runtime translator.” If you change YAML, this page is the first check to confirm what those changes actually become at execution time.
Use it as a preflight artifact when:
- a domainpack import appears to run with unexpected layer or channel counts;
- an actuator seems unbounded or missing controls in a live run;
- or replay audits are compared across environments and need explicit alignment.
The goal is to prevent hidden behavior from entering a control loop: if the resolved defaults are wrong, the run should be corrected at configuration level before any high-confidence control assumptions are made.
That makes execution behavior reviewable before a long simulation starts.
This page makes YAML-default behavior explicit by documenting runtime choices
that are inferred from binding_spec.yaml and shown via:
spo validate <binding_spec>spo inspect <binding_spec>spo run <binding_spec>- audit header metadata (
binding_summaryand backward-compatiblebinding_config)
Inferred values¶
| Runtime field | Inference rule | Source |
|---|---|---|
name/version/safety_tier |
Loaded from binding metadata and echoed unchanged | name, version, safety_tier |
engine_mode |
stuart_landau when amplitude: is present; otherwise kuramoto |
binding_spec.amplitude |
sample_period_s/control_period_s |
Loaded directly from YAML | sample_period_s, control_period_s |
control_interval_steps |
max(1, round(control_period_s / sample_period_s)) |
control_period_s, sample_period_s |
layer_count |
Number of layers entries |
layers |
oscillator_count |
Sum of oscillator_ids in all layers |
layers[].oscillator_ids |
unassigned_layer_count |
Number of layers where family is unset |
layers[].family |
features.amplitude |
Enabled when amplitude config is declared | amplitude: block |
features.geometry_prior |
Enabled when geometry prior config is declared | geometry_prior: block |
features.imprint_model |
Enabled when imprint config is declared | imprint_model: block |
features.protocol_net |
Enabled when protocol net config is declared | protocol_net: block |
resolved_extractor_type |
Canonical extractor class resolved from family extractor_type alias |
oscillator_families.*.extractor_type |
channels |
Inferred from layers + families and sorted for deterministic output. Includes role/replay/supervisor metadata when declared | oscillator_families, channels |
families |
Derived family summary including extractor alias and declared config keys | oscillator_families |
layers |
Inferred layer summaries with resolved channel and oscillator span | layers, oscillator_families |
channel role/replay/supervisor metadata |
Uses declared channel metadata; omitted when channel is undeclared | channels: block |
channel_groups |
Copied through and normalised by name | channel_groups |
cross_channel_couplings |
Copied through from explicit declarations | cross_channel_couplings |
coupling |
Copies base coupling structure fields | coupling |
objectives |
Copies objective weights and layer partitioning | objectives |
boundaries |
Boundaries with names and severity only | boundaries |
actuators |
Actuator names, knobs, scopes, and limits | actuators |
Visibility contract¶
This contract keeps run intent readable in two places: CLI output and audit records. The same summary is visible in both review surfaces so one can validate an outcome without recomputing all defaults from scratch.
- CLI output prints the resolved summary before execution.
- Audit header stores the same
binding_summarypayload for replay/report. - Driver values are not copied into summary metadata; only structural keys are retained to avoid leaking deployment-local endpoint details.
Operator workflow¶
- Run
spo validateand confirm resolved summary. - Run
spo inspectwhen reviewing channel algebra and cross-channel coupling. - Run
spo run --audit ...and verifybinding_summaryis present in the generated audit header before promoting the run artifact.
Operational consequence¶
Resolved defaults are the boundary between intent and execution:
- they make the runtime effective configuration explicit before simulation begins,
- they preserve operator trust by making inferred execution defaults reproducible,
- and they reduce ambiguity when comparing failures across environments.
When an operator reports unexpected behavior, this page is the first artifact to compare: if the runtime summary differs from the declared spec intent, the issue is usually in binding declaration or adapter pre-processing, not in core dynamics.