Changelog
← Back to Index
2026-02-14 - Calibration Axes + Templates + Reverse Controls
Calibration Model
- Replaced the prior 7-dial surface with a simplified 4-axis calibration model and mapping functions.
- Added calibration mapping tests for axis/reverse/blend behavior.
Templates
- Embedded built-in templates:
punchy_dry
rolling_melodic
minimal_hypnotic
- Added template persistence beside the executable at
vendetta-calibration-templates.json.
Runtime Calibration State
- Runtime state now carries:
- raw values
- axes
- axis custom flags
- reverse detection + override flag
- blend threshold scale factor
- active template
Engine Runtime Behavior
- Added runtime toggling for reverse detection.
- Added runtime blend-threshold scaling controls.
- Added reverse sustain fallback/reclassification behavior when reverse detection is disabled.
Stream / WS Contract
stream.frame calibration payload now includes:
calibration.reverse_detection
calibration.blend_threshold_scale_factor
- Added inbound calibration controls:
calibration.axes.get
calibration.axes.set
calibration.reverse_detection.set
calibration.templates.get
calibration.template.apply
calibration.template.save
- Existing
calibration.get / calibration.set / calibration.reset responses now return richer calibration metadata (axes/custom/reverse/blend/template).
2026-02-12 - Source Blend Update
Stream Contract
stream.frame now includes:
source_blend (number [0..1])
source_blend_reliable (boolean)
stream.transition schema remains unchanged.
source_blend context is carried by preceding frame events.
Temporal Threshold Scaling
- Dynamic scaling now documented as:
effective = base * (1 + blend * threshold_scale_factor)
variance_confirm_bars and sustain_confirm_bars scaling is capped at 2x.
weight_band_confirm_bars is not scaled.
song.spec.yaml now supports optional segment fields:
source_blend_start
source_blend_end
source_blend_peak_beat
source_blend_reliable
- Line-spec compatibility extended from 10 tokens to 14 tokens, with blend fields optional.
Reactive Audio Mode
- In audio-only mode, source blend is estimated via competing transient heuristic.
- Frames should emit
source_blend_reliable: false for audio-estimated blend.
Testing Coverage
- Added regression coverage for blend-widened presence thresholds to reduce false absence transitions during crossfades.
2026-02-13 - Realtime Calibration (WS Path)
Runtime and CLI
- Added
serve support for --calibration-state <path>.
- Default persisted state behavior documented around
vendetta-calibration-state.json.
- Added
calibration-spec command for YAML export of persisted calibration state/history.
WebSocket Control
- Documented inbound controls:
calibration.get
calibration.set
calibration.reset
calibration.set now supports optional source and partial values patching.
- Documented:
calibration_state
calibration_updated
calibration_reset
calibration_error
- Calibration meta envelopes include
version and t_ms.
calibration_state includes timestamped history entries (at_unix_ms, source, values).
Frame Contract
- Documented
stream.frame additions:
calibration
effective_thresholds
source_blend and source_blend_reliable remain relevant context for interpretation.
Architecture Note
- Live calibration control is currently WS-based; no REST control endpoint documented.
2026-02-13 - Reverse Sustain State
Sustain Model
- Added sustain state:
reverse.
- Sustain conceptual model is now
dry | mid | wet | reverse.
Story Matrix and Labels
- Matrix sustain dimension expanded from 3 to 4 states.
- Matrix combinations expanded from
27 to 36.
- Added 9 reverse story labels:
escalation_heavy_reverse
groove_heavy_reverse
wind_down_heavy_reverse
build_medium_reverse
drive_medium_reverse
cool_medium_reverse
rise_light_reverse
minimal_light_reverse
fade_light_reverse
Stream Contract
- Added trigger enum value:
SustainReversed (optional specialization of SustainChanged).
- Added frame sustain enum value:
reverse.
Song Spec
- Segment sustain now supports
reverse.
- Added reverse segment example with
expected_story_hint: escalation_heavy_reverse.