Skip to content

fix(ux): keep customer-facing editor guidance actionable - #391

Closed
seonghobae wants to merge 21 commits into
mainfrom
fix/customer-copy-guidance-reconciled
Closed

fix(ux): keep customer-facing editor guidance actionable#391
seonghobae wants to merge 21 commits into
mainfrom
fix/customer-copy-guidance-reconciled

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Summary

Keeps the buyer-facing toolbar image action actionable without expanding this PR into an overlapping source lane:

  • replaces the Insert Base64 Image implementation-oriented label with Insert inline image;
  • adds an accessibility regression that requires the image action to be exposed by that customer-facing accessible name and forbids base64 jargon in toolbar button names.

Ownership boundary

This PR is now intentionally Toolbar-only. Its effective changed paths are limited to src/components/Toolbar.tsx and the directly owned toolbar regressions.

src/extensions/SafeClipboard.ts and its existing tests are not owned here. The live canonical SafeClipboard resource/customer-guidance writer is Draft #359, which already owns the actionable messages for the rejection codes it emits and must reconcile that work with its earlier SafeClipboard dependency order. The overlapping SafeClipboard edits formerly present in this PR were restored to protected-main bytes rather than copied or raced across writers.

src/converter/** remains owned by #160, src/policy/inlineImagePolicy.ts by #166, and src/extensions/Base64Image.ts is unchanged here. No transport, persistence, credentials, tenancy, model/provider, network, deployment, durable-audit, or release authority moves into this lane.

Verification contract

The toolbar behavior remains test-first: the customer-copy accessibility regression predates the toolbar-label repair. Any head movement invalidates predecessor workflow/review evidence. Acceptance must use the exact current contributor head against an independently resolved live protected base and inspect actual required workflow steps/source identity.

Pending, queued, skipped-required, cancelled, absent, neutral, failed, stale, predecessor, status-only, model-only, wrong-checkout, synthetic-source-only, or otherwise vacuous evidence is non-passing. Aggregate green cannot override a skipped Dependency Review action or a scanner that did not inspect the submitted source.

The central fail-closed Dependency Review repair remains foreign-owned by .github#897; exact-submitted-head SAST remains foreign-owned by .github#941; and the current Strix invalid_tools provider-compatibility failure is owned by contextual-orchestrator#901. Do not add Inkspan-local workflow/provider workarounds.

Keep this PR unmerged until the unchanged exact head is gate-clean under then-live governance with qualifying independent formal approval and zero valid unresolved review threads. Stable publication remains owned by #118.

…daries

- Toolbar image title drops base64 jargon
- Inline-image policy error names accepted formats instead of URI internals
- Converter/blob errors give size limits, retry, or alternate-file guidance
- Paste failures state what to try next (less content / plain text)
- Doc-contract tests updated to the shipped phrasing

Audit rules: no internal implementation boundaries in customer-visible text;
every explanation guides the next action.
…-honest

Early-return the Error path and scope the v8 ignore to the unreachable
fallback arm only, keeping the global 100% threshold truthful.
Replace suppression pragmas with truthful coverage: the Error passthrough
and the hostile non-Error fallback are both exercised, and the fallback
message is asserted to stay actionable without echoing hostile input.
@coderabbitai

coderabbitai Bot commented Aug 28, 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: Pro Plus

Run ID: d442d057-edfc-41c4-9f63-d70bd4fd4256

📥 Commits

Reviewing files that changed from the base of the PR and between 6c61f4f and 20f9064.

📒 Files selected for processing (1)
  • src/components/Toolbar.customerCopy.test.tsx

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


📝 Walkthrough

Walkthrough

툴바의 인라인 이미지 라벨에서 base64 용어를 제거했습니다. 클립보드 오류 메시지를 사용자 지향 문구로 변경했습니다. 관련 테스트의 기대값과 접근성 검증을 갱신했습니다.

Changes

사용자 지향 메시지 변경

Layer / File(s) Summary
인라인 이미지 툴바 라벨 변경
src/components/Toolbar.tsx, src/components/Toolbar.test.tsx, src/components/Toolbar.customerCopy.test.tsx
인라인 이미지 버튼의 제목을 Insert inline image로 변경했습니다. 기존 base64 문구를 검증에서 제거하고 새 접근 가능한 이름을 검증하는 테스트를 추가했습니다.
클립보드 오류 메시지 변경
src/extensions/SafeClipboard.ts, src/extensions/SafeClipboard.test.ts, src/extensions/SafeClipboard.coverageContract.test.ts, src/extensions/SafeClipboardExtension.test.ts
크기·복잡도·중첩 깊이 초과 및 잘못된 HTML 오류를 사용자 지향 문구로 변경했습니다. 관련 테스트 기대값을 갱신했습니다.

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

Merge Risk: ⚪ Minimal · up to 20f90

This PR makes localized editor guidance and accessibility-label updates with regression coverage and does not change editor capabilities or deployment behavior. No actionable merge-blocking risk remains beyond normal checks and review.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed 변경 사항은 이슈 #390의 관련 목표를 충족합니다. Toolbar에서 base64 용어를 제거했고, SafeClipboard 오류 메시지에 일반 텍스트 붙여넣기와 입력량 축소 같은 다음 조치를 추가했습니다. 관련 단위 테스트와 접근성 회귀 테스트도 갱신했습니다.
Out of Scope Changes check ✅ Passed 변경 사항은 고객 대상 편집기 문구, 클립보드 오류 안내, 관련 테스트 범위에 한정됩니다. 이슈 #390의 목표와 무관한 코드 변경은 확인되지 않습니다.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 10 files.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 고객에게 표시되는 편집기 안내를 실행 가능하게 개선한다는 주요 변경 목적과 관련되어 있습니다. 툴바의 base64 용어 제거와 클립보드 오류 안내 변경을 모두 포괄하는 간결한 제목입니다.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/customer-copy-guidance-reconciled

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 ready for review August 28, 2026 02:39
@seonghobae

Copy link
Copy Markdown
Contributor Author

@coderabbitai 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, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Devin informational finding reviewed: this remains intentional fail-closed behavior. The structured-clone brand check avoids walking an untrusted rejected value prototype chain; unsupported or non-cloneable values receive the bounded actionable fallback. Shipped Inkspan error subclasses used by this path carry cloneable fields, so no code change is required.

@coderabbitai

coderabbitai Bot commented Aug 28, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Already reviewed the last commit. Use @coderabbitai full review to rerun a review of the entire changeset.

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.

devin-ai-integration[bot]

This comment was marked as resolved.

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

Note

This report is out of date. Scroll down for Devin Review's latest report on this PR.

Devin Review found 1 new potential issue.

Devin Review

devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

@opencode-agent review exact current head 20f90646f59062d46269e6f596f260e986873216 against live main@128a239f8b71ca16add4b9e15e21752d1ad63ff0.

The scheduler run spawned by the head update (33140717891) correctly stopped before dispatch because one review thread was unresolved at that instant; that thread is now resolved. Please issue a fresh current-head formal verdict only—do not reuse predecessor review evidence. Inkspan-local CI for this head is terminal green; central dependency-review/SAST/Noema evidence remains independently fail-closed and must not be collapsed into this review verdict.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent review exact current head 20f90646f59062d46269e6f596f260e986873216 against live protected main@128a239f8b71ca16add4b9e15e21752d1ad63ff0. All current review threads are resolved; issue a fresh current-head formal verdict only. Do not reuse predecessor evidence.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head local validation for 20f9064:

CI=true pnpm exec vitest run src/components/Toolbar.test.tsx src/components/Toolbar.customerCopy.test.tsx src/extensions/SafeClipboard.test.ts src/extensions/SafeClipboard.coverageContract.test.ts src/extensions/SafeClipboardExtension.test.ts

Result: 5 files / 38 tests passed. This is local evidence only; the PR remains governed by current hosted Strix/OpenCode results and qualifying independent approval.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head local validation for 3edd749:

CI=true vitest run src/components/Toolbar.test.tsx src/components/Toolbar.customerCopy.test.tsx src/extensions/SafeClipboard.test.ts src/extensions/SafeClipboard.coverageContract.test.ts src/extensions/SafeClipboardExtension.test.ts

Result: 5 files / 38 tests passed. This supersedes the earlier local evidence for 20f9064. Hosted current-head checks, formal approval, and governance gates remain authoritative.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent review exact current head 3edd749 against protected main 128a239. Issue a fresh current-head formal verdict only; do not reuse predecessor evidence.

@seonghobae

seonghobae commented Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

Current-head gate update for 3edd749 (protected main at 128a239): the required opencode-review job failed closed at the step named Fail closed without a current-head OpenCode verdict (https://github.com/ContextualWisdomLab/inkspan/actions/runs/33146959271/job/98771103570). The current-head review API still has 0 formal reviews and 0 approvals, so this is not a review verdict and the PR remains blocked. Exact-head local targeted validation remains 5 files and 38 tests passed; no merge or bypass is authorized.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Terminal current-head Strix update for 3edd749: the required job failed at Run Strix (quick), job https://github.com/ContextualWisdomLab/inkspan/actions/runs/33146959357/job/98772054778. Its uploaded strix-reports artifact records contextual-orchestrator HTTP 400 invalid_tools because each tool.function.description must be at most 1024 characters, followed by STRIX_PROVIDER_UNAVAILABLE. The artifact's displayed Vulnerabilities 0 is not vulnerability-clear evidence because the scan did not complete. Current-head formal reviews and approvals remain 0, so PR 391 stays blocked.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-current-head local validation for f3d6a6fc482dc1dc7526c1ddfa9eea0222341b94:

  • Diff against protected main@128a239f8b71ca16add4b9e15e21752d1ad63ff0 is limited to src/components/Toolbar.tsx, src/components/Toolbar.test.tsx, and src/components/Toolbar.customerCopy.test.tsx.
  • node .../vitest.mjs run src/components/Toolbar.customerCopy.test.tsx src/components/Toolbar.test.tsx --pool=threads --maxWorkers=1 --minWorkers=1 --testTimeout=15000: 2 files, 15 tests passed.
  • Direct TypeScript compiler tsc --noEmit: passed.

The initial default 5-second test limit timed out one existing broad test under this environment; rerunning with the repository's behavior unchanged and a 15-second per-test ceiling passed all assertions. No source, lockfile, or root tracked files were changed by this validation. Hosted provider checks and the required independent formal approval remain authoritative; no Ready or merge action is claimed.

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