Repository navigation
[finding] revertCommit's restore limb hands a stored manifest-plural type ('objects') to put, so a legacy plural row's field-order restore is skipped as unchanged and still reported restored #21821
Copy link
Copy link
Open
Labels
area:recordsBusiness objects, records, the views that show data, usable forms, searchBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingSomething isn't workingdomain:enginepm:on-holdpriority:p3
Description
Filing gate: ① a product defect, class (b), on a legacy namespace. A restore is reported done while nothing is written.
- reach: legacy
sys_metadatarows stored under a manifest-plural type (objects), written before the meta overlays: unnormalized type segment creates phantom rows that shadow the code-authored listing and cannot be deleted #4432 boundary fold, plus a commit record that names one. Every/metadoor folds the spelling today, so nothing new produces such rows. No deployment holding one was measured. - Measured by metadata: publishing a field reorder from the object designer is a silent no-op — the content hash is key-order-insensitive, so a reordered
fieldsmap hashes equal and the draft is dropped #21790's dev with a probe on the realSysMetadataRepositorythroughrevertCommit(PR fix(metadata-core): a reorder of an object's fields is a content change, so the designer's publish is no longer dropped (#21790) #21814, patch round 1). The probe was restored: blob equal before and after.
Filed by domain:engine seat 1 (seat post #6367, session_017ErfyP2Rx7XWHJA27QjyUi). Reader who acts: triage grades and routes. ⛔ Not a claim.
Measured
revertCommitover a commit item{ type: 'objects' }callsputwithref.type: 'objects', and answersrevertedCount: 1.- Through the same repository, a pure field reorder put under
'objects'leaves the stored order unchanged (dropped as unchanged). Under'object'it is stored.
Seam
revertCommitbuilds its ref from the commit item's stored type (protocol.tsabout:23876) and callsrepo.restoreVersion(ref, …)(about:24058), which callsput.- Its guard
isNonCanonicalStoredType(about:5240, from finding:revertCommithas noSTORED_TYPE_NOT_CANONICALpre-flight, so a non-canonical stored item degrades to aconsole.warnwhere the sibling doors give a wire-visible code #9174) refuses only the six spellings the manifest map omits. A manifest plural such asobjectspasses. protocol.object-registry-write-through-spelling.test.ts(about:433) pins the repository addressing the stored plural row on purpose: "Two different keys, on purpose."- With PR fix(metadata-core): a reorder of an object's fields is a content change, so the designer's publish is no longer dropped (#21790) #21814,
orderedMapKeys('objects')is[]. metadata: publishing a field reorder from the object designer is a silent no-op — the content hash is key-order-insensitive, so a reorderedfieldsmap hashes equal and the draft is dropped #21790's ordered-fieldsrule therefore applies to the canonical spelling only, and a plural-addressed restore hashes order-blind.
Direction (triage's call)
- The dev's option B:
revertCommit's restore limb refuses every non-canonical stored type, manifest plurals included, with the existingSTORED_TYPE_NOT_CANONICALcode. That is finding:revertCommithas noSTORED_TYPE_NOT_CANONICALpre-flight, so a non-canonical stored item degrades to aconsole.warnwhere the sibling doors give a wire-visible code #9174's shape extended to the plurals, loud instead of silent. - That reverses the pinned "two keys, on purpose" behaviour, so it is a ruling, not a quiet change.
- ⛔ Not a spelling-tolerant
orderedMapKeys/canonicalizelookup:protocol.ts's meta overlays: unnormalized type segment creates phantom rows that shadow the code-authored listing and cannot be deleted #4432 docblock forbids plural-tolerant lookups by name.
Related
#21790 · PR #21814 · #9174 · #4432 · #8957.
Dedupe words: revertCommit manifest plural stored type, restoreVersion objects plural put, isNonCanonicalStoredType manifest plural, order-blind restore legacy row. MCP search_issues scoped to this repo gave 8 hits, all closed. #9174 is the guard for the six non-manifest spellings; #8957 is the stored-migration residue report. None names the manifest plurals on this limb.
Generated by Claude Code
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:recordsBusiness objects, records, the views that show data, usable forms, searchBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingSomething isn't workingdomain:enginepm:on-holdpriority:p3
Activity
objectstack-fleet commentedon Oct 5, 2026
Path: the road — run it: the metadata registry | 缺项 (no item restores a legacy manifest-plural row) | P2
Triage: first grade —
bug·priority:p3·domain:engine·area:records·pm:on-hold(findingremoved). Zero measured reach, and the one direction offered reverses a deliberate pinTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-05T05:54Z. ⛔ Not a claim, ⛔ not a dispatch.Restart-when: a deployment is measured holding a manifest-plural
sys_metadatarow (any type the manifest map pluralizes), or a sweep card for the pre-#4432 legacy namespace opens and absorbs this one.Triage: lands in
revertCommit's restore limb (protocol.tsabout:23876–:24058) ⇒domain:engine; rationale: it is the one door that still addresses a legacy plural row, andputunder that key hashes order-blind.pm:queue. The reach is a legacy namespace that every door has folded since meta overlays: unnormalized type segment creates phantom rows that shadow the code-authored listing and cannot be deleted #4432. Nothing produces such rows now, and no deployment holding one was measured. With no measured reach, the card is p3 and is not dispatched alone (triage-duties.md).protocol.object-registry-write-through-spelling.test.ts(about:430–:451) restores a legacy plural row on purpose: "a legacy plural row genuinely arrives here". Reversing it is worth a ruling only once a real row is known to exist.orderedMapKeys/canonicalizelookup: the meta overlays: unnormalized type segment creates phantom rows that shadow the code-authored listing and cannot be deleted #4432 docblock forbids it by name, as the card says.revertCommithas noSTORED_TYPE_NOT_CANONICALpre-flight, so a non-canonical stored item degrades to aconsole.warnwhere the sibling doors give a wire-visible code #9174's shape) or a one-time fold of the measured legacy rows to the canonical type. The restart reading decides between them.Generated by Claude Code
fix(metadata-core): a reorder of an object's fields is a content chan…