Repository navigation
Fix: the Octatrack power-on restore tries a BUSY refusal again before leaving a module out - #1026
Merged
Merged
Conversation
… leaving a module out (beta finding 69) At power-on Ring SC, the key bus reader, was sometimes refused BUSY and left out of the restored set, while a sync later in the same boot installed the same package. The loader reports every switch it could not make as BUSY, so the restore now tries such a package (or a loader it cannot enter) again every half second for up to ten seconds; ep0.c keeps holding the host until it is done. Other refusals are left out at once, as before. Host test in test_modset.c; beta base rebuilt (88c68eed), the five base-bound packages rebind byte-identical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4 tasks done
This was referenced Oct 29, 2026
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.
What was wrong: after a power cycle, the Octatrack beta base sometimes left SC Ringmod out of the restored module set. The unit showed "SOME MODULES FAILED" and the restore record named Ring SC refused BUSY (beta finding 69). In the 28 October diagnostics this hit three testers in 24 hours, on bases
903f8ed6and2ba936b9. In one case a sync later in the same boot installed the same package fine, so the refusal is transient.The exact cause is still unknown.
loader.creports every switch it could not make asRUNTIME_BUSY, whichever check refused it, and the key-bus reader's own BUSY paths incontroller_board.clook unreachable that early. A RAM boot did not reproduce it on 24 October; testers power-cycle.What changes:
modset.c's restore now tries a package the loader refuses BUSY again every half second, for up to ten seconds, before leaving it out. The same applies when the loader can't be entered (the sequencer playing).restoredstays 0 until the restore is done, soep0.cholds host requests meanwhile, at most ten seconds longer than before. Every other refusal is still left out at once. The card keeps the whole set, so the next start tries it again, as before. The set's identity is sorted by module id, so a module installed on a later pass doesn't change it.88c68eed(was6541d7e9). Browser.binequalsbuild_core.py's, stock-free, flash-safety checks passed. The five base-bound packages rebind byte-identical (octatrack:module-packages --base-only); only theirrequiredBasemoves.changelog/2026-10-28-restore-retries-busy.md. Finding 69's row says the fix (the log doesn't grow).OCTATRACK_DRIVING.mdnow says to start theserveloop from a checkout that stays. The shared loop had been started from a merged PR's removed worktree: after aboothand-off it can't restart (process.cwd failed) and fails every second.How I checked it
test_modset.ccovers three cases. A package refused BUSY every time is tried 20 times, the host is held meanwhile and it is left out after ten seconds. BUSY twice, then it installs: the whole set, nothing sealed or written. Any other refusal is left out at once. The oldmodset.cfails 4 of these checks.test_sets.c's refused-at-boot case uses a lasting refusal.test_recipe.py(39),test_runtime_card_guard,test_volatile_service,test_saved_set_wiring,test_runtime_journalandtest_module_setsall pass.npm run pr:ready: Ready.88c68eedwith a kept set that includes Ring SC (normal restore, no regression), then a power-on with that set.Conflicts with #1024, which also edits the end of
restore()andtest_modset.c, and with every base PR's generated base files. Merge them one at a time; the second one merges main and regenerates the base.Related to finding 69 in docs/OCTATRACK_BETA_TEST_PLAN.md.
🤖 Generated with Claude Code