Skip to content

fix(account): enable offline mode via doorbell BundleManifests#247

Merged
delebedev merged 2 commits intomainfrom
claude/busy-johnson
Mar 26, 2026
Merged

fix(account): enable offline mode via doorbell BundleManifests#247
delebedev merged 2 commits intomainfrom
claude/busy-johnson

Conversation

@delebedev
Copy link
Owner

Summary

  • Detect installed Arena manifest hash from ~/Library/Application Support/com.wizards.mtga/Downloads/Manifest_*.mtga at server startup
  • Return it in doorbell BundleManifests response so the client finds the manifest locally
  • Works in both just serve and just serve-proxy modes — no proxy session needed to seed the cache

The client checks three manifest sources: config → doorbell → pointer file (assets.mtgarena.wizards.com). Previously doorbell returned empty manifests, forcing the client to hit the pointer file — which fails offline. Now the doorbell provides the hash, the client finds the file on disk, and skips the download.

Note: ~30s boot delay offline is unavoidable — the client always attempts the pointer file fetch regardless of doorbell results.

Closes #22

Test plan

  • AccountRoutesTest: doorbell returns cached manifests when provided
  • AccountRoutesTest: doorbell returns empty array without cache (backward compat)
  • All 41 account tests pass
  • Verified via Player.log: Found 1 manifest metadata entries from doorbell
  • Verified offline: Arena boots and connects to local server

🤖 Generated with Claude Code

…ia doorbell

The client checks three manifest sources: config, doorbell, pointer file
(assets.mtgarena.wizards.com). Without manifests, the pointer file fetch
blocks startup — and fails entirely offline.

Detect the installed Arena manifest hash from the local Downloads dir at
server startup and return it in the doorbell BundleManifests response.
The client finds the manifest locally and skips the download.

Note: the client still attempts the pointer file fetch (~30s timeout
offline) since it always checks all three sources. This is unavoidable
client-side behavior.

Closes #22

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link

github-actions bot commented Mar 26, 2026

Test Results

  252 files  +  139    252 suites  +139   3m 2s ⏱️ +51s
1 031 tests +  229  1 004 ✅ +830   26 💤  - 602  1 ❌ +1 
1 842 runs  +1 040  1 019 ✅ +845  822 💤 +194  1 ❌ +1 

For more details on these failures, see this check.

Results for commit f56e232. ± Comparison against base commit 0d16c23.

♻️ This comment has been updated with latest results.

@github-actions
Copy link

github-actions bot commented Mar 26, 2026

CI Report — Gate

Tests: 173/802 passed, 1 failed (628 skipped)

Failed tests
  • ActivatedAbilityPuzzleTest.Goblin Fireslinger tap-to-ping kills opponent (13.9s)

    io.kotest.assertions.AssertionFailedError: expected: but was:

Coverage: 10.8% (642/5923 lines)

Module Coverage Lines
tooling 🔴 11% 642/5923
Slow tests (>3s): 4
  • AiTurnNoAarTest.AI turn sends no ActionsAvailableReq to client (34.4s)
  • PvpBridgeEndToEndTest.two-player game: land, creature, turn rotation, per-seat visibility (7.2s)
  • DeclareBlockersDedupeTest.no duplicate blockers req (6.2s)
  • AiFirstTurnShapeTest.at most one post-handshake Full GSM with zones (3.4s)

DebugServer.start() exceeded 100-line detekt limit. Extract repeated
POST endpoint boilerplate (method check + error handling) into a
reusable HttpServer.postContext() extension.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@delebedev delebedev merged commit a9f260e into main Mar 26, 2026
2 of 4 checks passed
@delebedev delebedev deleted the claude/busy-johnson branch March 26, 2026 21:40
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.3GB re-download when switching between serve and serve-proxy

1 participant