livepilot 1.21.3 → 1.21.4

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,106 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.21.4 — v1.21.2 audit carry-over: slashed-compound filler + dev-install runbook (April 25 2026)
4
+
5
+ Ships two items the v1.21.2 audit #2 deferred to v1.22 but that turned
6
+ out to be safer to close in a patch cycle than to carry forward:
7
+
8
+ 1. **`check_prose_claim` regex widen for slashed/chained compound fillers** —
9
+ `"38 spectral/analyzer tools"` drift across 3 docs silently passed
10
+ `sync_metadata --check` because the filler group required trailing
11
+ whitespace. Now caught.
12
+ 2. **Dev-install runbook** (`docs/manual/dev-install.md`) — documented
13
+ path for contributors to run LivePilot from a local checkout without
14
+ publishing to npm. Previously every contributor had to reverse-engineer
15
+ this from `bin/livepilot.js` + `mcp_server/__main__.py`.
16
+
17
+ No API changes. No user-observable behavior change at runtime. Four new
18
+ TDD regression tests for the regex widening; ~180 lines of new
19
+ documentation. `sync_metadata --check` now catches an entire class of
20
+ compound-form drift that would otherwise have shipped untracked.
21
+
22
+ ### 1. `sync_metadata` slashed/chained compound filler
23
+
24
+ All 4 regex patterns in `scripts/sync_metadata.py` (`check_tool_count`,
25
+ `check_prose_claim`, `fix_tool_count`, `_fix_count`) had an optional
26
+ filler group that required trailing whitespace —
27
+ `[A-Za-z]+\s+` — and matched at most once (`?` quantifier). Slashed
28
+ compounds like `"spectral/analyzer"` were rejected because `/` is not
29
+ whitespace; chained compounds like `"spectral/MCP tools"` (two filler
30
+ segments) were rejected because of the single-match quantifier.
31
+
32
+ v1.21.4 widens the filler to two branches, iterable 0+ times:
33
+
34
+ | Branch | Pattern | Matches |
35
+ |---|---|---|
36
+ | (a) Space-joined, uppercase-anchored | `[A-Z][A-Za-z\-]*\s+` | `"MCP "` in `"430 MCP Tools"` |
37
+ | (b) Slash-joined, any-case | `[A-Za-z][A-Za-z\-]*/` | `"spectral/"` in `"38 spectral/analyzer tools"` |
38
+
39
+ The uppercase anchor on branch (a) is preserved deliberately — without
40
+ it, lowercase English articles ("the tool") would false-positive on
41
+ prose like "released in 2020 the tool was first previewed." The slash
42
+ on branch (b) is itself an unambiguous compound marker that doesn't
43
+ appear in normal English, so any-case there is safe. The `*` quantifier
44
+ lets branches chain: `"300 spectral/MCP tools"` now parses as
45
+ `(b)"spectral/"` + `(a)"MCP "` + `"tools"`.
46
+
47
+ For `check_prose_claim` + its paired `_fix_count`, the filler is a
48
+ simpler single-branch `[A-Za-z][A-Za-z\-]*(?:/|\s+)` — these don't need
49
+ the uppercase anchor (prose-claim nouns predate the v1.21.4 cycle and
50
+ already allowed lowercase-start fillers).
51
+
52
+ **Concrete effect**: `sync_metadata --check` now flags drift in all 3
53
+ real surfaces that previously escaped:
54
+
55
+ - `README.md` — `"38 spectral/analyzer tools"` × 2
56
+ - `docs/manual/getting-started.md` — `"38 spectral/analyzer tools"` × 1
57
+ - `livepilot/skills/livepilot-release/SKILL.md` — `"38 spectral/analyzer tools"` × 1
58
+
59
+ (Today these say "38" and the count is 38, so no drift reported — but
60
+ the next time the analyzer module gains or loses a `@mcp.tool`, CI will
61
+ fail loudly instead of silently drifting.)
62
+
63
+ Tests added to `tests/test_claim_consistency.py` (4):
64
+
65
+ - `test_prose_claim_catches_slashed_compound` — drift detection
66
+ - `test_fix_count_rewrites_slashed_compound` — `--fix` preserves the adjective
67
+ - `test_tool_count_catches_slashed_compound` — chained filler (`"300 spectral/MCP tools"`)
68
+ - `test_tool_count_no_false_positive_on_year_prose` — uppercase anchor guard
69
+
70
+ ### 2. Dev-install runbook
71
+
72
+ New file `docs/manual/dev-install.md` (~180 lines) documents the
73
+ bare-python local-checkout workflow for contributors:
74
+
75
+ 1. **venv setup** — `python3 -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt`
76
+ 2. **Local Remote Script install** — `node bin/livepilot.js --install` (NOT `npx livepilot --install`, which resolves to the registry and silently discards local edits)
77
+ 3. **MCP client config pointing at `python -m mcp_server`** — per-client examples for Claude Desktop, Claude Code, Cursor/VS Code
78
+ 4. **Iterate loop** — client restart for `mcp_server/` edits; `node bin/livepilot.js --install` + `reload_handlers` tool for `remote_script/` edits
79
+ 5. **Test suite** — `python -m pytest tests/ -q` (3128 tests as of v1.21.4)
80
+ 6. **`sync_metadata` drift check** — `python scripts/sync_metadata.py --check` / `--fix`
81
+ 7. **Going back to published** — remove the dev MCP entry or stop using it
82
+
83
+ Plus a troubleshooting section for the 4 most common first-run failures:
84
+ `ModuleNotFoundError: No module named 'mcp_server'`, `Another client is
85
+ already connected` on port 9878, stale `__pycache__` shadowing edits, and
86
+ module-level constants not reloading via `reload_handlers` (full Ableton
87
+ restart required).
88
+
89
+ Cross-links added:
90
+
91
+ - `docs/manual/getting-started.md` — callout at top routing contributors to dev-install before they commit to the npm path
92
+ - `docs/manual/index.md` — new "Contributing" section in the Chapters TOC
93
+ - `CLAUDE.md` — pointer in the Project section
94
+
95
+ ### Carried forward to v1.22
96
+
97
+ Still deferred from the v1.21.2 audit:
98
+
99
+ - Atlas `.enriched` schema canonicalization (`stats.enriched_devices = 87`
100
+ vs 120 YAML files vs 135 historical claim — pick one and derive the
101
+ others at build time; add a sync_metadata gate matching JSON stats to
102
+ YAML file count)
103
+
3
104
  ## 1.21.3 — Third audit-response: manual-docs drift + sync_metadata file-list widening + unicode-escape regex fix (April 24 2026)
4
105
 
5
106
  Fourth same-day patch in 48 hours, third audit-response in 24 hours.
Binary file
@@ -1,2 +1,2 @@
1
1
  """LivePilot MCP Server — bridges MCP protocol to Ableton Live."""
2
- __version__ = "1.21.3"
2
+ __version__ = "1.21.4"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livepilot",
3
- "version": "1.21.3",
3
+ "version": "1.21.4",
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.3"
8
+ __version__ = "1.21.4"
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.3",
9
+ "version": "1.21.4",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "livepilot",
14
- "version": "1.21.3",
14
+ "version": "1.21.4",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  }