diff --git a/Justfile b/Justfile index c82835b..8a03d24 100644 --- a/Justfile +++ b/Justfile @@ -12,26 +12,37 @@ setup: deno task setup rustup target add wasm32-unknown-unknown || true -# Build the project (ReScript compile + esbuild web bundle) -build: - deno task build - # Build the Rust core to WASM for the browser build-wasm: deno task build:wasm +# Build the project (ReScript compile + esbuild web bundle) +# Depends on build-wasm: esbuild resolves web/wasm/nexia_core.js when it bundles. +build: build-wasm + deno task build + # Run all tests (Rust core + UI) -test: +# Depends on build: the UI tests import the generated *.res.js and the wasm +# bindings, so a clean checkout cannot go straight to `just test` without them. +# Both builds are incremental — a warm no-op costs well under a second. +test: build deno task test +# Rust core tests only — no build step, for a tight inner loop +test-rust: + deno task test:rust + # Run the development server (http://localhost:5173) run: deno task dev # Static checks — Deno lint, rustfmt, clippy +# Mirrors rust-ci.yml exactly: --all-targets --features wasm, run from the +# workspace root. A narrower clippy here would pass locally and fail in CI. check: deno lint - cd core && cargo fmt --check && cargo clippy -- -D warnings + cargo fmt --check + cargo clippy --all-targets --features wasm -- -D warnings # Publish docs/wikis/*.md to the GitHub wiki (docs/wikis/ is the source of truth) # just wiki-sync dry # preview what would change, push nothing @@ -78,10 +89,35 @@ doctor: @command -v git >/dev/null 2>&1 && echo " [OK] git" || echo " [FAIL] git not found" @command -v deno >/dev/null 2>&1 && echo " [OK] deno" || echo " [FAIL] deno not found (need Deno 2.x)" @command -v cargo >/dev/null 2>&1 && echo " [OK] cargo" || echo " [FAIL] cargo not found (need Rust stable)" + @echo "Checking the WASM toolchain (the browser build depends on it)..." + @rustup target list --installed 2>/dev/null | grep -q wasm32-unknown-unknown \ + && echo " [OK] wasm32-unknown-unknown target" \ + || echo " [FAIL] wasm32-unknown-unknown target missing — run 'just setup'" + @just _wasm-bindgen-check @echo "Checking for hardcoded paths..." @grep -rn '/var/mnt/eclipse' --include='*.rs' --include='*.ex' --include='*.res' --include='*.gleam' --include='*.sh' --include='*.toml' . 2>/dev/null | grep -v 'Justfile' | head -5 || echo " [OK] No hardcoded paths in source" @echo "Diagnostics complete." +# The wasm-bindgen CLI must match the wasm-bindgen crate in Cargo.lock exactly; +# a mismatch fails the browser build with a confusing schema error, so report +# the drift and the exact command that fixes it. +[private] +_wasm-bindgen-check: + #!/usr/bin/env bash + set -uo pipefail + lock="$(grep -A1 '^name = "wasm-bindgen"$' Cargo.lock 2>/dev/null | grep '^version' | head -1 | cut -d'"' -f2)" + cli="$(wasm-bindgen --version 2>/dev/null | awk '{print $2}')" + if [ -z "${lock}" ]; then + echo " [WARN] wasm-bindgen not found in Cargo.lock — skipping version check" + elif [ -z "${cli}" ]; then + echo " [FAIL] wasm-bindgen CLI not found — cargo install wasm-bindgen-cli --version ${lock} --locked" + elif [ "${cli}" != "${lock}" ]; then + echo " [FAIL] wasm-bindgen CLI ${cli} != Cargo.lock ${lock}" + echo " cargo install wasm-bindgen-cli --version ${lock} --locked --force" + else + echo " [OK] wasm-bindgen ${cli} (matches Cargo.lock)" + fi + # Guided tour of key features tour: @echo "=== nexia-list Tour ===" @@ -121,17 +157,21 @@ llm-context: # Print the current CRG grade (reads from READINESS.md '**Current Grade:** X' line) crg-grade: - @grade=$$(grep -oP '(?<=\*\*Current Grade:\*\* )[A-FX]' READINESS.md 2>/dev/null | head -1); \ - [ -z "$$grade" ] && grade="X"; \ - echo "$$grade" + #!/usr/bin/env bash + set -uo pipefail + grade="$(grep -oP '(?<=\*\*Current Grade:\*\* )[A-FX]' READINESS.md 2>/dev/null | head -1)" + echo "${grade:-X}" # Generate a shields.io badge markdown for the current CRG grade # Looks for '**Current Grade:** X' in READINESS.md; falls back to X crg-badge: - @grade=$$(grep -oP '(?<=\*\*Current Grade:\*\* )[A-FX]' READINESS.md 2>/dev/null | head -1); \ - [ -z "$$grade" ] && grade="X"; \ - case "$$grade" in \ - A) color="brightgreen" ;; B) color="green" ;; C) color="yellow" ;; \ - D) color="orange" ;; E) color="red" ;; F) color="critical" ;; \ - *) color="lightgrey" ;; esac; \ - echo "[![CRG $$grade](https://img.shields.io/badge/CRG-$$grade-$$color?style=flat-square)](https://github.com/hyperpolymath/standards/tree/main/component-readiness-grades)" + #!/usr/bin/env bash + set -uo pipefail + grade="$(grep -oP '(?<=\*\*Current Grade:\*\* )[A-FX]' READINESS.md 2>/dev/null | head -1)" + grade="${grade:-X}" + case "${grade}" in + A) color="brightgreen" ;; B) color="green" ;; C) color="yellow" ;; + D) color="orange" ;; E) color="red" ;; F) color="critical" ;; + *) color="lightgrey" ;; + esac + echo "[![CRG ${grade}](https://img.shields.io/badge/CRG-${grade}-${color}?style=flat-square)](https://github.com/hyperpolymath/standards/tree/main/component-readiness-grades)" diff --git a/QUICKSTART-DEV.adoc b/QUICKSTART-DEV.adoc index e4dd9a3..d3a8341 100644 --- a/QUICKSTART-DEV.adoc +++ b/QUICKSTART-DEV.adoc @@ -59,7 +59,7 @@ deno task dev # dev server on http://localhost:5173 [source] ---- nexia-list/ -├── core/ # Rust core engine (12 passing unit tests) +├── core/ # Rust core engine + λδ substrate (90 passing tests) ├── ui/ # ReScript TEA-style UI │ └── src/bindings/ # DOM bindings ├── scripts/ # Deno build/dev scripts (esbuild) diff --git a/READINESS.md b/READINESS.md index 39ab077..5aafcc6 100644 --- a/READINESS.md +++ b/READINESS.md @@ -1,11 +1,17 @@ - + # Readiness **Current Grade:** D +> **Re-audit due — this grade is probably stale.** Every criterion listed under +> *Path to C* below now appears to be met (see the checklist). The grade is +> assigned by audit, not by this file, so it is left at D pending a maintainer +> re-audit rather than self-promoted. `just crg-badge` publishes this letter, so +> the badge is understating the project until that happens. + Graded per the hyperpolymath [Component Readiness Grades](https://github.com/hyperpolymath/standards/tree/main/component-readiness-grades) standard. Grade assigned in the @@ -16,21 +22,23 @@ standard. Grade assigned in the | Aspect | Status | | --- | --- | -| Builds from source | Yes — `deno task build` (ReScript + esbuild bundle); Rust core builds and its 12 unit tests pass | +| Builds from source | Yes — `deno task build` (ReScript + esbuild bundle); Rust core builds and its **90 tests** pass (81 unit + 3 exchange + 2 golden + 2 property + 2 doc) | | Lockfiles | Yes — `deno.lock`, `Cargo.lock` | -| CI | Estate governance/scanning workflows only; product CI (rust-ci.yml, ui-ci.yml) landing in a parallel workstream | -| Tests | Rust core unit tests only; no UI or integration tests yet | -| Docs | Truth-reset 2026-07-02; roadmap and topology reflect actual state | +| CI | Estate governance/scanning **plus product CI**: `rust-ci.yml` (fmt, clippy `--all-targets --features wasm`, tests, wasm32 build) and `ui-ci.yml` (ReScript, wasm, Deno tests, bundle, lint) — both on every PR, SHA-pinned, green on main | +| Tests | Rust core (90) **and** UI (10, via `deno task test:ui`), including a TEA↔WASM contract test. No browser-level integration test yet | +| Docs | Truth-reset 2026-07-02; TOPOLOGY re-derived 2026-07-17 after the λδ merges (#35, #36, #43) had gone unrecorded | | Known debt | unwrap/expect calls in core and desktop; unsafe `get` in View.res (see audit report) | ## Path to C -- Product CI running on every PR (Rust build+test, ReScript build, lint) -- Tests beyond the core crate: UI unit tests exercised in CI -- WASM bridge built and smoke-tested in CI +All three appear **met** as of 2026-07-17 — a re-audit should confirm and regrade: + +- [x] Product CI running on every PR (Rust build+test, ReScript build, lint) — `rust-ci.yml` + `ui-ci.yml`, both `on: pull_request` +- [x] Tests beyond the core crate: UI unit tests exercised in CI — 10 tests via `ui-ci.yml` +- [x] WASM bridge built and smoke-tested in CI — `rust-ci.yml` builds wasm32 + generates bindings; `ui-ci.yml` runs the `TEA update delegates to the wasm core` contract test against the real bundle ## Path to B -- Integration tests covering the UI → WASM core → persistence path -- Canvas interaction coverage (pan/zoom, note creation, drag-and-drop once implemented) +- Integration tests covering the UI → WASM core → persistence path (the UI → WASM half is covered; the IndexedDB persistence half needs a browser-level test) +- Canvas interaction coverage (pan/zoom, note creation, drag — all now implemented; geometry is unit-tested, direct interaction is not) - Known-debt items from the audit resolved or explicitly waived diff --git a/README.adoc b/README.adoc index 53c2a5d..eee8cfc 100644 --- a/README.adoc +++ b/README.adoc @@ -117,8 +117,8 @@ Download it and you have the file to keep, yourself, forever. |Note/Notebook model, backlinks reverse index, substring search, JSON storage |Browser Bridge -|wasm-bindgen (in progress) -|Compiles the Rust core to WASM so the browser runs the real engine +|wasm-bindgen (wired) +|Compiles the Rust core to WASM so the browser runs the real engine; loaded at boot and covered by a CI contract test |Tooling |Deno 2 tasks + esbuild @@ -196,7 +196,7 @@ a parenthesis, while power users gain the full expressive reach of Lisp. [source] ---- nexia-list/ -├── core/ # Rust — note/notebook engine (~623 LOC, 12 unit tests) +├── core/ # Rust — note/notebook engine + λδ substrate (5,344 LOC, 90 tests) │ ├── Cargo.toml │ └── src/ │ ├── lib.rs # Crate root diff --git a/ROADMAP.adoc b/ROADMAP.adoc index 4c9ca51..79a6051 100644 --- a/ROADMAP.adoc +++ b/ROADMAP.adoc @@ -7,19 +7,32 @@ This document outlines the development phases for Nexia-List, from MVP to full-featured knowledge management platform. -.Revised sequencing (2026-07) +.Revised sequencing (updated 2026-07-17) [NOTE] ==== Nexia-List is now **web-first**: the Rust core is compiled to WASM and the browser is the primary target (see link:docs/adr/0001-wasm-core-web-first.md[ADR-0001]). -The desktop shell (Gossamer) is optional and external. Current sequencing: +The desktop shell (Gossamer) is optional and external. + +Every item in the previous sequencing block has now shipped: . Build resurrection (Deno 2 tasks, ReScript compile, esbuild bundle) — ✅ done -. WASM core integration (wasm-bindgen bridge, IndexedDB/file persistence) — in progress -. Product CI (rust-ci.yml, ui-ci.yml — landing in a parallel workstream) -. Tests beyond the core unit suite -. Canvas drag-and-drop + accessibility + PWA (service worker) -. Wiki-links, graph view, agents, import/export +. WASM core integration (wasm-bindgen bridge, IndexedDB autosave + file save/load) — ✅ done +. Product CI (rust-ci.yml, ui-ci.yml) — ✅ done, green on main +. Tests beyond the core unit suite — ✅ done (10 UI tests incl. a TEA↔WASM contract test) +. Canvas drag + accessibility (WCAG 2.2 AA) + PWA (service worker) — ✅ done +. Wiki-links, graph view, agents, import/export — ✅ done +. **λδ (LambdaDelta) substrate** — ✅ largely done, and unrecorded until now: L0 kernel, + notebook host seam, hygienic macros, multimethods, prelude (~64% of the core) + +Next sequencing: + +. Bind the dormant WASM exports in ReScript — 10 of 31 are unbound, including both + λδ entry points (`lambdadeltaEval`, `evalLambdadelta`) +. Give λδ a door: L1 fx-fields → L2 action hooks → L3 REPL, gated by progressive + disclosure (see link:docs/design/mind-management-plan.md[the mind-management plan]) +. Headless `index.rs` (concordance/BM25/See-Also) — zero UI, zero on-disk change +. UI surface: multi-pane, command palette, inspector, markdown render ==== toc::[] diff --git a/TOPOLOGY.md b/TOPOLOGY.md index 15e5c21..c7cc0a7 100644 --- a/TOPOLOGY.md +++ b/TOPOLOGY.md @@ -1,15 +1,17 @@ - + # Nexia-List — Project Topology ## System Architecture Nexia-List is **web-first**: the browser is the primary target, running the real -Rust core compiled to WebAssembly. 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. +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. ``` ┌─────────────────────────────────────────┐ @@ -33,6 +35,17 @@ intentionally not built in this repo's CI. │ │ 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) │ │ │ + │ │ └─────────────────────────────┘ │ │ │ └────────────────┬──────────────────┘ │ │ │ │ │ ▼ │ @@ -53,13 +66,15 @@ intentionally not built in this repo's 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, service worker / PWA -install, mobile targets. +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/](docs/design/). ## Completion Dashboard @@ -67,40 +82,86 @@ install, mobile targets. COMPONENT STATUS NOTES ───────────────────────────────── ────────────────── ───────────────────────────────── PRODUCT - Rust Core Engine ████████░░ 80% Of MVP scope: Note/Notebook, back- - links, substring search, JSON - storage; 12 passing unit tests + 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 + dbl-click create; no - drag-and-drop; GraphView placeholder - WASM Bridge (core → browser) ████░░░░░░ 40% In progress (wasm-bindgen) - Web / PWA ███░░░░░░░ 30% Builds and runs via esbuild bundle; - no service worker yet (planned) + 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 █░░░░░░░░░ 10% In progress: rust-ci.yml + ui-ci.yml - landing in a parallel workstream; - existing 11 workflows are estate - governance/scanning only - Governance / Meta ███████░░░ 70% Contractiles, STATE, manifest, docs + 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: ████░░░░░░ ~35% Build resurrected; WASM integration - is the current critical path +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) ``` ## Key Dependencies ``` -Rust Core ──► WASM bundle ──► ReScript UI ──► Web bundle (web/dist/) +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. + ## Update Protocol This file is maintained by both humans and AI agents. When updating: @@ -112,3 +173,8 @@ This file is maintained by both humans and AI agents. When updating: 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. diff --git a/docs/wikis/Developer.md b/docs/wikis/Developer.md index fef34d6..a9f99ac 100644 --- a/docs/wikis/Developer.md +++ b/docs/wikis/Developer.md @@ -18,13 +18,13 @@ This is the discipline Nexia already proved with `Notebook::backlinks` — a rev | Layer | Technology | Lives in | |---|---|---| | Core engine | Rust — Note/Notebook, backlinks, wiki-links, substring search, JSON storage | [`core/`](https://github.com/hyperpolymath/nexia-list/tree/main/core) | -| **λδ substrate** | **Built** — reader, value model, evaluator + Budget, hygienic macros, multimethods, prelude, and the notebook host seam (~4,050 LOC, ~76% of the core) | [`core/src/lambdadelta/`](https://github.com/hyperpolymath/nexia-list/tree/main/core/src/lambdadelta), `core/src/lambdadelta_host.rs` | -| Browser bridge | wasm-bindgen (in progress) — the Rust core compiled to one WASM bundle | `core/src/wasm.rs` | +| **λδ substrate** | **Built** — reader, value model, evaluator + Budget, hygienic macros, multimethods, prelude, and the notebook host seam (~3,400 LOC excl. tests, ~64% of the core) | [`core/src/lambdadelta/`](https://github.com/hyperpolymath/nexia-list/tree/main/core/src/lambdadelta), `core/src/lambdadelta_host.rs` | +| Browser bridge | wasm-bindgen (**wired**) — the Rust core compiled to one WASM bundle; 31 exports, 21 bound in ReScript | `core/src/wasm.rs`, [`ui/src/store/WasmStore.res`](https://github.com/hyperpolymath/nexia-list/blob/main/ui/src/store/WasmStore.res) | | UI | ReScript 11, **hand-rolled** TEA (Model/Msg/Update/View) on `@rescript/react`, esbuild | [`ui/`](https://github.com/hyperpolymath/nexia-list/tree/main/ui) | | Tooling | **Deno 2 only** — tasks + esbuild; no npm/bun/yarn/pnpm | [`scripts/`](https://github.com/hyperpolymath/nexia-list/tree/main/scripts) | | Persistence | Human-readable JSON via IndexedDB + file download/upload | browser | -Status is tracked live in [TOPOLOGY.md](https://github.com/hyperpolymath/nexia-list/blob/main/TOPOLOGY.md) (~35% MVP; WASM bridge is the critical path). The desktop shell ([Gossamer](https://github.com/hyperpolymath/gossamer)) is external and not built in this repo's CI. +Status is tracked live in [TOPOLOGY.md](https://github.com/hyperpolymath/nexia-list/blob/main/TOPOLOGY.md) (~65% MVP). The WASM bridge is wired and green in CI; the critical path is now the UI surface — 10 of the 31 WASM exports (including both λδ entry points) are still unbound in ReScript. The desktop shell ([Gossamer](https://github.com/hyperpolymath/gossamer)) is external and not built in this repo's CI. ## The three tracks diff --git a/docs/wikis/Home.md b/docs/wikis/Home.md index 866db03..e4924a6 100644 --- a/docs/wikis/Home.md +++ b/docs/wikis/Home.md @@ -49,7 +49,7 @@ Today's tools are strong at capture and link and effectively broken at **reason* | Layer | Technology | Role | |---|---|---| | Core engine | Rust (serde, uuid, chrono) | Note/Notebook model, backlinks reverse index, substring search, JSON storage | -| Browser bridge | wasm-bindgen (in progress) | Compiles the Rust core to a single WASM bundle that *is* the engine, client-side | +| Browser bridge | wasm-bindgen (wired) | Compiles the Rust core to a single WASM bundle that *is* the engine, client-side; loaded at boot and covered by a CI contract test | | UI | ReScript 11 + hand-rolled TEA on `@rescript/react`, esbuild | Model / Msg / Update / View; type-safe functional UI | | Substrate (built) | λδ (LambdaDelta) — homoiconic Lisp in the Rust core | Notebook-as-data; multimethods on `:type`/`:op`; sandboxed Budget; opt-in, invisible by default. The interpreter, macros, multimethods, prelude, and notebook host all exist in `core/src/lambdadelta/` | | Desktop/mobile shell (optional) | [Gossamer](https://github.com/hyperpolymath/gossamer) — external sibling | Thin webview wrapping the identical web bundle; not built in this repo's CI | @@ -58,9 +58,9 @@ Tooling is **Deno 2 only** (no npm/bun/yarn/pnpm); persistence is human-readable ## Project status -The Rust core is **5,344 LOC with 90 tests green** (81 unit + exchange/golden/invariants suites + doctests), of which the λδ substrate is ~4,050 LOC. The **WASM bridge is the critical path**: `core/src/wasm.rs` exists, but until it is wired the UI tests cannot run against the real engine. Readiness grade **D**; see [READINESS.md](https://github.com/hyperpolymath/nexia-list/blob/main/READINESS.md). +The Rust core is **5,344 LOC with 90 tests green** (81 unit + exchange/golden/invariants suites + doctests), of which the λδ substrate is ~3,400 LOC — about **64% of the core**, its largest subsystem. The **WASM bridge is wired and exercised**: `Main.res` loads the WASM core at boot, `WasmStore` binds 21 of its 31 exports, and CI builds the bundle and runs the contract tests against the real engine on every PR. -> **Note:** [TOPOLOGY.md](https://github.com/hyperpolymath/nexia-list/blob/main/TOPOLOGY.md) still reports ~35% overall and does not yet mention λδ — it predates the three LambdaDelta merges (#35, #36, #43) and understates the core. Prefer the figures above until TOPOLOGY is refreshed. +The critical path is now the **UI surface**, not the bridge: λδ is compiled into the WASM and reachable from JavaScript, but nothing in the UI calls it yet. Binding those dormant methods and giving λδ a door is the next step. Overall ~65%; readiness grade **D** ([READINESS.md](https://github.com/hyperpolymath/nexia-list/blob/main/READINESS.md)) — the grade tracks release engineering (smoke tests, coverage), not feature completeness. Full dashboard in [TOPOLOGY.md](https://github.com/hyperpolymath/nexia-list/blob/main/TOPOLOGY.md). ## Relationship to other projects diff --git a/docs/wikis/Maintainer.md b/docs/wikis/Maintainer.md index f1eafdf..353c9a7 100644 --- a/docs/wikis/Maintainer.md +++ b/docs/wikis/Maintainer.md @@ -56,9 +56,10 @@ Machine-checkable governance is expressed as data, not prose: ## CI & readiness status -- **Readiness grade: D** ([READINESS.md](https://github.com/hyperpolymath/nexia-list/blob/main/READINESS.md)). Builds from source; lockfiles present; Rust core's 12 unit tests pass. Path to C: product CI on every PR, UI/integration tests, WASM bridge smoke-tested. -- **Overall ~35% MVP** ([TOPOLOGY.md](https://github.com/hyperpolymath/nexia-list/blob/main/TOPOLOGY.md)); the WASM bridge is the critical path. -- **CI today** is estate governance/scanning only (Hypatia, dogfood-gate, scorecard). Product CI (`rust-ci.yml`, `ui-ci.yml`) is landing in a parallel workstream — see [ROADMAP.adoc](https://github.com/hyperpolymath/nexia-list/blob/main/ROADMAP.adoc) sequencing. Keep every GitHub Action **SHA-pinned**; do not remove a workflow without recorded approval. +- **Readiness grade: D** ([READINESS.md](https://github.com/hyperpolymath/nexia-list/blob/main/READINESS.md)). Builds from source; lockfiles present; the Rust core's **90 tests** pass. Path to C: a browser smoke test for the WASM bundle, coverage reporting, and a release workflow. Note the grade tracks *release engineering*, not feature completeness — it is not a verdict on how much is built. +- **Overall ~65% MVP** ([TOPOLOGY.md](https://github.com/hyperpolymath/nexia-list/blob/main/TOPOLOGY.md)); the critical path is the UI surface, not the WASM bridge (which is wired and green). +- **CI today** runs *both* estate governance/scanning (Hypatia, dogfood-gate, scorecard) **and product CI**: `rust-ci.yml` (fmt, clippy `--all-targets --features wasm`, tests, wasm32 build) and `ui-ci.yml` (ReScript, wasm, Deno tests, bundle, lint), load-bearing since [#22](https://github.com/hyperpolymath/nexia-list/pull/22) and green on main. Keep every GitHub Action **SHA-pinned**; do not remove a workflow without recorded approval. +- `just check` mirrors `rust-ci.yml` exactly — if it passes locally and CI still fails, that divergence is a bug worth fixing in the Justfile. - **Local gates**: `just check` (lint + rustfmt + clippy), `just test`, `just doctor`, `just assail` (panic-attacker, if installed). ## Release & packaging diff --git a/docs/wikis/User.md b/docs/wikis/User.md index 7e4e6cd..4d55067 100644 --- a/docs/wikis/User.md +++ b/docs/wikis/User.md @@ -56,7 +56,7 @@ All of it is local, opt-in, and computed *beside* your notes — delete the inte | See where the project stands | [TOPOLOGY.md](https://github.com/hyperpolymath/nexia-list/blob/main/TOPOLOGY.md) | | Look up a term | [Glossary](Glossary) | -Nexia-List is pre-release (v0.1, ~35% to MVP): you can create, edit, delete, link, and search notes today; the canvas supports pan/zoom and double-click create. Drag-and-drop, the recall/reasoning panels, and the desktop app are on the [roadmap](https://github.com/hyperpolymath/nexia-list/blob/main/ROADMAP.adoc), not shipped yet. +Nexia-List is pre-release (v0.1, ~65% to MVP): you can create, edit, delete, link, and search notes today; the canvas supports pan/zoom, double-click create, and dragging notes, and it is keyboard-navigable. Your notes autosave locally and you can save or load them as a file. The recall and reasoning panels, the richer editor, and the desktop app are on the [roadmap](https://github.com/hyperpolymath/nexia-list/blob/main/ROADMAP.adoc), not shipped yet. ---