Repository navigation
Conversation
An ABI 10 engine package carries its price per voice in its header's cycles and kind (bytes 44-46), as an effect's per-instance figure: worst case per sample, charged once per track that plays it. It lies outside the controller digest, so a new price ships in the package and never changes the base's trust row (repeat98, repeat98#1480). - loader.c: an engine needs cycles > 0 and kind executed or hardware; init and the other descriptor bytes stay 0. Older bases already refuse any price on an engine, so they fail safe. - abi9.engine (the builder) refuses the same; module-set.ts checks it as the loader does. - machine_registry.c: a voice is charged at its module engine's price; a record priced beside it, a per-core cost of another kind or no price at all is refused, never admitted free. - Analog BD: 414 per voice in its engine header (411 + 3 folded, so the same DSP room as today); its machine record keeps 0/0 and its kind. - Beta base rebuilt; only Analog BD's trust row and package change. Sidechain 0.2.1 (held) stays trusted and now names the new base. - Machine recipes recaptured: identical images, copies and fills; only the hashes of machine-ports.json and machine_ports.py move. - New sdk/tests/test_base_bound_trust.py: every published base-bound package is trusted by, and names, the committed base. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upstream's repeat98#1483 rebuilt the base; this regenerates it with the engine price change on top: Analog BD's recipe recaptured (identical copies and fills), base and base-bound packages rebuilt, Sidechain 0.2.1's held entry pointed at the new base (test_base_bound_trust caught it). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…der's header checks Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner
|
Thanks, this is a clean change. The loader, the builder and the site refuse exactly the same headers, the published package differs from 0.1.7 only in its price bytes and record, and the new trust test is a good catch to keep. Two things before it goes in:
|
Owner
repeat98
added a commit
that referenced
this pull request
Nov 13, 2026
…1520) * Docs: the DSP hooks guide says the engine header carries the price repeat98's review of #1487: docs/OCTATRACK_PACKAGE_DSP_HOOKS.md still said the price (411 a voice, 3 a core) stays in the machine record until Phase 2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Docs: the price bullet becomes a pointer, so the guide shrinks Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: repeat98 <jannik.assfalg@gmail.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.
cycles(bytes 44-45) andkind(46), outside the controller digest. Charged once per track that plays it, a fixed per-core cost folded in.loader.c,abi9.engine(the builder) and the site'smodule-set.tsrefuse an engine withcycles0, a missing or modeledkind, or a nonzeroinit. Older bases already refuse any price on an engine, so they fail safe.machine_registry.ccharges a voice at its module engine's header price. A record still priced beside such an engine, a per-core cost of another kind, or no price at all is refused, never admitted free. Machines without an engine keep their record's price.source_kindstays, as Improvement: a CPU budget admits Octatrack machines before they play #1482's CPU budget and the voice checks read it). Same DSP room as today: DSP FULL appears where it did. 187 + 4 = 191 follows as a module-only Analog BD update once this merges.machine-ports.jsonandmachine_ports.pymove.modwerk_controller_write_begin/end(an extra check inengine_shapegrew a function before them), which silently untrusted the held Sidechain 0.2.1 package; the check was redundant with the loader's and is gone. Held entries also keep the oldrequiredBase(as ind720a028a, fixed by hand in3cb49bae8). Newsdk/tests/test_base_bound_trust.py: every published base-bound package is trusted by, and names, the committed base. It passes on main and caught therequiredBaseslip again after merging main here.module-set.test.tscases. Each new rule was mutation-checked: removing it makes its test fail.npm run pr:ready: everything green except two SDK tests that fail identically on untouchedmainon this Mac (test_dsp_packages_rebuild_from_source,test_real_units_relocate_alike…: localdsp_asmbuilds, 1004 vs 1009 words); CI's pinned toolchain should differ. Untouchedmainrebuilds the committed base byte for byte on this Mac.2eed068c): a--devtwin of this base (80f62ad6) with its own trust rows, Analog BD trials only (never kept):source_voicetable read 335 per voice (191 × 7/4);de01247b, non-dev) RAM-booted and accepted the published Analog BD 0.1.7 and Sidechain 0.2.1 as one trial set. The unit's 16 kept modules were unchanged after every power cycle.cpu_priceis 0 for DSP-voice machines). At 191 each voice added about 4.5 points of CPU; three voices ran at about 67 % with the longest frame at 86 %, and twice a single frame reached 99.9-100.3 % (first PLAY, and during switching), nothing skipped. Worth deciding before three voices ship.583a189a) on the unit; DSP load at 414; an unpriced or modeled engine on the unit (host only).docs/OCTATRACK_DRIVING.mdsaid base-bound modules cannot be tested on a twin; it now gives the twin-only recipe route, and notes that a RAM boot sent throughserveonce left the unit off USB while the one-shotbootworked.sdk/runtime/loader/README.mdnow documents the engine price and that the site mirrors the loader's header checks.🤖 Generated with Claude Code