Skip to content

fix(accessibility): keep read-only link shortcut inert - #152

Draft
seonghobae wants to merge 17 commits into
test/cjk-input-assurance-376from
fix/read-only-link-shortcut
Draft

fix(accessibility): keep read-only link shortcut inert#152
seonghobae wants to merge 17 commits into
test/cjk-input-assurance-376from
fix/read-only-link-shortcut

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Latest integration evidence — 2026-09-06

Current-head local Office verification on Python 3.14.6 also passed all
173 tests in 2.45 seconds; configured 598 statements/244 branches and public
docstrings 100%. This does not establish the hosted supported-version matrix.

Current candidate a828e0f9d94da958bee39ccccaa2b02137062b1e normally merges
parent #380 6a7121e04652348e6dbc7b58bbad843ef07f6f86. It inherits the shared
expected-archive evidence guard, preserving the existing read-only shortcut
delta. The shared helper and regression exactly match the parent. Ten focused
tests (including all four accessibility cases) and TypeScript pass. Full
configured coverage also passed 1,025 tests across 176 files in 65.37 seconds,
all configured source coverage 100%. New-head full build, complete package
consumer chain and fresh pack also pass. Archive SHA-256:
46a155d46b45a58b31569c71665e9cc51219283f5b4018b0c06561ceb9d3e87d.
Logs and archive: /private/tmp/inkspan-pr152-current-package.BPMGOv.
New-head full packed-browser acceptance passed all 151 tests in 98.095882 seconds,
with zero skipped, unexpected, flaky or global errors. Consensus run
4661110d-fafd-4e42-901a-fd7fbd8b7ba9 binds this head and archive; the digest
was independently rechecked unchanged afterward. Nine screenshots were directly
inspected across Chromium, Firefox and WebKit, each editable/readonly/reenabled:
multilingual content remained visible, the toolbar hid in readonly and returned
with the editable focus border. No missing image glyph appeared here. Readonly
key events remain explicitly synthetic; this does not certify physical IME,
WCAG or deployed behavior. Current source-browser and Office acceptance remain
separate. Older passes and observations below are predecessor evidence.
This PR remains Draft.

Scope and ownership

This existing Draft lane owns the shared read-only link-shortcut guard, accessibility transition tests, and a Proposed TRD paragraph. Ctrl+K and Meta+K must not open a link editing prompt while read-only. Editable behavior remains unchanged; presentation does not replace host authorization.

Preserved prerequisite history

Original RED 084d739437d2db4070ee8547b265316dd4c9e420, source repair 547ba5e68a55efce7bfd5dded313cd5a7b909fc6, and predecessor 17a3b84c39988af5c7b55fd07bf1b7c316102eb7 remain in ordinary merge history. The historical Meta+K review finding was incorporated, not treated as approval.

This branch now reuses #380 at 7e231329f8efed484e61e0c29e42e18527142d4d, which inherits #201, #176 and #402. The base change is needed to reuse the canonical actual React editor browser harness. There is zero net shared-harness/config delta against #380. Only the shortcut-specific browser spec belongs here; no competing browser infrastructure, dependency or CI writer is introduced.

Exact-head evidence and limitations

  • Predecessor b101ff260ecc159680821af4d1f8cf26957e82c3: 1,024 tests / 176 files passed, all configured coverage metrics 100%, 321.81 seconds. This does not transfer to the later browser integration.
  • Initial browser experiment fdfa236f: all six cases failed an invalid test assumption that readonly content can receive focus. Those logs remain retained. No runtime tabindex behavior was added to satisfy the test.
  • Current 8f9ccf46082086eeac09089b3bbb5e8a6b3e1c9f: six focused browser cases passed in 37.1 seconds, Ctrl and Meta across Chromium, Firefox and WebKit. Editable states use native keyboard input; readonly explicitly dispatches a cancelable bubbling event to the actual editor and verifies it neither opens a prompt nor prevents the default. This is not trusted native readonly-input evidence.
  • Direct visual inspection covered nine screenshots: three engines by editable/readonly/reenabled state. Multilingual content remained visible and retained, toolbar visibility followed editability, and editable focus borders returned. Firefox's image toolbar symbol rendered as a missing glyph, retained as an open UI finding rather than an all-visuals-pass claim.
  • Full current-head source-browser verification passed all 151 cases in 3.6 minutes, including consensus run 381d6927-49e4-4ef4-8c51-267a12119645 (package digest null). Full coverage passed 1,024 tests in 176 files, with all configured metrics at 100%, 297.24 seconds. Full package verification passed, including isolated ESM/CommonJS/strict TypeScript public consumers.
  • Full packed-browser verification passed all 151 cases in 178.41 seconds, with zero skipped, unexpected, flaky or global errors. Consensus run 57a8ffbe-60a4-49d5-a87a-e84d6ebec875 identifies archive SHA-256 c45c0e80d74e8427ccb3a4de0d97da8a163f72e48719fe31ba72cf3725c9f953, independently recomputed before and after the run. The extracted editor JS and stylesheet matched the build bytes before acquisition. Nine packed editable/readonly/reenabled screenshots were inspected directly across all three engines, confirming retained visible text and toolbar transitions. The earlier Firefox missing-glyph observation was not present in this packed screenshot; it remains a recorded font-dependent portability finding being addressed by the existing Toolbar owner fix(reliability): fail closed for stale toolbar image uploads #158, not a universal Firefox failure.
  • Local current-head Office verification on Python 3.14.6 passed 173 tests in 8.28 seconds, with all 598 configured statements, 244 branches and public docstrings at 100%. The supported-version hosted matrix and qualifying review/checks remain open. No fix(accessibility): preserve forced-colors state cues #151 screenshot or predecessor result certifies this head, and neither local package creation nor packed verification publishes a release.

Logs and screenshots are retained in /private/tmp/inkspan-readonly-shortcut-evidence.WKU9W0. This remains Draft/Proposed, not protected or released. Before lifecycle decisions refetch exact head/base, current checks, formal reviews, unresolved threads, security findings and governing rules. No bypass, self-approval, force push or gate weakening.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

EditorFrame이 읽기 전용 상태에서 키보드 이벤트를 처리하지 않도록 변경했습니다. CwlEditor 접근성 테스트는 Ctrl+K 입력 시 window.prompt가 호출되지 않는지 검증합니다.

Changes

읽기 전용 링크 단축키

Layer / File(s) Summary
키보드 이벤트 가드 및 회귀 테스트
src/components/EditorFrame.tsx, src/components/CwlEditor.accessibility.test.tsx
editable이 false이면 키보드 이벤트 처리를 중단합니다. onKeyDown 의존성 배열이 최신 editable 값을 사용합니다. 테스트는 DOM 정리와 Vitest mock 복원을 수행하며, 읽기 전용 상태의 Ctrl+K에서 window.prompt가 호출되지 않는지 확인합니다.

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

Possibly related PRs

🚥 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.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/read-only-link-shortcut

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.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai 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.

🧹 Nitpick comments (1)
src/components/CwlEditor.accessibility.test.tsx (1)

79-95: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Meta+K 경로도 회귀 테스트에 포함하세요.

EditorFrameevent.metaKey || event.ctrlKey를 처리하지만, 현재 테스트는 ctrlKey만 설정합니다. macOS에서 Meta+K 경로만 회귀해도 이 테스트는 통과합니다. metaKey: true도 동일한 검증에 포함하세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/CwlEditor.accessibility.test.tsx` around lines 79 - 95, Update
the read-only shortcut test around CwlEditor to cover the Meta+K path as well as
Ctrl+K: trigger the keydown with metaKey enabled and verify window.prompt
remains uncalled, while preserving the existing read-only behavior assertion.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/components/CwlEditor.accessibility.test.tsx`:
- Around line 79-95: Update the read-only shortcut test around CwlEditor to
cover the Meta+K path as well as Ctrl+K: trigger the keydown with metaKey
enabled and verify window.prompt remains uncalled, while preserving the existing
read-only behavior assertion.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e5670188-abbe-415a-ab57-4989d784d018

📥 Commits

Reviewing files that changed from the base of the PR and between 50ac98c and 547ba5e.

📒 Files selected for processing (2)
  • src/components/CwlEditor.accessibility.test.tsx
  • src/components/EditorFrame.tsx

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@opencode-agent opencode-agent Bot added area: accessibility Accessibility and assistive-technology support priority: medium Normal-priority or P2 work status: draft Draft pull request type: bug Defect or incorrect behavior labels Aug 22, 2026
@seonghobae

Copy link
Copy Markdown
Contributor Author

Restacked the unchanged read-only Mod+K boundary onto protected main@a40b9489665bed7d95af619a6079b9c51cab299a and propagated the exact event-specific Python matrix contract. Exact head: cccb28b6b3edbcab252e1988897ad2fbc77b7ded. Fresh local proof on that head: focused read-only shortcut regression 2/2; TypeScript typecheck; full Vitest 156 files / 882 tests with 100% statements, branches, functions, and lines; production build; all packed package consumers; Python support contract 4/4. Product delta remains only the existing shared editable guard plus Ctrl/Meta+K coverage. Draft and independent-approval gates remain unchanged.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

Remove the duplicated Python support contract changes from this accessibility branch. PR #405 remains the single writer while this branch keeps its read-only link shortcut behavior.

Signed-off-by: Seongho Bae <seonghobae@users.noreply.github.com>

Commit-Message-Assisted-by: Claude (via Claude Code)
Signed-off-by: Seongho Bae <me@seonghobae.me>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Signed-off-by: Seongho Bae <me@seonghobae.me>
@seonghobae
seonghobae changed the base branch from main to fix/atomic-controlled-sync-200 September 6, 2026 13:09
Signed-off-by: Seongho Bae <me@seonghobae.me>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Signed-off-by: Seongho Bae <me@seonghobae.me>
@seonghobae
seonghobae changed the base branch from fix/atomic-controlled-sync-200 to test/cjk-input-assurance-376 September 6, 2026 13:28
Signed-off-by: Seongho Bae <me@seonghobae.me>
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 priority: medium Normal-priority or P2 work status: draft Draft pull request type: bug Defect or incorrect behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant