Commit graph

2 commits

Author SHA1 Message Date
Doxa Maps
659e3df386 The URLs that failed cannot be retried, and the ones that can were not
DRV1650-LAZY-LOCALE-IMPORT-RETRY. net::ERR_NETWORK_CHANGED killed an embedded UPG-100's
load, and the card asks for the lazy locale/module loads to retry like
retryableAsyncComponent does.

★ THOSE URLs DO NOT EXIST IN PRODUCTION. The console named module URLs — locale JSON with
?import, useOptionalT.js, useShadowStyles.js, useMapTheme.js. The build is IIFE with
inlineDynamicImports (vite.config.js:216-220), so every one of them is inside the single
bundle and is never fetched separately. They are dev-server module requests. There is no
loader to wrap and nothing a reader could hit, so the card cannot be done as written, and
saying so is most of its value.

★ THE FAILURE CLASS IS REAL ONE LAYER DOWN, and nobody had covered it. A built bundle
still makes runtime requests — the boundaries geojson (twice, two composables), the
people-group list, prayer statistics — and NOT ONE of them retried. The same wifi switch
that killed the Driver's dev load takes out whichever of those is in flight, and the
feature is simply ABSENT: an empty map, a missing country outline, a statistic that never
arrives, with nothing a reader can act on. That is the same defect he reported, at the
layer that ships.

retryFetch is the fetch-shaped sibling of retryableAsyncComponent and deliberately shares
its policy — 3 attempts, growing backoff — because it survives the same event, and two
answers to "how long is a blip" would be worse than one.

It retries TRANSPORT failures only. A 404 or a 500 RESOLVES; retrying those would hide
real breakage and hammer a struggling server, so the response is handed back untouched.
An abort is a decision, not a blip, and is never retried.

check-retry-fetch asserts the behaviour AND that the shared data paths use it. Its
"persistently dead endpoint still fails" arm originally only checked that it threw — which
an UNBOUNDED retry loop also does, eventually. Caught by this gate's own negative test; it
now counts the attempts, because the property is bounded give-up and the bound is the
number. Negative-tested: retrying an abort, changing the default attempt count, and
reverting a data path to bare fetch each turn it red.

NOT wired: usePosterPrints, useCsvExport, PeopleGroupDetail and the token service also
fetch at runtime. They belong to other surfaces or have their own failure handling, and I
am not editing them blind — the list is in the report.
2026-09-28 18:02:00 +00:00
doxa-maps
d5ba21fa76 doxa-maps — portable bundler for embeddable JAMstack maps
Standalone repo that builds embeddable JAMstack map bundles (web components),
composes them into a lazy-loaded SPA via layouts/, and optionally wraps a
Capacitor Android/iOS app — one build, choose your output/CDN. Diátaxis docs.

History reset to a single clean commit; no PII, IPs, or internal terms.
2026-09-10 01:53:07 +00:00