Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
T
Tidal
  • Overview
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • PLN
  • Tidal
  • Repository

Switch branch/tag
  • Tidal
  • armada
  • ui
  • scripts
  • bounds-smoke.mjs
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    feat(postprod): the set→record pipeline becomes reusable tooling · 30e62f45
    PLN: "this becomes our tooling, often a set will be postprocessed as we did —
    reusable scripts and views plz". So the per-gig finish.sh is replaced by
    spec-driven tools: a new gig is now a copy of judge_specs/<gig>.json, never a
    copy of a script. POSTPROD.md documents the whole flow and the trap each stage
    exists to avoid.
    
    render_release.py — split every variant, verify durations and format, and
    re-render the continuous mixes. Ran clean: 14 tracks x streaming+club, all
    durations within tolerance, 48000/24.
    
    Its `continuous` stage answers PLN's other catch: "imo the master club rec will
    also have desire removed". A set is released TWICE — as tracks, and as the
    unbroken mix — and cutting a track had only fixed the first; both continuous
    masters still played Desire in full. This matters past tidiness: the continuous
    upload is the lower-risk rights path (an isolated track was flagged on
    SoundCloud where the 87-minute mix passed), so the mix is the artefact most
    likely to ship and it has to match the tracklist. The excision derives its kept
    spans from the same segments the tracks came from, so mix and tracklist cannot
    disagree. Both variants now render to 4403.65s = 73.4 min, matching the sum of
    the 14 tracks exactly:
        [1.45 .. 4166.30] 69.4 min  +  [4547.57 .. 4786.37] 4.0 min
    
    build_release_joins.py — the confirmation pass PLN asked for ("i wanna confirm
    all tracks start/ends/transitions"). It deliberately does NOT use the master:
    once Desire is dropped, the seam a listener hears (CRIME straight into
    REVOLUTION) exists only in the rendered output, and a master-based window there
    would play six minutes of a track that does not ship. Building from the split
    FLACs also audits the files that actually ship, so a split error surfaces before
    upload rather than after. 15 clips: the record's opening, 13 seams, and its
    closing.
    
    apply_boundaries now emits the splitter's native shape — `track` is RELEASE
    position because tidal_ears.master split uses it for both filename and the
    `track=N/total` tag; performance order stays as `perf_track`. Emitting
    performance order would have named the last file "15 - REVOLUTION" in a
    14-track album and tagged it 15/14, which stores reject.
    
    Both UI sets pass bounds-smoke (11 assertions each). The test now derives its
    data file from the page's own ?set= — hardcoding it meant it could assert
    against a different set than the browser had loaded, passing or failing for
    reasons unrelated to the code.
    PLN (Algolia) authored Aug 16, 2026
    30e62f45
bounds-smoke.mjs 6.96 KB
EditWeb IDE
×

Replace bounds-smoke.mjs

Attach a file by drag & drop or click to upload


Cancel
A new branch will be created in your fork and a new merge request will be started.