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.

Spec and Line Format

  • 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.

WebSocket Meta Events

  • 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.