feat(branding): ship as Basilica Audio, and put the changelog on the release page - #53
Merged
Merged
Conversation
…release page Two suite-level gaps, both visible to a customer and neither fixable inside one repository alone. **The binary said "Yves Vogl".** Every other surface - the organisation, the website, the icon set, the README - says Basilica Audio, but COMPANY_NAME did not, so in Logic's plugin manager, Cubase's vendor column and Reaper's FX browser Triptych filed under a person rather than under the brand. It now says Basilica Audio. That move is display-only and was verified as such rather than assumed: the VST3 class ID derives from PLUGIN_MANUFACTURER_CODE + PLUGIN_CODE alone (JUCE 8.0.14, juce_VST3ModuleInfo.h, VST3Interface::jucePluginId) and the Audio Unit identity triple is (aufx, <PLUGIN_CODE>, Yvsv). A real before/after build of Apotheosis confirms both CIDs and the whole AudioComponents identity block are byte-identical across the change, with only the display strings moving. BUNDLE_ID stays com.yvesvogl.triptych, deliberately and indefinitely. It is how a host recognises the plugin across sessions and how every preset file ever written names it; changing it would break existing projects for no benefit a user can see. Both CMakeLists.txt and docs/branding.md say so at the point of definition, so nobody later "finishes the rename". COMPANY_COPYRIGHT still names the copyright holder rather than the trading name, which is the accurate thing for it to say. The user preset folder does move, to ~/Library/Audio/Presets/Basilica Audio/ and %APPDATA%\Basilica Audio\, and it moves with a migration rather than orphaning what is already there. PresetManager copies every preset out of the old folder on first construction: copies rather than moves, so an older build or a downgrade still finds its own presets; never overwrites a file already at the new name; and never deletes anything. On a machine that never had the old folder it costs one isDirectory() call. Five new cases pin the contract, including the folder shapes on both platforms - asserted on whichever CI runner is executing, so macOS and Windows each check their own. **The release page said nothing.** Every release shipped GitHub's auto-generated PR-title list while a careful hand-written CHANGELOG.md sat in the repository unread. release.yml now builds the body from this file's section for the tag, via the shared basilica-audio/.github/release-notes action, and appends what a downloader actually needs: what each archive contains, the signing status stated accurately per platform (macOS signed, notarised and stapled; Windows not code-signed, SmartScreen warning and all), the install paths, the AU rescan hint and links to the manual and the product page. A second pass after the platform jobs rewrites the body with a table of the assets that really got attached. Refs basilica-audio/.github#2, basilica-audio/.github#3
yves-vogl
force-pushed
the
vendor-identity-lane
branch
from
August 27, 2026 15:49
ee9f613 to
f4d6899
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements the two suite-level issues in this repository:
basilica-audio/.github#2 (vendor identity) and
basilica-audio/.github#3 (release notes).
Identical in shape across all thirteen plugins. The suite-level decision is
ADR 0001.
1. Vendor identity
COMPANY_NAMEYves VoglBasilica AudioBUNDLE_IDcom.yvesvogl.triptychpluginfield. Changing it breaks existing projects for no visible benefit.COMPANY_COPYRIGHTCopyright (c) 2026 Yves VoglPresetManagerConfig::manufacturerNameYves VoglBasilica Audio, with a migrationBoth frozen identifiers carry a comment at their definition explaining that they are decisions, not leftovers, so nobody later "finishes the rename".
The identity keys did not move, and that was checked rather than assumed
Apotheosis was built
Releasebefore and after the change and the AUInfo.plistplus the VST3moduleinfo.jsondiffed. Everything that establishes identity is byte-identical; only display strings moved:AU AudioComponents[0] "type": "aufx" unchanged "subtype": "Apth" unchanged "manufacturer": "Yvsv" unchanged CFBundleIdentifier: "com.yvesvogl.apotheosis" unchanged NSHumanReadableCopyright: "Copyright (c) 2026 Yves Vogl" unchanged - "name": "Yves Vogl: Apotheosis" + "name": "Basilica Audio: Apotheosis" VST3 moduleinfo.json Classes[0].CID "ABCDEF019182FAEB5976737641707468" unchanged Classes[1].CID "ABCDEF011234ABCD5976737641707468" unchanged - Factory Info.Vendor / Classes[*].Vendor "Yves Vogl" + Factory Info.Vendor / Classes[*].Vendor "Basilica Audio"Four changed lines, all of them display strings. The tail of both CIDs,
5976737641707468, isYvsv+Apthin hex - the manufacturer and plugin codes, neither of which this change touches (JUCE 8.0.14,juce_VST3ModuleInfo.h,VST3Interface::jucePluginId). That is the mechanism the safety claim rests on, confirmed on a real artefact rather than taken on trust.Preset migration: adopt on first run, copy, never destroy
Chosen over "search both paths on load", and for maintenance risk rather than taste. Most of
PresetManager's call sites through the preset directory write as well as read - rename, delete, save-over, set-default, bank export. Dual-path lookup would leave every one of them with a permanent two-directory question (does a rename move a legacy file? does a delete reach into the old folder?) for a directory that is empty on most machines. A one-shot adoption in the constructor keeps exactly one authoritative directory and confines the whole rename to eight lines.Properties that matter to a user:
docs/branding.mdtells them where it is if they want it gone.isDirectory()call on a machine that never had the old folder.getLegacyUserPresetsDirectory()returns nothing when the current directory is overridden for a test without a matching legacy override - otherwise a test would read, and copy from, the presets of whoever is running it.Five new cases in
tests/PresetManagerTests.cpppin all of it, including the folder shapes on both platforms - asserted on whichever CI runner is executing, so macOS and Windows each check their own rather than one machine checking both on paper.2. Release notes
release.ymlnow calls the sharedbasilica-audio/.github/release-notescomposite action twice: once increate-release, publishing this repository'sCHANGELOG.mdsection for the tag plus the suite-wide footer, and once in a newpublish-release-notesjob after the platform builds, rewriting the body with a Downloads table built from the assets that were actually attached.The footer answers the three questions the Releases page never did: what is in each archive, whether it will open, and where it goes. The signing status is stated in both directions - macOS Developer ID signed, notarised and stapled, with the two commands to verify it; Windows not Authenticode-signed, so SmartScreen will warn, and here is what to click. It lives in one repository, so a wording fix does not need thirteen pull requests.
A tag whose version has no
## [x.y.z]section inCHANGELOG.mdnow fails the release job, increate-release, before anything is built or uploaded. Deliberate: publishing an empty release page is the problem being fixed, and failing there costs a changelog edit and a re-tag rather than a cleanup of a half-published release.Verification
ctestgreen locally on Apotheosis, the plugin built for this change: 169/169, up from 164, the five new cases being the migration contract.ghCLI stubbed: zip-only and zip +.pkg+.sha256asset shapes, the no-assets pass, the missing-section failure, and its escape hatch;dry-run- run 33088601424, green - which proves what local testing cannot: that an action hosted in a repository named.githubresolves at all, and that the live asset list comes back as expected.gh release create/gh release editcalls themselves, and the two-pass ordering inside a liverelease.yml. The first tag exercises both.