Timers 1.7.0: the LTC capture tool ships prebuilt, for Apple silicon and Intel #37

Merged
michael merged 1 commits from claude/timers-prebuilt-helper into main 2026-09-30 14:19:58 -04:00
Owner

Why

The LTC capture tool used to exist only because the macOS app build compiled and signed it into the bundle, with the module trying swiftc on the booth as a fallback. A catalog install got source and no tool — and since shell 1.10.0 every fresh install is a catalog install. The module guide's rule (PR #35): a native helper ships prebuilt for Apple silicon and Windows, and nothing is ever built on the machine running ProdDash.

What

  • bin/ltc-capture-macos-arm64 and bin/ltc-capture-macos-x86_64, committed (100 KB and 64 KB), signed with the Waters Church Developer ID — hardened runtime plus the audio-input entitlement, the same signing the app build used to apply. Built from native/ltc-capture.swift by native/build.sh (both architectures cross-compile from either Mac); native/helper.entitlements beside it.
  • captureTool(moduleDir) picks the binary by process.platform and process.arch. Where there is none — Windows, until a Windows implementation exists — timecode reports itself off: Capture tool unavailable — see Admin on the tile and The module ships no LTC capture tool for Windows x64 (bin/ltc-capture-win-x64.exe is missing) — timecode is off on this machine in health and the device picker. The rest of the module runs.
  • Gone: the runtime swiftc build, its "building…" states, the stale-source rebuild, the device picker's build kick and the source's .gitignore line. The old top-level ltc-capture on existing installs is simply no longer used (the shell's executable carry-over leaves it be).
  • Timers 1.7.0.

Verified

  • Both binaries: Mach-O 64-bit executable of the right architecture, codesign --verify --strict passes, entitlements show com.apple.security.device.audio-input, runtime flag set.
  • bin/ltc-capture-macos-arm64 --list on this Mac lists its input devices.
  • captureTool() returns the arm64 binary here, the x86_64 one for darwin/x64, and the off-message for win32/x64 and linux/x64.
  • ltc.selftest.js and phase.selftest.js pass.
  • On a scratch ProdDash, GET /api/modules/propresenter-timers/ltc/devices returns the machine's six input devices through the new tool.

Not tested here: live capture (this Mac has no LTC source). AB and NA keep working through their compiled copies until this lands; on update the shipped arm64 binary takes over.

🤖 Generated with Claude Code

## Why The LTC capture tool used to exist only because the macOS app build compiled and signed it into the bundle, with the module trying `swiftc` on the booth as a fallback. A catalog install got source and no tool — and since shell 1.10.0 every fresh install is a catalog install. The module guide's rule (PR #35): a native helper ships prebuilt for Apple silicon and Windows, and nothing is ever built on the machine running ProdDash. ## What - **`bin/ltc-capture-macos-arm64` and `bin/ltc-capture-macos-x86_64`**, committed (100 KB and 64 KB), signed with the Waters Church Developer ID — hardened runtime plus the audio-input entitlement, the same signing the app build used to apply. Built from `native/ltc-capture.swift` by `native/build.sh` (both architectures cross-compile from either Mac); `native/helper.entitlements` beside it. - **`captureTool(moduleDir)`** picks the binary by `process.platform` and `process.arch`. Where there is none — Windows, until a Windows implementation exists — timecode reports itself off: `Capture tool unavailable — see Admin` on the tile and `The module ships no LTC capture tool for Windows x64 (bin/ltc-capture-win-x64.exe is missing) — timecode is off on this machine` in health and the device picker. The rest of the module runs. - **Gone:** the runtime `swiftc` build, its "building…" states, the stale-source rebuild, the device picker's build kick and the source's `.gitignore` line. The old top-level `ltc-capture` on existing installs is simply no longer used (the shell's executable carry-over leaves it be). - Timers **1.7.0**. ## Verified - Both binaries: `Mach-O 64-bit executable` of the right architecture, `codesign --verify --strict` passes, entitlements show `com.apple.security.device.audio-input`, runtime flag set. - `bin/ltc-capture-macos-arm64 --list` on this Mac lists its input devices. - `captureTool()` returns the arm64 binary here, the x86_64 one for `darwin/x64`, and the off-message for `win32/x64` and `linux/x64`. - `ltc.selftest.js` and `phase.selftest.js` pass. - On a scratch ProdDash, `GET /api/modules/propresenter-timers/ltc/devices` returns the machine's six input devices through the new tool. Not tested here: live capture (this Mac has no LTC source). AB and NA keep working through their compiled copies until this lands; on update the shipped arm64 binary takes over. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
michael added 1 commit 2026-09-30 10:12:14 -04:00
The tool used to be compiled by the macOS app build, or by the module
itself on the booth with swiftc — and a catalog install got source only,
which the unbundled 1.10.0 shell made every fresh install. Under the module
guide's rule it now ships built: bin/ltc-capture-macos-arm64 and
bin/ltc-capture-macos-x86_64, signed with the Developer ID (hardened
runtime, audio-input entitlement), from native/ltc-capture.swift via
native/build.sh. Nothing is built or looked for on the machine any more:
captureTool() picks the binary for this platform, and where there is none
— Windows, until a Windows implementation exists — timecode reports itself
off in the tile and the health line while the rest of the module runs.
The runtime build, its "building…" states and the device picker's build
kick are gone with it. The old top-level binary is no longer gitignored
(it is no longer written).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
michael merged commit fe3811b03e into main 2026-09-30 14:19:58 -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#37