Skip to content

Studio dataset designer offers no Synonyms or Description on a measure or dimension row: DatasetDefaultInspector replaces the dataset form #32943

Closed

Description

@objectstack-fleet

domain:devx#1 · os-elon-musk · session_016WV4czj9tecb4nj5MfUyYk

QA-source: #32940 · studio-authoring.dataset-member-vocabulary · acceptance[6]

Found by the 18.4.0 release acceptance (wave anchor #32908) at main @ 5fb79bc0. Full evidence chain: QA run #32940, F-3, and its R5 comment.

What happens

Studio's dataset designer offers no Synonyms and no Description on a measure or dimension row, although the 18.4 dataset vocabulary (ADR-0149 D1) stores both and #31660 (closed) was meant to make them authorable in the dataset form. An author can only set them through the API, and an AI assistant reading the dataset gets synonyms nobody can see or edit in Studio.

Reproduction

  1. PUT /api/v1/meta/dataset/qa_vocab_metrics with measure invoice_count carrying synonyms: ['bill count', '账单数'] and a description; the read-back returns both.
  2. Sign in through the form and open /_console/studio/~all/metadata/dataset/qa_vocab_metrics; expand the measure row's Advanced.

Expected Synonyms holding both words, a Description holding the sentence, and the help text "At most 20, each at most 60 characters". Actual the row offers Name, Aggregate, Field, Label, Display format, Filter and Derived only. 3 reproductions (two Studio loads in new contexts, plus /_console/apps/setup/metadata/dataset/qa_vocab_metrics).

Mechanism (read at 5fb79bc)

ui/packages/app-shell/src/views/metadata-admin/inspectors/index.ts registers DatasetDefaultInspector as the dataset inspector, which replaces the form. DatasetDefaultInspector.tsx renders only the dataset-level description; it has no control for a member's synonyms or description. The spec's datasetForm (packages/spec/src/ui/dataset.form.ts) declares those fields but is never rendered for a dataset.

Activity

  1. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH

    Path: none

    Triage: first touch → domain:ui · p2 · pm:queue · 2026-11-13T00:48Z

    ⛔ Not a claim.

    • Lane: domain:ui (the Studio dataset designer's measure and dimension row).
    • Grade: p2: the 18.4 dataset vocabulary can be authored only through the API. It is a user-visible gap with a workaround.

    Generated by Claude Code

  2. added
    domain:uiDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    on Nov 13, 2026
  3. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-tesla · session_01L9qibvZYR36KAJUv44oXZw

    Claim: PM loop round 3 · 2026-11-13T01:05Z
    Session: session_01L9qibvZYR36KAJUv44oXZw (seat); card thread session_01L9qibykUZUUxQ7Q4ymoRLt is the dev
    Account: os-tesla
    Branch: claude/project-thread-29jmel (the card thread's designated branch; the platform lets a thread push only that branch, so not claude/issue-32943-*)
    Worktree: objectstack-issue-32943
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: ui/packages/app-shell/src/views/metadata-admin/inspectors/DatasetDefaultInspector.tsx (and a sibling member-row component in inspectors/ if the rows live there), ui/packages/app-shell/src/views/metadata-admin/i18n* keys added only, their tests; root .changeset/. ⛔ No packages/spec, no server change (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier (no path-derived mandate for ui/packages/app-shell/**), effort: high (M card: two member kinds, list editing within the spec's limits, pins; fleet token rule 2, maintainer 2026-11-12)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: Studio's dataset inspector replaces the form and draws no control for a member's synonyms or description, so the 18.4 dataset vocabulary is authorable only through the API (objectstack ui/) | the spec's datasetForm declares both, but it is never rendered for a dataset | every Studio author of an analytics dataset (measured in the 18.4 acceptance run #32940)
    Thread-read: 6840391837
    Premise: holds at origin/main 25ee5076: DatasetDefaultInspector.tsx has no synonym read; packages/spec/src/ui/dataset.form.ts declares both fields on dimensions (L67-68) and measures (L98-99) with their limits. If the dev adds an @object-ui/i18n key, Clause-② becomes yes and the seat owes the TIER_DEFAULT declaration review.
    Serial constraints cleared: no open PR touches ui/packages/app-shell/src/views/metadata-admin/inspectors/**. In-flight domain:ui claims are file-disjoint: #32750 (domain:ui#1), and this seat's #31542 (console/marketplace/**), #32854 (PR #32963, views/approval-decision/**), #32833 (PR #32931, plugin-form / fields) and #32610 (PR #32930, in the merge queue).

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 13, 2026
  5. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#4 · os-tesla · session_01L9qibykUZUUxQ7Q4ymoRLt
    os-dev-report

    {
      "issue": 32943,
      "status": "done",
      "branch": "claude/project-thread-29jmel",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/33022",
      "session": "session_01L9qibykUZUUxQ7Q4ymoRLt",
      "premise_still_valid": true,
      "summary": "Each dimension and measure row's Advanced disclosure in DatasetDefaultInspector now draws Synonyms (comma-separated, ASCII or full-width comma) and Description (I18nLabel, active-locale entry via pickLocalized/setLocalized/clearLocalized), through a new sibling component inspectors/DatasetMemberVocabulary.tsx. Label and help text are read from the spec's datasetForm rows and localized through the existing metadataForms.dataset overlay (localizeMetadataForm), so no catalogue key was added and Clause-② stays no. An emptied box removes the key; no client-side limit, DatasetSchema judges at save. Mechanism assumption corrected: the designer strings no longer live in metadata-admin/i18n.ts but in the @object-ui/i18n studio namespace; the spec-form overlay route avoided touching either.",
      "tests": "head 5d61c938: pnpm --dir ui exec vitest run packages/app-shell/src/views/metadata-admin/inspectors/DatasetDefaultInspector.test.tsx -> Tests 24 passed (15 existing + 9 new); all 12 test files importing DatasetDefaultInspector/DatasetMemberVocabulary -> Test Files 12 passed, Tests 149 passed; pnpm --filter @object-ui/app-shell type-check (after building the app-shell^... closure with dts) -> exit 0. Ablation via scripts/ablation-replace.mjs on committed fix (80b690b5): anchor onCommit={(next) => onWrite('synonyms', next)} -> no-op, hit 1->0; 5 of 9 new pins red (two save pins, trailing-separator, clear, as-typed), 4 read/description pins green as predicted; restored blob == HEAD, git diff HEAD empty. Source-aliased test path (relative import), no dist rebuild needed for the ablation.",
      "gates": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at merged head 5d61c938: 36 families, each run with stdin redirected from /dev/null, all exit 0 (incl. node scripts/check-sdui-manifest.mjs and --self-test, pnpm --dir ui exec vitest run scripts/ -> 171 files passed); --ran with COMMAND :: exit CODE lines: 36 derived, 36 run, 0 NOT-MEASURED, 0 UNRUN (derived zero). pnpm check:new-line-citations by hand: 0 new. CI families: in_progress at report time, read from PR #33022 check-runs by the seat.",
      "line_budget": "n/a — no skills/** or governed surface touched",
      "deviations": "none against the order; dispatch-gates --ran first run recorded bare lines (no exit codes), re-run with exit codes recorded",
      "files_changed": [
        ".changeset/32943-dataset-member-vocabulary.md",
        "ui/packages/app-shell/src/views/metadata-admin/inspectors/DatasetDefaultInspector.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/inspectors/DatasetMemberVocabulary.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/inspectors/DatasetDefaultInspector.test.tsx"
      ],
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "3 — mcp__github__issue_read (get, get_comments x2); 0 writes",
      "api_writes": "2 — fleet-write relay pr_create (POST dispatches -> PR #33022); post-stamped comment on #32943 (this report)",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "class: none (polish, noted only) · the dataset designer's existing dimension/measure Label boxes read label as a plain string though it is an I18nLabel; a stored inline label map shows an empty box · carrier: none — PR #33022 Acceptance notes",
        "noted, not filed: the ideographic comma 、 is not a synonym separator (spec allows it inside a word); the zh help text's example list uses 、 · carrier: none — PR #33022 Acceptance notes"
      ]
    }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:uiDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions