Nexia-List is web-first: the browser is the primary target, running the real
Rust core compiled to WebAssembly. The core carries the λδ (LambdaDelta)
substrate — a homoiconic Clojure-flavoured Lisp built in-tree, not vendored —
which is the single largest subsystem in the core. The desktop shell is optional
and depends on an external sibling checkout of hyperpolymath/gossamer; it
is intentionally not built in this repo's CI.
┌─────────────────────────────────────────┐
│ USER INTERFACE │
│ (Note list / Editor / Canvas) │
└───────────────────┬─────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ UI LAYER (RESCRIPT) │
│ Hand-rolled TEA on @rescript/react │
│ Model / Msg / Update / View │
│ esbuild bundle → web/dist/ │
└───────────────────┬─────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ BROWSER (PRIMARY TARGET) │
│ │
│ ┌───────────────────────────────────┐ │
│ │ RUST CORE → WASM (wasm-bindgen) │ │
│ │ Note · Notebook · Backlinks │ │
│ │ Substring search · JSON storage │ │
│ │ Agents · Markdown/OPML exchange │ │
│ │ │ │
│ │ ┌─────────────────────────────┐ │ │
│ │ │ λδ (LAMBDADELTA) SUBSTRATE │ │ │
│ │ │ reader · value model │ │ │
│ │ │ evaluator + Budget sandbox │ │ │
│ │ │ hygienic macros · prelude │ │ │
│ │ │ multimethods on :type/:op │ │ │
│ │ │ notebook host seam │ │ │
│ │ │ (~64% of core LOC) │ │ │
│ │ └─────────────────────────────┘ │ │
│ └────────────────┬──────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────────────────────┐ │
│ │ DATA LAYER │ │
│ │ IndexedDB + file download/upload │ │
│ │ (human-readable JSON) │ │
│ └───────────────────────────────────┘ │
└───────────────────┬─────────────────────┘
│ optional
▼
┌─────────────────────────────────────────┐
│ GOSSAMER DESKTOP SHELL (OPTIONAL) │
│ EXTERNAL: requires sibling checkout │
│ ../gossamer — NOT built in this CI │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ REPO INFRASTRUCTURE │
│ Deno 2 tasks Justfile scripts/ │
│ rust-ci.yml ui-ci.yml │
│ .machine_readable/ 0-AI-MANIFEST.a2ml │
└─────────────────────────────────────────┘
Future (not yet implemented, kept out of the diagram deliberately): petgraph
graph engine, tantivy full-text search, Nickel schemas, mobile targets, and the
FL×DT intelligence modules (index.rs, edge.rs, reason.rs, layout.rs,
trigger.rs) described in docs/design/.
COMPONENT STATUS NOTES
───────────────────────────────── ────────────────── ─────────────────────────────────
PRODUCT
Rust Core Engine █████████░ 90% Of MVP scope: Note/Notebook, back-
links, wiki-links, substring
search, JSON storage, agents,
Markdown/OPML exchange. 5,344 LOC
(excl. test modules); 90 tests
green (81 unit + 3 exchange +
2 golden + 2 property + 2 doc)
λδ (LambdaDelta) Substrate ███████░░░ 70% BUILT, not planned: reader, value
model, evaluator + Budget sandbox,
hygienic macros, multimethods,
prelude, notebook host seam.
~3,400 LOC excl. tests (~64% of
the core) across #35, #36, #43.
Reachable from JS via
lambdadeltaEval / evalLambdadelta.
Outstanding is SURFACING, not
engine: L1 fx-fields, L2 action
hooks, L3 REPL, L4 .ld packages
ReScript UI (TEA-style) ██████░░░░ 60% Compiles; list/editor work; canvas
pan/zoom, note drag, dbl-click
create, keyboard-accessible
(WCAG 2.2 AA); GraphView renders a
circular layout; agents panel.
1,763 LOC. Missing: multi-pane,
command palette, inspector,
markdown render, reasoning view
WASM Bridge (core → browser) █████████░ 90% WIRED and exercised: Main.res loads
the wasm at boot; WasmStore binds
21 of 31 exports; ui-ci builds it
and runs the contract tests green.
Gap: eval_lambdadelta, get_note,
set_attribute, backlinks, name,
len are exported but unbound in
ReScript ("dormant core methods")
Web / PWA ███████░░░ 70% Builds and runs via esbuild bundle;
service worker (offline-first
precache) + webmanifest + icon
ship and are registered in
Main.res. Gap: no automated
install/offline test
Desktop Shell (Gossamer) ░░░░░░░░░░ 0% Blocked-external: needs sibling
../gossamer checkout; not buildable
in this repo
INFRASTRUCTURE
CI Product Coverage ███████░░░ 70% Real and load-bearing since #22:
rust-ci.yml (fmt, clippy
--all-targets --features wasm,
tests, wasm32 build) and ui-ci.yml
(rescript, wasm, deno tests,
bundle, lint). SHA-pinned; green
on main. Gap: no coverage report,
no browser smoke test, no release
workflow
Governance / Meta ████████░░ 80% Contractiles, 6a2 STATE, manifest,
ADRs, design docs, and the
audience-segmented wiki (#45)
─────────────────────────────────────────────────────────────────────────────
OVERALL: ███████░░░ ~65% Core + substrate + bridge are in
place and green. The critical path
has MOVED off the WASM bridge and
onto the UI surface: binding the
dormant core methods and giving λδ
a door (L1→L3)
Rust Core (incl. λδ) ──► WASM bundle ──► ReScript UI ──► Web bundle (web/dist/)
│ │
▼ ▼
JSON storage ──► IndexedDB / file download (optional) Gossamer shell
The wasm-bindgen CLI must match the wasm-bindgen crate version in
Cargo.lock exactly (just doctor checks this); a mismatch fails the browser
build with a confusing schema error.
This file is maintained by both humans and AI agents. When updating:
- After completing a component: Change its bar and percentage
- After adding a component: Add a new row in the appropriate section
- After architectural changes: Update the ASCII diagram
- Date: Update the
Last updatedcomment at the top of this file
Progress bars use: █ (filled) and ░ (empty), 10 characters wide.
Percentages: 0%, 10%, 20%, ... 100% (in 10% increments).
Percentages are judgement, LOC and test counts are not. When you revise a row, re-derive the countable facts rather than copying them forward — this file understated the core for two weeks because the λδ merges (#35, #36, #43) landed without a dashboard update, and downstream docs inherited the stale figures.