Skip to content

feat(standard): add §18 accessibility as opt-in mode layer — v1.33#11

Merged
UnbreakableMJ merged 2 commits into
mainfrom
feat/accessibility-section-18
Jul 23, 2026
Merged

feat(standard): add §18 accessibility as opt-in mode layer — v1.33#11
UnbreakableMJ merged 2 commits into
mainfrom
feat/accessibility-section-18

Conversation

@UnbreakableMJ

@UnbreakableMJ UnbreakableMJ commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Why

Accessibility in the Standard was three lines in §13 — a chapter that opens by mandating Material Design "for all graphical applications." Meanwhile PROJECTS.md shows the estate is overwhelmingly Rust CLI/TUI (59 Rust / 13 CLI / 10 TUI mentions vs. 1 Flutter). The dominant application class had no accessibility coverage, no acceptance criteria, and no §16 audit gate.

What changed

§18 (new chapter) — Accessibility (Opt-In Mode Layer). Two-sided rule: mandatory for developers to implement, off by default for users. The Steelbore theme is untouched and remains the sole default.

  • §18.1 Activation — one toggle, four sources with defined precedence: --accessible > SPACECRAFT_A11Y > config > auto-detect hints (TERM=dumb, NO_COLOR, GTK_MODULES=…gail:atk). Unset everywhere ⇒ standard Steelbore rendering, unchanged. Explicit 0 always wins.
  • §18.2 CLI & TUI — split into rules that apply always (status never color-only: [OK]/[ERROR]/[WARN]/[INFO]; stdout/stderr separation) and rules gated behind the toggle (no animation, no decorative art, linear output, tabular fallback, legible prompts). Plus §18.2.3 TUI linear mode: a non-redraw append-only stream mode, and an equivalent non-interactive CLI path where a TUI would otherwise be the only route.
  • §18.3 GUI — AccessKit required for Rust/custom-drawn UI (one API over UIA / NSAccessibility / AT-SPI); GtkAccessible, Flutter Semantics, QAccessible for toolkit-native paths. Explicit name + role on every interactive element.
  • §18.4 Verification & remediation — verification by real screen reader (Orca/NVDA/VoiceOver) and espeak-ng for CLI output, not by inspection.
  • §18.5 Games carve-out — see below.

§18.5 — games are exempt from §18 and §10 in full. §18 assumes a character grid or a widget tree with roles and names; games are real-time simulations rendering custom non-widget interfaces, and the techniques that suit them (remappable controls, colorblind-safe signalling, subtitles, difficulty options) are a different discipline. Accessibility in a game is optional, nothing is enforced, and its absence is never a compliance failure.

  • §18.5.1 — declaration + registry, mirroring the §5.3 general-use carve-out: a README declaration plus a registry table, today naming Ironway. "Is this a game?" gets a documented answer rather than an arguable one.
  • §18.5.2 — a recommended list a game may decline outright (remappable controls; leave Insert/CapsLock/KP_Insert/Ctrl+Option alone; colorblind-safe signalling; subtitles; reduced motion).
  • §18.5.3 — shared vocabulary: a toggle a game chooses to ship should use the §18.1 names. Constrains naming only; requires no feature to exist.

§11.1.1 (new) — accessibility theme variants. Additive siblings, never replacements:

Variant Behavior
steelbore Default, canonical §11 palette, unchanged
steelbore-high-contrast Every token ≥7:1 (AAA) on Void Navy
steelbore-mono 4-bit ANSI, defers to the user's terminal palette

High-contrast lifts only the two tokens that need itaccent #4B7EB0#7FAEDC (4.77:1 → 8.73:1) and error #FF5C5C#FF8080 (6.74:1 → 8.41:1). The other four are §11 values verbatim, and Void Navy remains the background in every variant.

§11 — contrast guarantee scoped honestly. The AA claim covers foreground-on-Void-Navy only (measured: Amber 7.64:1, Steel Blue 4.77:1, Radium Green 14.87:1, Red Oxide 6.74:1, Coolant 14.74:1 — all pass). But 9 of 10 inter-token pairs fall below 3:1 — Molten Amber on Red Oxide is 1.13:1, Radium Green on Liquid Coolant is 1.01:1. Text on a palette-colored fill now requires its own pair verification.

§10 — keybindings. Bindings must be user-remappable; NVDA/Orca/VoiceOver modifier chords must not be captured. Does not apply to registered games (§18.5), including the pre-existing CUA and Vim rows — modal editing and text-editor chords are a poor fit for real-time play.

§13 — target raised. WCAG 2.1 AA → WCAG 2.2 AA, plus EN 301 549 clause 11 (non-web software) as the anchor for CLI/TUI — the only normative text that addresses terminal software. EN 301 549 V4.1.1 (expected 2026) incorporates WCAG 2.2; the EAA has been enforceable since 2025-06-28.

§16 — new §18 gate; §10 and §13 gates extended; §10 and §18 gates marked N/A for registered games.

Note on scope

§18 applies to every non-game project immediately, so projects predating v1.33 are non-compliant until retrofitted. Rather than soften this to a recommendation, §18.4 requires each to carry a dated remediation entry in PROJECTS.md until it conforms. Registered games are excluded — they owe no remediation entry, because they owe no conformance. Those retrofits are follow-on work.

Verification

  • makeinfo --no-split The_Steelbore_Standard.texizero errors, zero warnings
  • @settitle / @set VERSION read 1.33; @set UPDATED reads 2026-07-24
  • Exactly one v1.33 changelog entry — the carve-out extends it rather than duplicating it
  • texi2any --html renders §18.5 and its registry table; Void Navy intact
  • reuse lint on a tracked-files-only checkout → compliant (7/7)
  • .github/validate-configs.py → 0 failed
  • Contrast ratios recomputed for every variant value

Follow-up PRs sync spacecraft-standard-constitution + spacecraft-theme-factory and add the spacecraft-accessibility skill.

🤖 Generated with Claude Code

Accessibility was three unenforceable lines in §13, a chapter scoped to
graphical applications, while the estate is overwhelmingly Rust CLI/TUI.
§18 makes it a first-class, auditable chapter covering CLI, TUI, and GUI.

Accessible mode is mandatory for developers to implement and optional for
users to activate. The Steelbore theme is untouched and remains the sole
default; two additive sibling variants join the §11.1 registry.

- §18 (new): activation precedence (--accessible / SPACECRAFT_A11Y /
  config / hints), CLI+TUI rules, TUI linear mode, GUI bridges
  (AccessKit for Rust; GtkAccessible / Semantics / QAccessible),
  verification, and remediation tracking for existing projects.
- §11.1.1 (new): steelbore-high-contrast (only accent and error shift,
  to #7FAEDC and #FF8080; all six tokens >=7:1 on Void Navy) and
  steelbore-mono (4-bit ANSI). Void Navy remains the background in every
  variant.
- §11: the AA guarantee covers foreground-on-Void-Navy only. 9 of 10
  inter-token pairs fall below 3:1 (Amber on Red Oxide is 1.13:1), so
  text on a palette-colored fill now requires its own verification.
- §10: bindings must be user-remappable; NVDA/Orca/VoiceOver modifier
  chords must not be captured.
- §13: WCAG 2.1 AA -> WCAG 2.2 AA; EN 301 549 clause 11 (non-web
  software) adopted as the anchor for CLI/TUI.
- §16: new §18 gate; §10 and §13 gates extended.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

§18 as written applied to every application with no exceptions. That is
wrong for games: §18 assumes a character grid or a widget tree with roles
and names, and games are real-time simulations rendering custom non-widget
interfaces. The techniques that suit them — remappable controls,
colorblind-safe signalling, subtitles, difficulty options — are a different
discipline from the one §18 codifies.

Games are now exempt from §18 in full and §10 in full. Accessibility in a
game is optional, nothing is enforced, and its absence is never a
compliance failure.

- §18.5 (new): the exemption, plus §18.5.1 declaration + registry
  (mirroring the §5.3 general-use carve-out — README declaration and a
  registry table, today naming Ironway), §18.5.2 a recommended list a game
  may decline, and §18.5.3 shared vocabulary for toggles a game chooses to
  ship.
- §10: scope note excluding registered games, including the CUA and Vim
  rows — modal editing and text-editor chords are a poor fit for real-time
  play. The useful parts survive as §18.5.2 recommendations.
- §18: two-sided rule now reads "other than a registered game (§18.5)".
- §18.4: registered games owe no remediation entry, because they owe no
  conformance.
- §16: §10 and §18 gates marked N/A for registered games.

Folded into v1.33 rather than shipping a v1.34: the v1.33 PRs are still
open and unpublished, so no released version ever stated the un-carved
rule. Version stays 1.33; @set UPDATED moves to 2026-07-24, and the
existing changelog entry is extended rather than duplicated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
UnbreakableMJ added a commit to Spacecraft-Software/Construct that referenced this pull request Jul 23, 2026
Back-sync of Spacecraft-Software/Standard#11's second commit, keeping the
skill encoding and the published Standard at the same version and date.

- §18.5 (new): games are exempt from §18 in full and §10 in full;
  accessibility in a game is optional and nothing is enforced. §18.5.1
  declaration + registry (the §5.3 pattern, naming Ironway), §18.5.2 a
  recommended list a game may decline, §18.5.3 shared vocabulary for
  toggles a game chooses to ship.
- §10: scope note excluding registered games, including CUA and Vim.
- §18: two-sided rule now reads "other than a registered game (§18.5)".
- §18.4: registered games owe no remediation entry.
- §16: §10 and §18 gates marked N/A for registered games.
- Masthead date 2026-07-23 -> 2026-07-24; version stays 1.33.
- references/CHANGELOG.md: existing v1.33 entry extended, not duplicated.

Bundles rebuilt in the same commit per CLAUDE.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@UnbreakableMJ
UnbreakableMJ merged commit 7cb0eff into main Jul 23, 2026
1 check passed
@UnbreakableMJ
UnbreakableMJ deleted the feat/accessibility-section-18 branch July 23, 2026 23:22
UnbreakableMJ added a commit to Spacecraft-Software/Construct that referenced this pull request Jul 23, 2026
…ssibility) (#10)

* skills: sync constitution + theme-factory to Standard v1.33 (§18 accessibility)

Back-sync of Spacecraft-Software/Standard#11, keeping the skill encoding and
the published Standard at the same version and date.

spacecraft-standard-constitution:
- masthead 1.32 -> 1.33 (2026-07-23) and frontmatter description
- §18 (new): accessible mode mandatory to implement, off by default;
  activation precedence, CLI+TUI rules, TUI linear mode, GUI bridges,
  verification, remediation tracking
- §11.1.1 (new): steelbore-high-contrast and steelbore-mono as additive
  siblings; steelbore stays the sole default
- §11: AA guarantee scoped to foreground-on-Void-Navy; token-on-token
  pairings mostly below 3:1, so text on colored fills needs its own check
- §10: remappability + reserved NVDA/Orca/VoiceOver chords
- §13: WCAG 2.1 AA -> 2.2 AA; EN 301 549 clause 11 anchor
- §16: new §18 gate; §10 and §13 gates extended
- references/CHANGELOG.md: v1.33 entry

spacecraft-theme-factory:
- corrected the overstated "every color pair against Void Navy passes AA"
  claim, which read as covering token-on-token pairings it never measured
- emit accessibility variants alongside the default where the platform
  supports multiple themes; fixed duplicate workflow step numbering

Both bundles rebuilt in the same commit per CLAUDE.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* skills: sync §18.5 games carve-out to constitution (v1.33, 2026-07-24)

Back-sync of Spacecraft-Software/Standard#11's second commit, keeping the
skill encoding and the published Standard at the same version and date.

- §18.5 (new): games are exempt from §18 in full and §10 in full;
  accessibility in a game is optional and nothing is enforced. §18.5.1
  declaration + registry (the §5.3 pattern, naming Ironway), §18.5.2 a
  recommended list a game may decline, §18.5.3 shared vocabulary for
  toggles a game chooses to ship.
- §10: scope note excluding registered games, including CUA and Vim.
- §18: two-sided rule now reads "other than a registered game (§18.5)".
- §18.4: registered games owe no remediation entry.
- §16: §10 and §18 gates marked N/A for registered games.
- Masthead date 2026-07-23 -> 2026-07-24; version stays 1.33.
- references/CHANGELOG.md: existing v1.33 entry extended, not duplicated.

Bundles rebuilt in the same commit per CLAUDE.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant