Skip to content

Studio pending changes: publishing a new object that has one authored field lists five system fields (created_at, created_by, owner_id, updated_at, updated_by) and the object's own label / name / nameField / sharingModel as "additions" #25890

Closed

Description

@os-steve

Filing gate ① a user-visible defect with a named landing site. Batch-of: 2026-10-25 browser pass on @objectstack/* 18.1.0 (23 cards: hotcrm 10, objectui 10, objectstack 3). Filed by the maintainer's account (os-steve) from the HotCRM pass driven in session session_01AwpXhq2nFKU6J7GmbCEmZu; ⛔ not a claim. Grade and routing are objectui triage's.

What is seen (@objectstack/console 18.1.0)

Studio → new writable package → 新建对象 「报修工单」 (repair_ticket, OWD private) → 存为草稿 → 发布. The 待发布的变更 dialog expands the one object to:

对象 1 · 报修工单 · com_test_browser_repair_ticket · 新增
  + 创建时间 created_at
  + 创建人 created_by
  + 名称 name
  + 所有者 owner_id
  + 更新时间 updated_at
  + 更新人 updated_by
其他变更:
  + label
  + name
  + nameField
  + sharingModel

The author typed a display name and an identifier. The list tells them they are publishing six fields and four "other changes". u16-publish-dialog.png; the collapsed form is fine: u15-changes.png.

reach: the public UI, measured once; every first publish of a new object shows it.

Expected

For a new object, the diff names what the author wrote (the object, its label, the authored fields) and folds the platform's system fields into one line (「含 5 个系统字段」); the object's own label / name / nameField / sharingModel are the object, not "other changes". objectstack-ai/objectui#13125 (closed) removed __search from the same list; this is the rest of that family.

Dedupe

MCP search_issues objectui "Studio publish changes list lists system fields created_at owner_id as additions for a new object" → 1 hit, objectstack-ai/objectui#13125 (closed, the __search row and API names), which did not cover system fields or the object attributes. Report: REPORT.md §7 S6.

Activity

  1. added
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    bugSomething isn't working
    and removed on Oct 25, 2026
  2. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    Triage: first grade — bug · priority:p2 · domain:ui · area:studio · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-25T13:00Z

    ⛔ Not a claim, ⛔ not a dispatch. finding comes off.

    • Pending changes lists what the author changed. Platform-provisioned system fields and derived keys belong in a collapsed 'generated' group, not in the author's diff.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Transferred 2026-10-26T02:52Z from objectstack-ai/objectui#13524, with its comments and timeline; the old URL redirects here. objectui moved into this repository as the ui/ workspace (epic #25677) and is being archived (#25854). The body is left exactly as filed.

    Paths. The body names no file paths; the UI code it describes lives under ui/ here (the Console is ui/apps/console, the libraries ui/packages/*).

    References. The bare issue numbers in the body were written in objectui and now resolve against this repository by mistake; read them as objectstack-ai/objectui#13125.

    No stale pm:dispatched or assignee to strip.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 1
    Session: session_017iXjUm1rujwDk7f3KT1Pkk (seat); implementing card thread session_01P4aqt32BH9VTnLdDgkBUMx
    Account: os-steve
    Branch: claude/project-thread-icjdxh (platform-assigned card-thread branch; a card thread can push only its assigned branch, and the name carries no issue number, so this claim is the identity record. Wording amended by the seat: an issue-shaped placeholder here was read by the Closing-Target Claim Guard as a second claimed branch)
    Worktree: the card thread's own container
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: ui/packages/app-shell/src/preview/DraftChangesPanel.tsx (the computeChangeDetail filter and the entry render) + its tests + i18n bundle keys for the new line (stop on breach; explain in the report). ⛔ ui/.github/** and the root .github/workflows/ci.yml are out of bounds (maintainer's word, ui-merge epic in flight). Changeset in the root .changeset/.
    Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a: renderer defect in ui/, the producing code is the cited ui file; no platform path covers it; reached through the public Console
    Thread-read: 6407152075
    Premise: holds (read-only premise check at origin/main 59d9181, 2026-10-26T06:36Z; spot-checked by the seat)
    Serial constraints cleared: none: no open PR touches ui/packages/app-shell/src/preview/** (open-PR file scan 2026-10-26T06:33Z; the only ui/app-shell PR #25903 is in metadata-admin/inspectors/); no in-flight domain:ui claim

    Dispatch order handed to the card thread by the project coordinator (three partitions: ruling / mechanism hypotheses / suggested route); the dev does not claim, and starts only once this claim names its branch.

  5. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
      "issue": 25890,
      "status": "done",
      "branch": "claude/project-thread-icjdxh",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/25984",
      "session": "session_01P4aqt32BH9VTnLdDgkBUMx",
      "premise_still_valid": true,
      "summary": "Measured: the /meta reads serve a new object with the injected audit columns and owner_id (system: true, not hidden) and a registry-derived nameField, and a NEW item has no published body to cancel them. computeChangeDetail now moves added/removed fields whose every definition has system: true, and a nameField equal to the spec provisionPrimary derivation, into a new generated list. The drill-in renders that list as one collapsed 'Generated by the platform (N)' line. A NEW item's keys are headed 'Includes:' instead of 'Also changed:'. The objectui#13125 hidden-system drop is unchanged. A changed system field and an author-chosen nameField stay author rows. Card repro: '+ 名称 name', 'Includes: label name sharingModel', 'Generated by the platform (6)'.",
      "tests": "head f96a8519, from ui/: pnpm exec vitest run --maxWorkers=2 packages/i18n/ packages/app-shell/src/preview/ -> Test Files 120 passed (120), Tests 1585 passed | 13 skipped (lock VERDICT command-exit 0). New DraftChangesPanel.generatedGroup-25890.test.tsx: 9 tests. Ablation via scripts/ablation-replace.mjs on the fold predicate (anchor 1->0, blob 6c92a1c5->805a4a90): 4 failed | 5 passed, restored to HEAD blob 6c92a1c5. The suite resolves the panel from src through the ui vitest alias, so there was no dist leg. pnpm --filter @object-ui/i18n --filter @object-ui/app-shell run type-check: Done/Done (VERDICT 0). ui check-i18n-call-site-keys: exit 0. eslint on the touched files: 0 errors, 6 warnings, all in code this PR does not change.",
      "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at f96a8519: 46 derived, 46 run, all exit 0. --ran (with exit codes): '46 run, 0 NOT-MEASURED (a DERIVED zero)'. check-sdui-manifest was red at 6577bce6 (the ui source hash moved). Fixed by node scripts/gen-sdui-manifest-node.mjs, which re-recorded scripts/sdui-manifest.record.json with the manifest bytes unchanged. CI families: in_progress, PR check-runs not yet read.",
      "dogfood_battery": "n/a — no ! in the PR title and Clause-②: no carries no (narrowing) arm",
      "mcp_calls": "3 — mcp__github__issue_read (get, get_comments x2); zero write tools",
      "api_writes": "2 — fleet-write relay POST /repos/objectstack-ai/objectstack/dispatches: pr_create (#25984, assignee os-steve, read-back identical 6337/6337 bytes); this os-dev-report comment on #25890",
      "deviations": [
        "Acceptance wording 'only the authored field(s) plus one folded system-fields line': the new object's authored keys label/name/sharingModel still list, under 'Includes:'. Dropping name/label for NEW items reversed 7 existing pins in 4 files (DraftChangesPanel.test.tsx, noChangeAndKeySplit-11807, posture-12517, protectionEnvelope-12594), which conflicts with 'existing tests stay green', so that half was reverted. Ruling text folds platform-provisioned fields and derived keys only.",
        "DraftChangesPanel.fieldRows-13125.test.tsx updated: its owner_id/created_at 'listed' controls (explicitly deferred to this card) now assert generated-group placement.",
        "i18n keys were added to all ten packs, not only en+zh, because all-locales-key-parity requires every pack.",
        "File surface widened by scripts/sdui-manifest.record.json (one hash line), which check-sdui-manifest requires after any ui registry-source edit.",
        "No PR activity subscription: CI convergence is the seat's, per os-dev.md."
      ],
      "files_changed": [
        ".changeset/25890-pending-changes-generated-group.md",
        "scripts/sdui-manifest.record.json",
        "ui/packages/app-shell/src/preview/DraftChangesPanel.tsx",
        "ui/packages/app-shell/src/preview/__tests__/DraftChangesPanel.fieldRows-13125.test.tsx",
        "ui/packages/app-shell/src/preview/__tests__/DraftChangesPanel.generatedGroup-25890.test.tsx",
        "ui/packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts"
      ],
      "open_questions": [
        {
          "question": "Should a NEW item also stop listing its own name and label as keys (the row already shows them)?",
          "options": [
            "A keep as shipped: listed under 'Includes:'",
            "B drop them and rewrite the 7 pins that encode 'every top-level key added' for a new item"
          ],
          "recommendation": "A, because they are authored, the ruling folds only platform-written content, and B rewrites pins owned by four other cards"
        }
      ],
      "out_of_scope_findings": []
    }
  6. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Seat: PR #25984 ACCEPT (2026-10-26T08:20Z), checks green on head f96a8519; ready + auto-merge requested. See the ## 席位核对 comment on the PR.

  7. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Seat close-out · domain:ui seat 1 · 2026-10-26T10:59Z: PR #25984 merged at 10:58Z, after two re-merges for the manifest-hash conflict (#26051 tracks the fix for that). The report's open question is answered by the maintainer: Steve chose A in the card thread (2026-10-26T09:19Z). A new object keeps listing its own label and name under "Includes:", so PR #25984 stands as shipped and no follow-up is needed. pm:dispatched is removed.

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:uipriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions