Capabilities
This page documents runtime capability literals projected through the adapter boundary.
Capabilities are runtime projections, not static feature flags baked into the package.
CAPABILITIES
Section titled “CAPABILITIES”Capability is derived from CAPABILITIES:
const CAPABILITIES = [ 'play', 'pause', 'stop', 'seek', 'skip-next', 'skip-previous',] as const;
type Capability = (typeof CAPABILITIES)[number];Capability meanings
Section titled “Capability meanings”play: start or resume playback.pause: pause active playback.stop: stop playback.seek: move playback to a target position.skip-next: move to the next queue item.skip-previous: move to the previous queue item.
CAPABILITIES are runtime projections at the moment they are reported. They are not permanent guarantees across the full session and can change with queue, track, transport, or platform conditions.
Design implications for consumers
Section titled “Design implications for consumers”- Build UI controls from the latest
supportedcapability projection, not from assumptions about a platform. - Keep capability decisions separate from snapshot rendering concerns: capabilities express allowed operations, snapshots express current playback/queue state.
- Re-evaluate support over time; projection can change as runtime context changes.
Contract limits
Section titled “Contract limits”- The literal list defines valid capability identifiers, not an SLA that every runtime always supports every literal.
- The contract does not define permanence windows (for example, “once supported, always supported”).
- Capability literals do not by themselves define command success, retries, or timing behavior.
Common anti-patterns
Section titled “Common anti-patterns”- Treating
CAPABILITIESas a startup-only static config. - Inferring
seeksupport only from timeline fields likedurationinstead of runtime capability projection. - Hiding controls forever after one unsupported read, without re-reading current capabilities.
- Coupling UI state directly to transport assumptions that are not represented in
supported.