livepilot 1.21.2 → 1.21.3

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,138 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.21.3 — Third audit-response: manual-docs drift + sync_metadata file-list widening + unicode-escape regex fix (April 24 2026)
4
+
5
+ Fourth same-day patch in 48 hours, third audit-response in 24 hours.
6
+ Audit #3 surfaced that v1.21.2's `sync_metadata` scope expansion had
7
+ added new check TYPES but didn't widen the FILE LISTS — so docs/manual
8
+ pages kept drifting (1305 devices, 135 enriched, 52 domains) while
9
+ `sync_metadata --check` passed. This patch widens the file lists AND
10
+ fixes a latent regex bug that v1.21.2's new "device" check would have
11
+ triggered with data-corrupting consequences.
12
+
13
+ No API changes. No test additions beyond what `sync_metadata` newly
14
+ enforces. No new features.
15
+
16
+ ### P2 — Manual-doc atlas/domain drift (audit finding)
17
+
18
+ Three manual pages shipped with stale counts through v1.21.2 because
19
+ they weren't in the `sync_metadata` file lists for `enriched` /
20
+ `domain` / the new `device` check:
21
+
22
+ | File | Stale claim | Corrected to |
23
+ |---|---|---|
24
+ | `docs/manual/device-atlas.md` | 1305 devices / 135 enriched / 641 pack-indexed | 5264 / 120 / (claim dropped) |
25
+ | `docs/manual/index.md` | 1305 devices | 5264 |
26
+ | `docs/manual/tool-reference.md` | 1305 devices / 135 enriched / 52 domains | 5264 / 120 / 53 |
27
+
28
+ The 5 numeric substitutions (device count, enriched count, domain count)
29
+ were auto-closed by `sync_metadata --fix` once the file lists were
30
+ widened. The `641 pack-indexed` claim was manually dropped (the fixer
31
+ substitutes numbers, doesn't delete claims) — the shipped atlas has an
32
+ empty `.packs` list, so any specific pack-indexed number would be
33
+ meaningless anyway.
34
+
35
+ ### Critical — Latent regex bug in `check_prose_claim` and `_fix_count`
36
+
37
+ Adding the `"device"` noun to `PROSE_CLAIM_FILES` exposed a regex
38
+ vulnerability that had existed since v1.15-era. `check_prose_claim`'s
39
+ pattern was:
40
+
41
+ ```python
42
+ r"(\d+)[-\s]+(?:[A-Za-z]+\s+)?{noun}s?\b"
43
+ ```
44
+
45
+ No word-boundary assertion at the start. In `manifest.json`, the em-dash
46
+ is stored as the JSON escape `\u2014`. Raw characters are
47
+ `\`, `u`, `2`, `0`, `1`, `4` — so the literal text "2014" appears
48
+ next to a space, next to "device atlas". The regex matched:
49
+
50
+ ```
51
+ ...\u2014 device atlas...
52
+ ^^^^^^^^^^^^^^^
53
+ (captures "2014", next optional word is empty, then "device")
54
+ ```
55
+
56
+ Reported as `manifest.json: has '2014 device', expected '5264 device'`.
57
+ If `sync_metadata --fix` had run, it would have rewritten `\u2014`
58
+ (em-dash) to `\u5264` (CJK ideograph `剤`). The JSON would become
59
+ visually corrupted and linguistically nonsensical.
60
+
61
+ **Prior versions got away with this** because no earlier PROSE_CLAIM
62
+ noun could align adjacent to the 4-char "2014":
63
+ - "tool" starts with `t` — no match
64
+ - "bridge command" starts with `b` — no match
65
+ - "enriched" starts with `e` — no match
66
+ - "semantic move" / "analyzer tool" / "genre default" — none start with `d`
67
+
68
+ The new `"device"` noun (starts with `d`) was the first to align.
69
+ v1.21.2's extension would have shipped a corrupting `--fix` if anyone
70
+ had run it immediately.
71
+
72
+ Fix: leading `\b` assertion on all 4 regex patterns in sync_metadata
73
+ (`check_tool_count`, `check_prose_claim`, `fix_tool_count`,
74
+ `_fix_count`). Word-boundary before `\d+` means the digit must start
75
+ at a non-word-to-word transition — which excludes digits adjacent to
76
+ other word chars (like the `u` in `\u2014`).
77
+
78
+ Verified: post-fix, `check_prose_claim(noun="device")` reports only
79
+ the intended `5264 devices` in `manifest.json` — the `2014` ghost is
80
+ gone. All existing checks (tool count, bridge command, enriched, etc.)
81
+ continue to match correctly because their valid matches are always
82
+ preceded by non-word chars (space, parenthesis, start-of-string, etc.).
83
+
84
+ ### `sync_metadata.py` expansion — new scope + 3 new file-list entries
85
+
86
+ Added:
87
+ * **`get_atlas_device_count()`** + `PROSE_CLAIM_FILES["device"]`
88
+ (threshold=1000) — enforces atlas device-count claims match
89
+ `stats.total_devices`. Deferred from v1.21.2 because generic
90
+ noun="device" was thought too broad; threshold=1000 filters
91
+ historical "5 devices" mentions entirely. Enabled here based on
92
+ audit #3 finding.
93
+ * **`PROSE_CLAIM_FILES["enriched"]`** file list widened: added
94
+ `docs/manual/device-atlas.md`, `docs/manual/tool-reference.md`.
95
+ These had stale "135 enriched" while README said "120".
96
+ * **`DOMAIN_COUNT_FILES`** file list widened: added
97
+ `docs/manual/tool-reference.md`. Its "52 domains" had drifted
98
+ while the rest of the repo was at 53.
99
+
100
+ New `sync_metadata --check` banner reports:
101
+ `version=1.21.3, tools=430, domains=53, bridge_cmds=31, enriched=120,
102
+ genres=4, moves=44, analyzer_tools=38, atlas_devices=5264`.
103
+
104
+ ### Deferred to v1.22
105
+
106
+ - **`check_prose_claim` regex slash-prefix broadening** — still needs
107
+ doing (would let "spectral/analyzer tools" match the "analyzer tool"
108
+ check). Not landed in this patch because it would touch every
109
+ existing noun and warrants its own regression test pass.
110
+ - **Atlas `.enriched` schema decision** — three definitions (87 stats,
111
+ 120 YAML files, 135 flag count). v1.21.3 standardized on 120 across
112
+ all descriptions via widened `enriched` check, but the schema
113
+ question is still open.
114
+ - **`dev-install` path** — still open.
115
+
116
+ ### Scope stats
117
+
118
+ - 1 code fix (`sync_metadata.py` regex `\b` insertion on 4 patterns —
119
+ prevents future unicode-escape corruption)
120
+ - 1 code expansion (`sync_metadata.py` — new `device` check type +
121
+ file-list widening on 2 existing checks)
122
+ - 3 doc corrections auto-closed by `sync_metadata --fix` (9 numeric
123
+ substitutions across 3 manual files) + 1 manual prose-drop (641
124
+ pack-indexed in device-atlas.md)
125
+ - 15 version-string sites + `.amxd` binary patch (2 bytes) + `.maxpat`
126
+ source label + `package-lock.json` (2 fields) bumped 1.21.2 → 1.21.3
127
+ - Test suite: 3124 passed, 1 skipped (unchanged — no-regression patch)
128
+
129
+ ### Credits
130
+
131
+ Third external audit by the repo owner. Fourth same-day patch since
132
+ v1.20.1. Audit-to-ship pattern stable at ~2h per round.
133
+
134
+ ---
135
+
3
136
  ## 1.21.2 — Second audit-response: atlas reconciliation + manual hygiene + sync_metadata expansion (April 24 2026)
4
137
 
5
138
  Second same-day audit-response patch. After v1.21.1 shipped, the repo
Binary file
@@ -34,7 +34,7 @@ outlets = 2; // 0: to udpsend (responses), 1: to buffer~/status
34
34
  // Single source of truth for the bridge version — bumped alongside the
35
35
  // rest of the release manifest. Surfaced in the UI via messnamed("livepilot_version", ...)
36
36
  // so the frozen .amxd visibly reports which build it was last exported from.
37
- var VERSION = "1.21.2";
37
+ var VERSION = "1.21.3";
38
38
 
39
39
  // ── State ──────────────────────────────────────────────────────────────────
40
40
 
@@ -1,2 +1,2 @@
1
1
  """LivePilot MCP Server — bridges MCP protocol to Ableton Live."""
2
- __version__ = "1.21.2"
2
+ __version__ = "1.21.3"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livepilot",
3
- "version": "1.21.2",
3
+ "version": "1.21.3",
4
4
  "mcpName": "io.github.dreamrec/livepilot",
5
5
  "description": "Agentic production system for Ableton Live 12 — 430 tools, 53 domains, 44 semantic moves. Device atlas (5264 devices, 120 enriched, 7 indexes), Splice intelligence (gRPC + GraphQL describe-a-sound + preview + collections + presets), 9-band spectral perception auto-loaded via ensure_analyzer_on_master, Creative Director skill, technique memory, 12 creative intelligence 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.21.2"
8
+ __version__ = "1.21.3"
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.21.2",
9
+ "version": "1.21.3",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "livepilot",
14
- "version": "1.21.2",
14
+ "version": "1.21.3",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  }