Repository navigation
Conversation
Keep output regions keyboard reachable, remove nested/duplicate semantics, preserve modal focus and make mobile search and shortcut help unobstructed. Ultraworked with [omo](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: sisyphus-dev-ai <sisyphus-dev-ai@users.noreply.github.com>
There was a problem hiding this comment.
1 issue found across 17 files
Confidence score: 4/5
- In
src/ui/blog.js,labelCodeSampleRegionsmatches no article code blocks because their accessible labels are descriptive rather thanCode sample, so the intended labeling is not applied; update the matching logic to recognize the labels actually used.
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="src/ui/blog.js">
<violation number="1" location="src/ui/blog.js:356">
P2: labelCodeSampleRegions never matches: no article content (English or any locale) contains `aria-label="Code sample"` — the code blocks use descriptive labels like `aria-label="Invalid and valid JSON examples"` and `aria-label="curl JSON request example"`. The replacement is therefore a no-op and the intended numbered region labels are never applied to screen-reader users. Update the content labels or the regex so it targets the actual `aria-label` values in BLOG_ARTICLES and the localized content.</violation>
</file>
Shadow auto-approve: would not auto-approve because issues were found.
Re-trigger cubic
| function labelCodeSampleRegions(content) { | ||
| let sampleNumber = 0; | ||
| return String(content || "").replace( | ||
| /aria-label="Code sample"/g, |
There was a problem hiding this comment.
P2: labelCodeSampleRegions never matches: no article content (English or any locale) contains aria-label="Code sample" — the code blocks use descriptive labels like aria-label="Invalid and valid JSON examples" and aria-label="curl JSON request example". The replacement is therefore a no-op and the intended numbered region labels are never applied to screen-reader users. Update the content labels or the regex so it targets the actual aria-label values in BLOG_ARTICLES and the localized content.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/ui/blog.js, line 356:
<comment>labelCodeSampleRegions never matches: no article content (English or any locale) contains `aria-label="Code sample"` — the code blocks use descriptive labels like `aria-label="Invalid and valid JSON examples"` and `aria-label="curl JSON request example"`. The replacement is therefore a no-op and the intended numbered region labels are never applied to screen-reader users. Update the content labels or the regex so it targets the actual `aria-label` values in BLOG_ARTICLES and the localized content.</comment>
<file context>
@@ -350,6 +350,14 @@ export function renderBlogListingPage(lang = DEFAULT_LANGUAGE) {
+function labelCodeSampleRegions(content) {
+ let sampleNumber = 0;
+ return String(content || "").replace(
+ /aria-label="Code sample"/g,
+ () => `aria-label="Code sample ${++sampleNumber}"`,
+ );
</file context>
- Keep global shortcuts (mod+K nav search) from pulling focus out of the open shortcut help dialog; Escape closes it from any focus position. - Drop the no-op blog code-sample relabeling; descriptive labels stay. - Scope the WebKit select height to .input/.input-mono via :where() so compact and custom selects keep their own size (cidr prefix, roulette). - Localize the gradient CSS output accessible name via data-i18n-aria. - Let DNS record-card categories wrap on narrow mobile cards.
There was a problem hiding this comment.
0 issues found across 19 files (changes from recent commits).
Confidence score: 5/5
- Automated review surfaced no issues in the provided summaries.
- No files require special attention.
Shadow auto-approve: would not auto-approve. Auto-approval blocked by 1 unresolved issue from previous reviews.
Re-trigger cubic
Only suppress the page's own mod shortcuts while the help dialog is open, so other mod combinations keep native behavior; ignore IME-composing keydowns; and clean up the guard even if the dialog node was removed externally.
There was a problem hiding this comment.
All reported issues were addressed across 2 files (changes from recent commits).
Shadow auto-approve: would not auto-approve because issues were found.
Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic
There was a problem hiding this comment.
0 issues found across 2 files (changes from recent commits).
Confidence score: 5/5
- Automated review surfaced no issues in the provided summaries.
- No files require special attention.
Shadow auto-approve: would not auto-approve. Auto-approval blocked by 1 unresolved issue from previous reviews.
Re-trigger cubic
Summary
fix(a11y): improve keyboard and mobile task access. This is logical change 10/11 in the dependency-ordered product-audit release stack.
Refs #969
What changed
1876c4409d9b47214aa7134faf2376990e865121; validated tree:127174c40d5e3c832097d701a032d295a9275061.Why
Make output scrolling, wheel semantics, landmarks, mobile search, and shortcut help accessible.
Verification
bun run buildpassed on this exact candidate tree.npm test -- --maxWorkers=2passed on this exact candidate tree.Six focused browser cases passed. WebKit controls meet target sizes; nine fresh desktop/mobile/CJK screenshots passed two independent visual reviews.
Final combined tree additionally passed 801 unit tests and all 293 Playwright tests with retries disabled, plus all 48 primary tool workflows at desktop and mobile. The exploratory Color Converter exact-HEX boundary remains a documented pre-existing defect; its runtime is unchanged by this stack.
Risk & rollback
Summary by cubic
Fixes keyboard and mobile task access so output regions are reachable, shortcut help is a real dialog, and the mobile home page keeps the first matching card visible.
Changes
Rollout
Written for commit cd72e5b. Summary will update on new commits.