open-standards/aac/README.md
David Charlot a5152bc0c8
All checks were successful
no-vanity-metrics / Scan committed Markdown for vanity metrics (push) Successful in 4s
standards workspaces build + test / eoc-rs (push) Successful in 1m54s
standards workspaces build + test / jouleclaw-rs (push) Successful in 2m2s
standards workspaces build + test / aac-rs (push) Successful in 58s
standards workspaces build + test / jcp-rs (push) Successful in 1m20s
standards workspaces build + test / arl-rs (push) Successful in 3m21s
standards workspaces build + test / joule-code-rs (push) Successful in 42s
standards workspaces build + test / joulecontract-rs (push) Successful in 33s
standards workspaces build + test / proof-rs (push) Successful in 1m13s
standards workspaces build + test / map-rs (push) Successful in 29s
standards workspaces build + test / mesh-rs (push) Successful in 25s
standards workspaces build + test / joule-ui-rs (push) Successful in 2m28s
standards workspaces build + test / openpay (push) Successful in 1m13s
standards workspaces build + test / sandbox-rs (push) Successful in 2m8s
standards workspaces build + test / jouledesk-rs (push) Successful in 2m32s
standards workspaces build + test / smart-byte-rs (push) Successful in 2m27s
standards workspaces build + test / joulehook-rs (push) Successful in 2m15s
standards workspaces build + test / sense-rs (push) Successful in 2m36s
standards workspaces build + test / macOS energy backend (jcp-energy) (push) Successful in 2m21s
spec(aac): 0.2.0 — language honesty, and timing that belongs to the person
- §4.1 Language honesty: every language states how its core vocabulary was
  obtained (CoreStatus); an absent status reads as GlossOnly; glosses are never
  presented as a language's core. Withdraws the claim that one ~400-word core
  covers ~80% of every language.
- §5.1 Timing belongs to the person: scan rate and dwell are theirs to set;
  automatic adaptation is off unless they opt in; changes are proposed, never
  silent.
- §5.2 Scan-rate floor: max(⌊100·M/65⌋, P95), from at least 10 responses.
  The previous reference set 80% of the mean press, so the highlight had
  usually moved on when the person pressed.
- §5.3 Dwell proposals go both ways, with floors, replacing "should adapt to
  fatigue" (the old reference only ever lengthened the dwell).
- §10 adds C5–C7; §11 says access and vocabulary choices are never a
  prerequisite for starting.
- spec/access_model.md, the lexicon and the ontology agree (new CoreStatus
  class and individuals; scanRateMs, dwellMs, adaptationOptIn; Turtle, SHACL
  and JSON-LD validated with rdflib). New aac-rs/README.md covers testing,
  the static build, and hosting Express under another site.

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

69 lines
10 KiB
Markdown
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.

# AAC
A carrier for voice. A communication board is a signed, portable file — every symbol, every language, every access method — that speaks on any device, offline, owned by no one.
AAC is the **communication cargo class** of the Transaction Science substrate. Where [Smart Byte](../smart-byte/) carries value, [EOC](../eoc/) carries compute, [Map](../map/) carries place, and [Joule Code](../joule-code/) carries coding work, AAC carries **utterance** — what a non-speaking person means to say — as a content-addressed, portable **board** with its access model and its energy cost intrinsic.
Augmentative and alternative communication is the assistive technology that gives a voice to people who cannot rely on speech: children and adults with autism, cerebral palsy, ALS, stroke, apraxia, Rett syndrome, and many other conditions. A board is a grid (or a visual scene, or a keyboard) of cells; selecting cells composes an utterance; the device speaks it. The selecting can be done by touch, by a single switch scanned across the grid, by where the eyes rest, by a head pointer, by a joystick — whatever motor channel a person has.
A board in this standard is not an app's private save file and not a vendor API response. It carries exactly what a voice needs to survive moving between devices: identity (a content address over its canonical serialization), a layout (cells placed once and **locked**, so muscle memory is never invalidated), symbols (referenced by source and stable id, not baked-in pixels), an access model (the method, timing, and calibration the user relies on), language (a graph edge, so a bilingual user code-switches by traversal), and a two-part joule cost on every operation — for transparency, **never billing**. Communication resolves through an explicit **energy-tiered cascade**: the overwhelming majority of utterances are cache hits and on-device lookups that never touch a network, and richer help (context-aware prediction, sentence construction, voice cloning) is reached only when something cheaper cannot close the request.
The substrate is intentionally **ownerless**: no protocol-level token, permissive licensing on the spec text and reference code, and conformance vectors so any implementer can verify canonicity without a trust relationship with the authors. A conforming client opens a board, renders it, drives it with the user's access method, predicts on-device, and speaks — against local storage, with no contact with any company's servers as a condition of operation. Transaction Science is one steward: it publishes the spec, ships the reference implementation, and operates optional commercial services (hosted symbol libraries, voice banking, team coordination) around the substrate — not its proprietor.
## The doctrine
**A voice is a file, not a subscription.** The durable layer of a communication system is not the app and not a recurring charge — a person's ability to speak must not lapse when a payment does. It is the **portable, self-describing board** that renders and speaks forever from dumb storage, on any device the user already owns.
Seven principles, normative in [`SPEC.md`](SPEC.md):
1. **Free forever.** No billing, no tiers, no balance, no in-app purchase. Every cascade level is free at the protocol layer. A conforming implementation never gates communication behind payment.
2. **Offline first.** Levels L0–L2 — cache, symbol lookup, local prediction — run entirely on-device and carry 95%+ of communication. A network drop never silences a user.
3. **Motor stability, and timing that belongs to the person.** Timing is set by the person; a client may propose a change from their own responses but never changes it silently (SPEC §5.1). Cells are placed once and locked. Symbols do not move; layouts do not reflow. The user's motor plan is sacred — a board that rearranges itself has destroyed the thing that made it usable.
4. **Every access method.** Touch, switch scanning (1- and 2-switch, row-column, group, linear), dwell/eye-gaze, head tracking, joystick, partial voice. No method is an afterthought; each is a first-class input in the same model.
5. **Multilingual, honestly.** Multilingual is a graph edge, not a separate app. Code-switching is traversal. RTL, CJK, Indic, and Arabic scripts are first-class. Every language says how its core vocabulary was obtained: the reference ships 45, with English studied with English speakers and the other 44 labelled as glosses until their speakers validate their own (SPEC §4.1).
6. **Open interchange.** A board exports to and ingests from the open interchange format. A user brings their existing boards in and takes everything with them when they leave. No lock-in — ever.
7. **The receipt.** Every operation reports a two-part energy cost in microjoules with an honest provenance tag. The cost is shown for transparency and is **never** converted into a charge.
## The cascade
AAC's organizing primitive is the **energy-tiered cascade** — ten levels, each an order of magnitude costlier than the last, each reached only when nothing cheaper closes the request:
| Level | Name | Typical op | Energy | Offline |
|-------|------|-----------|--------|---------|
| L0 | Cache hit | recently-used phrase, pinned message, motor-planned sequence | ~1 µJ | ✅ |
| L1 | Symbol lookup | core vocabulary retrieval, symbol-set search | ~10 µJ | ✅ |
| L2 | Local prediction | on-device word/phrase n-gram completion | ~100 µJ | ✅ |
| L3 | Context prediction | time / place / partner / activity-aware prediction | ~1 mJ | — |
| L4 | Semantic expansion | novel sentence construction from partial input | ~10 mJ | — |
| L5 | Conversation AI | conversation repair, social scripts, pragmatics | ~100 mJ | — |
| L6 | Generative communication | letters, posts, longer narratives | ~1 J | — |
| L7 | Voice clone | personal-voice synthesis from recordings | ~5 J | — |
| L8 | Multimodal generation | custom symbol / visual-scene synthesis | ~10 J | — |
| L9 | Adaptive model | retrain the user's prediction model | ~15 J | — |
The boundary at L2/L3 is normative: **exactly** L0–L2 are offline-capable, and a conforming client serves them with no network. Everything above is enrichment, never a dependency.
## Open interchange
A user's years of customization — added words, custom symbols, personal phrases, the exact layout their muscle memory has learned — are the most valuable and least portable thing in assistive technology. AAC makes interchange a property of the standard: a board serializes to a canonical, self-describing form, and the reference engine **ingests** the open board interchange format and other community exports so a user never starts over when moving in, and never loses anything when moving on. Ingestion is one-directional and additive — the standard reads existing work into the substrate; it does not compete with the tools that produced it.
## Contents
- [`SPEC.md`](SPEC.md) — the normative specification (RFC 2119): the board / cell / symbol data model, the access-method abstraction, canonical serialization, the cascade and its offline invariant, the interchange format, and the receipt.
- [`spec/`](spec/) — sub-specifications: the [board data model](spec/board.md), the [motor-stability invariant](spec/motor_stability.md), the [access model](spec/access_model.md), the [communication cascade](spec/cascade.md), [interchange](spec/interchange.md), and the [receipt](spec/receipt.md).
- [`vocab/`](vocab/) — the controlled vocabulary ([`LEXICON.md`](vocab/LEXICON.md)) and stable IRIs: the OWL ontology ([`v1.ttl`](vocab/v1.ttl)), the JSON-LD 1.1 context ([`v1.jsonld`](vocab/v1.jsonld)), and SHACL shapes ([`v1.shapes.ttl`](vocab/v1.shapes.ttl)). Namespace `https://aac.transaction.science/vocab/v1#`.
- [`conformance/`](conformance/) — published vectors. An implementation is conformant if it reproduces them.
- [`aac-rs/`](aac-rs/) — the Rust reference: `aac-core` (the engine — boards, symbols, vocabulary, motor planning, scanning, dwell, prediction, i18n, interchange), `aac-web` (a reference communication app built on Leptos), and `aac-conformance` (the harness).
## Reference implementation and demonstrator
The Rust reference lives in [`aac-rs/`](aac-rs/). `aac-core` is the engine a third party implements against — platform-agnostic, dependency-light, no UI. The **demonstrator** is [aac.transaction.science](https://aac.transaction.science): a free communication app (Rust → WASM, offline-first PWA) that consumes `aac-core` and renders grid boards, switch scanning, dwell selection, gamepad and eye-tracking input, on-device prediction, and system / banked-voice speech. The demonstrator is a *demonstration of the standard* — free forever, every access method — not a product to be sold.
## Status
**v0.2.0 draft** — adds language honesty (SPEC §4.1) and person-owned timing with a scan-rate floor and two-way dwell proposals (§5.1–§5.3), each with a conformance suite (C5–C7); see the changelog at the end of SPEC.md. The demonstrator can also be served under another site's path and name — see [`aac-rs/README.md`](aac-rs/README.md). Reference engine ported and building: `aac-core` (22 modules — boards, symbols, vocabulary, motor planning, switch scanning, dwell, prediction, context, history, multilingual, accessibility, partner tools, analytics, the cascade router, the store, interchange import/export), `aac-web` (the Leptos reference app), and the `aac-conformance` harness (cascade routing, energy monotonicity, the offline invariant, wire round-trips, the scan-rate floor, dwell proposals, and language honesty). `cargo test` and `cargo clippy --all-targets` are green on the engine and the harness. The reference app builds end-to-end through `cargo leptos build --release` — both the WASM client (`aac-web.wasm`, ~3 MB) and the SSR server binary — and boots: it serves the app shell and the offline-first PWA assets. Specification core published in `SPEC.md` and `spec/`, with the controlled vocabulary and stable IRIs in `vocab/`. Not a medical device; not certified as a speech-generating device (SGD) for insurance funding (see SPEC §11).
## Licence
- Reference code (`aac-rs/`): Apache-2.0 — see [`LICENSE`](LICENSE).
- Specification text (`SPEC.md`, `spec/`, `vocab/`): CC-BY-4.0 — see [`LICENSE-SPEC`](LICENSE-SPEC).