mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-02 04:38:55 +00:00
Network failure of the editor runtime is no longer terminal: the loader
re-arms to idle and the next explicit press starts a fresh cycle, while a
fingerprint mismatch on either attempt stays terminal. The toast now says
what actually helps — retry advice for the network, refresh advice for a
foreign build — via one shared lazyLoadFailureMessage helper (new i18n key
editor.retry_advice in en/ru/de).
The field smoke caught a second, deeper bug on the way: Chromium records a
FAILED module in the page module map permanently, so retrying the same URL
(even the cache-busted one) never touched the network again. Every retry
now carries a per-cycle nonce and becomes a genuinely new module request.
A proxy-cached stale entry no longer kills the card silently: the entry
facade is rewritten at build time from a static re-export into a top-level
`try{await import(...)}catch{...}` — importers keep the happy-path
guarantee (await import(entry) still resolves only after
customElements.define), and the catch defines a fallback element with a
localized "reload the page" panel. Content-hashed chunks are served with
`public, max-age=31536000, immutable`, and verifyBundleTree now fails on
orphan chunks that the manifest does not name.
Proofs: loader units for re-arm/terminality/toast wording + an AST check
that both loaders forward the terminality flag; smoke_entry_stale (en/ru)
against a tree without the main chunk; smoke_lazy_editor_chunk extended —
second press after network failure now really opens the editor; pytest for
the immutable header; orphan-tree unit; five new registry mutants.
TESTING.md budget line updated to the #352 ceiling alongside.
Issue: #353
User-Visible: yes
114 lines
3.5 KiB
JSON
114 lines
3.5 KiB
JSON
{
|
|
"schema": 1,
|
|
"fingerprint": "99af70faf186a79ae24e2901edbf39e13d6388796d8958ab05fc9b1fca671aae",
|
|
"entry": "houseplan-card.js",
|
|
"initialViewFiles": [
|
|
"houseplan-assets/houseplan-card-g88CD9VI.js",
|
|
"houseplan-card.js"
|
|
],
|
|
"initialViewGzipBytes": 256828,
|
|
"lazyFiles": [
|
|
"houseplan-assets/de-CFxUrXZ2.js",
|
|
"houseplan-assets/editor-Do71pUmD.js",
|
|
"houseplan-assets/houseplan-editor-runtime-BuT5Y1tf.js",
|
|
"houseplan-assets/houseplan-onboarding-runtime-D8yGRdVi.js",
|
|
"houseplan-assets/space-deletion-3-uORj4C.js"
|
|
],
|
|
"lazyGzipBytes": 160366,
|
|
"lazyEditorFiles": [
|
|
"houseplan-assets/editor-Do71pUmD.js",
|
|
"houseplan-assets/houseplan-editor-runtime-BuT5Y1tf.js",
|
|
"houseplan-assets/space-deletion-3-uORj4C.js"
|
|
],
|
|
"lazyEditorGzipBytes": 131834,
|
|
"lazyOnboardingFiles": [
|
|
"houseplan-assets/houseplan-onboarding-runtime-D8yGRdVi.js",
|
|
"houseplan-assets/space-deletion-3-uORj4C.js"
|
|
],
|
|
"lazyOnboardingGzipBytes": 7196,
|
|
"lazyLocaleFiles": [
|
|
"houseplan-assets/de-CFxUrXZ2.js"
|
|
],
|
|
"lazyLocaleGzipBytes": 21886,
|
|
"files": [
|
|
{
|
|
"path": "houseplan-assets/de-CFxUrXZ2.js",
|
|
"sha256": "62ceb0c8d016c48de243b8d643b4f02bae8a623dc8604d115af1420ecb6f7582",
|
|
"rawBytes": 71541,
|
|
"gzipBytes": 21886,
|
|
"isEntry": false,
|
|
"imports": [],
|
|
"dynamicImports": []
|
|
},
|
|
{
|
|
"path": "houseplan-assets/editor-Do71pUmD.js",
|
|
"sha256": "71dea046e80ff8ce30728044ad3cf85ee536798e230306f5ec1e8824a6e0e1d2",
|
|
"rawBytes": 3831,
|
|
"gzipBytes": 1583,
|
|
"isEntry": false,
|
|
"imports": [
|
|
"houseplan-assets/houseplan-card-g88CD9VI.js"
|
|
],
|
|
"dynamicImports": []
|
|
},
|
|
{
|
|
"path": "houseplan-assets/houseplan-card-g88CD9VI.js",
|
|
"sha256": "2040dd1630535449eb8ef3b1a1cfb71da2e14c59b7134b7d64b280dc91b9770f",
|
|
"rawBytes": 911212,
|
|
"gzipBytes": 256075,
|
|
"isEntry": false,
|
|
"imports": [],
|
|
"dynamicImports": [
|
|
"houseplan-assets/de-CFxUrXZ2.js",
|
|
"houseplan-assets/editor-Do71pUmD.js",
|
|
"houseplan-assets/houseplan-editor-runtime-BuT5Y1tf.js",
|
|
"houseplan-assets/houseplan-onboarding-runtime-D8yGRdVi.js"
|
|
]
|
|
},
|
|
{
|
|
"path": "houseplan-assets/houseplan-editor-runtime-BuT5Y1tf.js",
|
|
"sha256": "1d6bd9cf7036174a2d3daba802c1a98c1dc69e118752779be1ad5aa6bd956acd",
|
|
"rawBytes": 504959,
|
|
"gzipBytes": 129701,
|
|
"isEntry": false,
|
|
"imports": [
|
|
"houseplan-assets/houseplan-card-g88CD9VI.js",
|
|
"houseplan-assets/space-deletion-3-uORj4C.js"
|
|
],
|
|
"dynamicImports": []
|
|
},
|
|
{
|
|
"path": "houseplan-assets/houseplan-onboarding-runtime-D8yGRdVi.js",
|
|
"sha256": "9777a5eb4166704d294d9972f86d0897ec229e40116eb9def15147cd5bf45007",
|
|
"rawBytes": 26356,
|
|
"gzipBytes": 6646,
|
|
"isEntry": false,
|
|
"imports": [
|
|
"houseplan-assets/houseplan-card-g88CD9VI.js",
|
|
"houseplan-assets/space-deletion-3-uORj4C.js"
|
|
],
|
|
"dynamicImports": []
|
|
},
|
|
{
|
|
"path": "houseplan-assets/space-deletion-3-uORj4C.js",
|
|
"sha256": "bccd5edc4a4113d78ea05a475b8cadc1175287df2e67327213a95e9647074e25",
|
|
"rawBytes": 906,
|
|
"gzipBytes": 550,
|
|
"isEntry": false,
|
|
"imports": [],
|
|
"dynamicImports": []
|
|
},
|
|
{
|
|
"path": "houseplan-card.js",
|
|
"sha256": "228910d9e3580441d5a1064cb5107e2f2dd80d99b24a325b2b54843eb32f0009",
|
|
"rawBytes": 1089,
|
|
"gzipBytes": 753,
|
|
"isEntry": true,
|
|
"imports": [
|
|
"houseplan-assets/houseplan-card-g88CD9VI.js"
|
|
],
|
|
"dynamicImports": []
|
|
}
|
|
]
|
|
}
|