Repository navigation
Conversation
… (0x4008485e) The core logger already holds the job site on every build, and FM Synth 0.1.4 needs it too (its engine dispatch filter), as do other modules' own job types. The site becomes a call hook in events.json: its head runs the logger's job record (and the sample editor's seam), then the subscribed handlers; 1 takes the job back to the engine loop, anything else nonzero runs stock at once. On card builds, which have no base, a module keeps its jmp detour on the site and the logger replays it from its hook (core-logger.ts chainedDetour); the native comparisons accept only that exact handover. Beta base rebuilt (3d934fca); the base-bound packages relinked (--base-only), Recorder Loop Fix's cave package re-linked for the moved arena. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main brought base changes (FRACT known among the PROTECT machines, native FLEX, Mute Modes, the USB MIDI clock fix), so the beta base is rebuilt on top of them with this hook (npm run octatrack:base -- --beta --write) and the base-bound packages relinked (--base-only): requiredBase for the five, the same Recorder Loop Fix bytes as before the merge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Nov 8, 2026
This branch has not been deployed
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.
0x4008485e(fl_io_dispatch: before a stock job it flushes its step-lock state and may refuse the job). The core logger already holds that site on every build: on the USB base (build_core.py) and on every browser card build (core-logger.ts). Somodules:compat -- synthrefuses the version, and the site could not build FM Synth 0.1.4 at all: itsjmpand the logger's land on the same six bytes (applyGuardedOsWrites: overlapping guards). Other modules want the same site for job types of their own, so a gesture only one module can hold would be a dead end (Propose a hook).ev_engine_job(events.json, index 38):int f(const uint8_t *job)with the received job, after the engine's receive and before stock's switch. 0 passes; 1 takes the job (stock does not run it, the engine goes back to its loop at0x4008484e, the idle hook, then the next receive); any other nonzero runs stock at once. The site's tail replays the six stock bytes from the user's OS and goes on at0x40084864. Generated withevents.py --write(HOOKS.md,modwerk_events.h, the dispatch,site-events.json).headcallsolog_job_hook(the JOB record, and the sample editor's job seam), whichbuild_core.pyends withrtson a site-events base instead of its stock replay, and the logger no longer patches the job site itself there.jmpdetour on the site there, as BBD does forev_tail_kill.chainedDetour(core-logger.ts) puts that wholejmpin the logger hook's replay slot, so the logger records the job and then the module runs as it would from the site. Only an exact same-spanjmpis handed on; anything else still refuses as overlapping.static-compose.tsleaves the handed-on write out when it applies the plan.native-comparison.mjs,verify-sidechain-native.mjs) checked that no logger write touches a module write. They now accept exactly that handover: a logger write at the address of a write the logger chained. The module-owned image is still compared with native byte for byte. Please look at this one: it changes what the checks allow, by design of this hook.npm run octatrack:base -- --beta --write): new identity5ef241d4(main's is9b3ba417; rebuilt on 6 Nov after merging main, which brought FRACT among the PROTECT machines, native FLEX, Mute Modes and the USB MIDI clock fix). The hook's handler row adds 516 bytes, so the arena and pool move up (arena +0x1800, pool +0x600 against main's base) andmodwerk_cue_cfg_clamp/modwerk_raise_ev_mute_keepmove. The base-bound packages are relinked (npm run octatrack:module-packages -- --base-only):requiredBasefor the five, and Recorder Loop Fix's cave package re-linked for the moved arena (new hash). The other four rebuild byte for byte.runtime.jsongetsev_engine_job→mw_ev_engine_job, replacingfl_io_dispatch, andport.sgets a ten-instruction wrapper around FM's ownfl_io_before_job/fl_io_reject_job. I tried this locally on FM Synth 0.1.4: the author's 2.21 engine; MIDI quantizing moves to Scale Quantizer #1146's head with this registry:test_machine_eventsandtest_runtime_package_metadatapass, andmodules:compat -- synthno longer reports0x4008485e.npm run pr:ready: Ready (npm run check -- --base origin/mainpassed,sdk:checkincluded). The base build is stock-free and flash-safe, and the browser.binis byte-identical tobuild_core.py's (ed69b271…, base5ef241d4).3d934fca, 5 Nov; not rerun on5ef241d4):scripts/build-modules-isolated.shin the pinned image, thenmodules:import --development: the card packages are identical to the committed ones. Only thesourceCommitstamps changed (and the file hashes that follow from them), so I did not commit the import.core-logger.test.ts: a same-spanjmpis handed on, a different span or address is not, and ajsror a non-detour on a logger site is refused.sdk/tests:test_machine_events,test_sample_editor,test_module_compat,test_host_reconstruction,test_runtime_package_metadatapass.test_runtime_loaderfails locally only on the known Node 18 default (No FX page for everb: Node.js v18.20.8), the same on main.3d934fca(5 Nov, before the merge of main; not rerun on5ef241d4) (ot_emu, that base'sMAIN.raw, 15 s emulated, 3 s host): it boots, and the core logger's ring holds 256 JOB records in begin/end pairs with rising tokens: the new site's head records each job and every job comes back through the loop. The fixture card has no project, so every job the emulator served was type0xff(the engine's empty receive, above 45, which stock skips): no project load or save ran through the hook here. Not hardware evidence.5ef241d4has not been booted on a unit yet; the unit run is pending and needed before merge (below). This stays a draft until then.npm run device -- log(or the diagnostics pull): JOB records in begin/end pairs, and a log flush after the save (jobs 7, 0x11 and 0x12 request one at the next idle).npm run octatrack:base -- --stock OS.bin --beta --write, thennpm run octatrack:module-packages -- --base-only).sdk/runtime/logging/README.md). A gap I did not close: no check sees a card module's detour landing on a core logger site (stock-guards.json) until the browser composes it;modules:compatcaught this one only because the USB base patches the same site.This unblocks #1146 (FM Synth 0.1.4): once it merges, #1146 merges main and subscribes.
🤖 Generated with Claude Code