Skip to content

fix(a11y): keep static empty-directory text out of live-region semantics - #590

Draft
seonghobae wants to merge 8 commits into
masterfrom
palette-remove-role-status-14178561638677862514
Draft

fix(a11y): keep static empty-directory text out of live-region semantics#590
seonghobae wants to merge 8 commits into
masterfrom
palette-remove-role-status-14178561638677862514

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

Accessibility boundary

The generated empty-directory message is present in the initial static HTML and is never updated by client-side application logic. WAI-ARIA defines status as a live-region role for advisory status information and gives it implicit aria-live="polite" and aria-atomic="true". This page has no dynamic status update for that element, so the narrower semantic contract is to render the ordinary visible list item without live-region semantics.

This does not claim that every screen reader will duplicate or interrupt initial static role="status" content. That cross-AT behavior was not demonstrated and the earlier generated wording was too broad.

Primary references:

Current exact delta

  • protected base: master@55b39b4ebad435670f26ec8065dfc980950e090e
  • exact head: e5ba27ec8f29ec7be857bb93b80c0a3452e0a458
  • effective protected-base diff is only three product/test files: remove role="status" from the static empty-state element and align the two structural regressions;
  • the branch had also reverted protected CI queue/concurrency policy; 786dbfb855f0645cdb0aa45dfdef98844ced4141 restores the exact protected ci.yml blob;
  • the branch-local Palette journal generalized unverified screen-reader behavior, so e5ba27ec8f29ec7be857bb93b80c0a3452e0a458 restores the protected journal blob rather than turning that claim into repository guidance;
  • fresh compare is ahead-only, behind_by=0, merge base exactly protected master.

Delivery gate

  • Intentionality: PASS — the role removal follows the element's static, non-updating behavior.
  • Functional completeness: PASS at markup-contract level — visible empty-state text, icon, list structure and existing navigation remain unchanged.
  • Content fit: PASS — no new decorative UI or copy.
  • Resilience: PARTIAL — structural regression coverage exists, but current-head browser/accessibility-tree execution is still required.
  • Evidence: PENDING — no cross-screen-reader behavioral claim is made and exact-head hosted checks must be reacquired after the repair commits.
  • Product identity: unchanged.

Keep Draft until the unchanged exact head has terminal applicable CI/security evidence, fresh current-head review/thread state, and the live qualifying approval. No self-approval, force rewrite, gate weakening, or predecessor evidence transfer.

🎯 Why: 초기 로드 시 렌더링되는 요소에 ARIA live region(`role="status"`)을 적용하면 스크린 리더가 해당 내용을 불필요하게 중복해서 읽거나 페이지 전체 읽기 흐름을 방해하는 안티패턴이 발생하기 때문입니다.
📸 Before/After: 해당 없음 (시각적인 변경 없음)
♿ Accessibility: 정적 상태 메시지에 대한 스크린 리더의 불필요한 중복 안내를 제거하여 더 매끄러운 읽기 경험을 제공합니다.
@google-labs-jules

Copy link
Copy Markdown

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@coderabbitai

coderabbitai Bot commented Sep 1, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: 5453619a-a492-4c6b-96b2-7090ccf4fa8b

📥 Commits

Reviewing files that changed from the base of the PR and between de82f99 and f1f8239.

📒 Files selected for processing (4)
  • .jules/palette.md
  • src/main/kotlin/html4tree/main.kt
  • src/test/kotlin/html4tree/GeneratedIndexReadabilityTest.kt
  • src/test/kotlin/html4tree/MainTest.kt
💤 Files with no reviewable changes (1)
  • src/test/kotlin/html4tree/MainTest.kt

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

빈 디렉토리 안내 요소에서 role="status"를 제거했습니다. 접근성 지침은 실시간 갱신 콘텐츠에만 해당 역할을 사용하도록 명시합니다. 관련 테스트의 HTML 기대값과 검증 조건을 갱신했습니다.

Changes

빈 디렉토리 접근성 조정

Layer / File(s) Summary
정적 상태 역할 제거 및 검증 갱신
.jules/palette.md, src/main/kotlin/html4tree/main.kt, src/test/kotlin/html4tree/GeneratedIndexReadabilityTest.kt, src/test/kotlin/html4tree/MainTest.kt
접근성 지침에 정적 메시지와 동적 알림의 role="status" 사용 조건을 추가했습니다. 빈 디렉토리 HTML에서 해당 역할을 제거했습니다. 관련 테스트의 기대 마크업과 검증 조건을 갱신했습니다.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Merge Risk: ⚪ Minimal · up to f1f82

This localized accessibility change removes an unnecessary live-region role from static empty-directory content, with no identified production, security, or deployment impact; no actionable merge-blocking risk remains after normal checks and review.

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 2 files. (1 skipped: 1 … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 정적 빈 디렉토리 텍스트에서 live-region 의미를 제거하는 주요 변경을 정확하게 설명합니다. 간결하고 구체적입니다.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 2 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch palette-remove-role-status-14178561638677862514

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@devin-ai-integration devin-ai-integration Bot 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.

Devin Review found 0 potential issues.

Devin Review

🎯 Why: 초기 로드 시 렌더링되는 요소에 ARIA live region(`role="status"`)을 적용하면 스크린 리더가 해당 내용을 불필요하게 중복해서 읽거나 페이지 전체 읽기 흐름을 방해하는 안티패턴이 발생하기 때문입니다.
📸 Before/After: 해당 없음 (시각적인 변경 없음)
♿ Accessibility: 정적 상태 메시지에 대한 스크린 리더의 불필요한 중복 안내를 제거하여 더 매끄러운 읽기 경험을 제공합니다.
🎯 Why: 초기 로드 시 렌더링되는 요소에 ARIA live region(`role="status"`)을 적용하면 스크린 리더가 해당 내용을 불필요하게 중복해서 읽거나 페이지 전체 읽기 흐름을 방해하는 안티패턴이 발생하기 때문입니다.
📸 Before/After: 해당 없음 (시각적인 변경 없음)
♿ Accessibility: 정적 상태 메시지에 대한 스크린 리더의 불필요한 중복 안내를 제거하여 더 매끄러운 읽기 경험을 제공합니다.
@seonghobae seonghobae added area: ui-ux bug Something isn't working priority: medium Normal-priority or P2 work status: needs-review Open pull request requiring current-head review or checks type: bug Defect or incorrect behavior labels Sep 2, 2026 — with ChatGPT Codex Connector
opencode-agent Bot and others added 5 commits September 2, 2026 16:34
🎯 Why: 초기 로드 시 렌더링되는 요소에 ARIA live region(`role="status"`)을 적용하면 스크린 리더가 해당 내용을 불필요하게 중복해서 읽거나 페이지 전체 읽기 흐름을 방해하는 안티패턴이 발생하기 때문입니다.
📸 Before/After: 해당 없음 (시각적인 변경 없음)
♿ Accessibility: 정적 상태 메시지에 대한 스크린 리더의 불필요한 중복 안내를 제거하여 더 매끄러운 읽기 경험을 제공합니다.
@seonghobae
seonghobae marked this pull request as draft September 3, 2026 18:45
@seonghobae seonghobae changed the title 🎨 Palette: 정적 빈 디렉토리 상태에서 role="status" 안티패턴 제거 fix(a11y): keep static empty-directory text out of live-region semantics Sep 3, 2026
seonghobae added a commit that referenced this pull request Sep 3, 2026
Limits `dir="auto"` strictly to dynamically generated `directoryName` and
`fileName` strings. Restores fixed directionality for UI elements (`..` parent link
and empty-state messages). Reverts the empty-state markup to exclude `role="status"`
as per Draft #590 guidelines, and introduces robust regression tests with mixed
RTL/LTR inputs.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ui-ux bug Something isn't working priority: medium Normal-priority or P2 work status: needs-review Open pull request requiring current-head review or checks type: bug Defect or incorrect behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant