Lumen/experiments/README.md
Lumen Stage1 c0bfd413ff Stage 1: project foundation (strict TS, lint boundaries B-1..B-7, directory structure, CI, boundary tests)
- 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
2026-08-30 23:25:35 -05:00

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).