Repository navigation
Fix: publish an Octatrack C module with no event subscriptions over USB (ABI 8, named) - #1231
Merged
Merged
Conversation
…s name
build.py makes a C module that subscribes to no event an unnamed ABI 4
package, which the publication builder refuses ("Not a supported
published runtime ABI"). The host wrapper now repacks it as the ABI 8
package build.py makes for a subscribing one (trailing empty hook words
dropped, its stem as its unit name). The loader on the committed base
already reads that form; build.py itself stays unchanged, since it is a
base input and pinned by the stock recipes. Every published package
rebuilds byte for byte.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
subscribeorraisein its package row, came out ofsdk/runtime/loader/build.pyas an ABI 4 package with no name. Tiempos (Tiempos 0.1.0-experimental: time left on all eight tracks (USB only) #1096) is one. The publication builder takes only ABI 6 to 9, sonpm run octatrack:module-packagesstopped with "Not a supported published runtime ABI" and the row could not be completed.scripts/octatrack-module-packages.py, the host wrapper, now repacks such a package as the ABI 8 packagebuild.pyalready makes for a subscribing C module (build_c). The image, relocations and module id stay the same, the trailing empty hook words are dropped, and the row id becomes its name on the unit (up to 15 characters). Any package that is not ABI 4 passes through unchanged.build.py: it is a base input (src/engine/assets/octatrack-base-sources.json), and the machine, standalone, candidate and reconstruction recipes pin its hash. Editing it would mean rebuilding the base from the stock OS and recapturing those recipes.loader.c(its hash matches the base inventory) admits ABI 8 with any number of hook words up to its limit. The site'smodule-set.tsaccepts ABI 8 with features 0 and four hooks.test_a_c_package_with_no_events_goes_out_as_abi_8_with_its_nameinsdk/tests/test_module_packages_cli.py, checks four things: a synthetic ABI 4 package becomes exactly whatbuild_c's subscribing path makes, the publisher'scapabilities()accepts it, an ABI 8 package passes through unchanged, and a name that does not match the module id is refused.npm run octatrack:module-packages -- --checkrebuilt 27 packages and all came out identical. POLY8 and Play Modes stayed held as declared.build.pygives0506a245…, the ABI 4 package the author tested on his MKI.8163c42c…: 2,488 bytes, ABI 8, features 0, named "tiempos", module id 31282ae5 unchanged.host_test.c's stub glue with the Octatrack defines. Both were admitted and published with all four hooks bound. The inventory entry is unnamed for ABI 4 and "tiempos" for ABI 8.npm run pr:ready: Ready.build.pyandmodule_packages.pyare base inputs. A change to how packages are published can therefore look like it needs a new base.docs/ADD_A_MODULE.mdnow says so and points to the wrapper. If someone edits either file anyway, the base staleness test inoctatrack-base.test.tsalready fails.Follow-up for #1096: Tiempos'
verify.pyrebuilds withbuild.pydirectly, so it has to repack the same way (titled()from the wrapper) before it can match the published package.Related to #1096.
🤖 Generated with Claude Code