Skip to content

Commit 70470ab

Browse files
dreamrecclaude
andcommitted
docs: mark the .amxd re-freeze batch shipped at 1.28.0
Records the procedure that actually worked (Live's embedded Max via the device's '...' menu -> Edit in Max -> snowflake -> Cmd-S), since standalone Max is unusable with an expired license and reports it only as a '(saving disabled)' title. Keeps the follow-up list (MIDITool and Elektron bridges remain untokened on the same exposed port class). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent 9856f82 commit 70470ab

1 file changed

Lines changed: 40 additions & 28 deletions

File tree

docs/PENDING_AMXD_REFREEZE.md

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,56 @@
1-
# Pending .amxd Re-Freeze Batch — LivePilot_Analyzer
1+
# .amxd Re-Freeze Batch — LivePilot_Analyzer — SHIPPED 2026-07-31
22

3-
**Status: PREP COMPLETE — awaiting the Max export (a USER action).**
3+
**Status: FROZEN AND SHIPPED at 1.28.0.** Everything below is now live in the
4+
frozen device; the note is kept for the procedure and the follow-up list.
45

5-
Everything that can be done outside Max is done as of 2026-07-31:
6-
7-
| Prep step | State |
6+
| Result | |
87
|---|---|
9-
| Version bumped to 1.28.0 across all enforced files | DONE (`sync_metadata.py --check` clean) |
10-
| `var VERSION` in `livepilot_bridge.js` bumped to 1.28.0 | DONE |
11-
| JS synced to all 5 Max search-path locations | DONE (MD5-identical to repo) |
12-
| Token scheme documented in `docs/M4L_BRIDGE.md` | DONE |
13-
| `CHANGELOG.md` v1.28.0 entry | DONE |
14-
| Freeze-chain verifier `scripts/sync_amxd_targets.sh` | DONE (wired into CI) |
15-
| **Max export (Consolidate → Freeze Device → Save As)** | **REMAINING — user action** |
16-
| Propagate to 3 install targets + verify | blocked on the export |
8+
| `var VERSION` | 1.27.3 → **1.28.0** |
9+
| size | 6,758,818 → 6,764,431 bytes (+5,613 = exactly the JS delta) |
10+
| `_auth_check` / `_auth_token_path` / `__livepilot_token` / `send_capture_error` | 0 → 3 / 2 / 2 / 3 occurrences |
11+
| freeze type | FAT retained (macho=12, pe=24) |
12+
| install targets | all 3 MD5-identical |
1713

18-
> The stale Max search-path cache was the live trap here: before the sync it was
19-
> 67,300 bytes against the repo's 72,913 and contained **none** of `_auth_check`,
20-
> `_auth_token_path`, `__livepilot_token`, or `send_capture_error`. Freezing in
21-
> that state would have shipped a device with zero authentication while every
22-
> manifest reported 1.28.0. Backups of the previous copies are alongside each
23-
> file as `*.pre-1.28.0.bak`.
14+
## How it was frozen (standalone Max was unusable)
15+
16+
Standalone Max 9.1.4 could not do it: `maxauth.txt` reports **"Your license has
17+
expired"**, which surfaces as every patcher opening titled *"(saving disabled)"*
18+
with Save, Save As, and Export Max for Live Device all greyed out. If you ever
19+
see that title, check the license before debugging anything else.
2420

25-
CI's `amxd-freeze-drift` gate is RED until the export lands. That is the
26-
interlock working, not a regression.
21+
Use **Ableton's embedded Max** instead, which is licensed via Live:
2722

28-
After exporting from Max, run:
23+
1. Right-click the device's title bar in Live → **"Edit in Max"**. It lives in
24+
the `...` overflow menu, *not* on the title bar — the circle icon beside it
25+
is HOT-SWAP and merely opens the browser in swap mode.
26+
2. In the Max window, click the **snowflake** in the bottom toolbar to unfreeze
27+
(Max re-resolves dependencies from the search path), then click it again to
28+
re-freeze.
29+
3. `Cmd-S`.
30+
31+
Saving writes to the **loaded instance's own path**, not the repo — here
32+
`~/Music/Ableton/User Library/Presets/Audio Effects/Max Audio Effect/`. Copy it
33+
into `m4l_device/` afterwards, then:
2934

3035
```bash
3136
bash scripts/sync_amxd_targets.sh --apply
3237
```
3338

34-
It verifies the JS version matches the repo, the binary embeds it, every bridge
35-
command **and** every top-level JS identifier made it into the freeze (catching a
36-
stale freeze a version patch would hide), the freeze is still FAT, then copies to
37-
all install targets and re-verifies by MD5.
39+
That verifies the JS version matches the repo, the binary embeds it, every
40+
bridge command **and** every top-level JS identifier made it into the freeze
41+
(catching a stale freeze a version patch would hide), the freeze is still FAT,
42+
then copies to all install targets and re-verifies by MD5.
43+
44+
> The stale Max search-path cache was the live trap here: before the sync it was
45+
> 67,300 bytes against the repo's 72,913 and contained **none** of `_auth_check`,
46+
> `_auth_token_path`, `__livepilot_token`, or `send_capture_error`. Freezing in
47+
> that state would have shipped a device with zero authentication while every
48+
> manifest reported 1.28.0. Backups of the previous copies are alongside each
49+
> file as `*.pre-1.28.0.bak`.
3850
3951
The frozen JS inside `LivePilot_Analyzer.amxd` is authoritative at runtime —
40-
nothing below takes effect until that export happens. This note exists so that
41-
ONE re-freeze ships the whole batch.
52+
loose edits to `livepilot_bridge.js` change nothing until a re-freeze. This note
53+
exists so that ONE re-freeze ships a whole batch.
4254

4355
Freeze procedure: `docs/MAX_FREEZE_WORKFLOW.md`. Remember the two classic
4456
traps: Max freezes JS from its search-path cache (sync the copy in

0 commit comments

Comments
 (0)