Uh oh!
There was an error while loading. Please reload this page.
feat(app-shell): studio dogfood follow-ups — API-name derive, read-only gating, publish confirm, nav scaffold, i18n sweep - #2270
Merged
Conversation
…auto names The Data pillar's '+ Add field' names new fields field_N, but maybeDeriveName only recognised type-based auto names (text_2, status), so relabeling never derived the API name and records kept meaningless field_N data columns forever (#2260). Recognise both auto-name shapes; custom names, CJK-only labels, and sibling collisions keep today's behaviour. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHQc5BdGhTzPfazex3vWdt
…affolding Three follow-ups from the Studio package-create UX dogfood (objectstack-ai/objectstack#2615), which all live on the same surface: - objectui#2259 — resolve the package's writability once in StudioDesignSurface and courtesy-gate authoring affordances on read-only packages (ADR-0057 D10): Add field, New object/flow/ permission set, nav Edit, Save draft, Publish, and Create app hide or disable with a readonlyHint tooltip; the field inspector opens read-only, records stay usable, and the server gate remains the authority. - objectui#2261 — Publish is review-then-confirm: the header button now opens DraftChangesPanel, whose footer 'Publish N change(s)' fires the atomic publish; entries expand to a lazy per-item diff (object fields added/removed/changed + changed top-level properties vs the live version). - objectui#2262 — the create-app popover offers 'add this package's objects as menu items' (default on): buildAppSkeleton seeds one spec-valid object nav item per object (type discriminator caught by the createConformance gate on first try). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHQc5BdGhTzPfazex3vWdt
…gh i18n BuilderLanding, ObjectFormDesigner, ObjectValidationsPanel and ObjectSettingsPanel rendered hardcoded Chinese regardless of locale, while partially using the same files' i18n layer — producing the mixed-language screens found by the Studio package-create UX dogfood (objectui#2264, framework#2615) and violating the English-only-codebase rule. All user-visible strings now resolve via t()/tFormat() with English defaults and zh-CN translations (58 keys added under engine.studio.landing/designer/rules/settings; existing pkg/data keys reused where they fit). Test assertions follow the en-US defaults. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHQc5BdGhTzPfazex3vWdt
The latest updates on your projects. Learn more about Vercel for GitHub. |
os-zhuang
marked this pull request as ready for review
July 5, 2026 07:48
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHQc5BdGhTzPfazex3vWdt
…8n sweep Upstream landed read-only gating + live API-name sync (#2263) and review-then-publish + changes detail (#2271) in parallel — take those implementations wholesale (they supersede this branch's #2259/#2260/#2261 work, including per-keystroke name sync and a structured diffFields-based detail). Kept from this branch: create-app nav scaffolding (#2262), the studio-design i18n sweep (#2264), ObjectFormDesigner's full read-only mode, and the nav-seeded skeleton conformance case; dropped the now- redundant blur-based derive tests in favour of upstream's. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHQc5BdGhTzPfazex3vWdt
…name derive and changes-panel implementation, keep this PR's four-pillar readOnly gating, nav scaffold and i18n sweep
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
… (four-pillar readOnly gating + adapted derive tests) over the minimal one
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Implements all five console-side findings from the Studio package-create UX dogfood (objectstack-ai/objectstack#2615, audit
docs/audits/2026-07-studio-package-create-ux-dogfood.md):Closes#2259, closes#2260, closes#2261, closes#2262, closes#2264.
maybeDeriveNameonly recognised type-based auto names (text_2,status); the Data pillar's "+ Add field" producesfield_N, so relabeling never derived and records keptfield_Ndata columns forever. Both shapes now derive; custom names, CJK-only labels, and sibling collisions unchanged. +5 unit tests.StudioDesignSurfaceresolves the package's writability once and passesreadOnlyto all four pillars: Add field, New object/flow/permission set, nav Edit, Save draft, Publish and Create app hide or disable with areadonlyHinttooltip; the field inspector opens read-only; records stay fully usable; the server ADR-0070 gate remains the authority (unknown writability stays ungated).DraftChangesPanel; its new footer button ("Publish N change(s)") fires the atomic publish. Panel entries now expand to a lazy per-item diff: object fields added/removed/changed plus changed top-level properties vs the live version.buildAppSkeletonseeds onetype: 'object'nav item per object — the missingtypediscriminator was caught by thecreateConformancespec gate on the first attempt, which is exactly what that gate is for. Conformance case added for the nav-seeded skeleton.t()/tFormat()with English defaults + zh-CN translations (58 keys added underengine.studio.landing/designer/rules/settings, existing keys reused).Verification
tsc --noEmitclean; full@object-ui/app-shellsuite 1044/1044 green (3 assertions updated to the new en-US defaults).com.example.showcase: Add field / New object gone, Publish disabled, Read-only badge intact, records grid still works;field_3→ label "Priority" → API name becomespriorityon blur;+ field priority; footer publish succeeds with the existing toast;navigationcarries the object item,_diagnostics.valid: true;@object-ui/app-shell: minor). Pre-existingreact-hooks/static-componentseslint error inObjectSettingsPanelis onmainunchanged (out of scope).🤖 Generated with Claude Code
https://claude.ai/code/session_01DHQc5BdGhTzPfazex3vWdt
Generated by Claude Code