Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

Studio Pending changes: new fields are listed by API name, and the internal __search field is listed as an author change #13125

Closed

Description

@objectstack-fleet

Filing gate: ① a user-visible UX defect with a named landing point and a reproduction (pm:queue class).
Reader: the objectui lane owning packages/app-shell/src/preview/DraftChangesPanel.tsx — the fix PR there.
Dedupe (open AND closed, semantic search on objectstack-ai/objectui): "Studio pending changes panel lists fields by API name and shows internal __search field" → 2 hits (#11780 closed — __search in the form designer and records grid, not this panel; #2260 closed); none covers this item.

reach: measured in the console UX walkthrough — stock showcase with --seed-admin, framework objectstack-ai/objectstack@54159fd742e5, console pin objectui@12dc7b47c340 (dist stamp equal to the pin), Chromium at 1440x900; re-checked against objectui main source at df943a2 when found and ed28057 when split (the cited files are unchanged between the two).
type: Bug

Split out of #13115 (item 4), which folded fifteen independent defects into one card under the per-fire filing quota, which the maintainer has since ruled does not bind a concentrated test run such as a walkthrough. Split by the 18.0 QA wave dispatch session session_01CfRDy7SuTfUqaTu2AEH2Hi, on the maintainer's instruction there, verbatim: 「#13115 你可以拆」.

Where

Studio → a new object with a field "Visit Date" → Publish.

Actual

The object's rows read "+ __search, + created_at, + created_by, + name, … + visit_date", then "Also changed: + label, + name, + nameField, + sharingModel".

Expected

Field rows lead with the field label (as the item row already does since #11862), and the internal __search field is not listed as an author change.

Source

packages/app-shell/src/preview/DraftChangesPanel.tsx — the added-fields rows print the bare field name only.


Generated by Claude Code

Activity

  1. added
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    bugSomething isn't working
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Oct 20, 2026
  2. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 (priority:p3, bug)
    Session: session_01GL347th7aWQUnY2k8diSLG
    Account: os-support-ai (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-13125-pending-field-rows
    Worktree: objectui-issue-13125
    Domain: domain:ui
    Seat: domain:ui#3
    File surface: packages/app-shell/src/preview/DraftChangesPanel.tsx (read at objectui main 961b69f), the added-fields rows of an object item: each row leads with the field's label as the item row already does, and the internal __search field is not listed as an author change, using the hidden-system-field rule the Studio Data pillar already applies (the objectui#11780 pin DataPillar.hiddenSystemFields-11780.test.tsx), not a second list of internal names. Tests beside it; one .changeset/13125-pending-field-rows.md (@object-ui/app-shell patch). ⛔ Not the panel's summary line (queued objectui#13147, pluralization). ⛔ Not the field pickers (queued objectui#13152). ⛔ No new package export. Stop on breach; explain in the report.
    Container & model: M, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui over this surface reads no path-derived mandate)
    Clause-②: no
    Responsibility: the risk is produced by objectui's own Studio pending-changes panel, which prints each added field's bare API name and lists the server-owned __search field as if the author added it. The platform path that covers it: the item row already leads with the object's label (objectui#11862); the field rows do not. Who reaches it: every author who publishes a new object from Studio (the card's "Visit Date" object).
    Thread-read: none
    Serial constraints cleared: open objectui PRs touching DraftChangesPanel.tsx: none (the eleven open PRs' file lists were read at this claim). Fold-or-serial: queued objectui#13147 (the summary line's "2 items · 2 flow") shares DraftChangesPanel.tsx; not folded, it fails fold gate ① (pluralization of the summary, not the field rows), so it runs after this card. Queued objectui#13152 (pickers offer __search) shares the internal-field rule but not a file; not folded, it fails fold gate ② (other surfaces: the list-view inspector and the Notify node picker).

    Why Clause-②: no: a display fix inside @object-ui/app-shell's Studio panel. No export, prop, schema key or accept set moves. If the route needs one, the dev stops and reports.

    Claimed at: 2026-10-20T07:56Z

  3. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 13125,
      "status": "done",
      "branch": "claude/issue-13125-pending-field-rows",
      "pr": "https://github.com/objectstack-ai/objectui/pull/13196",
      "session": "session_01GL347th7aWQUnY2k8diSLG (subagent run; the parent seat's harness-stamped id)",
      "premise_still_valid": true,
      "summary": "Verified at objectui main 961b69f: the drill-in's field rows printed the bare name, and a NEW object's draft read serves the platform-stamped columns (objectstack metadata-protocol materializeFromRegistry calls the registry's materializeServedObjectOnto on the /meta read exits), so __search read as added. computeChangeDetail now drops a field row when every definition of that field in the two bodies carries system: true AND hidden: true, by importing the Data pillar's existing isStudioHiddenSystemField (objectui#11780), no second name list; it also returns fields.labels (a Map) read off the two bodies the drill-in already fetches (no new fetch). A new FieldRow leads each added/changed/removed field row with the label and shows the machine name beside it in monospace; no label, or a label equal to the name, reads as before. PM assumptions 1-3 held; assumption 4: the rule hides only system+hidden (__search, owning_business_unit_id, organization_id), so audit columns and owner_id stay listed, now by label, and are reported, not widened. Row selector for the seat's browser reading: [data-testid=\"draft-entry-detail\"] [data-testid=\"draft-field-row\"] (label = the p's own text, name = its span.font-mono).",
      "tests": "New packages/app-shell/src/preview/__tests__/DraftChangesPanel.fieldRows-13125.test.tsx, 11 tests (fixtures copy provisionSearchCompanion, OWNING_BUSINESS_UNIT_FIELD_DEF and the AUDIT_FIELD_DEFS created_at row as the 11780 pin does; controls internal_note, owner_id, created_at stay listed). At head e1ac777: `pnpm exec vitest run packages/app-shell/src/preview/` → exit 0, 'Test Files 29 passed (29) / Tests 211 passed (211)'; `pnpm exec vitest run` on StudioDesignSurface.publishPosture-12517, StudioDesignSurface.publishCount-11807, DataPillar.hiddenSystemFields-11780, DraftPreviewBar → exit 0, 'Test Files 4 passed (4) / Tests 25 passed (25)'. Ablation (fix committed first at 7ed0889; test imports the source by relative path, so no dist leg; each via objectstack scripts/ablation-replace.mjs wrap mode under the lock: anchor x1 → x0, blob 3bfe8862e2b9 changed, restore proven blob == HEAD 3bfe8862e2b9 and git diff HEAD empty): (1) hidden-column filter → `return true;`: 'Tests 4 failed | 7 passed (11)', the four hidden-column assertions red, the marks-one-body-lacks control green; (2) label lead → `const lead = undefined as string | undefined;`: 'Tests 3 failed | 8 passed (11)', the three render assertions red, pure label tests green. Direction observed: red, as predicted for both. A first draft of the file also carried a __proto__ case that went red on the PRE-EXISTING diffFields (byName is a plain object), not on this change; it was removed and recorded in the PR's Acceptance notes.",
      "gates": "Local, hand-derived for objectui per the dispatch (objectui has no dispatch-gates.mjs, so no --ran reconciliation exists for it), all on head e1ac777, exit captured before any pipe: `pnpm exec vitest run packages/app-shell/src/preview/` exit 0; `pnpm --filter @object-ui/app-shell type-check` exit 0 (script echoed: 'tsc --noEmit && tsc -p tsconfig.test.json'; the test project includes src/**/*.test.tsx; lock VERDICT command-exit 0); `node scripts/check-changeset-presence.mjs` exit 0 ('2 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s): .changeset/13125-pending-field-rows.md'); `pnpm check:new-line-citations` exit 0 ('VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only → exit 0'); `pnpm check:control-bytes` exit 0 ('OK (scanned 9786 tracked text file(s); skipped 93 binary)'). Not owed: i18n families (no key added or renamed), doc families (no README or content/docs edited). Dependency closure `pnpm turbo run build --filter='@object-ui/app-shell^...' --concurrency=2` exit 0 (28 cached). CI check-runs on e1ac777 as read at report time (35 total): success = Changeset Fixed Group Check, Changeset Bump Policy, label; skipped = Test (coverage), Test (coverage shard matrix), dependabot; in_progress = Type Check, Lint, Test (shard 1/16 .. 16/16), Test (dist pins), Build & E2E, Build Docs, Bundle Analysis, Repo Gates, Line Citation Gate, Changeset Declaration, Changeset Overwrite Report, Changeset Claim Re-read, Governed Surface Queue Guard, Live E2E (informational). Not waited on.",
      "line_budget": {
        ".changeset/13125-pending-field-rows.md": "+11 -0",
        "packages/app-shell/src/preview/DraftChangesPanel.tsx": "+117 -20",
        "packages/app-shell/src/preview/__tests__/DraftChangesPanel.fieldRows-13125.test.tsx": "+284 -0"
      },
      "files_changed": [
        ".changeset/13125-pending-field-rows.md",
        "packages/app-shell/src/preview/DraftChangesPanel.tsx",
        "packages/app-shell/src/preview/__tests__/DraftChangesPanel.fieldRows-13125.test.tsx"
      ],
      "deviations": [
        "Scope: the claim names the ADDED-field rows; the changed and removed field rows got the same label-first FieldRow and the same filter, because the card's Expected reads 'Field rows lead with the field label' and it is one component, one defect class, one helper. Declared in the PR body under Scope; no other file moved.",
        "Behaviour beyond the rows: an UPDATE whose bodies differ only in a hidden-system column now reads 'No differences detected' once expanded and loses its Update badge (the 11807 no-change mark reads the same filtered diff). Declared in the PR body and the changeset.",
        "Local test scope narrowed to the preview directory plus four Studio files that render the real panel or pin the rule; the full app-shell package and repo-wide farm are CI's. Evidence for the narrowing: a git grep for draft-entry-detail, draft-entry-toggle or computeChangeDetail over every package's tests hits 10 files, all in packages/app-shell/src/preview/, and no test mocks the two newly imported modules.",
        "Commit trailers use the model-free pair AGENTS.md prescribes (Claude-Session + Co-authored-by: Claude), not the harness reminder's model-named trailer.",
        "Browser reading not taken (not owed per dispatch); selector named in summary and PR body."
      ],
      "mcp_calls": "0 — no MCP GitHub tool was called",
      "api_writes": "2 — (1) pr_create through scripts/pm/fleet-write/dispatch.mjs: POST /repos/objectstack-ai/objectstack/dispatches (HTTP 204), relay run 39392976525 executed POST /repos/objectstack-ai/objectui/pulls (PR 13196, draft, body read back 6303/6303 bytes identical) and its assignees leg POST /repos/objectstack-ai/objectui/issues/13196/assignees (os-support-ai); (2) this os-dev-report via scripts/pm/post-stamped.mjs --comment=13125 (transport: the same fleet-write relay, POST /repos/objectstack-ai/objectstack/dispatches): POST /repos/objectstack-ai/objectui/issues/13125/comments. Plus git push of the branch (3 pushes, not REST). REST reads only otherwise (issue 13125 and its comments, PR 13196, check-runs).",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: the dispatching seat (domain:ui seat 3, per dispatch assumption 4) · noted, not filed — after this fix a NEW object's Pending changes drill-in still lists the audit columns (created_at, created_by, updated_at, updated_by) and owner_id as added fields: the platform injects them with system: true but without hidden: true (AUDIT_FIELD_DEFS, OWNER_FIELD_DEF), so isStudioHiddenSystemField keeps them. Whether 'injected but not hidden' counts as an author change in this sheet is a product decision the existing rule does not answer. Dedupe words: pending changes audit fields; created_at listed new object; injected system columns publish review; owner_id pending changes"
      ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #13196 comment 6286925581 · domain:ui seat 3, session_01GL347th7aWQUnY2k8diSLG · 2026-10-20T08:36Z · head e1ac777 · landing through the merge queue.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:ui seat 3, session_01GL347th7aWQUnY2k8diSLG · 2026-10-20T08:51Z

    reading result
    PR #13196 MERGED through the merge queue, merge commit e81a37c on main
    queue branch gh-readonly-queue/main/pr-13196-* absent (git ls-remote: 0 refs)
    origin/main e81a37c, preview/DraftChangesPanel.tsx data-testid="draft-field-row" (1) · isStudioHiddenSystemField (3) · the old bare added-field row markup (0)

    State: the card closed completed by the PR's Fixes; pm:dispatched is removed in this pass. Queued objectui#13147 (the panel's summary pluralization) shares this file and is free to take now that this landed.


    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:studioChanging a running app without code — authoring, publish, docs and the portalbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions