| Filename | Latest commit message | Latest commit date |
|---|---|---|
These are the only lints clippy 1.99.1 reports that clippy 1.98.0 does not.
Every cargo root in the tree was compared on both toolchains (the evidence is
in the next commit). 1.98.0's clippy also builds every target of the fixed
code, and reports nothing it did not report before, so this commit stands
under either pin.
What changed, and why
- clippy::assert_is_empty is new in 1.99. 36 sites, all in test code
(#[cfg(test)] modules; no lib or bin build reports any):
aac-core and access-core, 23 sites; openpay's op-crypto-extra, op-emv,
op-iso20022, op-reconciliation, op-routing, op-screening, op-settlement
and op-tax, 13 sites. `assert!(x.is_empty())` becomes
`assert_eq!(x, [] as [T; 0])`, `assert_ne!` for the negation, or `""` for
strings, so a failure prints the value instead of only "false". aac-core and
access-core are `#![deny(warnings)]` and `#![deny(clippy::all)]`, so without
this their clippy run fails on 1.99.1.
Judgment call: at 18 of the 36 sites, clippy's own "MachineApplicable"
suggestion does not compile. It names local types by crate-relative path
(`finder::Found`, which is not in scope in a test module), or offers a bare
`[]` whose element type cannot be inferred. So each site names its element
type as its own module sees it (`[] as [Found; 0]`, `[] as [f64; 0]`). The
four lines rustfmt would wrap are wrapped the way rustfmt wraps them.
- clippy::approx_constant (deny-by-default) now knows EULER_GAMMA and
GOLDEN_RATIO. Both are in std::f{32,64}::consts and stable since 1.94; the
jouleclaw workspace MSRV is 1.97.
- jouleclaw-omni, inference/architecture/mochi.rs: `1.618_034` becomes
`std::f32::consts::GOLDEN_RATIO`. They are the same f32
(1.61803400516510009765625), so the latents do not change. This file is
in standards-build.yml's macOS gate (`cargo clippy -p jouleclaw-omni
--features metal -- -D warnings`), which fails on 1.99.1 without the fix.
- jouleclaw-outlier, c_factor: `0.5772156649` becomes
`std::f64::consts::EULER_GAMMA`. Judgment call: the literal was
truncated, so c(n) moves by 3.1e-12. The normalisation in the
isolation-forest paper uses the Euler-Mascheroni constant itself, so this
is the intended value. No other crate and no committed vector reads these
scores, and the crate's tests pass unchanged.
- smart-byte-rs/Cargo.lock: async-trait 0.1.89 becomes 0.1.92, which adds
syn 3.0.9 as its dependency. 0.1.89 put `#[must_use]` on every trait method
it generates. clippy 1.99 now counts the returned `Pin<Box<dyn Future>>` as
must_use already, so clippy::double_must_use fired at 9 #[async_trait] trait
methods. The attribute there is the macro's, not ours, so the right fix is
the macro: 0.1.92 no longer emits it, and every other lockfile in this tree
already uses 0.1.92. A narrow `cargo update -p async-trait --precise 0.1.92`
also moved data-encoding-macro-internal (which accepts syn >=1, <3) from syn
2 to syn 1. That was put back to syn 2.0.117, as on main, so the lock
changes only what the bump needs. `cargo update --workspace --locked` and
scripts/check-lockfiles.sh accept it.
Left as they are
- openpay op-dispute-evidence evidence.rs:92 (clippy::double_must_use) is
reported on 1.98.0 too. Only the message's wording changed in 1.99.
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 |
The AAC Reference App, the communication app of the standard (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.
Four optional downloads ship beside the app, each built outside git and checked against a catalogue committed here. Each is offered to the person, never fetched by itself, and runs on their device:
- Natural voices (
tools/voices/): neural text-to-speech, offered first for the person's language (in setup, and when the language changes). Of the device's own voices the best speaks (premium, enhanced, then basic), the one the person chose while the device has it, and robotic or novelty voices only when nothing else speaks the language; online voices never (access-corevoice.rs, aac-webvoices.rs; device-voice facts from Readium Speech,third_party/readium-speech/). - The sentence helper (
tools/ai/): an on-device language model that turns a few chosen words into whole sentences, and suggests replies. It runs on the graphics chip only, and only in the languages it was tested in. - Hearing your partner (
tools/asr/): on-device speech recognition that writes down what someone says to the person, for the sentence helper's replies. It listens only when asked, keeps and sends nothing, runs on the graphics chip only, and only in the languages with evidence it is accurate. - First letters (
tools/ae/): abbreviation expansion. The person types only the first letter of each word (iwtgh), and a small on-device model offers whole sentences (I want to go home), fitting what their partner said. It runs on the listener's runtime, on the graphics chip only, never speaks by itself, and is offered only where we measured it (English).
Set AAC_VOICES=none, AAC_AI=none, AAC_ASR=none or AAC_AE=none to build
without them.
Host it under your own site
The AAC Reference App 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 — reference app |
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.