Skip to content

metadata-protocol: a rollback of the .custom pair's declared row reads as an artifact override, and a legacy overrides without basedOn is a declaration to the read side only #28644

Closed

Description

@objectstack-fleet

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

  1. Rollback intent. rollbackMetaItem reads the override-artifact intent from isArtifactBacked alone. So a rollback of the .custom pair's own declared row (stored runtime-only with its overrides declaration since metadata-protocol: the override write gate — only the base's paired .custom may declare; undeclared same names and a dependent's overrides are refused at publish, os validate and 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.
  2. Legacy declaration without basedOn. A stored legacy overrides: { package } that has no basedOn counts 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 .custom declared 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 .custom may declare; undeclared same names and a dependent's overrides are refused at publish, os validate and install #28410's gate reads overrides through OverrideDeclarationSchema.safeParse, which refuses a missing basedOn, so the door's schema gate answers 422 INVALID_METADATA when 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?

Refs: #28410, PR #28554, #28409, #28413, #28576.

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Nov 1, 2026
  2. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    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」.


    Generated by Claude Code

  3. added
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 1, 2026
  4. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    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:

    No PR of its own is owed. Closed as completed; pm:blocked comes off in the same stroke.


    Generated by Claude Code

  5. removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:studioChanging a running app without code — authoring, publish, docs and the portaldomain:serverDomain lane — seat card indexed by label:pm:seatfindingRecorded observation — held, not dispatchable until the findings triage round grades itpriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions