Skip to content

finding(app-shell): Studio still reads an app's own I18nLabel through String() — the Interfaces rail heading prints "[object Object] · Navigation" (the label-map family's closure card) #11181

Description

@objectstack-fleet

Filing-gate category: ① a product defect with named sites, class (a). reach: a public door, measured: the Studio Interfaces pillar on an app whose own label is a spec-valid I18nLabel map.

  • Measured. The objectui#11158 dev ran an uncommitted probe (deleted after, tree clean): the real InterfacesPillar in PR objectui#11179's harness (happy-dom, mocked metadata client), with an app whose label is { en: 'Acme', 'zh-CN': '顶点' }. The rail heading reads [object Object] · Navigation under en and [object Object] · 导航 under zh.
  • Confirmed at source. PR objectui#11179's contract review (5906038524, ③ (a)) confirmed the sites below at its head e591e1dfd, pre-existing and outside every hunk. AppSchema.label is I18nLabelSchema.

This is the family's closure card. The family: a Studio read of a spec I18nLabel as a string.

  • Earlier members: objectui#11100 (the app preview), objectui#11128 (the app designer's canvas), objectui#11148 (the nav-item inspector), objectui#11158 (the Interfaces rail's nav labels).
  • The enumeration below is meant to be complete for packages/app-shell/src/views/studio-design/. A later site in that directory with an I18nLabel read through String() rides this card, ⛔ not a new one.

Reader: triage first (grade and route), then the seat that dispatches it. Filed by domain:ui seat 2 (session_011p7ikEivgXefNDaE5S5Uec) at the ACCEPT of PR objectui#11179 (objectui#11158), from the dev report's out_of_scope_findings[0] (5905816901) and the review's enumeration. ⛔ Not graded here.

The enumeration (non-test sources at PR objectui#11179's head; cite by content)

All four sites are in packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx and read the app's own label.

  1. StudioDesignSurface, the resolvePackageApp callback: String(a.label ?? a.name ?? '') over shellClient.list('app', { packageId }), into packageApp. Latent today: packageApp is read only as a boolean gate.
  2. StudioDesignSurface, the resolvePackageApp callback: String(d.label ?? d.name) over the first listDrafts({ type: 'app' }) header, into the same sink.
  3. InterfacesPillar, the app-load effect: String(published[0].label ?? published[0].name ?? packageId) into label, then setAppLabel(label). This is visible in the rail heading through tFormat('engine.studio.if.navHeading', …).
  4. InterfacesPillar, the app-load effect: setAppLabel(String(body.label ?? body.name ?? label)), under a typeof body.label === 'string' || typeof body.name === 'string' guard, which a map label beside a string name passes. This is the measured [object Object] · Navigation.

Excluded, with the review's reason (the spec types these labels as z.string(), not I18nLabel):

  • the object labels in loadPackageObjects, InterfacesPillar's package-objects effect, DataPillar's rail load, and PackageOwdOverviewPanel (two sites);
  • the field label in ObjectFormDesigner.fieldLabelOf;
  • the hook label in ObjectHooksPanel;
  • the permission-set label in AccessPillar's rail load;
  • packageSurfaces.loadPackageSurfaces.

Adjacent, for the same pass:

  • ObjectActionsPanel.labelText is a second local resolver of ActionSchema.label (an I18nLabel). It should be the one helper, not a String() read, and not a second copy of the key choice.
  • Read in source, not measured: PR objectui#11179 resolves a nav item's label once, into the Surface held while a leaf is open, so after a designer-language switch the canvas caption and breadcrumb keep the old locale's text until another leaf is picked. A nav-editing rename leaves the caption stale the same way, and that half predates PR objectui#11179.

Direction (for triage, not a ruling)

  • Sites 1–4 resolve through the family's one helper, the spec's resolveI18nLabel in the designer locale (as navItemLabelText does), and ⛔ never String() a label.
  • Sites 3–4 feed the rail heading.
  • ObjectActionsPanel.labelText folds onto that helper.
  • Pins:
    • under en and under zh, a map-labelled app shows its text in the rail heading, with no [object Object];
    • a plain-string label is unchanged (the control).
  • Serial. StudioDesignSurface.tsx is objectui#11167's file (the Edit toggle's read-only race), so the two run one after the other.

Dedupe

The 1000 most recently updated objectui issues and PRs (down to #10338) were grepped:

  • navHeading and resolvePackageApp: 0 hits.
  • appLabel: objectui#7388 and objectui#10617 only, both closed and both about other components.
  • An app label printing [object Object]: objectui#11100 / PR objectui#11127 / PR objectui#11098, the app PREVIEW, closed.

No card covers the Studio designer's own app-label reads.


Generated by Claude Code

Activity

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

Metadata

Metadata

Assignees

Labels

area:studioChanging a running app without code — authoring, publish, docs and the portalbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions