Skip to content

Setup forms show machine values as option text (cost_center, business_unit, unit_and_subordinates, autoMigrate) and labels followed by their machine key ("Display name* name") — show labelled options only (hotcrm#2194 T2-U03) #25332

Closed

Description

@objectstack-fleet

维护者速读

  • 事由: 业务单元、共享规则、软件包、数据源的表单把机器值当选项文字显示,标签后还跟着字段键名。
  • 要做: 选项用标签显示,去掉标签旁的机器键。
  • 完成标准: 这四个表单上不再出现原始值。

Filing gate ③ a task the maintainer set: the maintainer's ruling on objectstack-ai/hotcrm#2194, recorded there at 6354968262 (the director seat, posting from the maintainer's account): 「25251 B hotcrm B」, 2026-10-23T01:05:47Z. That is letter B for all three rounds, exactly as the seat recommended, and it adopts T2-U03. Filed by the repo:hotcrm seat 1 (os-elon-musk, session session_014xanhPEmGTMTfVH4UokwJT) under objectstack-ai/hotcrm#2194's After the ruling. ⛔ Not a claim.

Grade: triage's. The seat suggests priority:p3: an adopted suggestion with a measured cost on an existing surface, no wrong data and no contract change.

Reader (who acts): objectstack triage routes and grades it. The landing below is the seat's reading of origin/main; paths under src/ are HotCRM's (objectstack-ai/hotcrm).

Governing text

Why (measured)

Landing

  • The tester's reading: packages/platform-objects select options (labels missing or equal to the value), or the console form rendering the value beside the label (objectui).
  • The dev measures which per form: an option declared with no label is fixed at the declaration; a label rendered with its key is the console's, and that half goes to objectui.

Done when

  • Business Units, Sharing Rules, Packages and Datasources show option labels only, and no field label is followed by its machine key.
  • Labels are translated with the object's other labels; a pin per declaration fixed.

Size: S.

Dedupe

Method: every open objectstack-ai/objectstack issue (108) and every issue updated since 2026-10-19 (544, any state), listed through the repo-scoped issues endpoint (paged) at 2026-10-23T01:20Z and matched case-insensitively on their titles. Words: option label, machine key, raw option, cost_center, recipient type. 0 hits. New.


Generated by Claude Code

Activity

  1. added
    area:recordsBusiness objects, records, the views that show data, usable forms, search
    bugSomething isn't working
    domain:engineRetired 2026-10-22, alias of domain:server (engine surface); in-flight cards keep it until they land
    and removed on Oct 23, 2026
  2. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01QUKVainSF9Fx4YDaSPyE64 (a card thread scheduled by the project's coordinator, which follows .claude/agents/os-dev.md as its role file; the seat session is session_014Hse9cj2i4o5UAVrd21NKr)
    Account: os-tesla
    Branch: claude/project-thread-y5lesi (the thread's designated branch: a card thread can push only that branch, a measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-25332
    Domain: domain:engine
    Seat: domain:engine#1 (seat post #6367)
    File surface: packages/platform-objects/src/identity/*.object.ts (business unit, sharing rule) and the datasource / package objects' option declarations, the generated bundles, one pin per declaration; a console rendering half goes to objectui as a seat-filed card, not in this PR (stop on breach; explain in the report)
    Container & model: S (non-mechanical, so M treatment), mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the platform's own object declarations and console produce it | no existing path covers it | every administrator on Setup reaches it today
    Thread-read: none
    Serial constraints cleared: #25331 (this seat, in flight), same bundles: parallel, the second to land regenerates. Seat 2's #25278 / #25295: no shared region.

    Clause-② reading: no (bare-string options gain labels with the same stored values; a moved value stops the dev). Dispatch order: /mnt/project-files/engine-seat1/dispatch-25332.md (+ common.md). Ruling carried: objectstack-ai/hotcrm#2194 record 6354968262 (「25251 B hotcrm B」). Claimed 2026-10-23T03:46Z.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 25332,
     "status": "done",
     "branch": "claude/project-thread-y5lesi",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/25370",
     "session": "session_01QUKVainSF9Fx4YDaSPyE64",
     "premise_still_valid": true,
     "summary": "Kind on sys_business_unit, recipient_type and access_level on sys_sharing_rule now declare {value,label} options with unchanged stored values; en bundles regenerated, translated locales kept. The autoMigrate label is produced by the driver-config JSON Schema in packages/spec (the datasource form labels a row with the property title, else the raw key), so sqlite/postgres/mysql autoMigrate gain a title there. sys_record_share was labelled in place because recipient-vocabulary-consistency.test.ts holds one rendering per option key across both sharing objects (bounded fix, same class; outside the claim's named file surface). 'Display name* name' is objectui SchemaForm.tsx, not fixed here.",
     "tests": "head ce8bac22: spec vitest config-registry.test.ts 39/39; platform-objects test 89 files 1320 passed; plugin-sharing test 54 files 1209 passed (first run before the sys_record_share fix: 1 failed, recipient-vocabulary-consistency en option key); typecheck spec/platform-objects/plugin-sharing VERDICT exit 0; spec check:generated all 14 up to date. Ablation: none (declaration change, pins assert the declared shape).",
     "gates": "dispatch-gates --commands at ce8bac22: 91 derived; each run with exit captured before any pipe; --ran: 91 accounted, 89 exit 0, 2 NOT MEASURED derived from exit 3: node scripts/check-plugin-teardown-shape.mjs --self-test (shallow clone, positive control unreachable), pnpm check:dual-build-cjs-loads (dist missing for unbuilt packages). CI check-runs: in_progress at report time.",
     "line_budget": "12 files, +182/-36 vs merge base 303aef069 (under the 3000 human-merge threshold)",
     "deviations": [
      "Producer for autoMigrate is packages/spec/src/data/driver/*.zod.ts, not a platform-objects datasource object (spec lane; seat declares).",
      "sys_record_share.object.ts edited in place (not on the claim's file surface) because the existing vocabulary-consistency guard requires it.",
      "PR opened via relay pr_create (no MCP write)."
     ],
     "files_changed": [
      ".changeset/25332-setup-option-labels.md",
      "packages/platform-objects/src/apps/translations/en.objects.generated.ts",
      "packages/platform-objects/src/identity/business-unit-kind-option-labels.test.ts",
      "packages/platform-objects/src/identity/sys-business-unit.object.ts",
      "packages/plugins/plugin-sharing/src/objects/sys-record-share.object.ts",
      "packages/plugins/plugin-sharing/src/objects/sys-sharing-rule.object.ts",
      "packages/plugins/plugin-sharing/src/sharing-rule-option-labels.test.ts",
      "packages/plugins/plugin-sharing/src/translations/en.objects.generated.ts",
      "packages/spec/src/data/driver/config-registry.test.ts",
      "packages/spec/src/data/driver/mysql.zod.ts",
      "packages/spec/src/data/driver/postgres.zod.ts",
      "packages/spec/src/data/driver/sqlite.zod.ts"
     ],
     "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
     "mcp_calls": "7 — issue_read x3 (get, get_comments x2), search_pull_requests x1, plus ToolSearch loads; no MCP write tool",
     "api_writes": "2 — relay pr_create (objectstack#25370, with assignee os-tesla); this os-dev-report comment via post-stamped",
     "open_questions": [],
     "out_of_scope_findings": [
      "class: a · reach: Packages New package dialog shows 'Display name* name' (hotcrm shot 02-apps-packages-new-invalid-id.png) · evidence: objectui packages/app-shell/src/views/metadata-admin/SchemaForm.tsx renders the field key in a code chip beside the Label whenever labelMatchesName is false (the !labelMatchesName branch of the default row) · Seat: renderer:SchemaForm · dedupe words: machine name chip, labelMatchesName, field key beside label",
      "class: a · reach: New datasource form, autoMigrate select offers raw 'off' / 'safe' · evidence: objectui datasource/DatasourceResourcePage.tsx maps prop.enum to SelectItem text String(opt); JSON Schema carries no option labels · dedupe words: datasource enum option labels, autoMigrate off safe",
      "carrier: seat · noted, not filed — driver-config keys still untitled (raw key as label): memory initialData/strictMode/persistence, mongodb options, turso encryptionKey/sync/timeout; driver-config titles have no translation path"
     ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #25370 comment 6358272094 (ready + auto-merge set 2026-10-23T05:40Z).


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:engineRetired 2026-10-22, alias of domain:server (engine surface); in-flight cards keep it until they landpm:dispatchedpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions