Skip to content

fix(a11y): expose busy scan rows as temporarily unavailable - #1110

Draft
seonghobae wants to merge 7 commits into
developfrom
palette-transient-loading-a11y-13530086750957614601
Draft

fix(a11y): expose busy scan rows as temporarily unavailable#1110
seonghobae wants to merge 7 commits into
developfrom
palette-transient-loading-a11y-13530086750957614601

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

목적

스캔 상세 정보를 불러오는 동안 같은 row에서 pointer/Enter/Space가 중복 요청을 만들지 않게 하면서, focusable tr[role="button"]의 현재 action 상태도 보조기술에 전달합니다. 이 선택은 AppGuardrail Console의 async-detail interaction에 한정합니다.

current exact head

  • protected base: develop@e71d37e7c58118e6764c96ab7c4492fe33eed6f8
  • exact head: a083ede309c4c947d09c0713c774981f61f1d55c
  • Draft
  • intervening descendant가 다시 추가한 repository-wide .jules/palette.md transient-loading 교리는 81544931...에서 protected-base canonical blob으로 복원했습니다.
  • 그 intervening lineage가 삭제했던 test_console_busy_scan_row_exposes_temporary_action_unavailability regression은 a083ede3... normal descendant에서 복원했습니다. 누락 test/fixture/contract를 source GREEN만 남긴 채 허용하지 않습니다.

RED → 최소 causal GREEN

복원된 regression은 busy 진입 시 aria-busy=truearia-disabled=true를 함께 설정하고, pointer 및 Enter/Space activation path가 exposed disabled state에서 no-op이며, request 종료/close에서 상태가 제거되는 계약을 고정합니다.

현재 source는 다음 최소 범위를 구현합니다.

  • detail()이 focusable scan row에 aria-busy="true"aria-disabled="true"를 함께 설정합니다.
  • pointer 및 Enter/Space activation guard가 disabled/busy state를 확인합니다.
  • finallycloseDetail()이 두 상태와 request-generation marker를 정리합니다.
  • 기존 out-of-order suppression, loading/error announcement, focus restoration, reduced-motion 동작은 보존합니다.

Codex의 원래 P1 finding은 source에서 수리되어 thread가 resolved/outdated 상태입니다. 이는 exact-head hosted/browser evidence를 대신하지 않습니다.

WAI-ARIA APG는 native disabled control과 aria-disabled로 discoverability를 유지하는 경우를 구분합니다. 이 row는 이미 focusable custom button이고 같은 action이 request 종료 후 다시 가능해지는 transient state이므로 product-local contract로 aria-disabled를 사용합니다.

Primary reference: https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_disabled_controls

exact-head verification boundary

a083ede3...는 방금 생성된 새 exact head이므로 모든 predecessor check 결과는 merge evidence가 아닙니다. 새 head의 focused test와 required/security gates가 terminal current-head GREEN이어야 하며, delayed-response browser에서 pointer/Enter/Space 중복 요청이 1을 넘지 않는지와 accessibility tree에서 unavailable→available 상태 전환이 확인되어야 합니다.

Delivery Gate

  • 의도성: PASS
  • 기능 완전성: PARTIAL — source+regression contract 정렬, hosted/browser interaction 미완료
  • 콘텐츠 적합성: PASS
  • 복원력: PARTIAL — cleanup/duplicate guard는 source에서 정렬됐으나 delayed-response browser evidence 대기
  • 증거성: PARTIAL — deterministic regression과 current source는 일치하지만 exact-head hosted/browser/AT GREEN 없음
  • 고유성: N/A

Self-approval, administrator bypass, no-op retrigger, force push, destructive rebase, gate weakening, predecessor evidence transfer를 사용하지 않습니다.

- `scanner/dashboard/console.html`의 일시적 로딩 상태(비동기 요청 중)에서 여러 번 클릭하거나 키보드 입력을 통해 의도치 않은 다중 제출이 일어나는 문제를 해결했습니다.
- CSS의 `pointer-events: none`에만 의존하는 경우 마우스 클릭은 막을 수 있으나 키보드 이벤트(Enter/Space)는 막을 수 없는 접근성 문제를 인지하여, `aria-busy="true"` 상태일 때 JS 이벤트 핸들러(click, keydown)에서 명시적으로 이벤트를 무시하도록(early return) 개선했습니다.
- 의미론적 상태(`aria-busy`)와 시각적 상태(투명도 0.7, 마우스 이벤트 차단)를 일치시켜 UX/접근성 동등성을 확보했습니다.
@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.

@github-project-automation github-project-automation Bot moved this to Backlog in Security Sep 4, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 4, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-04T14:56:39.596484Z df8bf35 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Sep 4, 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: 1759d51e-8c33-4b52-be42-dd0ee9798c01

📥 Commits

Reviewing files that changed from the base of the PR and between e71d37e and 31024c3.

📒 Files selected for processing (2)
  • .jules/palette.md
  • scanner/dashboard/console.html

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


📝 Walkthrough

Walkthrough

스캔 상세 요청 중인 행에 반투명 및 포인터 비활성화 스타일을 적용했습니다. aria-busy="true" 상태에서는 클릭과 Enter/Space 키 입력을 무시합니다. 관련 접근성 지침을 팔레트에 추가했습니다.

Changes

스캔 행 로딩 상태

Layer / File(s) Summary
로딩 중 스캔 행 입력 차단
.jules/palette.md, scanner/dashboard/console.html
aria-busy="true"인 스캔 행에 비활성화 스타일을 적용합니다. 클릭과 Enter/Space 키 입력에서 해당 행을 무시해 중복 상세 요청을 차단합니다. 접근성 지침은 팔레트에 기록합니다.

Estimated code review effort: 2 (Simple) | ~5 minutes

Merge Risk: ⚪ Minimal · up to 31024

Busy scan rows now visibly disable interaction and ignore repeat click, Enter, and Space activation while details load, preventing duplicate detail requests. No current merge-readiness risk remains.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
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 제목은 로딩 중인 스캔 행을 일시적으로 사용할 수 없는 상태로 노출하는 주요 변경을 정확하고 간결하게 설명합니다.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch palette-transient-loading-a11y-13530086750957614601

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.

@seonghobae
seonghobae marked this pull request as draft September 4, 2026 14:54
@seonghobae seonghobae changed the title 🎨 Palette: 일시적 로딩 상태 접근성 개선 (aria-busy 이벤트 가드 적용) fix(a11y): expose busy scan rows as temporarily unavailable Sep 4, 2026

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: df8bf35cea

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread tests/test_console_detail_loading_contract.py
seonghobae and others added 4 commits September 5, 2026 00:04
- `tests/test_console_detail_loading_contract.py` 테스트 요구사항에 맞춰, 비동기 로딩 중인 `tr.scan` 행에 `aria-busy="true"`뿐만 아니라 `aria-disabled="true"`도 함께 설정하고 해제하도록 개선했습니다.
- CSS 스타일과 JS 이벤트 가드에서 `aria-disabled` 속성을 포함하여 마우스/키보드 접근성 대응을 한 층 더 견고하게 구현했습니다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Backlog

Development

Successfully merging this pull request may close these issues.

1 participant