Commit d0fcae2
Web-first resurrection: UI builds and runs on the WASM Rust core, real CI, docs truth reset (#22)
* build: resurrect the toolchain — Deno-only JS deps, esbuild pipeline, root cargo workspace
- deno.json: nodeModulesDir + pinned npm: specifiers (rescript 11.1.4,
@rescript/core 1.6.1, @rescript/react 0.13.1, react 18.3.1, esbuild
0.28.1); real deno.lock (was 0 bytes); tasks for setup/dev/build/
build:wasm/test that actually run. Removes the npm-CLI setup task that
violated the Deno-only MUST (see docs/adr/0002).
- ui/rescript.json: drop unused rescript-tea and unresolvable
cadre-tea-router; open RescriptCore (was a hidden compile blocker);
esmodule output; compile ui/tests as dev sources.
- scripts/: esbuild bundle + dev server + wasm build (cargo +
wasm-bindgen) entry points.
- Root Cargo.toml workspace: members=[core], exclude=[desktop] so the
missing gossamer sibling can never break root builds; release profile
opt-level=z + lto for the wasm artifact.
- Justfile: real setup/build/build-wasm/test/run/check recipes.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAEqVP7Y3bZDhtAaPUTbps
* core: wasm bindings, backlink hardening, contract + property tests
- core/src/wasm.rs (feature "wasm"): WasmNotebook browser API. Granular
mutations return only the changed note, or a {changed, removed,
backlinks} delta for topology ops — never the whole notebook. View
types serialize camelCase to match the UI records; the snake_case
on-disk format is untouched. Errors are real JS Errors.
- fix(notebook): link_notes(a, a) corrupted the backlink index —
Note::add_link refused the self-link silently but the backlink was
recorded anyway. Now rejected with the existing CircularLink error.
Found by the new property test on its first run.
- notebook: rebuild_backlinks() — loading never trusts a stored index
(storage::load and wasm from_json both rebuild).
- core/tests/golden.rs + tests/fixtures/notebook.golden.json: on-disk
format contract, shared with ui/tests/contract.test.js.
- core/tests/invariants.rs (proptest): backlinks are the exact inverse
of outgoing links after any op sequence; serde roundtrip.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAEqVP7Y3bZDhtAaPUTbps
* ui: run on the wasm core — store seam, real persistence, tests
The UI no longer reimplements notebook logic client-side. All mutations
delegate to the Rust core (compiled to WebAssembly) through a store seam
and patch a read model with what the core returns; ids and timestamps
come from the core (Types.res no longer fabricates random ids).
- ui/src/store/WasmStore.res: bindings + current-notebook handle; the
operation set deliberately mirrors the desktop shell commands so a
GossamerStore can swap in later with zero UI changes.
- ui/src/store/Persist.res (+ idb.js, fileio.js): debounced autosave to
IndexedDB; Save downloads .nexia.json; Load via file picker — the
former SaveNotebook/LoadNotebook no-ops now work.
- ui/src/Update.res: delegates to the store; self-link/delete guards;
fix: update was recursive without rec (never compiled).
- ui/src/Main.res: async boot (init wasm -> restore autosave -> mount);
local DomBindings.res replaces the undeclared rescript-webapi dep and
the %raw handler hack; the delete-while-editing guard moved into
update where it sees current state (was a stale closure).
- ui/tests/: TEA update suite (UpdateTests.res) and golden-fixture
contract tests, run by deno test against the real wasm core.
- web/index.html: loads the bundled ./app.js; noscript + aria-live.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAEqVP7Y3bZDhtAaPUTbps
* ci: add product build/test workflows (rust-ci, ui-ci)
The repo previously had no workflow that built or tested the product —
all eleven existing workflows are estate governance/scanning (and
governance.yml's own comment referenced a rust-ci.yml that didn't
exist). Now:
- rust-ci.yml: cargo fmt --check, clippy -D warnings (incl. the wasm
feature), cargo test (unit + golden + property), plus a wasm32 build
+ wasm-bindgen job. Never touches desktop/ (external sibling dep).
- ui-ci.yml: Deno 2.9.1 + ReScript compile, wasm core build, deno test
(TEA update + contract tests), esbuild bundle, deno lint.
- workflows/README.md: which checks verify the product vs. which are
estate plumbing expected to no-op outside hyperpolymath.
- dependabot: track cargo deps for /core (desktop excluded — its path
dep cannot resolve here).
Actions are SHA-pinned, reusing the pins already present in the repo;
no new third-party actions introduced.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAEqVP7Y3bZDhtAaPUTbps
* docs: truth reset — make every document match the code
TOPOLOGY claimed ~70% complete with petgraph/tantivy/Nickel at 100%;
none of those exist. STATE.a2ml said 0%. ROADMAP had everything
unchecked. Several governance files still carried {{PLACEHOLDER}}
tokens, and Quickstarts/CONTRIBUTING referenced deleted files
(flake.nix, .scm state, nonexistent just recipes).
- README/TOPOLOGY/ROADMAP: describe the real web-first architecture
(ReScript UI -> wasm Rust core -> IndexedDB/file persistence; desktop
= optional external Gossamer shell); honest completion dashboard
(~35%); aspirational tech moved to a labelled Future section.
- STATE.a2ml 35%, ai.txt pointers fixed to 6a2/*.a2ml, CONTRIBUTING and
all three Quickstarts now give commands that exist, placeholders
filled in INTENT.contractile/methodology.a2ml/Intentfile.a2ml.
- New: READINESS.md (Grade D, per the 2026-04-15 audit), desktop/README
(external-sibling containment + resume path), ADR-0001 (wasm core,
web-first) and ADR-0002 (Deno-only interpretation).
- TEST-NEEDS.md: real test matrix (was "0 test files" — wrong even
then).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAEqVP7Y3bZDhtAaPUTbps
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent fcd76c2 commit d0fcae2
60 files changed
Lines changed: 3311 additions & 722 deletions
File tree
- .github
- workflows
- .machine_readable
- 6a2
- agent_instructions
- .well-known
- contractiles/intend
- core
- src
- tests
- desktop
- docs/adr
- scripts
- tests/fixtures
- ui
- src
- bindings
- store
- tests
- web
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
43 | 50 | | |
44 | 51 | | |
45 | 52 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
| 8 | + | |
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
14 | | - | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
38 | | - | |
| 38 | + | |
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
| 43 | + | |
48 | 44 | | |
49 | 45 | | |
50 | 46 | | |
51 | 47 | | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
56 | 54 | | |
57 | 55 | | |
58 | 56 | | |
59 | 57 | | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
64 | 62 | | |
65 | 63 | | |
66 | 64 | | |
67 | 65 | | |
68 | | - | |
69 | | - | |
70 | | - | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
71 | 69 | | |
72 | 70 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
58 | | - | |
| 58 | + | |
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
| 2 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
16 | | - | |
17 | | - | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
0 commit comments