Module rules: a native helper ships prebuilt, for Apple silicon and Windows #35

Merged
michael merged 1 commits from claude/module-helper-rules into main 2026-09-29 16:45:38 -04:00
Owner

Why

The shell is about to stop bundling modules (plan in the discussion; separate PR). Once every module arrives through the admin page's catalog, the folder in git is the install — and a booth Mac or Windows PC has no compiler. Today the LTC and SPL helpers only exist because the macOS app build compiles and signs them into the bundle; a catalog install gets source and no tool, which NA's SPL module already shows ("spawn spl-capture ENOENT"), and AB's Xcode tools are broken besides.

What — rules only, no module changes

  • Rule 3 ("everything the module does runs inside the module") now ends: a native helper — anything that is not JavaScript — ships prebuilt inside the module folder, for Apple silicon macOS and 64-bit Windows; nothing is ever compiled on the machine running ProdDash.
  • "The shape of a module" shows the layout: bin/<name>-macos-arm64, bin/<name>-win-x64.exe, optional bin/<name>-macos-x86_64, with the source and the script that rebuilds every binary under native/.
  • New section "Native helpers" gives the contract: pick the binary by process.platform/process.arch at runtime; when there is none, the feature reports itself off in health() and the tile status and everything else keeps working — never build, never search the machine, never ask the operator to install anything; one command-line contract, any language per platform; bump the module version when a binary changes; optimised builds, no debug symbols, a few MB at most (the catalog archive is capped at 80 MB); sign the macOS binary (Apple silicon refuses unsigned code), Windows needs nothing; permissions still come from the launcher. A one-platform helper is a deliberate exception, said in the README and the health line.
  • CLAUDE.md carries the one-line version of the rule.

Timers (ltc-capture) and SPL Meter (spl-capture) are the two modules this applies to; bringing them to the rule is module work for their own PRs.

🤖 Generated with Claude Code

## Why The shell is about to stop bundling modules (plan in the discussion; separate PR). Once every module arrives through the admin page's catalog, the folder in git *is* the install — and a booth Mac or Windows PC has no compiler. Today the LTC and SPL helpers only exist because the macOS app build compiles and signs them into the bundle; a catalog install gets source and no tool, which NA's SPL module already shows ("spawn spl-capture ENOENT"), and AB's Xcode tools are broken besides. ## What — rules only, no module changes - **Rule 3** ("everything the module does runs inside the module") now ends: a native helper — anything that is not JavaScript — ships **prebuilt** inside the module folder, for **Apple silicon macOS and 64-bit Windows**; nothing is ever compiled on the machine running ProdDash. - **"The shape of a module"** shows the layout: `bin/<name>-macos-arm64`, `bin/<name>-win-x64.exe`, optional `bin/<name>-macos-x86_64`, with the source and the script that rebuilds every binary under `native/`. - **New section "Native helpers"** gives the contract: pick the binary by `process.platform`/`process.arch` at runtime; when there is none, the feature reports itself off in `health()` and the tile status and everything else keeps working — never build, never search the machine, never ask the operator to install anything; one command-line contract, any language per platform; bump the module version when a binary changes; optimised builds, no debug symbols, a few MB at most (the catalog archive is capped at 80 MB); sign the macOS binary (Apple silicon refuses unsigned code), Windows needs nothing; permissions still come from the launcher. A one-platform helper is a deliberate exception, said in the README and the health line. - **CLAUDE.md** carries the one-line version of the rule. Timers (`ltc-capture`) and SPL Meter (`spl-capture`) are the two modules this applies to; bringing them to the rule is module work for their own PRs. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
michael added 1 commit 2026-09-29 16:35:27 -04:00
The machine running ProdDash is a packaged app or the Windows bundle plus
modules from the admin page's catalog. It has no compiler, and the catalog
delivers exactly the folder that is in the repo — so a module's native
program (audio capture, a decoder) ships already built, inside the module
folder, one file per platform: bin/<name>-macos-arm64 and
bin/<name>-win-x64.exe are required, Intel macOS optional, source and the
script that rebuilds every binary under native/.

The guide's rule 3 now says so, "The shape of a module" shows the layout,
and a new "Native helpers" section gives the contract: pick the binary by
platform at runtime, report the feature off when there is none — never
build, never search the machine, never ask the operator to install
anything — one command-line contract in any language per platform, bump
the version when a binary changes, keep them lean, sign the macOS one.
CLAUDE.md carries the one-line version. Rules only: no module changes here.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
michael merged commit c37575f662 into main 2026-09-29 16:45:38 -04:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: michael/ProdDash#35