- dedicated git repo at /home/avi/Projects/Lumen (main)
- TypeScript strict (target ES2022, bundler, exactOptionalPropertyTypes, noUncheckedIndexedAccess)
- ESLint 9 + typescript-eslint strictTypeChecked + eslint-plugin-boundaries for B-1..B-7, no-restricted-globals/syntax for B-1/B-7
- Prettier 3.5
- Structure per IMPLEMENTATION-CONTRACT.md §4 (src/platform/idb|cache|sw, storage, data, sync/{transport,verifier}, domain/{emergency,schedule,map,festival,readiness,clock,favorites}, ui/{components,views,router,render}, app, emergency-baseline, assets, public, content, pipeline, tests, scripts)
- CI: .github/workflows/ci.yml (typecheck + lint + format + test)
- Boundary tests: tests/unit/boundaries.test.ts (4 tests) + scripts/check-boundaries.ts
- No feature code, no PWA/IDB/sync/mesh/accounts per contract Stage 1
2.8 KiB
Lumen — Validation Experiments (Architecture Validation Phase)
These are disposable validation experiments. They are not application code, not part of the future product, and must not be imported by the app. They exist to falsify or confirm specific architectural assumptions before the architecture is frozen. Each is referenced by the spike document that consumes its results.
| File | Validates | Spike | Runtime |
|---|---|---|---|
exp1-time-model.mjs |
UTC storage, IANA-zone rendering, day boundaries, DST, skew, sanity window, now/next | SPIKE-08 | node exp1-time-model.mjs |
exp2-ab-update-sim.mjs |
A/B dual-slot atomic update state machine under crash/fault injection | SPIKE-02 | node exp2-ab-update-sim.mjs |
exp3-map-bench.html |
Map representation approaches (raster+DOM, SVG, canvas) | SPIKE-03 | headless Chromium (see below) |
Evidence classes used throughout
Every claim in the spike documents is labelled:
- CONFIRMED — observed by running an experiment here, or directly documented by the platform vendor as guaranteed behavior.
- INFERRED — follows from documented platform behavior + architectural reasoning, but not directly observed in this environment.
- UNVERIFIED — cannot be established on this Linux dev box; requires a physical device/browser.
Environment
- Linux dev machine, Node v22.23.2 (full-ICU), headless Chromium
(
chromium-browser), Firefox available. - No iOS hardware or iOS Simulator is reachable from this environment. Nothing labelled iOS is CONFIRMED here; iOS items are INFERRED or UNVERIFIED and are listed in each spike's "must test on physical iOS" section.
How the map benchmark is run (EXP-3)
chromium-browser --headless=new --disable-gpu --no-sandbox \
--window-size=800,600 --virtual-time-budget=120000 \
--dump-dom "file:///…/experiments/exp3-map-bench.html"
Interpretation caveat (important): the benchmark measures synchronous JS work per animation frame on a desktop GPU/CPU. All three approaches measured ≈ 0 ms/frame here. That does not mean they are equivalent on a low-end Android phone: the dominant costs there are GPU compositing of transformed layers, texture memory, and raster image decode — none of which a headless desktop run represents. EXP-3's value is confirming that none of the three has a disqualifying JS-side cost and that the DOM-overlay and SVG variants are mechanically viable; the final representation decision still requires the physical-device protocol in SPIKE-03.
Observed results (run 2026-08-30)
- EXP-1: 24/24 PASS. (Two earlier failures were test-data errors in the experiment itself, corrected; the time logic was sound.)
- EXP-2: 16/16 PASS across all crash/fault points.
- EXP-3: all variants complete; per-frame JS work ~0 ms across the board (see caveat).