Commit 89f9d712 by PLN (Algolia)

docs(log 038): part III — the record reaches the shelf, and three notes I had already written

PLN asked three questions this morning and each one landed on a different
failure of mine, so the log gets a part III rather than a tidy epilogue.

The demucs OOM he spotted was a fossil: the killed first attempt (8.2 GB, 2 of
14 sections) sits in the journal forever beside the rerun that succeeded at
7.6 GB. A unit's history is not its state — verify the artefacts.

The +5-vs-+8 recommendation is corrected. I had called +8 "the conservative end"
against a generic genre norm; against OPAL v4, the master he actually signed off,
CosmicFest is already 6.6-8.1x brighter above 4 kHz on a third of the sub. So
+5, and the lesson is about naming the reference: a genre norm and the artist's
own shelf can point opposite ways, and only one of them answers "does it sit with
my other release". Recorded with the caveat that most of that table is the
recording, not the master — and that the unspent lever for harmony is the LOW end,
not the shelf we A/B'd all night.

And the gig metadata was never missing. His own repo held the date, the location,
the stage and the lineup; his backlog held the five movements. The blocker was
that I had not looked, and in that gap I had written an unsourced 2026-08-23 into
the spec. Wrong by a day, with the answer two files away.

Plus the three things that only running the pipeline could show: POST /tracks is
dead AND burns the S3 upload first, --force never worked for the case it was
named after, and the catalog gap was a cycle rather than a stale cache.
parent b747cc70
......@@ -373,3 +373,115 @@ re-reading the omnibus that exists to prevent it. The fix is structural — the
resample lives in the chain *builder*, and the in-spec gate now asserts sample rate
and channel count beside I/TP/LRA, because a loudness-only gate certified a
4.3×-oversized master as ✓.
---
## Part III — the morning after: the record reaches the shelf (2026-09-02)
PLN woke up, asked three things, and each one turned out to be a lens on a
different failure of mine.
### "did all finish well?" — yes, and the alarm was a fossil
He had seen `cosmic-demucs` memory-starved overnight. It was: killed at
22:23:53, **8.2 GB peak**, after 2 of 14 sections. That is the OOM the chunked
path exists to fix, and the journal keeps it forever next to the rerun that
finished at 01:54:16 with `result=success` and **7.6 GB peak** under
`MemoryMax=10G`. A unit's history is not its state. Verified the artefacts
instead of the journal: 14 sections × 4 stems = 56 files, all four global stems
at exactly 3779.317551 s, the split verifying clean.
### "+5 or +8? what do you reco for harmony?" — and I had it backwards
I had told him "+8 is the conservative end". True against a generic genre norm
(~3–6% of energy in 4–8k), and **wrong against his own catalogue**, which is the
only comparison the word "harmony" can mean. Measured against
`Opal26_SunsetForest_v4_streaming`, the one master signed off by ear:
| band | OPAL v4 | cosmic +5 | cosmic +8 |
|---|---|---|---|
| 20–60 Hz | 26.4% | 9.5% (0.36×) | 9.3% (0.35×) |
| 60–120 | 34.6% | 23.4% (0.67×) | 22.9% (0.66×) |
| 4–8k | 0.48% | 3.14% (**6.6×**) | 3.86% (**8.1×**) |
| 8–16k | 0.10% | 0.40% (3.8×) | 0.63% (6.0×) |
| LRA | 9.1 LU | 7.5 | 7.6 |
CosmicFest is the bright, thin one — not the dark one. **+5**, and both senses of
"conservative" stop disagreeing. The lesson is about the reference, not the
numbers: a norm from the genre and a norm from the artist's own shelf can point
in opposite directions, and only one of them is what "does it sit with my other
release" asks. Naming the reference is part of the answer.
Also worth saying out loud, because the table invites over-reading: most of
those ratios are the RECORDING. A garden stage mic against a 12-orbit desk mix —
the room took the sub, the mic added the air. The air shelf moves 8–16k by at
most 1.59× and cannot close a 3.8× gap the other way. The unspent lever for
harmony is the **low end** (0.36× of OPAL below 60 Hz, next to 44.8% kick
presence vs OPAL's 59%), not the shelf we spent the night A/B-ing.
### "which title/venue/stage info do you miss?" — none, and one of mine was wrong
He answered three fields. His own repo answered the rest: `www/PRODUCT.md:21`
carries "cosmicfest_v2.67Hz (20–23 August 2026, jour J Saturday 22)", the
invite's lineup section is headed "le 22 août, dans le jardin", and
`app/cosmicfest/page.js` names Labenne-Océan and the whole lineup. The five
movements were in his own `## COSMICFEST` backlog section.
So the blocker was never missing information. **It was that I had not looked**,
and in the gap I had written `"date": "2026-08-23"` into the gig spec with no
source. Wrong by a day; the answer was two files away in a repo I already had
open. PLN: "yea it was samedi 22 indeed :)".
The fix is not the corrected string. It is that non-derivable fields now enter
through a `--meta` sidecar where each is `{value, source, locator, date}`, the
provenance lands in the output, and the builder prints "nothing left to invent"
only when nothing is still empty. A bare value is accepted and *recorded as
unsourced*, so a guess can never again look like a researched fact.
### The gate that earned its keep on the last check before `--go`
Four of fifteen permalinks were already taken — `/you-my-sunshine`,
`/take-five-drops`, `/piment-bresilien`, `/eh-ouais-je-funk`. The same scores,
played at Opal and CosmicFest a fortnight apart.
The upload would not have errored. SoundCloud is idempotent by permalink and the
uploader treats a taken one as "already done" — right for resuming an
interrupted 1.4 GB run, catastrophic for a different recording of the same
track. It would have reported success with four tracks missing, or with
`--overwrite` replaced Opal's audio. Both invisible from the terminal.
`check_permalinks.py` is now a gate: FREE / already-up-as-this-same-audio /
COLLISION, duration as the discriminator, exit 1. Verified in both directions —
fails the un-suffixed plan naming all four, passes the suffixed one 15/15.
`build_release_plan.py --permalink-suffix <gig>` fixes the cause.
Three more things fell out of actually running the pipeline end to end:
* **`POST /tracks` is dead and expensive.** 400 with `{"errors":[]}`*after*
the signed S3 PUT succeeds, so it burned 693 MB and created nothing.
`topic_soundcloud` already said form uploads are the live path. I used the
documented-dead one first. Second time in one operation that I had the note
and did not read it.
* **`--force` never worked.** The no-signoff branch `return`ed before reaching
the override, so the flag documented as "emit even without a valid ear
signoff" could only ever override a *stale* signoff. The first release that
genuinely needed it — an audition upload, because SoundCloud is where PLN
listens, so the signoff cannot precede the upload — is how that surfaced. It
now also demands `--why` and writes an `_UNSIGNED` block into the plan, since
a terminal warning scrolls away and the JSON is what the uploader trusts.
* **The catalog gap was a cycle, not a stale cache.** `catalog_view` learns which
tracks exist by globbing already-published `tracks.json` files, so a track's
first gig page can never find itself in the view. Rebuilding forever would not
have fixed Rose Rouge and LiveCode Parade. The builder falls back to the same
`tidal_score.orbit_sounds` the view itself calls — one parser, reused. With the
page in place the cycle closes: 73 → 81 tracks, none dropped.
### The shape, again
Part II named "a check whose failure mode is indistinguishable from success" as
the night's recurring defect. Part III is three more of the same family, and the
worst of them is not a bug: **an unsourced string of mine, sitting in a spec,
looking exactly like a fact.** The permalink collision is its twin at the other
end of the pipeline — a release that is quietly four tracks short looks exactly
like a release that is complete. Both were caught by asking a question that
could return "no", which is the only kind of check that is worth anything.
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