shed-accessibility-and-copy

Enforces Flutter accessibility semantics, text scaling, and ARB localization rules for en_GB app copy.

Updated Jul 27, 2026
One-click install
npx skills add https://github.com/zakariaf/Shed-Book --skill shed-accessibility-and-copy-zakariaf
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: shed-accessibility-and-copy
Source: https://github.com/zakariaf/Shed-Book/tree/main/.claude/skills/shed-accessibility-and-copy
Command: npx skills add https://github.com/zakariaf/Shed-Book --skill shed-accessibility-and-copy-zakariaf

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Flutter widgets built from custom-painted or composite surfaces contribute no accessibility semantics by default, and ad-hoc strings, clamped text scaling, or hard-coded domain nouns silently break screen readers, Voice Control, and localization. This Skill encodes the binding rules for what a widget says — semantics labels, headings, live regions, text scaling, and ARB message management — so every label, string, heading, date, and number format is correct for assistive technology and British English users. ## Core Features & Use Cases - Semantics enforcement: Rules for ShedTapTarget labels, headingLevel (never header:), live regions via Semantics(liveRegion: true), and bans on MergeSemantics, sortKey, SemanticsService.announce, and Material date/time pickers. - Text scaling and typography gates: Prohibits FittedBox, clamped text scalers, and font weights above w700, requiring rows to grow taller at 200% scale instead of shrinking glyphs. - ARB localization discipline: Every user-facing string is an ARB message with a description, domain nouns arrive as placeholders from terminologyProvider, dates are never all-numeric, and times are 24-hour HH:mm with provenance labels. - Use Case: When adding a new labelled button or changing a confirmation string in the Flutter app, apply this Skill to produce a semantics label containing the visible words, an ARB entry with a safety-rationale description, and en_GB date/number formatting that passes the 14-variant accessibility gate. ## Quick Start Apply the shed-accessibility-and-copy rules to review the semantics labels and ARB strings in the new pen board row widget I just added.

Frequently Asked Questions about shed-accessibility-and-copy

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I add accessibility semantics to custom Flutter widgets?▼

Wrap custom-painted or composite widgets in Semantics with an explicit label and use ExcludeSemantics on the painted child, since Container, GestureDetector, and CustomPaint contribute no semantics node. Give every tap target a semanticLabel containing its visible words plus Semantics(onTap:) so Switch Control can activate it.

How do I localize Flutter strings with ARB files and placeholders?▼

Define every user-facing string as an ARB message in app_en.arb with a description, using lowerCamel ids and placeholders for runtime values. Domain nouns must arrive as placeholders resolved through a terminology provider, never as literal words, because ICU cannot pluralize a runtime string.

Why is Semantics header: true not working in Flutter?▼

Semantics(header: true) is a no-op on both iOS and Android as of Flutter 3.44 — it compiles but does nothing. Use headingLevel: 1 for titles and headingLevel: 2 for sections instead, and only for sections the screen actually renders.

Does Flutter textScaleFactor still work for text scaling?▼

No, use TextScaler instead of the deprecated textScaleFactor, and never clamp it with withClampedTextScaling or TextScaler.clamp. Clamping overrides the user's system text size setting; rows should grow taller at 200% scale rather than shrink glyphs with FittedBox.

Why is MergeSemantics discouraged for Flutter accessibility?▼

MergeSemantics joins child labels with newlines and takes only the first gesture handler, breaking sentence order and activation. Use Semantics(label:) combined with ExcludeSemantics(child:) so one node carries the full spoken sentence.

When should I not use this accessibility and copy skill?▼

Do not use it for contrast, palettes, or type tokens, which belong to the design system skill, nor for writing semantics or overflow gate tests, which belong to the testing skill. It governs what a widget says, not how it looks or how compliance is proved.