- 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
59 lines
2.8 KiB
Markdown
59 lines
2.8 KiB
Markdown
# 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).
|