Executed verification / synthetic and theoretical inputs

Offline service notes

The offline shell was exercised with simulated install, activation, cache eviction, connection loss and server failures. Real subprocesses exercised HTTP writes, conflicting updates, abrupt termination, replay and snapshot recovery.

39 of 39 specified outcomes matched. Rejected overload and unsafe deployment cases are expected outcomes, not passing operating conditions.

Method

Each row identifies the method. Real HTTP, database, file and process checks are separate from modeled browser and deployment behavior. Inputs are synthetic. No customer deployment, physical device trial or production availability is claimed.

ScenarioExpectedObservedMethodVerification
Install every shell dependency before activation8 assets cached and skipWaiting called once{"assets":8,"skip_waiting":1}Actual sw.js executed in Node vm with modeled CacheStorage, lifecycle and networkMatched
Cache contains the local HTML and module dependency graphAll referenced shell modules and stylesheet are present["index.html","styles.css","app.mjs","store.mjs","protocol.mjs","manifest.webmanifest","icon.svg"]Actual sw.js executed in Node vm with modeled CacheStorage, lifecycle and networkMatched
Missing precache asset aborts installationNo partial batch and no skipWaitingInstall rejected before activationActual sw.js executed in Node vm with modeled CacheStorage, lifecycle and networkMatched
Activation removes this scope old cache and claims clientsOther scopes and unrelated caches retained["service-notes-shell-v2:https://example.test/notes/","service-notes-shell-v1:https://example.test/other/","unrelated:https://example.test/notes/"]Actual sw.js executed in Node vm with modeled CacheStorage, lifecycle and networkMatched
Reload cached workspace with network rejectedCached HTML returned for root and query-string workspace3 navigation routes served from cacheActual sw.js executed in Node vm with modeled CacheStorage, lifecycle and networkMatched
Load modules and style after offline navigationAll 7 named assets returned without a network request7 cache hits; 0 network callsActual sw.js executed in Node vm with modeled CacheStorage, lifecycle and networkMatched
Reload during upstream 503Cached shell replaces server errorCached HTML, status 200Actual sw.js executed in Node vm with modeled CacheStorage, lifecycle and networkMatched
Unknown navigation while network responds404 retained rather than masked404 retainedActual sw.js executed in Node vm with modeled CacheStorage, lifecycle and networkMatched
Authenticated API reads and writes bypass cacheWorker does not respond to API GET or POSTNo interceptionActual sw.js executed in Node vm with modeled CacheStorage, lifecycle and networkMatched
Foreign requests and out-of-scope paths bypass workerNo interception or cache writes3 URLs and POST excludedActual sw.js executed in Node vm with modeled CacheStorage, lifecycle and networkMatched
Reload after cache eviction and network failureExplanatory 503, not undefined responseNavigation and asset fail visibly with 503Actual sw.js executed in Node vm with modeled CacheStorage, lifecycle and networkMatched
Successful navigation uses current server pageNetwork result returnedNetwork firstActual sw.js executed in Node vm with modeled CacheStorage, lifecycle and networkMatched
Unrelated older cache cannot supply current assetsCurrent named cache is usedCurrent shell retainedActual sw.js executed in Node vm with modeled CacheStorage, lifecycle and networkMatched
Start a new deployment directory3 synthetic assigned visits3Real Node child process, HTTP requests and SQLite on disposable synthetic dataMatched
Commit 100 ordered notesFinal version 101 with final text{"id":"visit-101","asset":"AHU-014","location":"North plant room","notes":"Synthetic service update 100","checks":{"isolated":true,"inspected":true,"returnedToService":false},"version":101,"updated_by":"alex"}Real Node child process, HTTP requests and SQLite on disposable synthetic dataMatched
20 concurrent writers use one base version1 confirmation and 19 explicit conflicts{"confirmed":1,"conflicts":19}Real Node child process, HTTP requests and SQLite on disposable synthetic dataMatched
Kill the server without graceful close after an acknowledged writeCommitted version 103 and exact note survive{"id":"visit-101","asset":"AHU-014","location":"North plant room","notes":"Committed before abrupt process termination","checks":{"isolated":true,"inspected":true,"returnedToService":false},"version":103,"updated_by":"alex"}Real Node child process, HTTP requests and SQLite on disposable synthetic dataMatched
Retry a response-lost operation after restartOriginal version 103 with replay marker{"replayed":"true","version":103}Real Node child process, HTTP requests and SQLite on disposable synthetic dataMatched
Create consistent database snapshot while service is runningSnapshot passes integrity checkOnline SQLite backup createdReal Node child process, HTTP requests and SQLite on disposable synthetic dataMatched
Start service directly from validated snapshotVersion 103, 121 operation outcomes and integrity ok{"version":103,"operations":121,"integrity":"ok"}Real Node child process, HTTP requests and SQLite on disposable synthetic dataMatched
Replay retained operation after restoreNo second write or version advance{"replayed":"true","version":103}Real Node child process, HTTP requests and SQLite on disposable synthetic dataMatched
Reject invalid identity on restored database401 and unchanged version401Real Node child process, HTTP requests and SQLite on disposable synthetic dataMatched
Preserve expiry through process restart401; restart does not silently renew token401Real Node child process, HTTP requests and SQLite on disposable synthetic dataMatched
Record local HTTP commit timings for the 100-write runMeasurement only; no production latency target{"requests":100,"median_ms":1.709,"p95_ms":3.23,"max_ms":9.219}Real Node child process, HTTP requests and SQLite on disposable synthetic dataMatched
Create snapshot using shipped CLIExit 0; manifest has 3 visits{"exit":0,"stderr":""}Execute shipped snapshot and restore CLIs on temporary real SQLite databasesMatched
Restore snapshot using shipped CLIExit 0; three visits retained{"exit":0,"visits":3}Execute shipped snapshot and restore CLIs on temporary real SQLite databasesMatched
Attempt restore over existing directoryNonzero exit; existing file retained1Execute shipped snapshot and restore CLIs on temporary real SQLite databasesMatched
Attempt snapshot into existing destinationNonzero exit; original manifest remains1Execute shipped snapshot and restore CLIs on temporary real SQLite databasesMatched
Restore checksum-mismatched bytesNonzero exit; destination not created1Execute shipped snapshot and restore CLIs on temporary real SQLite databasesMatched
Evaluate selected backup and restore scheduleRPO <=15 min and RTO <=15 min under declared timings{"rpo_minutes":15,"rto_minutes":8}Deterministic theoretical deployment calculation with declared inputs; no remote infrastructure is provisionedMatched
Evaluate an old daily snapshot against 15 min targetDaily snapshot rejected{"rpo_minutes":1440,"accepted":false}Deterministic theoretical deployment calculation with declared inputs; no remote infrastructure is provisionedMatched
Evaluate slow operator recoveryRTO breach visible{"rto_minutes":33,"accepted":false}Deterministic theoretical deployment calculation with declared inputs; no remote infrastructure is provisionedMatched
Combine independent illustrative network, proxy and host availabilitiesProduct below 99.9%; no high-availability claim{"component_availability":[0.999,0.999,0.995],"series_availability":0.993010995,"expected_minutes_per_30_days":301.9250159999997}Deterministic theoretical deployment calculation with declared inputs; no remote infrastructure is provisionedMatched
loopback reference with demo identitiesPolicy decision true{"allowed":true,"scope":"Theoretical deployment policy, separate from the localhost application"}Deterministic theoretical deployment calculation with declared inputs; no remote infrastructure is provisionedMatched
public listener with demo identitiesPolicy decision false{"allowed":false,"scope":"Theoretical deployment policy, separate from the localhost application"}Deterministic theoretical deployment calculation with declared inputs; no remote infrastructure is provisionedMatched
public listener without TLSPolicy decision false{"allowed":false,"scope":"Theoretical deployment policy, separate from the localhost application"}Deterministic theoretical deployment calculation with declared inputs; no remote infrastructure is provisionedMatched
modeled private authenticated gatewayPolicy decision true{"allowed":true,"scope":"Theoretical deployment policy, separate from the localhost application"}Deterministic theoretical deployment calculation with declared inputs; no remote infrastructure is provisionedMatched
Bound stored notes plus operation history for a 7-day fixtureFits declared 16 MiB budget{"visits":140,"bytes":11760000,"budget":16777216}Deterministic theoretical deployment calculation with declared inputs; no remote infrastructure is provisionedMatched
Ten times the reference offline demandBudget breach rejected{"bytes":117600000,"accepted":false}Deterministic theoretical deployment calculation with declared inputs; no remote infrastructure is provisionedMatched

Reproduce

node complete.mjs

Operations and deployment decisions / Machine-readable checks and source hashes / Execution log

Evidence boundaries

Source notes

W3C Service Workers describes the lifecycle and cache contract used by the shell simulation. Node SQLite documentation describes the native database and backup API. The deployment capacity and recovery calculations use the declared inputs in deployment-inputs.json; they are assumption studies.

Primary implementation report