open-standards/aac/spec/access_model.md
Transaction Science ba1212361f Add aac, map, sandbox standards; catalog the standards family
Commit the previously-untracked standard directories and catalog them in the
root README alongside proof:

- aac/    — communication cargo class: portable boards + a ten-level
            offline-first cascade (Apache-2.0 code / CC-BY-4.0 spec).
- map/    — geospatial cargo class: range-requestable signed tilesets +
            an F0–F4 fidelity cascade (Apache-2.0 code / CC-BY-4.0 spec).
- sandbox/— isolated, metered, attested execution across the heterogeneous
            compute fabric (Apache-2.0 code / CC-BY-4.0 spec).
- jouleclaw-otel-authz, jouleclaw-trust — new jouleclaw reference crates.

Root README now lists aac, map, sandbox, and proof in the catalog, the tree,
and the contribution guide.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-07 17:04:36 -04:00

32 lines
2.5 KiB
Markdown

# AAC sub-spec — The access model
Normative refinement of [SPEC §5](../SPEC.md). Reference: `aac_core::{AccessMethod, MotorProfile, ScanConfig, ScanMode, DwellConfig}`.
Every access method is a first-class input. The method and its tuning travel with the **user**, not the board: a board authored for eye-gaze MUST still open under touch or a switch (SPEC §5.3).
## 1. Access method — `AccessMethod`
`DirectTouch` (default) · `EyeGaze` · `HeadTracking` · `SwitchScan { switches: u8 }` · `Joystick` · `Bci` · `PartialVoice` · `Pointer`. `SwitchScan` carries the number of switches available (1, 2, or more); a 1-switch user relies on auto-scan timing, a 2-switch user steps and selects manually.
## 2. Motor profile — `MotorProfile`
The user's physical capabilities, used to adapt targets and timing: `fine_motor` and `sustained_press` (`Full | Limited | None`), `tremor_level` (`None | Mild | Moderate | Severe`), `min_target_mm: f32`, optional `max_reach_mm`, and `preferred_side`. A client SHOULD derive target size and dwell/scan timing from this profile and MUST NOT render a target smaller than `min_target_mm`.
## 3. Switch scanning — `ScanConfig`
A conforming scanner MUST support at minimum the `Linear`, `RowColumn`, and `Group` modes of `ScanMode` (also defined: `Block`, and inverse scanning). It MUST honor:
- `scan_rate_ms` — highlight dwell per step;
- `start_delay_ms` — delay before auto-scan begins after a press;
- `max_cycles` — complete cycles before stopping (`0` = infinite);
- `auto_restart` — whether scanning restarts after a selection.
If `adaptive_rate` is enabled, the adapted rate MUST stay within an explicit `[min, max]` bound (the reference clamps to `[300, 5000]` ms). Adaptation MUST never produce a rate outside the bound, however the user's responses trend.
## 4. Dwell / eye-gaze — `DwellConfig`
Gaze selection MUST use a configurable `base_dwell_ms` with **visible progress feedback** (`DwellFeedback`), a `tolerance_px` radius within which gaze may wander without resetting, and — where `fatigue_adaptation` is enabled — an `effective_dwell_ms` that grows toward but never exceeds `max_dwell_ms`. A selection MUST NOT fire before the effective dwell elapses.
## 5. Universality
No access method MAY be a precondition for opening or reading a board (SPEC §5.3). Selection of an access method for a given person is a clinical decision (SPEC §11); the standard guarantees only that whichever method is chosen is a first-class, fully-specified input — never a bolt-on.