ADR 0001: Use Eight Functional Channels Instead of Literal Finger Storage
Status
Accepted.
Context
The original OctaTouch concept mixed finger anatomy, operating system
behaviour, and multi-archive storage. Encoding the data model around literal
fingers would create confusion and brittle implementation assumptions.
Touch input varies across platforms:
- Mobile phones support up to ten independent contacts.
- Embedded resistive panels (e.g. AD7879) track a single contact at a time.
- Vehicle HMI knobs and rotary controllers produce no “finger” data at all.
- Accessibility configurations may use head-tracking or switch-control instead
of direct touch.
A model tied to body parts cannot be ported across these surfaces without
special-casing every platform in application code.
Decision
OctaTouch uses eight functional channels: L1, L2, L3, L4, R1,
R2, R3, and R4.
L1–L4 represent the four left-hand positions (ordinals 0–3).
R1–R4 represent the four right-hand positions (ordinals 4–7).
- The thumb is treated as a global modifier for navigation (
Navigate),
switching (Switch), and confirmation (Confirm). It is not assigned a
channel of its own.
- Archives bind to channels, not to literal body parts.
The implementation lives in core/include/Types.h (Channel, ThumbModifier,
ChannelArchive) and is exercised by tests/unit/smoke_test.cpp.
Consequences
Positive
- The product is portable across phones, tablets, web, Linux touch devices,
vehicle displays, and accessibility configurations.
- The archive model is testable because channels are stable, integer-keyed
identifiers instead of biological claims.
- Platform adapters translate raw contacts to channels once, at the edge;
everything deeper in the stack stays platform-agnostic.
Negative / Trade-offs
- Developers must learn the L1–L4 / R1–R4 vocabulary. Onboarding docs must
make the mapping from “finger position” to channel explicit.
- When the same device is used in a single-hand configuration, only four of the
eight channels are reachable. The application layer is responsible for
remapping channels to the available hand.