Repository navigation
fix(app-shell): pending changes folds platform-written system fields and derived keys into one collapsed line - #25984
Merged
Conversation
…and derived keys into one collapsed group A new object's drill-in listed the injected audit columns and owner_id as fields the author added, and its own name / label / derived nameField under "Also changed". System fields (system: true) the publish adds or removes and a nameField equal to the registry's provisionPrimary derivation now fold into a collapsed "Generated by the platform (N)" line; a new item's name and label (shown on its row) are no longer listed as keys. Claude-Session: https://claude.ai/code/session_01P4aqt32BH9VTnLdDgkBUMx Co-authored-by: Claude <noreply@anthropic.com>
…bject repro; keep name/label rows Claude-Session: https://claude.ai/code/session_01P4aqt32BH9VTnLdDgkBUMx Co-authored-by: Claude <noreply@anthropic.com>
…nges edit (manifest bytes unchanged) Claude-Session: https://claude.ai/code/session_01P4aqt32BH9VTnLdDgkBUMx Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
席位核对 · ACCEPT · seat
|
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Oct 26, 2026
…-icjdxh # Conflicts: # scripts/sdui-manifest.record.json
…anifest bytes unchanged) Claude-Session: https://claude.ai/code/session_01P4aqt32BH9VTnLdDgkBUMx Co-authored-by: Claude <noreply@anthropic.com>
…-icjdxh # Conflicts: # scripts/sdui-manifest.record.json
…anifest bytes unchanged) Claude-Session: https://claude.ai/code/session_01P4aqt32BH9VTnLdDgkBUMx Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Oct 26, 2026
This was referenced Oct 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Steve · project thread
Fixes #25890
Clause-②: no
Metadata-protocol: none
What changes
Studio's pending-changes drill-in (
DraftChangesPanel) listed a new object's platform-injected system columns (created_at,created_by,owner_id,updated_at,updated_by) as fields the author added, and its derivednameFieldunder "Also changed", next to the one field the author actually typed. Following the triage ruling ("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."):computeChangeDetail, a field this publish adds or removes, where every definition the two bodies carry hassystem: true, moves to a newgeneratedlist.system: trueis the spec's own mark (FieldSchema.system: "Auto-injected system/audit field … Tools that surface system fields separately from author-declared business fields should branch on this flag"). No name list is kept in the panel. The read localises the injected columns' labels, so byte-identity againstinjectedSystemColumnDefscannot answer this on a served body; the mark can.nameFieldgoes togeneratedwhen its value equals the@objectstack/spec/dataprovisionPrimaryderivation over the body without the pointer. That is the same test the registry's write-side strip (stripProvisionedPrimaryFrom) uses. A pointer naming a field the derivation would not pick is the author's choice and stays an author row.owner_id) stays an author row: the platform injects the same definition on both reads, so a difference is an edit. The objectui#13125 rule (systemANDhidden, e.g.__search) still drops those rows outright, unchanged.preview.changes.detailNewKeys,preview.changes.generatedGroup) are added to all ten packs, because the key-parity test requires every pack.scripts/sdui-manifest.record.json: the registry-source hash is re-recorded bynode scripts/gen-sdui-manifest-node.mjs. The manifest bytes did not change (sha2561f6e1ccb925a…, 106 components).The card's repro (new object 「报修工单」, OWD private) now expands to
+ 名称 name, thenIncludes: + label + name + sharingModel, then one collapsedGenerated by the platform (6)line (the five system columns plusnameField).Acceptance notes
label,nameandsharingModelare still listed, under "Includes:". The ruling folds platform-provisioned fields and derived keys, and those three are authored in the create dialog. A first cut droppedname/labelfor new items (the row already shows them), but that reversed seven existing pins in four files (DraftChangesPanel.test.tsx"classifies a NEW item",noChangeAndKeySplit-11807,posture-12517,protectionEnvelope-12594), which the dispatch asked to keep green. So it was reverted. If the maintainer wants a new item's name/label hidden as well, that is a follow-up with those pins rewritten deliberately.DraftChangesPanel.fieldRows-13125.test.tsx,owner_idandcreated_atwere "listed" controls ("this card does not widen the rule"). They now assert placement in the generated group, and that the drop rule still leaves them in the detail behind the toggle.system: trueon it, reads as platform-written when added. That is the spec's stated meaning of the mark.Tests
At head
f96a8519:pnpm exec vitest run --maxWorkers=2 packages/i18n/ packages/app-shell/src/preview/(fromui/): Test Files 120 passed (120), Tests 1585 passed | 13 skipped.DraftChangesPanel.generatedGroup-25890.test.tsx(9 tests). It pins the card's repro using the spec's realinjectedSystemColumnDefswith zh-localised labels, plus four controls: a system field the author changed, an author-chosennameField, a system field added on an update, and an audit-shaped field without the mark.scripts/ablation-replace.mjs(anchor 1 to 0, blob6c92a1c5…to805a4a90…). The new suite went 4 failed | 5 passed. The file was restored to its HEAD blob6c92a1c5…. The suite resolvesDraftChangesPanelfrom source through the ui vitest alias, so no dist rebuild was involved.pnpm --filter @object-ui/i18n --filter @object-ui/app-shell run type-check(bothtsc --noEmitandtsconfig.test.json): Done / Done.node scripts/check-i18n-call-site-keys.mjs(ui): exit 0. eslint on the touched files: 0 errors. The 6 warnings are all in code this PR does not change.Gates
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackatf96a8519derived 46 families. All 46 ran with exit 0.--ranreconciliation: "46 derived famil(ies) accounted for — 46 run, 0 NOT-MEASURED (a DERIVED zero …)". At the earlier head6577bce6,check-sdui-manifestwas red because the ui source hash had moved. The regeneration commit fixed it, and the check is green atf96a8519. CI families are left to the PR's check-runs.Out of bounds and untouched:
ui/.github/**and the root.github/workflows/ci.yml.Generated by Claude Code