← ClaudeAtlas

module-operability-floorlisted

Module — loaded by name from an m-skills architect, not an entry point. Whether an interface can be operated at all: native-element-first construction, the full contract an ARIA role obliges you to supply, focus management, and live regions for async status.
matis-dev/m-skills · ★ 0 · Code & Development · score 75
Install: claude install-skill matis-dev/m-skills
# Module: The Operability Floor **Loaded by:** `accessibility-architect` · `design-architect` · `code-review-architect` · `testing-architect` · `planning-architect` · `implementing-architect`. Read it whenever a run touches an interactive surface; do not restate its content in a skill file. **Why this is separate from the craft floor:** almost everything below produces **zero automated violations**. A focus trap with no exit, focus never returned to the trigger after a dialog closes, a route change that announces nothing — there is no violating node for a scanner to find. They are architectural, which means they are decided when the interaction is designed, not fixed from a log afterwards. **The rule that governs all of it:** `role`, `aria-*`, and `tabindex` change what assistive technology is *told*, and change nothing about what the element *does*. A `<div role="button">` announces as a button and then ignores Enter, ignores Space, cannot be focused, and cannot be disabled. **No ARIA is better than bad ARIA.** --- ## 1. Native First, ARIA Second 1. **Use the element that already means it.** `<button>`, `<a href>`, `<input>`, `<select>`, `<details>`, `<dialog>`, `<table>`, `<label>`, `<fieldset>`/`<legend>`, heading levels in order. Each arrives with role, keyboard behaviour, focusability, and a disabled state you did not have to write and cannot forget. 2. **Only if no native element expresses it**, reach for ARIA — and then you owe the full contract, not just the rol