Maintainer ruling 2026-08-09 on #6853 (「接受你的建议」): option C ships first, as this standalone S-class card, ahead of #6853's direction-B ADR work.
The outage this closes (measured, #6853 dev report P3/P6 — no escape hatch needed)
A stored overlay row for a packaged object + loadMetaFromDb's ungated per-boot registerObject replay destroys the packaged contributor in place; isArtifactBacked flips false; a subsequent DELETE /meta/object/:name reaches tier 3 of restoreArtifactRegistryView, the "NEVER RETIRES A CODE-SHIPPED OBJECT" guard is blind (it reads the very predicate the overwrite falsified), and unregisterObject removes the whole entry: every data-plane call on the object 404s (OBJECT_NOT_FOUND) until process restart, while the table still holds the data and the delete receipt says reset: true.
Deliverable
In tier 3: refuse to unregisterObject when the owner contributor's packageId names a currently-installed package — the package binding is measured to survive the overlay overwrite (the definition does not, which is why isArtifactBacked cannot be trusted here). Reproduce the P3/P6 probe from the #6853 dev report (harness: protocol-delete-object-registry-heal.test.ts shape) as the regression pin, both directions.
Accepted cost (ruled, do not re-litigate)
A package-bound runtime-authored object (Studio package workspace, #4636) is indistinguishable from a package-shipped one by binding alone, so some genuinely deleted objects stay registered until restart — listable-but-rowless. Per the walk's own REGISTER WIDE / RETIRE NARROW argument this is the cheap direction; the honest fix for the distinguishability itself is #6853's direction B (overlay as its own contributor layer), which re-arms isArtifactBacked.
Region note
Lands in restoreArtifactRegistryView (tier 3) — disjoint from #6190's in-flight saveMetaItem two-tier gate region and from #6924's assertSortFieldsExist. Verify disjointness at claim time; STOP on overlap.
Refs: #6853 (ruling + full measurement), #6818 (name-addressed verb), #6725 (dormant write side), #6995 (write-side sibling, subsumed by B), ADR-0005, ADR-0029.
Maintainer ruling 2026-08-09 on #6853 (「接受你的建议」): option C ships first, as this standalone S-class card, ahead of #6853's direction-B ADR work.
The outage this closes (measured, #6853 dev report P3/P6 — no escape hatch needed)
A stored overlay row for a packaged
object+loadMetaFromDb's ungated per-bootregisterObjectreplay destroys the packaged contributor in place;isArtifactBackedflips false; a subsequentDELETE /meta/object/:namereaches tier 3 ofrestoreArtifactRegistryView, the "NEVER RETIRES A CODE-SHIPPED OBJECT" guard is blind (it reads the very predicate the overwrite falsified), andunregisterObjectremoves the whole entry: every data-plane call on the object 404s (OBJECT_NOT_FOUND) until process restart, while the table still holds the data and the delete receipt saysreset: true.Deliverable
In tier 3: refuse to
unregisterObjectwhen the owner contributor'spackageIdnames a currently-installed package — the package binding is measured to survive the overlay overwrite (the definition does not, which is whyisArtifactBackedcannot be trusted here). Reproduce the P3/P6 probe from the #6853 dev report (harness:protocol-delete-object-registry-heal.test.tsshape) as the regression pin, both directions.Accepted cost (ruled, do not re-litigate)
A package-bound runtime-authored object (Studio package workspace, #4636) is indistinguishable from a package-shipped one by binding alone, so some genuinely deleted objects stay registered until restart — listable-but-rowless. Per the walk's own REGISTER WIDE / RETIRE NARROW argument this is the cheap direction; the honest fix for the distinguishability itself is #6853's direction B (overlay as its own contributor layer), which re-arms
isArtifactBacked.Region note
Lands in
restoreArtifactRegistryView(tier 3) — disjoint from #6190's in-flightsaveMetaItemtwo-tier gate region and from #6924'sassertSortFieldsExist. Verify disjointness at claim time; STOP on overlap.Refs: #6853 (ruling + full measurement), #6818 (name-addressed verb), #6725 (dormant write side), #6995 (write-side sibling, subsumed by B), ADR-0005, ADR-0029.