open-standards/aac/spec/motor_stability.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

30 lines
2.4 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 sub-spec — Motor stability
Normative refinement of [SPEC §3](../SPEC.md). Reference: `aac_core::board::Cell::{position, locked}`.
A configured board's most valuable property is not its content but its **geometry**: the learned muscle memory of where each word lives. A user who reaches for "want" in the top-left does so without looking, often without conscious thought. Anything that moves "want" destroys that — and motor relearning for a person with a significant physical impairment can cost weeks. This sub-spec makes geometry an invariant, not a preference.
## 1. Positions are immutable
A cell's `position` MUST NOT change once assigned, for the life of the cell, except by an explicit user or editor edit to a cell whose `locked` flag is `false`. In particular, the following MUST NOT move a cell:
- prediction or frequency (`Cell::frequency` weights ranking, never placement);
- context, time of day, partner, or activity (any L3+ enrichment, [`cascade.md`](cascade.md));
- language switching (a code-switch is a traversal, not a re-layout — [`access_model.md`](access_model.md));
- "tidying", auto-fill, or alphabetization.
## 2. Locked boards do not reflow
A client MUST NOT reflow, resort, auto-arrange, or re-pack the cells of a board whose cells are `locked`. Adding a cell to a locked board MUST place it in a free position without disturbing any existing cell.
## 3. Hiding is in place
Progressive disclosure — hiding advanced vocabulary while a user is still learning — MUST be done by rendering a cell visually inactive **at its position**, never by removing it and collapsing the grid. A word that reappears later MUST reappear in the exact position it would have occupied all along. This is why `CellContent::Blank` exists: it reserves geometry against a future word.
## 4. Determinism across clients
Two openings of the same board — on the same client, on a different conforming client, before and after an interchange round-trip (§7–§8) — MUST present identical cell positions. Position assignment during ingest of a positionless source MUST be deterministic (row-major fill) and then fixed (see [`interchange.md`](interchange.md)).
## 5. Conformance
An implementation that violates §1–§4 is non-conformant regardless of any other quality. Motor stability is checked by opening a vector board, applying a frequency/prediction update, re-serializing, and asserting position-set equality against the input.