Support Store Profile root and arbitrary locales - #60
Conversation
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughStore 확장 메타데이터가 고정 로케일 구조에서 임의의 non-empty 로케일 구조로 변경되었습니다. 빈 확장 값의 Developer GUI 폴백과 FAQ additive 동작을 문서화하고, 스키마·Go·TypeScript 테스트와 등록 스키마를 갱신했습니다. ChangesStore 메타데이터 계약
Estimated code review effort: 2 (Simple) | ~15 minutes Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
go/extension/store/extension_test.go (1)
32-33: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win포인터 동일성 대신 반환 값의 동등성을 검증하세요.
response != profile은StaticProfile의 구현 세부사항을 고정합니다. 계약은 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
📒 Files selected for processing (5)
docs/reference/typescript/extensions/store.mdgo/extension/store/extension.gogo/extension/store/extension_test.gots/packages/core/src/__tests__/extensions/store.test.tsts/packages/core/src/extensions/store.ts
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>
cca3f82 to
ac06f11
Compare
There was a problem hiding this comment.
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
📒 Files selected for processing (10)
docs/guides/en/extensions/store.mddocs/guides/ja/extensions/store.mddocs/guides/ko/extensions/store.mddocs/reference/typescript/extensions/store.mdgo/extension/schemaregistry/extension_function_schemas.jsongo/extension/store/extension.gogo/extension/store/extension_test.gots/.changeset/store-profile-arbitrary-locales.mdts/packages/core/src/__tests__/extensions/store.test.tsts/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
Summary
Add optional locale-neutral Store Profile
rootcontent 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
roottoStoreGetProfileOutputin protobuf and generated TypeScript/Go contracts.rootseparate fromi18nMap; it is not a locale and is never copied into a synthetic locale entry.i18nMapvalidation from requiredko/ja/enkeys to arbitrary non-empty, whitespace-trimmed Desk locale keys.extensionsource. App Store owns GUI fallback storage and effective-value calculation.extension + gui) rather than exclusive fallback values.Documented App Store fallback
i18nMap.ko → root → i18nMap.eni18nMap.en → rooti18nMap.<locale> → i18nMap.en → rootFallback is resolved per field by App Store and is not materialized into SDK output.
Generated artifacts and release
@channel.io/app-sdk-coreand@channel.io/app-sdk-serverbecause optional root and arbitrary locale keys are additive public contract changes.Validation
make verifygit diff --checkThe App Store PR owns storage, migration, GUI locking, and effective fallback behavior: channel-io/ch-app-store#2304.
🤖 Generated with Codex