fix(web): filter a refetched mix inside the self-heal step, not by wrapping the closure (#5418)
release / govulncheck (push) Successful in 21s
release / web (push) Successful in 1m31s
release / go (push) Successful in 1m42s
release / android (push) Successful in 5m9s
release / Build signed APK (releases and dev) (push) Successful in 5m16s
release / integration (push) Successful in 17m42s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 22s
release / Verify release artifacts (tag releases only) (push) Skipped

The wrapper added a promise hop, so the self-heal test's single
microtask wait saw 'loading' instead of 'error'.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 17:33:10 -04:00
co-authored by Claude Opus 5.5
parent 8bd2f66416
commit bf0bc45c4b
+3 -3
View File
@@ -144,8 +144,7 @@ export function playQueue(
// rotation-aware order, so no client shuffle in that path).
_queueSource = opts.source ?? null;
// #968: a fresh play replaces the self-heal closure + resets its budget.
const refetch = opts.refetch;
_queueRefetch = refetch ? () => refetch().then(playable) : null;
_queueRefetch = opts.refetch ?? null;
_selfHealAttempts = 0;
// Start on the chosen track's place in the playable list; if the chosen
// one is missing, that place holds the next playable track after it.
@@ -376,7 +375,8 @@ function trySelfHeal(): boolean {
_error = null;
const refetch = _queueRefetch;
void refetch()
.then((refs) => {
.then((fetched) => {
const refs = playable(fetched);
if (refs.length > 0) {
// Re-seed in place — keep _queueSource / _queueRefetch so the new
// snapshot can itself self-heal, and don't reset _selfHealAttempts