Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog/2026-11-07-titled-package-hook-words.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SDK: the published-package test accepts an ABI 8 C package that only has its UI handlers (module_tick, module_draw, module_key, module_enc), as `npm run octatrack:module-packages` now publishes one with no events (#1231). Only hook words past those four, which are site events, need the base's events feature (128), as the builder already decides.
2 changes: 1 addition & 1 deletion src/engine/elekloader/module-set.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ describe('the site’s runtime packages', () => {
if (!('octabam' in entry) && !('machine' in entry) && !('tables' in entry) && !('base' in entry) && !('sources' in entry)) expect([abi, view.getUint32(20), view.getUint32(24)]).toEqual([entry.requires ? 9 : 6, 0, 0]) // ABI 6 DSP effects (9 when they require a base feature) carry no stock-code bytes
if ('machine' in entry) expect([abi, view.getUint16(6) & 4]).toEqual([8, 0]) // an independent machine package, never a group
expect([entry.abi, entry.sites, entry.copies, entry.fills]).toEqual([abi, view.getUint32(24), abi >= 7 ? view.getUint32(68) : 0, abi === 8 ? view.getUint32(72) : 0])
expect(view.getUint32(20) > 0).toBe((entry.features & 128) !== 0) // only a site-event subscriber has hook words
expect(view.getUint32(20) > 4).toBe((entry.features & 128) !== 0) // only a site-event subscriber has hook words past the four UI handlers (module_tick, module_draw, module_key, module_enc)
// A package bound to a base names exactly the published one (octatrack:base writes its binding).
expect((entry as { requiredBase?: string }).requiredBase).toBe('base' in entry ? baseBinding.identity : undefined)
}
Expand Down
Loading