Skip to content

Fix: Octatrack base, engines on a core whose owned channel closed read STUCK instead of waiting for the transport - #1033

Merged
repeat98 merged 6 commits into
repeat98:mainfrom
npp1993:fix/ot-engines-closed-core
Oct 29, 2026
Merged

repeat98 merged 6 commits into
repeat98:mainfrom
npp1993:fix/ot-engines-closed-core

Conversation

@npp1993

@npp1993 npp1993 commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator
  • What was wrong or hard: On Nathaniel's MKII (27 October 2026) an unprovoked ~2 s USB drop mid-trial rolled the trial back and afterwards both DSP cores' resident-engine claims stayed at wait 7 (waiting for the transport) and the key bus read 0x80 (down) until a power cycle. The review first suspected the journal's owned lease; that path is compiled out on the unit (MODWERK_JOURNAL_BOARD_ENABLED 0), so the lease is never acquired. The real gap: a core's owned channel can be closed from outside the engines (a legacy packet aging out after 64 frames without an ACK, the stall watchdog's dl_abort, a failed key-bus job, a sequence wrap), and resident_engines.c only looked at its own closed[]: owned_reserve refused, reserve() returned 0 and placement set wait 7 every tick for good, while admission still let a new controller in to wait the same way. The key bus already reported the core as down; the engines did not.
  • What this changes: resident_engines.c treats dl_owned_closed(c) like closed[c] in placement's STUCK test and at admission (shut(c)): an engine not yet placed on that core reads STUCK, a module that needs it is refused at install (Sidechain and Analog BD with a conflict; a key-bus reader was already refused by keybus_down()), and the self-test names the failure. Placed engines keep working; a power cycle clears it as before. It does not recover the unit, and why the rollback's restore traffic timed out after the drop is still open: the transport's close reason is a private static with no room in the 192-byte engine view, so exporting it is a follow-up. Changelog changelog/2026-10-28-octatrack-engines-closed-core.md. Beta base regenerated.
  • How I checked it: npm run pr:ready; sdk/tests/test_resident_engines_board.py new mode 64 (core B's owned channel closed from outside: Sidechain refused with a conflict and STUCK_BOOT, a key-bus reader refused, placement reports STUCK and never TRANSPORT, no job runs or is reserved on B) and mode 47 now expects Sidechain refused on its closed core; with the fix reverted both modes fail. Not yet on a unit (it needs a USB drop to show).
  • What the guides lacked or got wrong, and where I fixed it: nothing.

Independent of #1024 and #944; whichever lands later regenerates the base.

🤖 Generated with Claude Code

npp1993 and others added 4 commits October 28, 2026 09:17
resident_engines.c only looked at its own closed[] flags, so a core closed
from outside the engines (a legacy packet aging out, the stall watchdog's
abort, a failed key-bus job, a sequence wrap) left every claim waiting for
the transport (wait 7) until a power cycle (MKII, 27 Oct 2026). Treat
dl_owned_closed(c) like closed[c] in placement's STUCK test and at
admission, so a new controller is refused (STUCK_BOOT) and the self-test
names it. Board test mode 64 closes core B from outside; mode 47 now
expects Sidechain refused on its closed core.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Base identity 052d86b7 (resident_engines.c changed); base-bound module
packages relinked.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…-core

# Conflicts:
#	sdk/machines/octatrack/base-binding.json
#	src/engine/assets/octatrack-base-variants.json
#	src/engine/assets/octatrack-base.elemod
#	src/engine/assets/octatrack-module-packages.json
…rrent main

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
repeat98 and others added 2 commits October 29, 2026 10:34
Brings in Analog BD 0.1.6 (repeat98#944, beta base 6483508a) and the later docs
merges. The generated base files were regenerated with their producers,
not resolved by hand: octatrack:base --stock OS1.40C --beta --write and
octatrack:module-packages. The five base-bound packages rebind
byte-identical (requiredBase a542a515); Analog BD's package is unchanged
(f83c7f81). Test mode 64 does not clash: main's board test ends at mode 63.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ngines-closed-core

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@repeat98
repeat98 merged commit 8bc69c0 into repeat98:main Oct 29, 2026
8 checks passed
@npp1993
npp1993 deleted the fix/ot-engines-closed-core branch October 30, 2026 16:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants