Skip to content

v68.3.0: cut backup-retry cooldown 15s -> 5s#229

Merged
ryanbr merged 1 commit into
masterfrom
fix/backup-retry-cooldown
May 21, 2026
Merged

v68.3.0: cut backup-retry cooldown 15s -> 5s#229
ryanbr merged 1 commit into
masterfrom
fix/backup-retry-cooldown

Conversation

@ryanbr

@ryanbr ryanbr commented May 18, 2026

Copy link
Copy Markdown
Owner

What

FailedBackupPlayerTypes lockout if (failedAt && (Date.now() - failedAt) < 15000)< 5000 in vaft's backup-search loop (all 4 vaft files).

Why

The 15s lockout keeps the search off a player type that returned ad-laden — but in the universal CSAI-flip world a type often becomes clean again within seconds. 15s left the search avoiding a recovered type far longer than warranted, prolonging ad-break stalling. Ports the GosuDRM/TTV-AB v8.0.0 "reduced ad-induced stalling" tuning (_getBackupPlayerRetryCooldownMs 15000→5000) to vaft's equivalent mechanism.

Tradeoff (deliberate, instrumented)

A 5s cooldown retries an ad-laden type ~3× more often → more token/m3u8 fetches → more pressure on the ConsecutiveTokenFetchFailures detection/rate-limit tripwire. This is not a free win. It ships with the cold/warm token-fetch instrumentation (v68.2.0 / #228) precisely so the added cold-fetch load is visible in field logs — the (cold cache: N token fetches) counts are the trip-wire. If they climb materially after this lands, the cooldown is tuned up or reverted against that data.

vaft-only (video-swap-new has no FailedBackupPlayerTypes equivalent). Testing pair already shipped direct to master (v650.0.0). acorn-clean.

🤖 Generated with Claude Code

The FailedBackupPlayerTypes lockout kept the backup search off a
contaminated player type for 15s. In the universal CSAI-flip reality
a type can become clean again within seconds; 15s left the search
avoiding a recovered type far longer than warranted. Cut to 5s,
porting GosuDRM/TTV-AB v8.0.0 'reduced ad-induced stalling'.

Deliberate latency/load tradeoff: ~3x more retry fetches. Shipped
with the cold/warm token-fetch instrumentation (#228) so the added
cold-fetch load is visible in field logs and tunable/revertable
against data. vaft-only. Testing pair shipped direct (v650.0.0).

Rebased onto current master; CLAUDE Testing version kept at 651.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ryanbr ryanbr force-pushed the fix/backup-retry-cooldown branch from abe658b to 3362a65 Compare May 21, 2026 00:01
@ryanbr ryanbr merged commit f7c7e5e into master May 21, 2026
2 checks passed
ryanbr added a commit that referenced this pull request May 21, 2026
Append cold-cache decomposition to the 'backup found in Nms' log:
'(cold cache: N token fetch[es])' vs '(warm cache)'. A per-search
local counter increments on the cold path where the GQL
getAccessToken round-trip is actually taken — which only happens when
BackupEncodingsM3U8Cache misses, not in warm steady state.

Pure observability — no behavioral or load change, the entangled
backup-search loop is untouched. Complements v68.3.0 (cooldown cut)
by making the cold-fetch-load cost visible in field logs.

Rebased onto current master (post-#229 merge); CLAUDE Testing 651
preserved.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ryanbr added a commit that referenced this pull request May 21, 2026
Append cold-cache decomposition to the 'backup found in Nms' log:
'(cold cache: N token fetch[es])' vs '(warm cache)'. A per-search
local counter increments on the cold path where the GQL
getAccessToken round-trip is actually taken — which only happens when
BackupEncodingsM3U8Cache misses, not in warm steady state.

Pure observability — no behavioral or load change, the entangled
backup-search loop is untouched. Complements v68.3.0 (cooldown cut)
by making the cold-fetch-load cost visible in field logs.

Rebased onto current master (post-#229 merge); CLAUDE Testing 651
preserved.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ryanbr added a commit that referenced this pull request May 21, 2026
Consolidates the master-only v68.3.0 (cooldown 15s -> 5s, #229) and
v68.4.0 (cold/warm token-fetch instrumentation, #228) CHANGELOG
entries into a single v68.2.0 release section, and renumbers the
release-pair scripts to v68.2.0/83 to match.

GitHub Releases is currently at v68.1.0; the v68.3.0/v68.4.0 labels
on master were staging, not formal releases. The next formal
published release is v68.2.0, content-identical to the v68.4.0
master snapshot.

Auto-update consequence (deliberate): Tampermonkey/Violentmonkey
will not downgrade local @Version 68.4.0 to 68.2.0 — clients who
pulled the master raw URL between #229's merge and this commit will
stay on v68.4.0 (which is a content-superset of v68.2.0) until the
next release >=68.5.0 ships. They lose nothing.

#230 (IVS WASM crash circuit-breaker, still open) is currently at
v68.4.0/85 in its branch and will need rebasing + renumbering (to
v68.3.0/84) after this lands.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant