livepilot 1.19.0 → 1.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,59 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.19.1 — v1.19.0 polish (April 24 2026)
4
+
5
+ Patch release addressing the three "Known gaps" documented at the
6
+ end of the v1.19.0 CHANGELOG entry. All three were cosmetic or
7
+ observability issues — no correctness changes. 3 new tests + 1
8
+ pre-existing test tolerance widened. Test suite 2854 → 2858 pass.
9
+
10
+ ### Fixes
11
+
12
+ - **#1 `baseline_transport` not exposed via `compare_experiments`.**
13
+ The field was populated internally on `ExperimentSet` (verified
14
+ by unit tests) but `compare_experiments`' MCP response omitted
15
+ it — operators had no surface-level path to verify the
16
+ between-branch drift fix was actually firing. Now present on
17
+ every response (`None` when the experiment hasn't run yet, so
18
+ clients can rely on key presence and check
19
+ `result["baseline_transport"] is None` without `in` guards).
20
+
21
+ - **#2 Tempo warning midpoint rounds to int while range is exact.**
22
+ Pre-v1.19.1 `compile_hybrid_brief` with disjoint tempo ranges
23
+ reported warning text "midpoint 108 BPM" while the returned
24
+ range was 105-110 (centered on 107.5). Two rounding
25
+ conventions — human-facing text rounded to `:0f`, machine-facing
26
+ range kept the exact float. Fix: `:g` format in the warning
27
+ produces the shortest accurate representation (107.5 stays
28
+ "107.5"; 128.0 renders as "128") so both surfaces agree.
29
+
30
+ - **#3 `weights` display full float precision.**
31
+ Uniform 3-packet hybrids rendered weights as
32
+ `0.3333333333333333` — noisy output that contrasted with
33
+ `evaluation_bias.target_dimensions` values already being
34
+ rounded to 4 decimal places. Weights are now rounded to 4 dp
35
+ in the response dict (`[0.3333, 0.3333, 0.3333]`). Internal
36
+ computation still uses full precision; only the output is
37
+ rounded.
38
+
39
+ ### Tests added
40
+
41
+ - `test_compare_experiments_surfaces_baseline_transport` — round-trip
42
+ seed a distinctive baseline on ExperimentSet, assert
43
+ `compare_experiments` surfaces all fields (is_playing, song_time,
44
+ track_states, captured_at_ms).
45
+ - `test_compare_experiments_baseline_none_when_not_captured` — fresh
46
+ experiment has `baseline_transport: None` in the response rather
47
+ than an omitted key.
48
+ - `test_tempo_warning_midpoint_matches_range_center` — regex-parse
49
+ the warning text and assert its numeric midpoint matches the
50
+ returned range's center within 0.01 BPM.
51
+ - `test_weights_rounded_to_4dp` — uniform 3-packet weights must be
52
+ representable at 4 dp precision (`round(w, 4) == w`).
53
+
54
+ Test suite: 2858 pass, 1 skipped. Zero regressions. `sync_metadata
55
+ --check` clean.
56
+
3
57
  ## 1.19.0 — Experiment baseline + hybrid packet compilation (April 24 2026)
4
58
 
5
59
  Minor version bump. Ships two of the three open items documented in
@@ -1,2 +1,2 @@
1
1
  """LivePilot MCP Server — bridges MCP protocol to Ableton Live."""
2
- __version__ = "1.19.0"
2
+ __version__ = "1.19.1"
@@ -333,9 +333,15 @@ def _compile_from_packets(
333
333
  f"{name or 'packet'} {lo:.0f}-{hi:.0f}"
334
334
  for lo, hi, name in tempo_ranges
335
335
  )
336
+ # v1.19.1 #2 — :g format keeps warning midpoint consistent with
337
+ # the returned range center. Pre-v1.19.1 used :.0f (int-rounded)
338
+ # so BC+Dilla reported 'midpoint 108 BPM' while range was
339
+ # 105-110 centered on 107.5 — two rounding conventions.
340
+ # :g gives the shortest accurate representation: 107.5 stays
341
+ # "107.5", 128.0 becomes "128".
336
342
  warnings.append(
337
343
  f"Tempo ranges don't overlap ({range_desc}) — defaulting "
338
- f"to midpoint {midpoint:.0f} BPM. Specify which anchor "
344
+ f"to midpoint {midpoint:g} BPM. Specify which anchor "
339
345
  f"you want or pick a single packet."
340
346
  )
341
347
 
@@ -346,7 +352,10 @@ def _compile_from_packets(
346
352
  return {
347
353
  "type": "hybrid",
348
354
  "source_packets": list(packet_ids),
349
- "weights": list(weights),
355
+ # v1.19.1 #3 — round weights to 4 dp for clean display, matching the
356
+ # convention target_dimensions already uses. Pre-v1.19.1 uniform
357
+ # 3-packet weights rendered as 0.3333333333333333 — noisy output.
358
+ "weights": [round(w, 4) for w in weights],
350
359
  "name": hybrid_name,
351
360
  "sonic_identity": sonic_identity,
352
361
  "reach_for": reach_for,
@@ -601,10 +601,21 @@ def compare_experiments(
601
601
  "evaluation": b.evaluation,
602
602
  }
603
603
 
604
+ # v1.19.1 #1 — surface baseline_transport for operator observability.
605
+ # Always present in the response (None when not captured) so clients
606
+ # can `result["baseline_transport"] is None` instead of checking for
607
+ # key presence first. Populated during run_experiment's first pass.
608
+ baseline_dict = (
609
+ experiment.baseline_transport.to_dict()
610
+ if experiment.baseline_transport is not None
611
+ else None
612
+ )
613
+
604
614
  return {
605
615
  "experiment_id": experiment_id,
606
616
  "request": experiment.request_text,
607
617
  "branch_count": experiment.branch_count,
618
+ "baseline_transport": baseline_dict,
608
619
  "ranking": [
609
620
  {
610
621
  "rank": i + 1,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livepilot",
3
- "version": "1.19.0",
3
+ "version": "1.19.1",
4
4
  "mcpName": "io.github.dreamrec/livepilot",
5
5
  "description": "Agentic production system for Ableton Live 12 — 429 tools, 53 domains. Device atlas (1305 devices), sample engine (Splice + browser + filesystem), auto-composition, spectral perception, technique memory, creative intelligence (12 engines)",
6
6
  "author": "Pilot Studio",
@@ -5,7 +5,7 @@ Entry point for the ControlSurface. Ableton calls create_instance(c_instance)
5
5
  when this script is selected in Preferences > Link, Tempo & MIDI.
6
6
  """
7
7
 
8
- __version__ = "1.19.0"
8
+ __version__ = "1.19.1"
9
9
 
10
10
  from _Framework.ControlSurface import ControlSurface
11
11
  from . import router
package/server.json CHANGED
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/dreamrec/LivePilot",
7
7
  "source": "github"
8
8
  },
9
- "version": "1.19.0",
9
+ "version": "1.19.1",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "livepilot",
14
- "version": "1.19.0",
14
+ "version": "1.19.1",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  }