Skip to content

feat(diagnostics): add accessible writing guidance UI - #266

Draft
seonghobae wants to merge 42 commits into
feat/writing-diagnostics-controllerfrom
feat/writing-diagnostics-ui
Draft

feat(diagnostics): add accessible writing guidance UI#266
seonghobae wants to merge 42 commits into
feat/writing-diagnostics-controllerfrom
feat/writing-diagnostics-ui

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Stack

This Draft stacks on #257 (feat/writing-diagnostics-controller) at exact live base c2f6df89cb193f6e3b9abcbf1fba078c79385784.

Implemented scope

Task 5 of the revision-bound writing-diagnostics plan provides Inkspan's built-in accessible presentation layer for already-validated host diagnostics:

  • named writing-guidance region and count summary;
  • ordered diagnostic cards with category, priority, title, explanation, and optional replacement rendered only as React text;
  • previous/next controls and ArrowUp/ArrowDown/Home/End roving keyboard navigation;
  • explicit affected-range focus plus Apply, Ignore, Dismiss, and Explain controls;
  • disabled Apply when no replacement or host application callback exists;
  • polite completed-action status and assertive application-conflict alert;
  • no focus movement when diagnostics arrive asynchronously;
  • a trusted internal EditorFrame slot immediately before the editable surface;
  • priority-specific non-color-only underlines, visible focus, forced-colors, reduced-motion, 44px touch targets, and responsive layout;
  • printed diagnostics omitted by default and included only through explicit host opt-in, with interactive controls removed from the appendix; and
  • no diagnostic markup or semantic behavior when the host supplies nothing.

Task 6 still owns revision-rechecked document mutation and undo-safe replacement application.

Test-first lineage

  • Initial RED workflow 31589364165, job 94090517654, failed because WritingDiagnosticsPanel.tsx did not exist.
  • The panel, trusted editor slot, keyboard navigation, print contract, accessibility styles, and real TipTap integration were then implemented and covered.
  • Predecessor implementation head 59c9ed37d46d86331f961dc4eefcfb8a7ee57594 passed focused TDD workflow 31593045037, job 94102108792: 22 focused tests, exact component coverage, TypeScript, repository-wide 100% owned-production coverage, package verification, and demo build.
  • That predecessor proof is historical only and does not transfer after head movement.

Workflow RCA and current head

Integration cleanup removed the temporary writing-diagnostics-ui-tdd.yml workflow at predecessor debc374a7d579566d19d6f30ecfe718e111989c4. That push exposed an inherited invalid .github/workflows/release.yml: run 31623381362 failed before GitHub created any job.

The failure matches merged #253's exact root cause: the Office dependency command used a YAML plain scalar containing --only-binary=:all:, and the registry-verification Node heredoc terminator was over-indented. Both defects caused GitHub to reject the tag-only workflow at parse time on ordinary branch pushes.

Current exact head is 3535115bb720d23e2473fa39c26f4157a04dfac1. It carries #253's already-validated executable release-workflow blob e735c099da64e130e1a5f0be25519112bbf00d63, changing only those two syntax defects and preserving release gates.

Fresh current-head check-runs: 0. Therefore no current-head CI, security, coverage, package, browser, accessibility, or review gate is represented as passing. Absent evidence is non-passing.

Authority boundary

Inkspan only renders, navigates, and reports actions for already-validated host diagnostics. It does not infer grammar, tone, spelling, clarity, pragmatics, technical correctness, or quality. It does not call a model, provider, network, database, persistence service, or host transport. Host strings remain plain React text and no keyword, regular-expression, phrase-list, language-name, sender-domain, recipient-count, nearest-text, or positional fallback exists.

Fresh review and integration boundary

  • Formal submitted reviews: 0.
  • Unresolved inline review threads: 0.
  • Live organization rules currently require zero approving reviews and resolved review threads; this PR does not invent an independent-approval requirement where policy does not require one.
  • This PR remains Draft and stacked behind feat(diagnostics): bind diagnostics to exact editor revisions #257. Protected main remains frozen by release issue release: reconcile Office and npm versions before next stable registry publication #118.
  • The current head must reacquire every applicable exact-current-head CI/security/coverage/package/browser/accessibility gate after stack reconciliation before readiness or merge can be considered.
  • This PR does not claim Task 6 replacement application, a released package, or Naruon runtime integration.

Protected main remains outside this next-release stack; no predecessor CI, status, workflow, or review evidence transfers after head or base movement.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 283a1cb7-7e95-4cf5-bb69-b00e4c89bed6

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant