Skip to content

feat(ui5): Add accessibility best practices skill#85

Open
nikolay-kolarov wants to merge 5 commits into
UI5:mainfrom
nikolay-kolarov:ui5-accessibility-skill
Open

feat(ui5): Add accessibility best practices skill#85
nikolay-kolarov wants to merge 5 commits into
UI5:mainfrom
nikolay-kolarov:ui5-accessibility-skill

Conversation

@nikolay-kolarov

Copy link
Copy Markdown

Adds a new skill for UI5 accessibility best practices covering keyboard navigation, labelling, landmarks, heading levels, reading order, target size, shortcuts, and invisible messages. Includes reference documentation and test fixtures for each topic.

@cla-assistant

cla-assistant Bot commented Jun 26, 2026

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

- SKILL.md: drop non-standard `allowed-tools` line; rewrite topic-file
  paths to plain `references/X.md` to match sibling skills; expand
  description with WCAG / screen-reader / focus-handling keywords;
  rename topic 4 to "Focus & keyboard" so it matches keyboard.md.
- tests/fixtures: add gap-keyboard.view.xml covering all three topic-4
  violations (missing initialFocus, missing sap-ui-fastnavgroup,
  tabindex > 0) — this was the one topic without a gap fixture.
- tests/README.md: register the new fixture and clarify that fixtures
  are run manually (no auto harness).
@GerganaKremenska GerganaKremenska force-pushed the ui5-accessibility-skill branch from 94c1833 to e18447e Compare June 29, 2026 14:29

@d3xter666 d3xter666 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

An UA review and Acc expert review is still nice to have!

From my perspective structure & content wise the skill is good to go!

I got something that might improve the accuracy and might worth give it a try:

Defines a versioned eval suite for the ui5-best-practices-accessibility
skill. Each of the 14 fixtures gets a test case with binary assertions
(report_finding, report_empty, finding_count_max, must_not_mention)
that a runner can check against the skill's Step-3 report.

Follows the eval.json pattern described at
https://www.mindstudio.ai/blog/self-improving-marketing-skill-claude-code-eval-json
@GerganaKremenska

Copy link
Copy Markdown

LGTM

An UA review and Acc expert review is still nice to have!

From my perspective structure & content wise the skill is good to go!

I got something that might improve the accuracy and might worth give it a try:

added eval.json

@d3xter666

d3xter666 commented Jun 30, 2026

Copy link
Copy Markdown
Member

LGTM
An UA review and Acc expert review is still nice to have!
From my perspective structure & content wise the skill is good to go!
I got something that might improve the accuracy and might worth give it a try:

added eval.json

All 33 assertions across 14 test cases pass at first attempt. The eval.json harness is well-designed — must_not_mention assertions on the ok-fixtures directly guard the three highest false-positive risk scenarios (SimpleForm, Dialog customHeader, ObjectNumber).

Well done! 👍

@LilyanaOviPe LilyanaOviPe left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a few minor comments. Otherwise looks good.

# Skill Test Fixtures

These fixtures are **not** auto-run — there is no test harness, CI job, or assertion
framework. They are reference cases for manually validating the skill's behaviour:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
framework. They are reference cases for manually validating the skill's behaviour:
framework. They are reference cases for manually validating the skill's behavior.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Applied in 92be973 — "behaviour" → "behavior".

Comment on lines +5 to +6
invoke `/ui5-best-practices-accessibility` against each file and verify the output
matches the expectations below.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
invoke `/ui5-best-practices-accessibility` against each file and verify the output
matches the expectations below.
Invoke `/ui5-best-practices-accessibility` against each file and verify the output
matches the expectations below.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Applied in 92be973 — capitalized as the start of a new sentence.

## When not to use

- Do not provide information exclusively for AT users — screen reader users should not receive content that sighted users cannot access
- Do not use it to hide long texts — if the information matters, show it visibly

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Do not use it to hide long texts — if the information matters, show it visibly
- Do not use it to hide long texts — if the information matters, show it

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Applied in 92be973 — dropped "visibly".

- Use US spelling: behaviour → behavior in tests/README.md
- Capitalize "Invoke" as start of a new sentence
- Trim redundant "visibly" tail in invisible-message.md

**Wrong:**
```xml
<Title text="Order Details"/>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would recommend to use bindings e.g. {i18n>titleText} instead of hard coded texts displayed on the UI.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Applied in 6f27c79 — converted all hard-coded UI-facing strings across the 8 accessibility reference files to {i18n>...} bindings (XML) and oResourceBundle.getText(...) reads (JS). Each reference file now also notes the i18n convention up front.

Comment thread plugins/ui5/README.md Outdated
- **Personalization** - `sap.m.p13n.Engine` integration
- **Cell templates & alignment** - Type-based alignment and model type namespace rules

#### ui5-best-practices-accessibility

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please move this section above the integration cards section to ensure alphabetical sorting

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Applied in 6f27c79 — moved the ui5-best-practices-accessibility section above integration-cards to keep the specific-topic sections alphabetical.

- Move ui5-best-practices-accessibility section above integration-cards in
  plugins/ui5/README.md to keep the specific-topic sections alphabetical
- Convert all hard-coded UI-facing strings in the 8 accessibility reference
  files to `{i18n>...}` bindings, matching UI5 i18n best practices. XML
  snippets bind text/title/tooltip/alt/label properties via the resource
  model; JS snippets read from oResourceBundle.getText(). Each reference
  now includes a one-line note that all snippets bind via i18n.
@nikolay-kolarov

Copy link
Copy Markdown
Author

LGTM

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.

5 participants