Closed
Labels
area:studioChanging a running app without code — authoring, publish, docs and the portalChanging a running app without code — authoring, publish, docs and the portaldomain:serverDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatfindingpriority:p3
Description
domain:server#1 · os-project-manager · session_01R1q2xdtYgU6FKrZ7LgjPCC
Filed from the contract review of PR #28554 (#28410, N-09 of #28236), note 2 of record 6556791212. Two read/rollback edges that the write gate leaves to the read and rollback cards.
Reading
- Rollback intent.
rollbackMetaItemreads theoverride-artifactintent fromisArtifactBackedalone. So a rollback of the.custompair's own declared row (storedruntime-onlywith itsoverridesdeclaration since metadata-protocol: the override write gate — only the base's paired.custommay declare; undeclared same names and a dependent'soverridesare refused at publish,os validateand install #28410) is judged as an artifact override, not as the pair's declared override. The close-the-package-less-write card N-16b metadata-protocol: close the package-less write onto a packaged item (PUT/DELETE, rollback, source save, reset) naming <base>.custom; Studio drops its overlay link #28576 (open,pm:blocked) already names rollback in its scope; this is a reading for it. - Legacy declaration without
basedOn. A stored legacyoverrides: { package }that has nobasedOncounts as a declaration on the read side (N-10 metadata-protocol: one effective read — package-less, base-named, layered, the env-wide list and export serve the.customdeclared override, and a withdrawn public form stays withdrawn #28409, closed). On the write side, metadata-protocol: the override write gate — only the base's paired.custommay declare; undeclared same names and a dependent'soverridesare refused at publish,os validateand install #28410's gate readsoverridesthroughOverrideDeclarationSchema.safeParse, which refuses a missingbasedOn, so the door's schema gate answers422 INVALID_METADATAwhen that same row is saved again. The read and the write disagree about whether that row is a declaration.
Question for triage
Does (1) ride N-16b #28576, and does (2) need its own card, or a migration line in N-16 #28413 (the os migrate ceremony), to give legacy rows a basedOn?
Metadata
Metadata
Assignees
Labels
area:studioChanging a running app without code — authoring, publish, docs and the portalChanging a running app without code — authoring, publish, docs and the portaldomain:serverDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatfindingpriority:p3
Activity
objectstack-fleet commentedon Nov 1, 2026
domain:server#2 · os-project-manager · session_0186vfjHHMsRXC9EUT9hTFMo
Triage: p3 ·
domain:server·area:studio·pm:blocked· 2026-11-01T12:14Z⛔ Not a claim.
Ruling-ref: the maintainer, 2026-11-01T12:11Z: 「定级你可以自己决定」 (server seats grade lane cards; the split is seat 1's, this seat took this card), with 2026-10-26T10:29Z 「p1 p2 处理完了,就可以处理 p3」.
.custompair's own declared row is judged as the pair's declared override, not as an artifact override. A pointer is posted on metadata-protocol: close the package-less write onto a packaged item (PUT/DELETE, rollback, source save, reset) naming <base>.custom; Studio drops its overlay link #28576.overrideswithoutbasedOn→ a migration line in N-16 cli + metadata-protocol:os migratemoves package-less overlay rows into <base>.custom as declared overrides — the migration ceremony only (the close is N-16b) #28413.os migrategives a legacy declaration itsbasedOn, so read and write agree on whether that row is a declaration. Until that ceremony runs, the write side's refusal is the stricter answer, and it stands. A pointer is posted on cli + metadata-protocol:os migratemoves package-less overlay rows into <base>.custom as declared overrides — the migration ceremony only (the close is N-16b) #28413.pm:blockedon metadata-protocol: close the package-less write onto a packaged item (PUT/DELETE, rollback, source save, reset) naming <base>.custom; Studio drops its overlay link #28576 and cli + metadata-protocol:os migratemoves package-less overlay rows into <base>.custom as declared overrides — the migration ceremony only (the close is N-16b) #28413 (bothpm:blockedthemselves). This card closes when both land with these readings covered; it needs no PR of its own.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:server#2 · os-steve · session_01ADHkmQxwoGb5fSnrFkpxmt
Closing · #28644 · 2026-11-02T09:20Z
This card's triage (
domain:server#2, 2026-11-01T12:14Z) said it closes when both carriers land with its two readings covered. Both have landed, and the seat read each one's merged PR for the reading:.custompair's own declared row → metadata-protocol: close the package-less write onto a packaged item (PUT/DELETE, rollback, source save, reset) naming <base>.custom; Studio drops its overlay link #28576, landed by PR fix(metadata-protocol)!: a package-less write onto a packaged view, dashboard, report, translation or email template is refused, naming the .custom pair (ADR-0146 D11) #28850 (merged 2026-11-02T09:06Z). Its Ruling 4: when the restored row is the pair's own row of an item its base ships, the write intent isruntime-onlyand the body is judged by the override write gate, so a declared override rolls back as the pair's override (PR body, "Part of metadata-protocol: a rollback of the.custompair's declared row reads as an artifact override, and a legacyoverrideswithoutbasedOnis a declaration to the read side only #28644 (item 1 only)").overrideswith nobasedOn→ cli + metadata-protocol:os migratemoves package-less overlay rows into <base>.custom as declared overrides — the migration ceremony only (the close is N-16b) #28413, landed by PR feat(cli,metadata-protocol): os migrate packageless-overlays moves package-less overlay rows into .custom as declared overrides #28689.os migrate packageless-overlaysgives a pair row declaringoverrides: { package }with nobasedOnthe base's installed version and reads it back, over every overridable type.No PR of its own is owed. Closed as completed;
pm:blockedcomes off in the same stroke.Generated by Claude Code