You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs+build: re-derive status from the code (λδ, bridge, CI, PWA) and fix the Justfile (#46)
## Why
`TOPOLOGY.md` predated the three LambdaDelta merges (#35, #36, #43) and
never mentioned λδ. Because it is *the* status source, every downstream
doc inherited its stale figures — including the wiki landed in #45. This
re-derives the countable facts from the tree and corrects the cascade,
then fixes the Justfile gaps found along the way.
## TOPOLOGY was understating the project on six axes
| Claim | Reality |
|---|---|
| λδ absent entirely | **Built, not planned** — reader, value model,
evaluator + Budget sandbox, hygienic macros, multimethods, prelude, host
seam. ~3,400 LOC excl. tests, **~64% of the core**, its largest
subsystem. Now its own dashboard row |
| "12 passing unit tests" | **90** (81 unit + 3 exchange + 2 golden + 2
property + 2 doc) |
| WASM bridge "40%, in progress" | **Wired and exercised** — `Main.res`
loads the wasm at boot, `WasmStore` binds 21 of 31 exports, ui-ci runs a
TEA↔WASM contract test against the real bundle |
| CI "10%, landing in a parallel workstream" | `rust-ci.yml` +
`ui-ci.yml` **load-bearing since #22**, SHA-pinned, green on main |
| Web/PWA "no service worker yet (planned)" | Service worker +
webmanifest + icon **ship and are registered** (`Main.res:88`, #27) |
| UI "no drag-and-drop; GraphView placeholder" | Note drag
**implemented** (`View.res:397`); GraphView renders a circular layout |
**Overall ~35% → ~65%.** The critical path has **moved off the WASM
bridge onto the UI surface**: 10 exports are unbound in ReScript,
including both λδ entry points (`lambdadeltaEval`, `evalLambdadelta`) —
the substrate is reachable from JS but nothing calls it.
Also corrects **a mixed-basis error I introduced in #45**: λδ was
reported as "~76% of the core" by dividing 4,049 LOC (*with* tests) by
5,344 (*without*). Like-for-like it is 3,407/5,344 = **~64%**.
## Justfile
- **`just test` could not work on a clean checkout** — the UI tests
import generated `*.res.js` and the wasm bindings, so type-check failed
with 4 `TS2307` errors. Now `test → build → build-wasm`. Warm no-op
costs ~0.45s, so it is not a tax on the inner loop; added `test-rust`
for the Rust-only loop.
- **`just check` was weaker than CI** (no `--all-targets`, no
`--features wasm`, ran from `core/`) — it could pass locally while CI
failed. Now mirrors `rust-ci.yml` exactly.
- **`just doctor` ignored the wasm toolchain** — the one thing that
actually blocks the browser build. Now checks the wasm32 target and
compares the wasm-bindgen CLI against `Cargo.lock`, printing the exact
fix command on drift.
- **`crg-grade` and `crg-badge` were dead on arrival** — Make-style
`$$(...)` under just/sh expanded `$$` to the shell PID, so `(` was a
syntax error. They failed 100% of the time. Rewritten as bash shebang
recipes.
## Verification
- `just check` — pass (now compiles the `wasm` feature, which the old
one never did)
- `just test` from a **fully cleaned tree** (no `web/wasm`, no
`*.res.js`) — rebuilds and passes **90 Rust + 10 UI**
- `just doctor`, `crg-grade` (→ `D`), `crg-badge` — all run; doctor's
FAIL path verified by hiding wasm-bindgen from `PATH`
- `asciidoctor` renders README/ROADMAP/QUICKSTART-DEV clean; `just
wiki-sync dry` still previews correctly
## Deliberately not done — needs your call
- **`READINESS.md` grade D is probably stale.** All three *Path to C*
criteria now appear met (product CI on every PR ✅, UI tests in CI ✅,
WASM bridge built + smoke-tested ✅). The grade is assigned by audit, so
I corrected the facts and flagged a re-audit rather than self-promoting.
`just crg-badge` publishes that letter, so the badge is currently
understating the project.
- **`must-spdx-headers` is a broken gate** (pre-existing, untouched
here). It runs `find . | head -20`, so it checks an arbitrary,
readdir-order-dependent fifth of the tree *and* walks vendored
`node_modules/`. It currently fails on `@rescript/react`'s own `.res`
files — **every tracked source file does have SPDX**. Worse,
`contractile.just` has drifted from its source:
`contractiles/must/Mustfile.a2ml` contains no `spdx-headers` rule at
all, and its `no-hardcoded-paths` rule (severity: **critical**) is
missing from the generated file. The `contractile` tool isn't installed
to regenerate, and this is your standards ecosystem — so I left it
alone.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@@ -16,21 +22,23 @@ standard. Grade assigned in the
16
22
17
23
| Aspect | Status |
18
24
| --- | --- |
19
-
| Builds from source | Yes — `deno task build` (ReScript + esbuild bundle); Rust core builds and its 12 unit tests pass |
25
+
| 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)|
20
26
| Lockfiles | Yes — `deno.lock`, `Cargo.lock`|
21
-
| CI | Estate governance/scanning workflows only; product CI (rust-ci.yml, ui-ci.yml) landing in a parallel workstream|
22
-
| Tests | Rust core unit tests only; no UI or integration tests yet |
23
-
| Docs | Truth-reset 2026-07-02; roadmap and topology reflect actual state|
27
+
| 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|
28
+
| Tests | Rust core (90) **and** UI (10, via `deno task test:ui`), including a TEA↔WASM contract test. No browser-level integration test yet |
29
+
| Docs | Truth-reset 2026-07-02; TOPOLOGY re-derived 2026-07-17 after the λδ merges (#35, #36, #43) had gone unrecorded|
24
30
| Known debt | unwrap/expect calls in core and desktop; unsafe `get` in View.res (see audit report) |
25
31
26
32
## Path to C
27
33
28
-
- Product CI running on every PR (Rust build+test, ReScript build, lint)
29
-
- Tests beyond the core crate: UI unit tests exercised in CI
30
-
- WASM bridge built and smoke-tested in CI
34
+
All three appear **met** as of 2026-07-17 — a re-audit should confirm and regrade:
35
+
36
+
-[x] Product CI running on every PR (Rust build+test, ReScript build, lint) — `rust-ci.yml` + `ui-ci.yml`, both `on: pull_request`
37
+
-[x] Tests beyond the core crate: UI unit tests exercised in CI — 10 tests via `ui-ci.yml`
38
+
-[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
0 commit comments