Skip to content

Give each module its own changelog file and stop committing the module list - #611

Merged
repeat98 merged 3 commits into
mainfrom
claude/per-module-catalogue
Oct 14, 2026
Merged

repeat98 merged 3 commits into
mainfrom
claude/per-module-catalogue

Conversation

@repeat98

Copy link
Copy Markdown
Owner

Every Digitakt/Digitone module PR edited the same lines of two files, so each merge left the other open module PRs conflicted until they were refreshed and checked again. This is the first of two PRs that remove that.

What changes

  • Changelog: release notes move from src/community/module-changelogs.json to one file per module, src/community/module-changelogs/<id>.json (Digitakt/Digitone: <machine>-<id>.json). Each file is that module's list of releases, unchanged.
  • Generated, no longer committed: src/catalog/machine-modules.json and src/community/module-changelogs.json.
  • Author-release scope: the same rules, per file. An author may edit only their own modules' notes files, and every published entry must stay. "Already published" for a Digi module now means its folder exists on main, which is exactly what the generated list contained.
  • Worker deploys: a Digi manifest change now decides the Worker redeploy directly. Before, that decision came from the diff of the committed module list, so without this a Digi version bump would not have redeployed the Worker.
  • Docs: AGENTS.md, ADD_A_MODULE, DEVELOPER_WORKFLOW, MODULE_AUTHOR_UPDATES, sdk/AGENTS.md and four draft notes now name the per-module file.

Still shared after this

vendor/elekloader/catalog/catalog.json and its lock. Every Digi module PR still adds pins there and changes the catalogue hash. The next PR builds that catalogue from each module's own import record. Until then, npm run catalog:resolve (#609) resolves those two files.

Octatrack FX PRs still serialize on sdk/catalog.json sourceRevision, which every compiled package depends on. That is a rebuild, not a merge conflict.

Open PRs that need a one-time move after this merges

#577, #560, #555 and #412 edit the old changelog file. After git merge main stops on the two deleted files:

  1. Copy your module's entries into src/community/module-changelogs/<id>.json.
  2. Run git rm src/catalog/machine-modules.json src/community/module-changelogs.json.
  3. Run npm run prepare, then commit.

This PR did exactly that when merging main.

Tested

  • npm run check -- --base origin/main passed after the final merge with main: 284 test files, 2,326 tests, plus lint, typecheck, bundle and sdk checks.
  • Fresh-checkout case: with both generated files deleted, npm run prepare recreates them, identical to main's committed versions.
  • New or changed tests:
    • a failing prepare stops the check before anything else runs;
    • an author may add notes to their own file, but not empty it, delete it, or edit another module's file;
    • a new Digi module triggers the Worker deploy.

🤖 Generated with Claude Code

repeat98 and others added 2 commits October 14, 2026 19:23
…e list

Every Digitakt/Digitone module PR edited the same lines of
src/catalog/machine-modules.json and src/community/module-changelogs.json,
so each merge left the other open module PRs conflicted until they were
refreshed and re-checked.

Release notes now live in src/community/module-changelogs/<id>.json, one
file per module. Both combined files are generated instead of committed:
npm ci (prepare) and npm run check write them, and every import keeps
working. The author-release scope check applies the same rules per file:
only the author's own modules' notes, published entries preserved. A Digi
manifest change now decides the Worker deploy directly, as the committed
list's diff did before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…alogue

# Conflicts:
#	src/catalog/machine-modules.json
#	src/community/module-changelogs.json
Every Digitakt/Digitone module PR added pins to
vendor/elekloader/catalog/catalog.json and changed the whole-catalogue
revision there and the catalogue hash and count in the lock, so each
merge left the other open module PRs conflicted.

The upstream cores and mods move to vendor/elekloader/upstream-catalog.json,
which the lock now pins alone (written and verified by the kit's own
tool). Modwerk-built pins already live in each module's import record,
sdk/imports/elekloader-*.json; the served catalog.json is the upstream
catalog plus every record, generated by prepare and never committed.
Every consumer keeps reading the same path. The assembled catalogue holds
the same 43 pins as before; only their order and therefore the revision
change once.

elekloader:update writes the upstream part and locks it alone, and
--overlay names a module record. The author-release check assembles the
served catalogue at the base and head from Git objects and keeps every
rule; an author may change only a record holding nothing but their own
pins, and the lock now always needs owner review.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@repeat98
repeat98 merged commit 71df776 into main Oct 14, 2026
6 checks passed
repeat98 added a commit to sumedho/modwerk that referenced this pull request Oct 14, 2026
Main now generates the module list and the combined changelog and builds
the Elekloader catalogue from per-module records (repeat98#611, repeat98#614). This moves
the Sample Snap and Crossfade 0.2.2 release notes into
src/community/module-changelogs/digitakt-sample-tools.json, drops the old
combined files and catalog.json edits (its pins are already in
sdk/imports/elekloader-sample-tools-2026-10-14.json) and takes main's
upstream catalogue and lock unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant