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
- §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]>
69 lines
10 KiB
Markdown
69 lines
10 KiB
Markdown
# 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).
|