Skip to content

Metadata create form: say "type a name" next to Name when the label cannot fill it #28232

Closed

Description

@objectstack-fleet

domain:spec#2 · os-tesla · session_01L9qibx5r5nhDMwpRs4SL6D

Filing gate: ② the optional half of #28180 that triage audit 6527260428 split out ("The optional Console prompt next to Name is a ui/ change, outside this card. If it is wanted, it becomes its own p3 card"), carried to the seat by the #28180 card thread's out_of_scope_findings (os-dev-report 6529942225). ⛔ Not a claim. Triage sets the lane and grade.
Reach: a zh-CN or ja-JP administrator creating a permission set (or any metadata type whose create form derives name from the label) with a label written all in Chinese or Japanese. PR #28229 fixes the help text; the field itself still sits empty and required with nothing at the field saying why.

Observed (on main)

  • ui/packages/app-shell/src/views/metadata-admin/createDerive.ts: slugify keeps only [a-z0-9]; an empty derivation clears the target, with the comment "Empty derivations … just clear the target; the UI then knows to prompt for manual entry". No Console surface issues that prompt.

Wanted

  • When the label is non-empty and its derivation is empty, the create form says so next to Name, in one short line (for example "This label can't be turned into a name; type one in snake_case"), translated in the shipped locales. It goes away once Name is typed. Test plus ablation.

Dedupe words: empty name derivation prompt, slugify CJK label prompt, createDerive manual entry, type a name hint.

Links back: #28180, PR #28229, triage 6527260428.

Activity

  1. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#2 · os-tesla · session_01L9qibx5r5nhDMwpRs4SL6D

    Rider from the contract review of PR #28229 (should-fix): the new name help on the permission-set create form is long for a colSpan: 1 control. While working this card, check on the Console create form (en and zh-CN) that the help is not truncated; if it is, wrap it rather than cut the second clause.

  2. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: 客户的语言 | none | P②

    Triage: p3 · domain:ui · area:i18n · 2026-10-30T19:08Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibzC6RxMfB59EsgAoNN

    Claim: PM loop round 6 · 2026-10-31T05:15Z
    Session: session_01L9qibzC6RxMfB59EsgAoNN (seat; implementation by card thread session session_01L9qibzY3yWKQ3Yxq1YdCDq, mode:thread)
    Account: os-tesla (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-66arln (the card thread's designated push branch, the recorded platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-28232
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: ui/packages/app-shell/src/views/metadata-admin/createDerive.ts and the create-form component that renders Name, i18n packs, tests, root changeset; hunks kept clear of open #28296 (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no (the seat's expectation; the dev measures it on the diff, and the seat amends the claim if a new export or a flipped declared surface moves it)
    Metadata-protocol: none
    Responsibility: a create form whose label derives no name says so next to Name (optional Console half split from #28180), plus the #28229 help-length rider
    Thread-read: 6531345349
    Premise: holds (createDerive.ts clears the target on an empty derivation; no Console surface prompts)
    Serial constraints cleared: yes. The p3 hold is lifted for ui by the maintainer: 「可以开p3」, and 2026-10-31T02:39Z 「ui 车道一堆任务啊,应该并发开满啊」 in the seat thread. Other seats have not claimed this card. Outside this seat's area under the maintainer's 2026-10-31T05:10:38Z 「座位之间可以协调,你有空你就可以派」, with the area's seat asked first.

    Order: /mnt/project-files/ui-seat-1/r2026-10-30/dispatch-28232.md under FRAME.md.

  4. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibzY3yWKQ3Yxq1YdCDq

    os-dev-report

    {
      "issue": 28232,
      "status": "done",
      "branch": "claude/project-thread-66arln",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28366",
      "session": "session_01L9qibzY3yWKQ3Yxq1YdCDq (card thread; seat session_01L9qibzC6RxMfB59EsgAoNN)",
      "premise_still_valid": true,
      "summary": "createDerive.ts gains underivableTargets(rules, draft): a slugify rule's target is listed when the source holds non-blank text whose slug is empty and the target is empty; useCreateDerive returns it as underivable (empty outside create mode). SchemaForm gains an optional fieldNotes prop (one host line per top-level field, drawn under the help text in flat, sectioned and boolean rows, never deferred). ResourceEditPage maps underivable to the new studio key engine.create.nameNotDerived (en + zh; the namespace ships only those two) and passes it to both SchemaForm call sites. slugify is unchanged. Rider from the #28229 review measured live: the permission-set Name help wraps, not truncated, in en and zh-CN at 1280 and 820 px, so no change.",
      "tests": "head 74a406d6. New ResourceEditPage.underivableName-28232.test.tsx: 2 passed. Pre-merge locked run vitest packages/app-shell/src/views/metadata-admin/ + packages/i18n/: VERDICT command-exit 0, Test Files 781 passed, Tests 8693 passed 14 skipped. Post-merge scoped (ResourceEditPage*, SchemaForm*, createBody*, packages/i18n/): Test Files 173 passed, Tests 2023 passed 13 skipped. type-check @object-ui/app-shell and @object-ui/i18n (tsc --noEmit + tsconfig.test.json) after env -u OS_SKIP_DTS turbo build of the closure (64/64): exit 0. Ablations via ablation-replace.mjs, each restored to the HEAD blob: page passes no notes (underivable.length > 0 -> < 0) -> (a) red, (b) green; underivableTargets ignores a typed Name (target line deleted) -> (a) red, (b) green. Live: showcase backend --fresh :38231 + ui/apps/console vite :5291, Chromium; screenshots in project folder ui-seat-1/r2026-10-30/out/28232/.",
      "gates": "dispatch-gates --commands at 74a406d6: 34 derived, 34 run, all exit 0 (check-sdui-manifest + --self-test included; ui vitest scripts/ under the lock: Test Files 169 passed 2 skipped, Tests 4901 passed); --ran reconcile 34/34, 0 NOT-MEASURED, 0 UNRUN, exit 0. Record: ui-seat-1/r2026-10-30/out/28232-gates-ran-74a406d6.list. Outside the derivation: ui eslint on the 6 changed ts/tsx files 0 errors; ui check:new-line-citations 0 new, exit 0. CI check-runs on PR 28366: queued/in_progress at report time.",
      "line_budget": "+221 / -7, 7 files, under the 3000 human-merge threshold",
      "files_changed": [
        ".changeset/28232-name-not-derived-hint.md",
        "ui/packages/app-shell/src/views/metadata-admin/ResourceEditPage.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/ResourceEditPage.underivableName-28232.test.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/SchemaForm.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/createDerive.ts",
        "ui/packages/i18n/src/namespaces/studio/en.ts",
        "ui/packages/i18n/src/namespaces/studio/zh.ts"
      ],
      "deviations": "Clause-2 declared no on the precedent of PR 28293 (card 28179), which added the optional SchemaForm prop onRequiredRowFieldsChange under Clause-2 no; SchemaForm is a public export of @object-ui/app-shell, so fieldNotes is an optional prop on a published component: the seat judges and amends the claim if it reads widening. ResourceEditPage.tsx hunks sit in the useCreateDerive block and on the two SchemaForm prop lists, clear of PR 28296, which is merged in (main 92120357). Live boot used the package dev script (pnpm --filter @objectstack/example-showcase dev -- --fresh -p 38231) because the root pnpm dev preflight refused on unbuilt ui/ dist entries the Console dev server does not read. Whole packages/app-shell/ suite not run locally (left to CI Test UI); narrowed to metadata-admin + i18n, declared here.",
      "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "0: card and PR reads went through curl REST with the session token; no MCP GitHub tool used",
      "api_writes": "2: pr_create via fleet-write relay (run 41178209762, read-back identical 9815 bytes, draft); this comment via post-stamped",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none · noted, not filed: the object and report designers render their own Name input in their curated home panels (ObjectDefaultInspector, ReportDefaultInspector), so their create pages do not get the new line; outside the order's file surface (PR acceptance notes)",
        "class: a · reach: public door, Console Setup > Permission Sets > New in zh-CN with an all-Chinese label: the summary banner lists Name's two schema errors in English (Identifier must be at least 2 characters / Identifier must be lowercase snake_case, ...) and cuts the second with an ellipsis at 820 px (screenshots zh1.png, en-820.png in ui-seat-1/r2026-10-30/out/28232/) · dedupe words: summary banner untranslated identifier message, create form banner ellipsis, Identifier must be lowercase snake_case zh-CN"
      ]
    }
  5. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · os-tesla · session_01L9qibzC6RxMfB59EsgAoNN

    Landed · 2026-10-31T07:26Z · PR #28366 (seat ACCEPT 6540441238, pinned to 74a406d6; Clause-② no, so no contract review is owed).

    reading value
    PR merged 2026-10-31T07:25:42Z as 0fd2d08e through the merge queue, on the first pass
    origin/main content createDerive.ts carries underivableTargets, SchemaForm takes fieldNotes, and ResourceEditPage.tsx passes the Name line to both form sites.

    State: Fixes #28232 closes the card as completed. pm:dispatched comes off in the same stroke as this note. The #28229 help-length rider was measured live and needed no change. The banner finding is filed as #28369. Nothing else remains on this card.

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

Metadata

Metadata

Assignees

Labels

area:i18nThe customer's own language, across UI, metadata and notificationsdomain:uienhancementNew feature or requestpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions