Skip to content

fix(a11y): restore business-group color radiogroup contract - #901

Draft
cursor[bot] wants to merge 14 commits into
mainfrom
cursor/bc-3f98c685-e53c-4d37-9df1-c482c531d2f0-ecd3
Draft

cursor[bot] wants to merge 14 commits into
mainfrom
cursor/bc-3f98c685-e53c-4d37-9df1-c482c531d2f0-ecd3

Conversation

@cursor

@cursor cursor Bot commented Aug 16, 2026 •

Copy link
Copy Markdown

Buyer-visible gap

PR #893 head 664757af deleted the focused radiogroup regression, the doctoring record, and the component-local selected-state CSS, then replaced them with a looser monolithic test. Keyboard users still need one Tab stop, wrapping arrow-key selection, and a visible checked ring.

Current change

  • restore the composite radiogroup / radio / aria-checked contract with roving tabIndex;
  • keep selected-state styling colocated in GroupModal.css using the --color-text-strong token;
  • prove Tab-from-name entry, one-stop exit, Space activation, exact aria-checked="true", and .groupManager__swatch[aria-checked="true"];
  • restore APA 7 doctoring, including WAI-ARIA 1.3 (W3C Working Draft, 2026-06-04);
  • leave deletion-confirm copy, palette values, persistence, and APIs unchanged.

Verification

npm run test -- src/components/modals/GroupModal.radiogroup.test.tsx src/components/modals/GroupModal.test.tsx src/components/modals/ModalCoverage.test.tsx src/components/modals/DialogAccessibility.test.tsx — 24 passed.

Relationship to #893

This branch starts from #893 head and restores the 7cd2a919 / 44087a18 evidence that 664757af removed, then adds the remaining review contracts. Prefer this PR for merge once exact-head checks are green.

Open in Web View Automation 

Open in Devin Review

seonghobae added a commit that referenced this pull request Aug 16, 2026
@seonghobae
seonghobae marked this pull request as ready for review August 18, 2026 15:12

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head e65b28e94959060eaf77af39c7da2d5a3c2cbeba.

  • Head SHA: e65b28e94959060eaf77af39c7da2d5a3c2cbeba

  • Workflow run: 32160963627

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

  • Result: FAIL
  • Test evidence: not proven passing
  • Docstring evidence: not proven passing when configured
  • Failure count: 1

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file: CHANGELOG.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file: CHANGELOG.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs: group-color-radiogroup-keyboard.md"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs: group-color-radiogroup-keyboard.md"]
  R2 --> V2["docs review"]
  Evidence --> S3["Frontend (6 files)"]
  S3 --> I3["browser runtime and bundle"]
  I3 --> R3["Review risk: Frontend (6 files)"]
  R3 --> V3["frontend tests"]
Loading

@seonghobae

Copy link
Copy Markdown
Collaborator

@OpenCode review

@seonghobae

Copy link
Copy Markdown
Collaborator

@opencode-agent review

@opencode-agent

Copy link
Copy Markdown
Contributor

Queued @opencode-agent for PR #901 at head e2985af547eda74182a106d760a44a1a5c67c818. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #901 at head e2985af547eda74182a106d760a44a1a5c67c818. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

1 similar comment
@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #901 at head e2985af547eda74182a106d760a44a1a5c67c818. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@seonghobae
seonghobae enabled auto-merge August 20, 2026 05:44
@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #901 at head e2985af547eda74182a106d760a44a1a5c67c818. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@opencode-agent

Copy link
Copy Markdown
Contributor

Queued @opencode-agent for PR #901 at head eeef7b7170a21e8f191482b6913f75356341c0ec. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #901 at head eeef7b7170a21e8f191482b6913f75356341c0ec. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

seonghobae and others added 14 commits August 20, 2026 12:30
💡 What: Changed the custom color swatches in GroupModal to use `role="radio"` and `aria-checked` instead of `aria-pressed`. Updated the corresponding test queries.
🎯 Why: Elements inside a `role="radiogroup"` must use `role="radio"` to be properly understood by screen readers as a group of mutually exclusive options. Using generic buttons with `aria-pressed` inside a radiogroup creates mismatched structural semantics.
♿ Accessibility: Improved screen reader navigation and state announcement for the business group color selection.
📸 Before/After: Visuals are unchanged; screen readers now announce "radio, checked" instead of "button, pressed".
💡 What: `GroupModal`의 색상 스와치 선택 인터페이스에 WAI-ARIA Radio Group Pattern을 완전하게 구현했습니다. Roving tabindex 로직, Arrow 키(상하좌우) 순환 포커스 및 `aria-checked`의 단일 활성 상태를 보장하도록 추가하고 CSS를 동기화했습니다. 관련된 상호작용 검증 테스트 케이스들을 추가했습니다.
🎯 Why: 기존 `aria-checked` 수정 후 `<button>` 요소들이 탭 시퀀스에 모두 노출되고 키보드 내비게이션(방향키 등)을 지원하지 않아 화면 판독기 사용자가 그룹을 정상적으로 탐색하고 선택할 수 없었습니다.
♿ Accessibility: W3C 접근성 권장 사항을 충족하여 키보드 전용 사용자들도 색상 스와치를 직관적으로 탐색 및 선택할 수 있게 되었습니다.
💡 What: `GroupModal`의 색상 스와치 선택 인터페이스에 WAI-ARIA Radio Group Pattern을 완전하게 구현했습니다. 추가로, 그룹 삭제 확인 창(`window.confirm`)의 Template Injection(SyntaxError) 취약점을 문자열 연결 방식으로 수정했습니다.
🎯 Why: 기존 `<button>` 요소들이 탭 시퀀스에 노출되고 키보드 내비게이션을 지원하지 않아 화면 판독기 접근성이 떨어졌습니다. 또한 템플릿 리터럴로 인한 잠재적 STRIX 보안 스캔 실패를 사전 차단했습니다.
♿ Accessibility: W3C 권장 사항을 충족하여 키보드 전용 사용자들도 색상 스와치를 Arrow key로 손쉽게 탐색 및 선택할 수 있게 되었습니다.
💡 What: `GroupModal`의 색상 스와치 선택 인터페이스에 WAI-ARIA Radio Group Pattern을 완전하게 구현했습니다. 추가로 jsdom 환경의 테스트 안정성을 위해 속성 검증 로직을 개선했습니다.
🎯 Why: 기존 `<button>` 요소들이 탭 시퀀스에 노출되고 키보드 내비게이션을 지원하지 않아 화면 판독기 접근성이 떨어졌습니다.
♿ Accessibility: W3C 권장 사항을 충족하여 키보드 전용 사용자들도 색상 스와치를 Arrow key로 손쉽게 탐색 및 선택할 수 있게 되었습니다.
664757a deleted the focused radiogroup regression, doctoring record,
and component-local selected-state CSS. Restore that contract and add
Tab-from-name, Space activation, exact aria-checked, and WAI-ARIA 1.3
APA 7 coverage requested by current-head review.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
@seonghobae
seonghobae force-pushed the cursor/bc-3f98c685-e53c-4d37-9df1-c482c531d2f0-ecd3 branch from eeef7b7 to 962f829 Compare August 20, 2026 19:30

@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: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Open in Devin Review

@opencode-agent opencode-agent Bot added the area: accessibility Accessibility and assistive-technology support label Aug 22, 2026
@opencode-agent opencode-agent Bot added area: api API, protocol, event, or external contract area: operations Operability, observability, readiness, SLO, backup, or retention priority: medium Normal-priority or P2 work scope: product-gap Customer-visible product gap status: needs-review Open pull request requiring current-head review or checks type: bug Defect or incorrect behavior labels Aug 22, 2026
@opencode-agent

Copy link
Copy Markdown
Contributor

Queued @opencode-agent for PR #901 at head 962f8299650dbd4f6f67703159dbf5e46c268a82. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #901 at head 962f8299650dbd4f6f67703159dbf5e46c268a82. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 962f8299650dbd4f6f67703159dbf5e46c268a82.

  • Head SHA: 962f8299650dbd4f6f67703159dbf5e46c268a82

  • Workflow run: 32919824119

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

  • Result: FAIL
  • Test evidence: not proven passing
  • Docstring evidence: not proven passing when configured
  • Failure count: 1

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file: CHANGELOG.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file: CHANGELOG.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs: group-color-radiogroup-keyboard.md"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs: group-color-radiogroup-keyboard.md"]
  R2 --> V2["docs review"]
  Evidence --> S3["Frontend (6 files)"]
  S3 --> I3["browser runtime and bundle"]
  I3 --> R3["Review risk: Frontend (6 files)"]
  R3 --> V3["frontend tests"]
Loading

@opencode-agent

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 962f8299650dbd4f6f67703159dbf5e46c268a82
  • Workflow run: 32919824119
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 962f8299650dbd4f6f67703159dbf5e46c268a82.

  • Head SHA: 962f8299650dbd4f6f67703159dbf5e46c268a82

  • Workflow run: 32919824119

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

  • Result: FAIL
  • Test evidence: not proven passing
  • Docstring evidence: not proven passing when configured
  • Failure count: 1

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file: CHANGELOG.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file: CHANGELOG.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs: group-color-radiogroup-keyboard.md"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs: group-color-radiogroup-keyboard.md"]
  R2 --> V2["docs review"]
  Evidence --> S3["Frontend (6 files)"]
  S3 --> I3["browser runtime and bundle"]
  I3 --> R3["Review risk: Frontend (6 files)"]
  R3 --> V3["frontend tests"]
Loading

@opencode-agent
opencode-agent Bot disabled auto-merge August 26, 2026 04:42
@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #901 at head 962f8299650dbd4f6f67703159dbf5e46c268a82. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

1 similar comment
@opencode-agent

Copy link
Copy Markdown
Contributor

Already queued @opencode-agent on this exact request for PR #901 at head 962f8299650dbd4f6f67703159dbf5e46c268a82. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

@seonghobae seonghobae added the bug Something isn't working label Sep 7, 2026 — with ChatGPT Codex Connector

Copy link
Copy Markdown
Collaborator

Exact-head admission 감사: 962f8299650dbd4f6f67703159dbf5e46c268a82; blocker=active CHANGES_REQUESTED. Open 상태와 모든 유효 delta/review/thread를 보존한 채 Draft/Proposed로 교정합니다. Causal owner repair 또는 non-force reconciliation 후 fresh exact-head evidence로 재입장해야 합니다. Close·bypass·Force Push·synthetic evidence·review dismissal은 수행하지 않습니다.

@seonghobae
seonghobae marked this pull request as draft September 26, 2026 14:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: accessibility Accessibility and assistive-technology support area: api API, protocol, event, or external contract area: operations Operability, observability, readiness, SLO, backup, or retention bug Something isn't working priority: medium Normal-priority or P2 work scope: product-gap Customer-visible product gap 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.

2 participants