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]>
32 lines
2.5 KiB
Markdown
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.
|