open-standards/aac/aac-rs/crates/aac-conformance/Cargo.toml
Transaction Science edcf02b350 feat(access-core, aac-core): Bayesian selection that never moves a cell, and prediction in 43 languages
Selection (access-core; SPEC §5.4, proposed): a prior over the options on the
board — usage frequency now, the Laya decision model later — times the
person's own switch-timing likelihood, after Nomon (Broderick & MacKay):
- press_timing.rs learns a damped kernel-density estimate of each press's
  offset from the intended highlight, from a population prior scaled to the
  person's scan interval, and only from selections the person keeps: presses
  are staged per attempt, dropped when abandoned or undone (including an Undo
  reached by scanning), and learned only after three newer selections.
- selection.rs computes the posterior (late presses explained as late, a
  2% lapse term), selects at 99:1 odds with the prior capped so presses must
  favour the choice 4:1, and otherwise keeps scanning — a row gets up to two
  extra passes. Without opt-in, or before 10 kept presses, it behaves exactly
  like the conventional scanner and only measures.
- scan_order.rs orders rows, groups and cells by prior mass (fewest expected
  steps) without moving any; options keep stable position-order ids, and a
  new order applies from the next pass. dwell.rs weights per-cell dwell from
  0.8x to 1.5x within hard bounds. Every adaptation is opt-in and previewable.
Conformance C8–C11 (order never moves a position, opt-in required, dwell
bounds, selection follows presses): 370/370 with the original 236.

Prediction (aac-core): per-language packs — word frequencies, word pairs,
sentence starts and a letter model, front-coded and CRC-checked — built
reproducibly by tools/lang/build_packs.py from pinned wordfreq 3.2.0
(CC-BY-SA-4.0), FrequencyWords 2018 (CC-BY-SA-4.0) and Common Voice sentences
(CC0), into data/lang/ (43 of 45 languages; gu and kn have no open source
large enough and report "adaptive only"). PredictionEngine blends a pack with
what the person has said (hierarchical Dirichlet smoothing): next word,
completion, and letter prediction for letter scanning, deterministically.
A per-language pair filter exists; its lists still need curating before the
app shows next-word suggestions to children.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-29 11:28:26 -04:00

28 lines
884 B
TOML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[package]
name = "aac-conformance"
description = "AAC open standard: conformance harness — exercises the cascade routing table, energy-tier monotonicity, offline-capability invariants, and board/profile wire round-trips against the reference engine. Any FAIL makes the run non-zero (CI-ready)."
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
rust-version.workspace = true
default-run = "aac-conformance"
[lints]
workspace = true
[dependencies]
aac-core = { workspace = true }
# The adaptive access primitives (scan order, dwell weights, Bayesian
# selection) are held to C8–C11 directly; aac-core re-exports only part of
# access-core.
access-core = { workspace = true }
serde_json = { workspace = true }
[[bin]]
name = "aac-conformance"
path = "src/main.rs"
[[bin]]
name = "gen-vectors"
path = "src/bin/gen_vectors.rs"