Skip to content

fix: match standard synth/effect keys to Live 12 names; allow browser reads under --read-only - #131

Merged
6uclz1 merged 1 commit into
mainfrom
fix/live12-standard-keys-and-readonly-search
Oct 23, 2026
Merged

6uclz1 merged 1 commit into
mainfrom
fix/live12-standard-keys-and-readonly-search

Conversation

@6uclz1

@6uclz1 6uclz1 commented Oct 23, 2026

Copy link
Copy Markdown
Owner

What this changes for you

This fixes the three problems found during the live check of #130.

Standard wrappers now work on Live 12. synth wavetable, synth drift, effect utility and effect reverb used to fail on every observe and set with Missing required standard … keys. The spec tables named parameters that Live 12 factory devices do not have:

Device Key Was Now (Live 12.4.6)
Wavetable filter_cutoff / filter_resonance Filter 1 Freq / Filter 1 Res Flt 1 Freq / Flt 1 Res
Drift filter_resonance LP Reso LP Res
Utility gain Gain Output (displayed in dB)
Reverb low_cut / high_cut LowCut, In Filter Freq, … see below

Live 12 Reverb has a single band-pass input filter, with a frequency and a width, rather than separate low and high cuts. The two keys are renamed to match: input_filter_freq → Input Freq and input_filter_width → Input Width. This changes the output of effect reverb keys and master effect reverb keys. Those keys were never in the README, the skill docs or the snapshots. Meld, EQ Eight, Limiter, Compressor and Auto Filter already resolved and are unchanged.

browser search and browser tree work under --read-only. Both only read the browser. They were declared write when the command table was transcribed in a00979b, so --read-only rejected them. They are now read, which is idempotent.

Why the tests did not catch it

The backend test fixtures used the same invented names as the specs, so the tests passed against parameters that do not exist. tests/fixtures/live_12_device_parameter_names.json now holds the parameter names of all nine factory devices, captured from Live 12.4.6. tests/test_standard_parameter_specs_live12.py asserts three things:

  • every standard key of every supported type resolves against those names;
  • the corrected keys point at the intended parameter;
  • the fixture covers every supported type.

The fixture names in tests/test_live_backend.py that no longer resolved were updated to the real names.

Public contract impact

This is an intentional change. In public_contract_snapshot.json, browser search and browser tree change from side_effect.kind write to read, with idempotent set to true. The reverb key names change as described above. The command surface, envelopes, exit codes and protocol are unchanged.

Verification

  • TDD: the new tests failed first (12 failures), then passed after the fix.
  • dev_checks and ruff check pass, and ruff format --check is clean. Full pytest: 1453 passed. The quality harness exits 0 with 0 failures; warnings stay at 416 and duplicate groups at 66. generate_skill_docs.py produces no diff. The Remote Script runtime check passes.
  • Ableton Live 12.4.6, real device. I installed this branch's Remote Script and restarted Live. A Control Surface toggle did not reload synth_specs / effect_specs. I then loaded the factory Wavetable, Drift, Meld, Utility, EQ Eight, Limiter, Compressor, Auto Filter and Reverb into an empty set.
    • observe passes for all nine types.
    • set passes for Wavetable filter_cutoff/filter_resonance, Drift filter_resonance, Utility gain and Reverb input_filter_width. Utility gain 0.2 shows Output at 7.00 dB.
    • --read-only browser search and --read-only browser tree return OK.

Left as is

  • The EQ Eight low_cut_freq / high_cut_freq aliases (LowCut Frequency, …) also do not exist in Live 12. The keys fall back to 1 Frequency A / 8 Frequency A, so low_cut_freq reads the same parameter as band1_freq. They resolve, so this PR leaves them, but the mapping is worth revisiting.
  • The effect parameter set <track> <device> <parameter> <value> example in docs/man/ableton-cli.1.in still uses positional selectors.

🤖 Generated with Claude Code

…s under --read-only

The standard wrappers failed on Live 12.4.6 because the spec tables named
parameters that Live 12 factory devices do not have, and the backend test
fixtures used those same invented names, so the tests passed anyway.

- Wavetable: filter_cutoff/filter_resonance now target "Flt 1 Freq"/"Flt 1 Res".
- Drift: filter_resonance now targets "LP Res".
- Utility: gain now targets "Output" (Live 12 has no "Gain"; it shows dB).
- Reverb: Live 12 has one band-pass input filter, not separate cuts, so the
  low_cut/high_cut keys become input_filter_freq/input_filter_width
  ("Input Freq"/"Input Width"). This changes `effect reverb keys`.

A fixture of parameter names captured from Live 12.4.6 factory devices backs a
test that every standard key of every supported type resolves.

`browser search` and `browser tree` were declared as writes when the command
table was transcribed, so --read-only rejected them. Both only read the
browser; they are now reads. The public contract snapshot records the change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@6uclz1
6uclz1 merged commit bccc29b into main Oct 23, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant