Fix objectui-side follow-ups from Showcase E2E audit (framework#2620)#2254
Merged
Conversation
Addresses the objectui-side items tracked in framework issue #2620 (follow-ups from the Showcase full-chain UX test in #2616): - UnifiedSidebar: explicit nav item labels now win over i18n object-label translation; object-nav auto-generation prefers pluralLabel over label. - ActionEngine/actions: action-button/bar/menu visibility now fails closed on a throwing predicate (opt-in, mirrors ActionEngine's own contract); the generic script-action path now awaits a Promise-returning formula before reporting success, so the toast reflects the real write outcome. - WizardForm/ObjectForm: implement declarative `submitBehavior` (thank-you/redirect/continue/next-record), wired through the spec bridge which previously dropped it. - Date cell renderer: "Overdue Nd" wording (and red styling) now only applies to due/deadline-semantic fields; other past dates render as neutral "Nd ago". - Work Map: supports a configurable MapLibre `mapStyle`, and surfaces a banner when the style/tiles fail to load instead of a silent blank map. - Sentry: adds an explicit `VITE_SENTRY_ENABLED=false` kill switch. - Scoped per-node styles now compile with `!important`, so they deterministically win over same-specificity layout utility classes (e.g. a `type: 'flex'` node with `responsiveStyles: { display: 'grid' }`). - Charts: axis ticks now honor a resolved `config[value].label`, matching the lookup already used for series names and pie/donut legends. - Fixes noisy boot-time "bare-name fallback overwritten" warnings for field:time/field:address, ui:calendar vs view:calendar, and view:chart vs plugin-charts:chart. - AuthProvider: organization refresh no longer warns on an unmount/route race. useAgents: caches the agent catalog per apiBase instead of refetching on every navigation. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0113dfdy2CMFwQ4TJmQWjkdf
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
os-zhuang
marked this pull request as ready for review
July 5, 2026 05:59
This was referenced Jul 5, 2026
Closed
os-zhuang
added a commit
that referenced
this pull request
Jul 5, 2026
…verification (#2268) (#2276) Both were confirmed still-broken via a live browser pass with real API/DOM checks after #2254 merged (framework#2620 / framework#2616), and filed as #2268. - WizardForm/ObjectForm's `thank-you`/`next-record` submitBehavior only ever toasted — the form stayed mounted, fully filled, and resubmittable once the in-flight request settled, so a second click created a duplicate record. Both now track a terminal `submitted` state and swap the form for a confirmation panel (reading `title`/`message`, previously unread) once set. - Command Center-style 3-up chart bands stayed collapsed to ~100-130px because `responsiveStyles`/`style` were declared on the page-spec component bridge input type but never mapped onto the SchemaNode in spec-bridge/bridges/page.ts — the same "declared upstream, dropped by the bridge" bug class #2254 fixed for `submitBehavior`, just never addressed for these two fields. - A dataset-bound ObjectChart's aggregate measure (e.g. task_count) leaked its raw field name in the legend/tooltip because the dataset fetch path discarded queryDataset()'s `fields` (label metadata) before it reached the already-correct, already-tested buildChartSeries(rows, dims, values, fields) resolution. Added regression tests for all three (WizardForm/ObjectForm no-resubmit + confirmation panel, page bridge style/responsiveStyles mapping, ObjectChart measure label resolution). Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Jul 5, 2026
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 free
to 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.
Summary
Resolves the objectui-side items tracked in
objectstack-ai/framework#2620(follow-ups from the Showcase full-chain UX test in framework#2616). Each item was independently investigated in this repo's source before being fixed.label(e.g.'Projects') was always overridden by anobjects.<name>.labeli18n translation.resolveNavItemLabelnow only applies convention-based i18n when the label wasn't customized (still equal to the bare object/dashboard/view/item name); a customized label always wins. Object-nav auto-generation (AppCreationWizard.generateNavFromObjects,CreateAppPage/EditAppPage) now prefers the object'spluralLabelover its singularlabel.action-button/action-bar/action-menu'svisiblepredicate now supports fail-closed evaluation via a newuseCondition(..., { throwOnError: true })opt-in, mirroringActionEngine.getActionsForLocation's existing fail-closed contract (a broken predicate hides the action instead of leaking it).ActionRunner's genericscriptaction now awaits a Promise-returning formula function before reporting success, so the success toast reflects the write's actual outcome instead of firing as soon as the (synchronous) expression call returned a still-pending promise.submitBehavior:WizardForm/ObjectFormnow implement the spec's declarativesubmitBehavior(thank-you/redirect/continue/next-record), which the spec-bridge (bridges/form-view.ts) previously dropped before it ever reached the renderer.dueLikefield flag/heuristic — a paststart_date/created_atrenders as neutral "Nd ago" instead of "Overdue".ObjectMapnow accepts a configurablemapStyle(schemamapStylefield), and shows a banner when the MapLibre style/tiles fail to load instead of rendering a silent blank map.VITE_SENTRY_ENABLED=falseas an explicit, discoverable opt-out even when a DSN is configured (dev already defaults off; this is an additional safety valve for forks/self-hosters).responsiveStylesnow compile with!important, so they deterministically beat a same-specificity layout utility class (e.g.type: 'flex'+responsiveStyles: { display: 'grid' }}) regardless of stylesheet injection order. Chart axis ticks now honor a resolvedconfig[value].label, matching the lookup already used for series names and pie/donut legend entries.field:time/field:address,ui:calendarvsview:calendar,view:chartvsplugin-charts:chart).AuthProvider's organization refresh no longer warns on an unmount/route-change race.useAgentsnow caches the agent catalog perapiBaseinstead of refetching on every navigation.Test plan
*.test.ts(x)files and updated existing suites)vitest run: 5263 passed, 24 skipped, 0 failedpnpm build(turbo, 44/44 tasks) andtsc --noEmitacross touched packages: clean🤖 Generated with Claude Code
Generated by Claude Code