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]>
2.4 KiB
AAC sub-spec — Motor stability
Normative refinement of SPEC §3. 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::frequencyweights ranking, never placement); - context, time of day, partner, or activity (any L3+ enrichment,
cascade.md); - language switching (a code-switch is a traversal, not a re-layout —
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).
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.