| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks failed
standards workspaces build + test / jouleclaw-rs (push) Has been cancelled
standards workspaces build + test / aac-rs (push) Has been cancelled
standards workspaces build + test / arl-rs (push) Has been cancelled
standards workspaces build + test / eoc-rs (push) Has been cancelled
standards workspaces build + test / jcp-rs (push) Has been cancelled
standards workspaces build + test / joule-code-rs (push) Has been cancelled
standards workspaces build + test / joule-ui-rs (push) Has been cancelled
standards workspaces build + test / joulecontract-rs (push) Has been cancelled
standards workspaces build + test / jouledesk-rs (push) Has been cancelled
standards workspaces build + test / joulehook-rs (push) Has been cancelled
standards workspaces build + test / map-rs (push) Has been cancelled
standards workspaces build + test / mesh-rs (push) Has been cancelled
standards workspaces build + test / openpay (push) Has been cancelled
standards workspaces build + test / proof-rs (push) Has been cancelled
standards workspaces build + test / sandbox-rs (push) Has been cancelled
standards workspaces build + test / sense-rs (push) Has been cancelled
standards workspaces build + test / smart-byte-rs (push) Has been cancelled
standards workspaces build + test / macOS energy backend (jcp-energy) (push) Has been cancelled
wasm-bindgen names the snippet directory after the crate, so a snippet kept its URL while its contents changed, and Cloudflare gives every .js a 4-hour browser cache whatever the origin sends. A browser that had the old neural_tts.js paired it with the new aac-web.js, which imports play_sample from it, and the app never started. Each snippet directory now carries a hash of its files; only the URLs the script loads change, not the WebAssembly import keys the .wasm names. Co-Authored-By: Claude Opus 5.5 <[email protected]> |
||
| .. | ||
| crates | ||
| data | ||
| third_party | ||
| tools | ||
| Cargo.lock | ||
| Cargo.toml | ||
| prerender-static.sh | ||
| README.md | ||
aac-rs — the AAC reference implementation
Rust reference for the AAC open standard. Apache-2.0.
| Crate | What it is |
|---|---|
access-core |
The shared access kernel: access methods, switch scanning with its response calibration (SPEC §5.2), dwell with two-way proposals (§5.3), gaze estimation, voice. Four dependencies (serde, serde_json, thiserror, web-time). |
aac-core |
The engine: boards, symbols, vocabulary, motor planning, prediction, i18n with each language's core status (§4.1), the cascade, interchange. |
aac-web |
Express, the reference communication app (Leptos → WASM, offline-first PWA). Live at aac.transaction.science. |
aac-conformance |
The harness: C1–C7 against the published vectors in ../conformance/v1/. |
Test and conform
cargo test --workspace
cargo run -p aac-conformance --bin aac-conformance # C1–C7; any FAIL exits non-zero
cargo run -p aac-conformance --bin gen-vectors -- ../conformance/v1 # regenerate C5/C6 vectors
Build the app as a static site
bash prerender-static.sh # → target/site/, ready to rsync; deploy with no_cache_bust
The script builds with the wasm-bindgen CLI version the crate pins (installing a
private copy if the machine's differs), prerenders the SSR shell, content-hashes
pkg/, and writes a service worker that precaches the shell and every file it
loads, so the installed app opens with no network.
Host it under your own site
Express reads four build-time variables (set them for both the cargo-leptos build and the prerender):
| Variable | Default | Use |
|---|---|---|
AAC_BASE_PATH |
"" |
Mount path, e.g. /app. Also set LEPTOS_SITE_PKG_DIR=app/pkg for the prerender. |
AAC_SW_URL |
/sw.js |
The service worker to register (a host usually runs one for its whole site). |
AAC_APP_TITLE |
AAC — aac.transaction.science |
The document title. |
AAC_HIDE_ENERGY |
unset | Set to hide the energy meter. |
aac.aurasense.ai builds it this way at /app
(build-app.sh).
Two rules the app keeps
- The first frame is the same on the server and in the browser. Saved state is restored only after hydration, behind a brief starting screen. Reading it earlier made a returning user's first frame differ from the prerendered page, and hydration aborted.
- Timing belongs to the person (SPEC §5.1). Settings → Timing sets scan speed and dwell, shows proposals from the person's own responses to accept or decline, and adjusts automatically only if they turn that on.