Skip to content

feat(i18n-ko): native surfaces and E2E fixtures - #4515

Draft
scs0209 wants to merge 17 commits into
apache:mainfrom
scs0209:feat/i18n-ko-native-e2e-3980
Draft

feat(i18n-ko): native surfaces and E2E fixtures#4515
scs0209 wants to merge 17 commits into
apache:mainfrom
scs0209:feat/i18n-ko-native-e2e-3980

Conversation

@scs0209

@scs0209 scs0209 commented Sep 1, 2026

Copy link
Copy Markdown

Summary

Wire ko through core locale resolution, desktop native surfaces, and E2E fixtures. This follows the same pattern as #3853 (zh-TW): Korean copy for startup/quit/boot dialogs, diagnostics, notifications, permission overlay, and related main-process fallbacks; E2E fixture flags accept ko / ko-kr without the toLowerCase regression fixed for Chinese locales in #3853 review.

Renderer UiCatalog types require a ko key once ko is in UI_LOCALES. Catalogs outside the #3977#3979 renderer slices use English stubs for now; session-collaboration-copy includes a real KO block.

Review note: This branch stacks on feat/zh-tw-locale (#3853). GitHub cannot target AcerYue0:feat/zh-tw-locale as the PR base on apache/maka, so the PR currently targets main and includes #3853 commits in the diff. Do not merge until #3853 lands. To review only the Korean work, use:
AcerYue0:feat/zh-tw-locale...scs0209:feat/i18n-ko-native-e2e-3980

Fixes #3980

Verification

  • npm run build:test — pass
  • node --test packages/core/dist/__tests__/ui-locale.test.js — pass
  • node --test apps/desktop/dist/main/__tests__/e2e-fixture-locale.test.js — pass
  • Playwright E2E (ko-locale.spec.ts) — not run locally (dev server not started)
  • npm run lint / npm run format:check — not run for the full workspace

AI use

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope: Cursor — implementation, translation stubs, tests, and PR text. The update(i18n-ko): session-collaboration… commit includes a Generated-by: Cursor trailer.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

@github-actions github-actions Bot added the effort/XL Under 2500 readable lines label Sep 1, 2026
@scs0209
scs0209 force-pushed the feat/i18n-ko-native-e2e-3980 branch from e33433a to 1e37f24 Compare September 1, 2026 23:01
scs0209 and others added 2 commits September 2, 2026 08:10
…3980)

- Add ko to UI_LOCALES and resolve ko-KR system locales
- Localize startup/quit/boot, diagnostics, and notification native copy
- Add ko E2E fixture flags and ko-locale spec
- Add ko stubs to UiCatalog entries (renderer English fallback until apache#3977apache#3979)

Generated-by: Cursor
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the ko: EN stub with a dedicated KO translation block.

Generated-by: Cursor
Co-authored-by: Cursor <cursoragent@cursor.com>
@scs0209
scs0209 force-pushed the feat/i18n-ko-native-e2e-3980 branch from 1e37f24 to 16f0432 Compare September 1, 2026 23:10
@github-actions github-actions Bot added effort/XXL Over 2500 readable lines and removed effort/XL Under 2500 readable lines labels Sep 3, 2026
@ggbdpq

ggbdpq commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Plan for the P1, folded with the two named downstream gaps so the slice lands as one coherent contract change:

  1. Shared predicate in Core next to MessageContent: meaningful content = non-empty text OR quotes.length > 0 OR attachments.length > 0.
  2. Durable admission: normalizeRootTurnMessageContent switches from the text-length rule to the shared predicate, keeping its own attachment-count, trust, and size checks.
  3. Compaction estimate: estimateRuntimeEventChars counts the structured envelope (quote texts + attachment identity) so a structured-only user event is no longer estimated at zero and dropped by the history-compact gate.
  4. Recap: the recap projection switches to the same visibility/content decision instead of content.text.trim().
  5. Verification: storage-level admission unit tests (quote-only accepted; truly empty still rejected with the same frame error), estimate/recap unit tests, and a composition-level test driving a real SQLite-backed turn.start with a quote-only message through idle and queued paths to a durable Turn. Decoder-only examples are excluded per your note; a full Host-subprocess run remains the acceptance bar for closing desktop: quote-only and attachment-only messages require inline text #4804.

This slice deliberately does not touch the empty-bubble half of #4804 (out of scope as agreed). Will start after the current review round settles so the layers land and get re-reviewed together.

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

Labels

effort/XXL Over 2500 readable lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(i18n-ko): native surfaces and E2E fixtures

3 participants