Repository navigation
fix(app): retrying dynamic imports — the tunnel-truncation class (#1459b, current-main slice) - #1474
Conversation
…ass (current-main slice). The fleet's ssh tunnel restarts on network transitions (launchd KeepAlive) and kills every in-flight tunneled response MID-STREAM; a lazily-imported chunk crossing a restart gets a cleanly-truncated body (observed live: 2,884 of 28,497 bytes) and Chromium's module map caches the failure FOR THE DOCUMENT'S LIFE — every later import of the same URL throws 'Failed to fetch dynamically imported module' WITHOUT a network request: the new-session launch frozen in the loading hold forever (live-verified root cause of the stuck-loading arc; the rig has no tunnel so it never sees the class). retryImport parses the failing URL, re-imports it cache-busted (fresh module-map key) with backoff 1s→2s→4s→8s→16s (~31s of transport-storm ride-out; observed watchdog windows last minutes — a single immediate retry drowned in the storm's first beat); chained busts strip the previous query. Wired at all 8 dynamic-import sites. Transient-only: real errors rethrow. 7 contract tests (importer injected — the engine's import() never runs in the suite). Manifest: files + classification registered, drift gate PASS.
|
Warning Review limit reachedNext included review available in 37 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (6)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Reconciled this branch with current |
|
|
…MPDIR self-pollution fix) (#1520) * fix: recover session reliability regressions (#1472) * fix(packaging): enforce known fixes before CI advisory * fix(app): #1466 restore parent Files Changed invalidation * test(app): cover all #1466 file edit events * fix(app): #1467 bound mirror and session warming * fix(packaging): migrate #832 shared-state guard * fix(app): guard session warm scheduler keys * fix(app): repair #1466 review findings --------- Co-authored-by: amicode-ci <ci@amicode.local> * ci: publish release VSIXes to Open VSX Registry (#1490) * ci: publish release VSIXes to Open VSX Registry * ci: decouple Open VSX publish from Marketplace step outcome * fix(app): #1458 — the empty-workspace landing's titlebar portals crash every real boot (current-main slice, manifest-clean) (#1473) * fix(app): #1458 — the empty-workspace landing's titlebar portals rendered SessionChatsDropdown/StatusPopoverV2 (per-directory sync-context readers) at the "/" route, which never sits inside a SyncProvider; at real-boot timing the no-directory window renders the landing briefly on EVERY boot and the useSync() throw killed the whole route tree — including the reactive landing effect, so no draft was ever created and the app stayed frozen at "/". Portals removed, content kept; a guard test pins the landing module free of directory-scoped context components (the unit-suite trap: mocked contexts pass while the real boot crashes — caught live by the e2e rig). Manifest: files + classification updated (drift gate PASS). * fix(app): #1458 follow-up — the guard test matched raw text and tripped on the fix's own explanatory comment (which names the removed components); assert the import graph instead. All green: 2 pass, drift gate PASS. * fix(app): render empty landing without directory context --------- Co-authored-by: amicode-ci <ci@amicode.local> * fix(app): retrying dynamic imports — the tunnel-truncation class (#1459b, current-main slice) (#1474) * fix(app): #1459b — retrying dynamic imports, the tunnel-truncation class (current-main slice). The fleet's ssh tunnel restarts on network transitions (launchd KeepAlive) and kills every in-flight tunneled response MID-STREAM; a lazily-imported chunk crossing a restart gets a cleanly-truncated body (observed live: 2,884 of 28,497 bytes) and Chromium's module map caches the failure FOR THE DOCUMENT'S LIFE — every later import of the same URL throws 'Failed to fetch dynamically imported module' WITHOUT a network request: the new-session launch frozen in the loading hold forever (live-verified root cause of the stuck-loading arc; the rig has no tunnel so it never sees the class). retryImport parses the failing URL, re-imports it cache-busted (fresh module-map key) with backoff 1s→2s→4s→8s→16s (~31s of transport-storm ride-out; observed watchdog windows last minutes — a single immediate retry drowned in the storm's first beat); chained busts strip the previous query. Wired at all 8 dynamic-import sites. Transient-only: real errors rethrow. 7 contract tests (importer injected — the engine's import() never runs in the suite). Manifest: files + classification registered, drift gate PASS. * fix(app): bound dynamic import retries --------- Co-authored-by: amicode-ci <ci@amicode.local> * fix: follow up on compaction review findings (#1463) * fix: preserve interrupted compaction output * fix(app): localize compaction failure toast * fix(core): surface compaction runner errors * fix(engine): send final-step directive as user input * test(engine): cover manual compaction runner request * chore(app-bundle): refresh overlay manifest * fix(server): map compact runner failures --------- Co-authored-by: amicode-ci <ci@amicode.local> * fix(app): recover deferred session mirror pruning (#1502) Co-authored-by: amicode-ci <ci@amicode.local> * fix: bound and isolate background session warming (#1501) * fix: bound background session warming * test: cover prewarmer batch scheduling * refactor: share session prewarmer batching * test: cover multi-row prewarmer batches * fix: parallelize bulk lineage warming * fix: release warm slots after prefetch --------- Co-authored-by: amicode-ci <ci@amicode.local> * fix(test): stop instruction.test.ts leaking AGENTS.md into $TMPDIR The 'does not walk past a secondary directory' test wrote AGENTS.md to path.dirname(tmpdirScoped()) === os.tmpdir(), an UNSCOPED file in the shared $TMPDIR root that (a) was never cleaned up and (b) poisoned every sibling test nesting tmp dirs under $TMPDIR — the loader walks up and finds it. Nest the secondary under its own scoped parent so the 'above' AGENTS.md lands in an auto-cleaned dir. findUp for a secondary dir stops at the dir itself (stop=dir), so no git root is needed. Fixes 2 instruction.test.ts failures. --------- Co-authored-by: amicode-ci <ci@amicode.local> Co-authored-by: Jack Champagne <43344745+jack-champagne@users.noreply.github.com> Co-authored-by: Aaron Trowbridge <47730232+aarontrowbridge@users.noreply.github.com>
A current-main slice per the #1465 doctrine: small, test-guarded (7 contract tests), manifest-clean (drift gate PASS).
The class (live-verified on the reference fleet today, NOT reproducible in the rig — localhost has no tunnel): the ssh tunnel restarts on network transitions and each restart kills in-flight responses MID-STREAM. A lazy chunk crossing a restart gets a cleanly-truncated body (observed: 2,884 of 28,497 bytes — the resource ledger's encodedBodySize names it). Chromium's module map then caches the failure for the document's life: every later import of the same URL throws without a network request — the boundary catches it, the route navigates, and the outlet holds the loading UI forever. This is the complete mechanism behind every stuck-launch report today; the tunnel watchdog logged consecutive-000 probe windows lasting minutes, and a single immediate retry also drowned in the storm.
The fix: retryImport (utils/retry-import.ts) — parses the failing URL from the truncation error, re-imports it CACHE-BUSTED (a fresh module-map key; chained busts strip the previous query), backing off 1s→2s→4s→8s→16s (~31s storm ride-out). Wired at all 8 dynamic-import sites (NewSession, EmptyWorkspaceLanding, the status popover bodies, the command dialogs). Transient-only: real errors rethrow untouched.
Diagnostics behind it: CDP fresh-target import tests + Chromium's Log domain (strict module MIME failure naming text/html) + the resource-ledger size check — the differential that separated cache, content, and transport in one pass. Full story in the session ledger + #1459.