Commit 720e14d0 by PLN (Algolia)

fix(tide-table): repair stale next/ catalog path + rename Aria→Mafia Sans Serif (#22)

Two findings while fixing the #22 track-name typo, both surfaced by tracing
where the name actually lives rather than sed-ing the blast radius:

PARSER BUG — the catalog generators were reading a dead path. Commit 6e51fff
hoisted the site app out of next/ to the repo root, but five tide-table modules
still pointed LIVES at /Work/Web/www/next/content/lives — which is now EMPTY.
The committed catalog/map JSONs were stale pre-hoist artifacts; any regen would
have silently produced an empty catalog. Fixed the path in
build_track_recording_map, build_catalog_view, pattern_ngrams, tide_eda,
boundary_bleed (+ 4 docs/README/conftest that documented the dead path). This is
exactly the "a parser miss must never masquerade as data" footgun — the path was
wrong at the source while the output looked plausible.

RENAME — the track was renamed Aria→Mafia Sans Serif long ago in the score, but
the canonical site tracks.json still carried name "Aria Sans Serif" AND a
dangling file ref (aria_sans_serif.tidal, which no longer exists; the real score
is mafia_sans_serif.tidal). Fixed at the canonical root (tracks.json, committed
separately in the www repo) and REGENERATED the catalog via `tide.py build` —
not hand-edited — so catalog.generated / catalog_view / pattern_registry /
track_recording_map all pick up the rename from source.

Validation: regen diff is clean — only the Mafia rename plus one legitimate
side-effect (the catalog re-read the *current* mafia_sans_serif.tidal source,
which had resetCycles commented out since the last build; the old cached source
was from the pre-rename file). No other track's data moved (verified by grepping
the diff for non-Mafia id/title/track changes — none). Neighbor-list reordering
in pattern_registry is benign. Test suite: 80 pass, 1 fail — the failure
(38c3-toilet recovers 0 backlog tracks) is PRE-EXISTING (reproduced with these
changes stashed), a real data gap belonging to #27/#66, not this change.

Interim n=172 emotion calibration JSON left uncommitted (regenerates at 534).
parent 0a2921a0
...@@ -6,7 +6,7 @@ Tooling lives here (versioned in the Tidal repo, like the visualizer & mastering ...@@ -6,7 +6,7 @@ Tooling lives here (versioned in the Tidal repo, like the visualizer & mastering
chain). The **data root** is the freebox `Prod/` archive chain). The **data root** is the freebox `Prod/` archive
(`/mnt/freebox/PLN/Work/Sound/Prod`, canonical — fuller than the local mirror). (`/mnt/freebox/PLN/Work/Sound/Prod`, canonical — fuller than the local mirror).
The **gig/setlist data** already lives in the ParVagues site The **gig/setlist data** already lives in the ParVagues site
(`~/Work/Web/www/next/content/lives/` + `tracks.json` + `ontology/events.yaml`). (`~/Work/Web/www/content/lives/` + `tracks.json` + `ontology/events.yaml`).
## The fleet — naming chart 🌊 ## The fleet — naming chart 🌊
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
## Relationship to the site (don't duplicate) ## Relationship to the site (don't duplicate)
The ParVagues site already holds the gig map: The ParVagues site already holds the gig map:
`~/Work/Web/www/next/content/lives/{year}/{slug}.md` (+ `tracks.json` setlists + `~/Work/Web/www/content/lives/{year}/{slug}.md` (+ `tracks.json` setlists +
`ontology/events.yaml`). `escales` is a **sidecar keyed by gig slug** that adds only `ontology/events.yaml`). `escales` is a **sidecar keyed by gig slug** that adds only
what the site lacks and shouldn't publish: what the site lacks and shouldn't publish:
......
...@@ -5,7 +5,7 @@ The catalog — one source of truth for every ParVagues asset and where it lives ...@@ -5,7 +5,7 @@ The catalog — one source of truth for every ParVagues asset and where it lives
## Sources (reconciled, not duplicated) ## Sources (reconciled, not duplicated)
1. **`Prod/` archive** (freebox canonical) — masters, mixdowns, Audacity projects. 1. **`Prod/` archive** (freebox canonical) — masters, mixdowns, Audacity projects.
2. **Site setlists**`~/Work/Web/www/next/content/lives/**/tracks.json` already 2. **Site setlists**`~/Work/Web/www/content/lives/**/tracks.json` already
names tracks per gig, with BPM, style, sample packs, and Tidal ingredients. names tracks per gig, with BPM, style, sample packs, and Tidal ingredients.
3. **External** — SoundCloud, Bandcamp, YouTube, archive.org, Spotify/DSPs, IG. 3. **External** — SoundCloud, Bandcamp, YouTube, archive.org, Spotify/DSPs, IG.
4. **Screen-rec / phone recordings** — provenance-tagged candidates. 4. **Screen-rec / phone recordings** — provenance-tagged candidates.
......
...@@ -29,7 +29,7 @@ from models import EditKind, EditOp, MasterEdit, Provenance ...@@ -29,7 +29,7 @@ from models import EditKind, EditOp, MasterEdit, Provenance
HERE = Path(__file__).parent HERE = Path(__file__).parent
STEMMAP = HERE / "punkachien" / "stemmap_take89.json" STEMMAP = HERE / "punkachien" / "stemmap_take89.json"
BOUNDS = HERE / "boundaries_take89_validated.json" BOUNDS = HERE / "boundaries_take89_validated.json"
TRACKS = Path("/home/pln/Work/Web/www/next/content/lives/2026/montreuil-algorave/tracks.json") TRACKS = Path("/home/pln/Work/Web/www/content/lives/2026/montreuil-algorave/tracks.json")
OUT = HERE / "boundary_bleed_take89.json" OUT = HERE / "boundary_bleed_take89.json"
EDL = HERE / "master_edl_take89.json" EDL = HERE / "master_edl_take89.json"
......
...@@ -6,7 +6,7 @@ Joins the three corners of the catalog into one confirmation view, so we can SEE ...@@ -6,7 +6,7 @@ Joins the three corners of the catalog into one confirmation view, so we can SEE
A — score the track's `.tidal` (ground truth from code; tidal_score) A — score the track's `.tidal` (ground truth from code; tidal_score)
C — metadata the site's gig tracklists (bpm/style/dur + claimed ingredients; C — metadata the site's gig tracklists (bpm/style/dur + claimed ingredients;
www/next/content/lives/**/tracks.json) — the canonical metadata www/content/lives/**/tracks.json) — the canonical metadata
B — recording the Ardour takes a track plausibly lives in (date-join via B — recording the Ardour takes a track plausibly lives in (date-join via
take_gig_map) + whether that take has been EDA'd (audio-grounded) take_gig_map) + whether that take has been EDA'd (audio-grounded)
...@@ -41,7 +41,7 @@ from sample_tfidf import SPLIT, sound_vocab # noqa: E402 ...@@ -41,7 +41,7 @@ from sample_tfidf import SPLIT, sound_vocab # noqa: E402
HERE = Path(__file__).parent HERE = Path(__file__).parent
REPO = HERE.parent.parent # …/Sound/Tidal REPO = HERE.parent.parent # …/Sound/Tidal
LIVES = Path("/home/pln/Work/Web/www/next/content/lives") LIVES = Path("/home/pln/Work/Web/www/content/lives") # app hoisted out of next/ in 6e51fff
TAKE_MAP = HERE / "take_gig_map.md" TAKE_MAP = HERE / "take_gig_map.md"
OUT = HERE / "catalog_view.json" OUT = HERE / "catalog_view.json"
AS_OF = "2026-06-06" AS_OF = "2026-06-06"
......
...@@ -12,7 +12,7 @@ from datetime import date ...@@ -12,7 +12,7 @@ from datetime import date
from pathlib import Path from pathlib import Path
HERE = Path(__file__).parent HERE = Path(__file__).parent
LIVES = Path("/home/pln/Work/Web/www/next/content/lives") LIVES = Path("/home/pln/Work/Web/www/content/lives") # app hoisted out of next/ in 6e51fff
TAKE_MAP = HERE / "take_gig_map.md" TAKE_MAP = HERE / "take_gig_map.md"
OUT = HERE / "track_recording_map.json" OUT = HERE / "track_recording_map.json"
AS_OF = "2026-06-05" AS_OF = "2026-06-05"
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
"Take80" "Take80"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "no-claim", "ac_level": "no-claim",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -173,7 +173,7 @@ ...@@ -173,7 +173,7 @@
"Take21" "Take21"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "divergent", "ac_level": "divergent",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -210,7 +210,7 @@ ...@@ -210,7 +210,7 @@
"Take70" "Take70"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -245,7 +245,7 @@ ...@@ -245,7 +245,7 @@
"Take80" "Take80"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "no-claim", "ac_level": "no-claim",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -434,38 +434,6 @@ ...@@ -434,38 +434,6 @@
"Take80" "Take80"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false,
"ac_level": "agree",
"license": null,
"inspiration": [],
"collab": [],
"status": null,
"notes": null,
"authored_prov": null
},
{
"id": "live/collab/raph/aria_sans_serif.tidal",
"title": "Aria Sans Serif",
"aka": [
"Aria Sans Serif"
],
"sounds": [
"acidOto3091",
"clubkick",
"h2ogmhh",
"jazz",
"jungle_breaks",
"moog",
"oil"
],
"orbits": 7,
"gigs": [
"2026/montreuil-algorave"
],
"takes": [
"Take89"
],
"recorded": true,
"eda_grounded": true, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
...@@ -666,6 +634,38 @@ ...@@ -666,6 +634,38 @@
"authored_prov": null "authored_prov": null
}, },
{ {
"id": "live/collab/raph/mafia_sans_serif.tidal",
"title": "Mafia Sans Serif",
"aka": [
"Mafia Sans Serif"
],
"sounds": [
"acidOto3091",
"clubkick",
"h2ogmhh",
"jazz",
"jungle_breaks",
"moog",
"oil"
],
"orbits": 7,
"gigs": [
"2026/montreuil-algorave"
],
"takes": [
"Take89"
],
"recorded": true,
"eda_grounded": true,
"ac_level": "agree",
"license": null,
"inspiration": [],
"collab": [],
"status": null,
"notes": null,
"authored_prov": null
},
{
"id": "live/collab/raph/nouveau_punk.tidal", "id": "live/collab/raph/nouveau_punk.tidal",
"title": "Nouveau Punk", "title": "Nouveau Punk",
"aka": [ "aka": [
...@@ -692,7 +692,7 @@ ...@@ -692,7 +692,7 @@
"Take36" "Take36"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -736,7 +736,7 @@ ...@@ -736,7 +736,7 @@
"Take66" "Take66"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -846,7 +846,7 @@ ...@@ -846,7 +846,7 @@
"Take21" "Take21"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -951,7 +951,7 @@ ...@@ -951,7 +951,7 @@
"Take66" "Take66"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "partial", "ac_level": "partial",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -1123,7 +1123,7 @@ ...@@ -1123,7 +1123,7 @@
"Take70" "Take70"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -1196,7 +1196,7 @@ ...@@ -1196,7 +1196,7 @@
"Take70" "Take70"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -1355,7 +1355,7 @@ ...@@ -1355,7 +1355,7 @@
"Take70" "Take70"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -1422,7 +1422,7 @@ ...@@ -1422,7 +1422,7 @@
"Take70" "Take70"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -1465,7 +1465,7 @@ ...@@ -1465,7 +1465,7 @@
"Take21" "Take21"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -1572,7 +1572,7 @@ ...@@ -1572,7 +1572,7 @@
"Take21" "Take21"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "partial", "ac_level": "partial",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -1652,7 +1652,7 @@ ...@@ -1652,7 +1652,7 @@
"Take80" "Take80"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -1787,7 +1787,7 @@ ...@@ -1787,7 +1787,7 @@
"Take66" "Take66"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -1826,7 +1826,7 @@ ...@@ -1826,7 +1826,7 @@
"Take70" "Take70"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -2051,7 +2051,7 @@ ...@@ -2051,7 +2051,7 @@
"Take70" "Take70"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "no-claim", "ac_level": "no-claim",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -2215,7 +2215,7 @@ ...@@ -2215,7 +2215,7 @@
"Take70" "Take70"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "partial", "ac_level": "partial",
"license": null, "license": null,
"inspiration": [ "inspiration": [
...@@ -2331,7 +2331,7 @@ ...@@ -2331,7 +2331,7 @@
"Take21" "Take21"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -2378,7 +2378,7 @@ ...@@ -2378,7 +2378,7 @@
"Take66" "Take66"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -2425,7 +2425,7 @@ ...@@ -2425,7 +2425,7 @@
"Take66" "Take66"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -2462,7 +2462,7 @@ ...@@ -2462,7 +2462,7 @@
"Take80" "Take80"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "conflict", "ac_level": "conflict",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
...@@ -2500,7 +2500,7 @@ ...@@ -2500,7 +2500,7 @@
"Take70" "Take70"
], ],
"recorded": true, "recorded": true,
"eda_grounded": false, "eda_grounded": true,
"ac_level": "agree", "ac_level": "agree",
"license": null, "license": null,
"inspiration": [], "inspiration": [],
......
...@@ -41,7 +41,7 @@ from sample_tfidf import SPLIT, sound_vocab # noqa: E402 ...@@ -41,7 +41,7 @@ from sample_tfidf import SPLIT, sound_vocab # noqa: E402
HERE = Path(__file__).parent HERE = Path(__file__).parent
REPO = HERE.parent.parent REPO = HERE.parent.parent
LIVES = Path("/home/pln/Work/Web/www/next/content/lives") LIVES = Path("/home/pln/Work/Web/www/content/lives") # app hoisted out of next/ in 6e51fff
OUT = HERE / "pattern_registry.json" OUT = HERE / "pattern_registry.json"
AS_OF = "2026-06-06" AS_OF = "2026-06-06"
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"schema": "pattern-registry v1 (mini-notation phrases as things + n-gram track clustering)", "schema": "pattern-registry v1 (mini-notation phrases as things + n-gram track clustering)",
"as_of": "2026-06-06", "as_of": "2026-06-06",
"n_tracks": 73, "n_tracks": 73,
"n_patterns": 1325, "n_patterns": 1326,
"n_shared": 193, "n_shared": 193,
"n_repeated": 33, "n_repeated": 33,
"patterns": [ "patterns": [
...@@ -85,13 +85,6 @@ ...@@ -85,13 +85,6 @@
"raw": "f*16" "raw": "f*16"
}, },
{ {
"track": "live/collab/raph/aria_sans_serif.tidal",
"name": "Aria Sans Serif",
"orbit": null,
"count": 3,
"raw": "f*16"
},
{
"track": "live/collab/raph/biscuit_acide.tidal", "track": "live/collab/raph/biscuit_acide.tidal",
"name": "Biscuit Acide", "name": "Biscuit Acide",
"orbit": null, "orbit": null,
...@@ -127,6 +120,13 @@ ...@@ -127,6 +120,13 @@
"raw": "f*16" "raw": "f*16"
}, },
{ {
"track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Mafia Sans Serif",
"orbit": null,
"count": 3,
"raw": "f*16"
},
{
"track": "live/collab/raph/nouveau_punk.tidal", "track": "live/collab/raph/nouveau_punk.tidal",
"name": "Nouveau Punk", "name": "Nouveau Punk",
"orbit": null, "orbit": null,
...@@ -529,13 +529,6 @@ ...@@ -529,13 +529,6 @@
"raw": "t . <f t f <f t>> <t f f <t f>>" "raw": "t . <f t f <f t>> <t f f <t f>>"
}, },
{ {
"track": "live/collab/raph/aria_sans_serif.tidal",
"name": "Aria Sans Serif",
"orbit": null,
"count": 1,
"raw": "t . <f t f <f t>> <t f f <t f>>"
},
{
"track": "live/collab/raph/biscuit_acide.tidal", "track": "live/collab/raph/biscuit_acide.tidal",
"name": "Biscuit Acide", "name": "Biscuit Acide",
"orbit": null, "orbit": null,
...@@ -564,6 +557,13 @@ ...@@ -564,6 +557,13 @@
"raw": "t . <f t f <f t>> <t f f <t f>>" "raw": "t . <f t f <f t>> <t f f <t f>>"
}, },
{ {
"track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Mafia Sans Serif",
"orbit": null,
"count": 1,
"raw": "t . <f t f <f t>> <t f f <t f>>"
},
{
"track": "live/collab/raph/permanence.tidal", "track": "live/collab/raph/permanence.tidal",
"name": "Permanence", "name": "Permanence",
"orbit": null, "orbit": null,
...@@ -1338,8 +1338,8 @@ ...@@ -1338,8 +1338,8 @@
"raw": "f(4,8)" "raw": "f(4,8)"
}, },
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"orbit": 8, "orbit": 8,
"count": 1, "count": 1,
"raw": "f(4,8)" "raw": "f(4,8)"
...@@ -1720,8 +1720,8 @@ ...@@ -1720,8 +1720,8 @@
"raw": "[0 .. 7] . <[0 .. 7]!7 [0 1 . [2 3]]>" "raw": "[0 .. 7] . <[0 .. 7]!7 [0 1 . [2 3]]>"
}, },
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"orbit": 8, "orbit": 8,
"count": 1, "count": 1,
"raw": "[0 .. 7] . <[0 .. 7]!7 [0 1 . [2 3]]>" "raw": "[0 .. 7] . <[0 .. 7]!7 [0 1 . [2 3]]>"
...@@ -3561,16 +3561,16 @@ ...@@ -3561,16 +3561,16 @@
"scope": "shared", "scope": "shared",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/long_way.tidal",
"name": "Aria Sans Serif", "name": "Long Way",
"orbit": 5, "orbit": 7,
"count": 1, "count": 1,
"raw": "0 1 2 3" "raw": "0 1 2 3"
}, },
{ {
"track": "live/collab/raph/long_way.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Long Way", "name": "Mafia Sans Serif",
"orbit": 7, "orbit": 5,
"count": 1, "count": 1,
"raw": "0 1 2 3" "raw": "0 1 2 3"
} }
...@@ -4041,8 +4041,8 @@ ...@@ -4041,8 +4041,8 @@
"scope": "shared", "scope": "shared",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"orbit": 5, "orbit": 5,
"count": 1, "count": 1,
"raw": "<0 1 2 3 4 5 6 7>/2" "raw": "<0 1 2 3 4 5 6 7>/2"
...@@ -5553,15 +5553,15 @@ ...@@ -5553,15 +5553,15 @@
"scope": "shared", "scope": "shared",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/jeudrill.tidal",
"name": "Aria Sans Serif", "name": "Jeudi Drill",
"orbit": 1, "orbit": 1,
"count": 1, "count": 1,
"raw": "k . ~ k*<1 2> ~ <~ k k <~ k*4>>" "raw": "k . ~ k*<1 2> ~ <~ k k <~ k*4>>"
}, },
{ {
"track": "live/collab/raph/jeudrill.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Jeudi Drill", "name": "Mafia Sans Serif",
"orbit": 1, "orbit": 1,
"count": 1, "count": 1,
"raw": "k . ~ k*<1 2> ~ <~ k k <~ k*4>>" "raw": "k . ~ k*<1 2> ~ <~ k k <~ k*4>>"
...@@ -5577,15 +5577,15 @@ ...@@ -5577,15 +5577,15 @@
"scope": "shared", "scope": "shared",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/jeudrill.tidal",
"name": "Aria Sans Serif", "name": "Jeudi Drill",
"orbit": 1, "orbit": 1,
"count": 1, "count": 1,
"raw": "k k . k <k [~ k] k k*2>" "raw": "k k . k <k [~ k] k k*2>"
}, },
{ {
"track": "live/collab/raph/jeudrill.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Jeudi Drill", "name": "Mafia Sans Serif",
"orbit": 1, "orbit": 1,
"count": 1, "count": 1,
"raw": "k k . k <k [~ k] k k*2>" "raw": "k k . k <k [~ k] k k*2>"
...@@ -10141,8 +10141,8 @@ ...@@ -10141,8 +10141,8 @@
"scope": "unique", "scope": "unique",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"orbit": 5, "orbit": 5,
"count": 1, "count": 1,
"raw": "<0 0 0 [0 0 1 0] 3 5 4 5>" "raw": "<0 0 0 [0 0 1 0] 3 5 4 5>"
...@@ -11484,8 +11484,8 @@ ...@@ -11484,8 +11484,8 @@
"scope": "unique", "scope": "unique",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"orbit": 3, "orbit": 3,
"count": 1, "count": 1,
"raw": "<0!4 1!3 2>" "raw": "<0!4 1!3 2>"
...@@ -13252,8 +13252,8 @@ ...@@ -13252,8 +13252,8 @@
"scope": "unique", "scope": "unique",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"orbit": 5, "orbit": 5,
"count": 1, "count": 1,
"raw": "<2 2 2 2 4 4 4 4>" "raw": "<2 2 2 2 4 4 4 4>"
...@@ -15666,8 +15666,8 @@ ...@@ -15666,8 +15666,8 @@
"scope": "unique", "scope": "unique",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"orbit": 4, "orbit": 4,
"count": 1, "count": 1,
"raw": "<[e3@7 f3]!4 [b2@7 c2]!4>" "raw": "<[e3@7 f3]!4 [b2@7 c2]!4>"
...@@ -16720,8 +16720,8 @@ ...@@ -16720,8 +16720,8 @@
"scope": "unique", "scope": "unique",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"orbit": 7, "orbit": 7,
"count": 1, "count": 1,
"raw": "<e3!4 b2!4>" "raw": "<e3!4 b2!4>"
...@@ -17485,8 +17485,8 @@ ...@@ -17485,8 +17485,8 @@
"scope": "unique", "scope": "unique",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"orbit": null, "orbit": null,
"count": 1, "count": 1,
"raw": "<gb3'maj db3'maj bb2'min bb2'maj>" "raw": "<gb3'maj db3'maj bb2'min bb2'maj>"
...@@ -19882,8 +19882,8 @@ ...@@ -19882,8 +19882,8 @@
"scope": "unique", "scope": "unique",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"orbit": 1, "orbit": 1,
"count": 1, "count": 1,
"raw": "[jazz,clubkick]" "raw": "[jazz,clubkick]"
...@@ -20180,6 +20180,23 @@ ...@@ -20180,6 +20180,23 @@
] ]
}, },
{ {
"id": "p65c449",
"norm": "[ramples34,clap]",
"n_tokens": 2,
"n_tracks": 1,
"n_total": 1,
"scope": "unique",
"occurrences": [
{
"track": "live/midi/nova/dnb/liquid/you_my_sunshine.tidal",
"name": "You My Sunshine",
"orbit": 3,
"count": 1,
"raw": "[rampleS34:6,clap]"
}
]
},
{
"id": "p75c3e0", "id": "p75c3e0",
"norm": "[reverbkick,jazz]", "norm": "[reverbkick,jazz]",
"n_tokens": 2, "n_tokens": 2,
...@@ -21531,8 +21548,8 @@ ...@@ -21531,8 +21548,8 @@
"scope": "unique", "scope": "unique",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"orbit": 3, "orbit": 3,
"count": 1, "count": 1,
"raw": "h(3,8)" "raw": "h(3,8)"
...@@ -25237,8 +25254,8 @@ ...@@ -25237,8 +25254,8 @@
"scope": "unique", "scope": "unique",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"orbit": 3, "orbit": 3,
"count": 1, "count": 1,
"raw": "~ h ~ h ~ h*<1!3 2> ~ h*<1 [1|2]>" "raw": "~ h ~ h ~ h*<1!3 2> ~ h*<1 [1|2]>"
...@@ -25424,8 +25441,8 @@ ...@@ -25424,8 +25441,8 @@
"scope": "unique", "scope": "unique",
"occurrences": [ "occurrences": [
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"orbit": 2, "orbit": 2,
"count": 1, "count": 1,
"raw": "~ s ~ [s*<1 2> <~!7 [~ s]>]" "raw": "~ s ~ [s*<1 2> <~!7 [~ s]>]"
...@@ -25950,13 +25967,6 @@ ...@@ -25950,13 +25967,6 @@
] ]
}, },
{ {
"track": "live/collab/raph/aria_sans_serif.tidal",
"name": "Aria Sans Serif",
"n_phrases": 18,
"n_shared": 8,
"neighbors": []
},
{
"track": "live/collab/raph/biscuit_acide.tidal", "track": "live/collab/raph/biscuit_acide.tidal",
"name": "Biscuit Acide", "name": "Biscuit Acide",
"n_phrases": 11, "n_phrases": 11,
...@@ -25999,6 +26009,13 @@ ...@@ -25999,6 +26009,13 @@
"neighbors": [] "neighbors": []
}, },
{ {
"track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Mafia Sans Serif",
"n_phrases": 18,
"n_shared": 8,
"neighbors": []
},
{
"track": "live/collab/raph/nouveau_punk.tidal", "track": "live/collab/raph/nouveau_punk.tidal",
"name": "Nouveau Punk", "name": "Nouveau Punk",
"n_phrases": 20, "n_phrases": 20,
...@@ -26312,13 +26329,13 @@ ...@@ -26312,13 +26329,13 @@
{ {
"track": "live/midi/nova/dnb/liquid/you_my_sunshine.tidal", "track": "live/midi/nova/dnb/liquid/you_my_sunshine.tidal",
"name": "You My Sunshine", "name": "You My Sunshine",
"n_phrases": 20, "n_phrases": 21,
"n_shared": 11, "n_shared": 11,
"neighbors": [ "neighbors": [
{ {
"track": "live/midi/nova/dnb/wap.tidal", "track": "live/midi/nova/dnb/wap.tidal",
"name": "WAP", "name": "WAP",
"similarity": 0.141, "similarity": 0.14,
"shared_patterns": [ "shared_patterns": [
"p2b93a0", "p2b93a0",
"pd47efe" "pd47efe"
...@@ -26375,7 +26392,7 @@ ...@@ -26375,7 +26392,7 @@
{ {
"track": "live/midi/nova/dnb/liquid/you_my_sunshine.tidal", "track": "live/midi/nova/dnb/liquid/you_my_sunshine.tidal",
"name": "You My Sunshine", "name": "You My Sunshine",
"similarity": 0.141, "similarity": 0.14,
"shared_patterns": [ "shared_patterns": [
"p2b93a0", "p2b93a0",
"pd47efe" "pd47efe"
......
...@@ -28,7 +28,7 @@ def fixtures(): ...@@ -28,7 +28,7 @@ def fixtures():
def view(): def view():
"""The real pipeline output, built once (IT-on-real-data). Skips cleanly when the """The real pipeline output, built once (IT-on-real-data). Skips cleanly when the
site content (corner C, in the www repo) is unavailable — e.g. www checked out to a site content (corner C, in the www repo) is unavailable — e.g. www checked out to a
branch without next/content/lives — since these IT tests depend on that external repo.""" branch without content/lives — since these IT tests depend on that external repo."""
import build_catalog_view as bcv import build_catalog_view as bcv
try: try:
v = bcv.build() v = bcv.build()
......
...@@ -33,7 +33,7 @@ ROOT = HERE.parent.parent # …/Sound/Tidal ...@@ -33,7 +33,7 @@ ROOT = HERE.parent.parent # …/Sound/Tidal
sys.path.insert(0, str(ROOT / "tools")) sys.path.insert(0, str(ROOT / "tools"))
import models as M # noqa: E402 import models as M # noqa: E402
LIVES = Path("/home/pln/Work/Web/www/next/content/lives") LIVES = Path("/home/pln/Work/Web/www/content/lives") # app hoisted out of next/ in 6e51fff
DIRT = Path.home() / ".local/share/SuperCollider/downloaded-quarks/Dirt-Samples" DIRT = Path.home() / ".local/share/SuperCollider/downloaded-quarks/Dirt-Samples"
CV = HERE / "catalog_view.json" CV = HERE / "catalog_view.json"
PR = HERE / "pattern_registry.json" PR = HERE / "pattern_registry.json"
......
...@@ -647,9 +647,9 @@ ...@@ -647,9 +647,9 @@
] ]
}, },
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"aliases": [ "aliases": [
"Aria Sans Serif" "Mafia Sans Serif"
], ],
"n_takes": 1, "n_takes": 1,
"takes": [ "takes": [
...@@ -3149,9 +3149,9 @@ ...@@ -3149,9 +3149,9 @@
"as_of": "2026-06-05" "as_of": "2026-06-05"
}, },
{ {
"track": "live/collab/raph/aria_sans_serif.tidal", "track": "live/collab/raph/mafia_sans_serif.tidal",
"name": "Aria Sans Serif", "name": "Mafia Sans Serif",
"tidal": "live/collab/raph/aria_sans_serif.tidal", "tidal": "live/collab/raph/mafia_sans_serif.tidal",
"take": "Take89", "take": "Take89",
"gig": "2026/montreuil-algorave", "gig": "2026/montreuil-algorave",
"take_type": "SET", "take_type": "SET",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment