Skip to content

Support Store Profile root and arbitrary locales - #60

Open
jyjy1229 wants to merge 5 commits into
mainfrom
codex/store-profile-fallback-docs
Open

Support Store Profile root and arbitrary locales#60
jyjy1229 wants to merge 5 commits into
mainfrom
codex/store-profile-fallback-docs

Conversation

@jyjy1229

@jyjy1229 jyjy1229 commented Jul 27, 2026

Copy link
Copy Markdown
Collaborator

Summary

Add optional locale-neutral Store Profile root content and allow extension authors to provide only the locale entries they actually maintain. Empty extension values continue to allow an App Store Developer GUI fallback.

Contract changes

  • Add optional root to StoreGetProfileOutput in protobuf and generated TypeScript/Go contracts.
  • Keep root separate from i18nMap; it is not a locale and is never copied into a synthetic locale entry.
  • Change i18nMap validation from required ko/ja/en keys to arbitrary non-empty, whitespace-trimmed Desk locale keys.
  • Keep Store Profile localized content shape unchanged for root and locale values.
  • The Store extension still returns only the extension source. App Store owns GUI fallback storage and effective-value calculation.
  • Empty image/related-app arrays and empty or whitespace-only intro strings intentionally permit GUI fallback.
  • FAQs are additive (extension + gui) rather than exclusive fallback values.

Documented App Store fallback

  • Korean: i18nMap.ko → root → i18nMap.en
  • English: i18nMap.en → root
  • Other locales: i18nMap.<locale> → i18nMap.en → root

Fallback is resolved per field by App Store and is not materialized into SDK output.

Generated artifacts and release

  • Update the canonical extension function schema registry.
  • Regenerate TypeScript and Go protobuf output.
  • Add patch changesets for @channel.io/app-sdk-core and @channel.io/app-sdk-server because optional root and arbitrary locale keys are additive public contract changes.

Validation

  • Full make verify
  • TypeScript lint, format, protobuf/schema parity, build, and 480 tests
  • CLI create smoke build and typecheck
  • Go build and full tests
  • Store Profile and schema-registry regression tests for root, arbitrary locales, and empty localized values
  • App SDK GitHub CI: Analyze, Build, CodeQL, Lint/Format/Proto, public-content policy, and Test all pass
  • git diff --check

The App Store PR owns storage, migration, GUI locking, and effective fallback behavior: channel-io/ch-app-store#2304.

🤖 Generated with Codex

@channeltalk

channeltalk Bot commented Jul 27, 2026

Copy link
Copy Markdown

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Store 확장 메타데이터가 고정 로케일 구조에서 임의의 non-empty 로케일 구조로 변경되었습니다. 빈 확장 값의 Developer GUI 폴백과 FAQ additive 동작을 문서화하고, 스키마·Go·TypeScript 테스트와 등록 스키마를 갱신했습니다.

Changes

Store 메타데이터 계약

Layer / File(s) Summary
임의 로케일 스키마와 입력 검증
ts/packages/core/src/extensions/store.ts, ts/packages/core/src/__tests__/extensions/store.test.ts
i18nMap이 공백 없는 임의 로케일 키를 허용하도록 변경되었으며, authored locale과 빈 폴백 값을 검증하는 테스트가 추가되었습니다.
확장 값 보존과 스키마 레지스트리 반영
go/extension/store/extension.go, go/extension/store/extension_test.go, go/extension/schemaregistry/extension_function_schemas.json
빈 localized 배열과 문자열을 보존하는 의미를 주석과 Go 테스트로 확인하고, 등록 스키마가 임의 로케일 키를 허용하도록 변경되었습니다.
Store 처리 흐름과 반환 계약 문서화
docs/reference/typescript/extensions/store.md, docs/guides/{en,ja,ko}/extensions/store.md, ts/.changeset/store-profile-arbitrary-locales.md
extension 소스 영속화, Developer GUI 폴백, authored locale, FAQ additive 동작 및 확장된 검증 범위를 문서화하고 patch changeset을 추가했습니다.

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

Suggested reviewers: pbc1017

Poem

토끼가 로케일 당근을 세어요
빈 값도 살포시 품에 안아요
GUI 폴백 길은 활짝 열리고
FAQ는 차곡차곡 더해지고
깡총, Store 계약이 또렷해져요!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
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 제목이 Store Profile의 루트 지원과 임의 로케일 허용이라는 핵심 변경을 정확히 요약합니다.
✨ 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 codex/store-profile-fallback-docs

Comment @coderabbitai help to get the list of available commands.

@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)
go/extension/store/extension_test.go (1)

32-33: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

포인터 동일성 대신 반환 값의 동등성을 검증하세요.

response != profileStaticProfile의 구현 세부사항을 고정합니다. 계약은 metadata 값 보존이지 동일 포인터 반환이 아니므로, reflect.DeepEqual 또는 주요 필드 비교를 사용해야 올바른 복사 구현도 허용할 수 있습니다.

🤖 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 `@go/extension/store/extension_test.go` around lines 32 - 33, Update the
assertion in the StaticProfile test to validate value equality rather than
pointer identity. Replace the response != profile check with reflect.DeepEqual
or comparisons of the relevant profile fields, while retaining the existing
failure behavior and verifying that metadata values are preserved even when a
copy is returned.
🤖 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 `@go/extension/store/extension_test.go`:
- Around line 32-33: Update the assertion in the StaticProfile test to validate
value equality rather than pointer identity. Replace the response != profile
check with reflect.DeepEqual or comparisons of the relevant profile fields,
while retaining the existing failure behavior and verifying that metadata values
are preserved even when a copy is returned.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9f371c50-6e53-4d0a-88e0-02d722e71ff6

📥 Commits

Reviewing files that changed from the base of the PR and between 1a13037 and cca3f82.

📒 Files selected for processing (5)
  • docs/reference/typescript/extensions/store.md
  • go/extension/store/extension.go
  • go/extension/store/extension_test.go
  • ts/packages/core/src/__tests__/extensions/store.test.ts
  • ts/packages/core/src/extensions/store.ts

jyjy1229 and others added 2 commits July 27, 2026 16:14
Document that Store extension output is the extension source and that empty localized values allow Developer GUI fallback. Add TypeScript and Go regression coverage without changing public types or proto contracts.

🤖 Generated with [Codex](https://Codex.com/Codex)

Co-Authored-By: Codex <noreply@anthropic.com>
Allow authored locale maps beyond ko, ja, and en while keeping empty extension values available for GUI fallback.

🤖 Generated with [Codex](https://Codex.com/Codex)

Co-Authored-By: Codex <noreply@anthropic.com>
@jyjy1229
jyjy1229 force-pushed the codex/store-profile-fallback-docs branch from cca3f82 to ac06f11 Compare July 27, 2026 07:15
@jyjy1229 jyjy1229 changed the title Clarify Store Profile GUI fallback behavior Support arbitrary Store Profile locales Jul 27, 2026

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

Actionable comments posted: 1

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

Inline comments:
In `@go/extension/schemaregistry/extension_function_schemas.json`:
- Around line 22327-22396: Update the i18nMap schema’s additionalProperties
definition to include a propertyNames constraint matching
StoreProfileLocaleSchema: reject empty locale keys and keys that are blank after
trimming. Keep the existing locale-value object validation and
additionalProperties behavior unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: cc328559-948c-4d1f-ac20-ec63b5b7c307

📥 Commits

Reviewing files that changed from the base of the PR and between cca3f82 and 6357a02.

📒 Files selected for processing (10)
  • docs/guides/en/extensions/store.md
  • docs/guides/ja/extensions/store.md
  • docs/guides/ko/extensions/store.md
  • docs/reference/typescript/extensions/store.md
  • go/extension/schemaregistry/extension_function_schemas.json
  • go/extension/store/extension.go
  • go/extension/store/extension_test.go
  • ts/.changeset/store-profile-arbitrary-locales.md
  • ts/packages/core/src/__tests__/extensions/store.test.ts
  • ts/packages/core/src/extensions/store.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • go/extension/store/extension_test.go
  • go/extension/store/extension.go
  • docs/reference/typescript/extensions/store.md

Comment thread go/extension/schemaregistry/extension_function_schemas.json
@jyjy1229 jyjy1229 changed the title Support arbitrary Store Profile locales Support Store Profile root and arbitrary locales Jul 28, 2026
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