mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-01 04:09:17 +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
122 lines
4.0 KiB
JSON
122 lines
4.0 KiB
JSON
{
|
|
"version": 1,
|
|
"fixture": "synthetic-only",
|
|
"chromium": "151.0.7922.34",
|
|
"oxipng": null,
|
|
"sourceFingerprint": "20360427643d04e7068255e2a64cbdb296bfc772d8c11cfeb0baf753520addb5",
|
|
"captureScriptSha256": "fe76c8e2e27501e9a377d7aa15dd6cba6a018d55c07deb602dbee097f0a0a5ba",
|
|
"command": "npm run build && node demo/docs/capture.mjs",
|
|
"scenarios": {
|
|
"view-desktop": {
|
|
"file": "01-view-desktop.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 900
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "20360427643d04e7068255e2a64cbdb296bfc772d8c11cfeb0baf753520addb5",
|
|
"imageSha256": "78d328498bd17a9ee1ec44b389d244b61fca9ac52c9aad6631aa85c53233fec0"
|
|
},
|
|
"view-touch": {
|
|
"file": "02-view-touch.png",
|
|
"viewport": {
|
|
"width": 390,
|
|
"height": 760
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "20360427643d04e7068255e2a64cbdb296bfc772d8c11cfeb0baf753520addb5",
|
|
"imageSha256": "3be239a5a494f6776540a9c0049694ee6f9d2ba927c8bcb4b26ee5a69a228a7d"
|
|
},
|
|
"space-create": {
|
|
"file": "03-space-create.png",
|
|
"viewport": {
|
|
"width": 900,
|
|
"height": 850
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "20360427643d04e7068255e2a64cbdb296bfc772d8c11cfeb0baf753520addb5",
|
|
"imageSha256": "a55b463055a565892ca139014e314a8f63fb5301c87fff2e48d7e69210fe9b6c"
|
|
},
|
|
"room-contour-close": {
|
|
"file": "04-room-contour-close.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 900
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "20360427643d04e7068255e2a64cbdb296bfc772d8c11cfeb0baf753520addb5",
|
|
"imageSha256": "dfad9a27371cfa397a3fd8dce7005f42d24649743f5322105ee894067d3a9f16"
|
|
},
|
|
"plan-context-tray": {
|
|
"file": "05-plan-context-tray.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 900
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "20360427643d04e7068255e2a64cbdb296bfc772d8c11cfeb0baf753520addb5",
|
|
"imageSha256": "b75f348c632296da5c2fc142d53df613f757e1516acac315be50f5b4557729cc"
|
|
},
|
|
"device-editor": {
|
|
"file": "06-device-editor.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 1100
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "20360427643d04e7068255e2a64cbdb296bfc772d8c11cfeb0baf753520addb5",
|
|
"imageSha256": "8affadfce926fe2f6cf344c33f611c44fcbc79c1969f69c3a6935ff2e99c36c3"
|
|
},
|
|
"device-display-preview": {
|
|
"file": "06-device-display-preview.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 1100
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "20360427643d04e7068255e2a64cbdb296bfc772d8c11cfeb0baf753520addb5",
|
|
"imageSha256": "6f628abe6b89d7c4b352e6d73ac0b126526f6fdba5927bb774c5b884e484ca19"
|
|
},
|
|
"background-editor": {
|
|
"file": "07-background-editor.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 900
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "20360427643d04e7068255e2a64cbdb296bfc772d8c11cfeb0baf753520addb5",
|
|
"imageSha256": "a1d1a905f1410f73231d2ea5d1dfbd8ae79c2fe8b0a79cff87ebb977ac7a3103"
|
|
},
|
|
"room-card": {
|
|
"file": "08-room-card.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 900
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "20360427643d04e7068255e2a64cbdb296bfc772d8c11cfeb0baf753520addb5",
|
|
"imageSha256": "48a5685039a5e0de2a28190d857b193c86e2e63606e3c7a8c40fc9d2b190da4e"
|
|
},
|
|
"device-info": {
|
|
"file": "09-device-info.png",
|
|
"viewport": {
|
|
"width": 1000,
|
|
"height": 900
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "20360427643d04e7068255e2a64cbdb296bfc772d8c11cfeb0baf753520addb5",
|
|
"imageSha256": "29a342811aaedaebc54ba337792d60cb454a7cf4c3063b210f6c4bafe0a4d87b"
|
|
}
|
|
}
|
|
}
|