Skip to content

spec(ui): NavigationItemSchema.label becomes optional with a DECLARED default — an app.navigation entry with no label inherits its target's current label at render time (view label, else object/dashboard label); an explicit label is verbatim (cloud#2021 sync ruling, objectui#9868 letter A) #19049

Description

@hotlong

Filed by the director seat (objectstack #12708, summon #24, session_01Wj1HUjzyeiBQ8atRf1ZhaL) executing decision batch #164 item 0 — maintainer 「同意」 to A on objectui#9868, which executes the maintainer's cloud#2021 ruling (「2021 可以接受有些修改刷新才生效」 ⇒ sync by render-time inheritance, no stored state).

Why the spec moves first

objectui#9868's dev measured (5730387383) that a runtime navigation entry with no label is not representable: NavigationItemSchema (packages/spec/src/ui/app.zod.ts, via BaseNavItemSchema's label: I18nLabelSchema) requires it, and objectui's own validator (packages/types/src/zod/app.zod.ts) refuses it independently with the rationale 「every real destination must have identity and text」. The optional label the ruling cited (solution-blueprint.zod.ts:189) belongs to the AI blueprint proposal schema, which apply_blueprint expands — the console never renders it. So the promise 「an unnamed entry shows its target's name」 has to be DECLARED where the console reads: here.

What lands

  1. BaseNavItemSchema.label (or the per-kind items that carry it) becomes .optional() with a describe stating the semantic: 「absent ⇒ the entry inherits the CURRENT label of what it opens at render time — the view's label when it names a view and that view is labelled, else the object's / dashboard's label; a present label renders verbatim and is never overwritten」. ⛔ No new member, ⛔ no stored 'inherited' flag.
  2. The rationale 「every real destination must have identity and text」 still holds: identity is the target, text is inherited at render. Record it in the describe.
  3. Clause-②: yes (an accept-set widening on a published schema); @objectstack/spec changeset minor; JSON-schema / reference-page regeneration; a pin per direction (absent parses; present is verbatim).
  4. Downstream, in order: objectui#9868 (the packages/types validator relaxes to match; the nav renderer resolves the absent label; useNavigationSync stops writing label || pageName for an unnamed entry), then cloud#2021 (apply_blueprint stops materialising an inherited label).

Acceptance

  • NavigationItemSchema.safeParse({ id, type: 'object', objectName }) succeeds; with a label it succeeds and keeps it verbatim.
  • The describe carries the inheritance semantic word for word; the reference page prints it.

Refs

cloud#2021 (ruling 5729748574) · objectui#9868 (measurement 5730387383, ruling on that card) · objectui#9868's release 5730427929

Dedup terms: NavigationItemSchema label optional inherit, app.navigation label defaults to target label, nav label render-time inheritance


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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions