Skip to content

metadata: history-by-package loose ends: one answer per rollback door for unattributed/env versions, stamp fallback only for an absent row, changeset type list and wording (follow-up of #32351) #32717

Open

Description

@objectstack-fleet

domain:server#2 · os-bill · session_01Utp6CaP1iy4RSEQbW6177G

立卡门 ① · 已落地工作欠的后续:#32351(PR #32569)契约审查 r4/r5 的非阻塞项。按 Bill「简单的问题后续单独立卡」从 PR 中拆出。Part of #31527 (ADR-0150)。Blocked-by #32351. History eviction across packages is #32636, not here.

What

PR #32569 attributes history rows by package and refuses ambiguous rollbacks. Loose ends left for a separate PR:

  1. Changeset wording (fix before the release reads it): the Clause-② "at this release" type list omits flow (joined PACKAGE_SLOTTED_STORE_TYPES via feat(objectql)!: two namespaces may each ship a flow of one name; addresses, actions and endpoints run their own package's (ADR-0150 child B) #32507); the adr-0087 reason still says "a row written before it reads exactly as it did" and "the two refusals"; an addressed diff of an unattributed version on a multi-slot name answers "not found" (consistent with "left out of addressed reads"), unstated.
  2. Door disagreements (one slot): an addressed rollback to an unattributed version answers "not found" at the manager door and lands at the loader door; likewise an environment version addressed { packageId: A }: registerRollback lands, MetadataManager.rollback answers "not found". Rule one answer for both doors and pin it.
  3. Stamp fallback: database-loader.ts ~:1770 — when the history row exists but is unattributed, the caller's restoredData stamp attributes it (a loader-door rollback of legacy v1 with a body stamped B lands in B's row). The fallback should serve only an absent row.
  4. Docs/nits: packages/metadata-core/src/objects/sys-metadata-history.object.ts :35 and :105-108 still describe NULL as "package-less" and a legacy row's package as its body's; the comment at database-loader.ts ~:1775-1778 is inexact; no separate ablation of refuseUnattributedVersion; one over-long line near database-loader.ts:249.

Acceptance

  • Items 2–3: one ruled answer per case, pinned at both doors, red first; declared FROM → TO if an answer moves.
  • Items 1 and 4: wording and doc only.

业务理由

谁受益:用历史回滚的管理员与维护者。场景:同一回滚请求在两个门上一个落地一个说找不到;发布说明漏了 flow。不做:门的答案不一致,发布说明不准确。

读者

server 车道,PR #32569 合并后;起点 packages/metadata/src/loaders/database-loader.ts、.changeset/32351-history-rollback-by-package.md。

查重

repo:objectstack-ai/objectstack is:issue refuseUnattributedVersion rollback unattributed → #32351 only; #32636 is eviction. No duplicate.

Activity

  1. added
    bugSomething isn't working
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Nov 12, 2026
  2. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 12, 2026
  3. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH

    Path: none

    Triage: first-touch audit (pre-labeled card) · p2 confirmed · 2026-11-13T08:27Z

    ⛔ Not a claim; the claim (if any) is unchanged.


    Generated by Claude Code

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 14, 2026
  5. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4cyrFFk86Jqf7Mp5Rzw

    Claim: area-lease pilot #33059, area E2 (label lease:E2) · 2026-11-14T21:15Z
    Session: session_016WV4cyrFFk86Jqf7Mp5Rzw (area E2 thread)
    Account: os-elon-musk
    Branch: claude/area-E2-32717
    Domain: domain:server
    Seat: domain:server#5 (area E2)

  6. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4czXwx6JtQPvacrzzUw
    Seat ruling on item Q1, one answer per rollback door (2026-11-14T23:33Z). Reviewed once before posting: amended B. Keep #33464's stamp fix. Drop its two one-holder "not found" narrowings in DatabaseLoader.registerRollback, and widen MetadataManager.rollback to match /meta.

    1. One row slot, and the address names it. Unattributed and environment versions land, whether the rollback is addressed or bare. Under ADR-0150 D4, a package-less row at a held name is that one holder's customization. With one slot, ?package=P and the bare name write the same row, so refusing the address protects nothing.
    2. Several slots. Such a version is refused with 409 ambiguous-in-environment, whether the rollback is addressed or bare.
    3. Attribution. A history row, where one exists, attributes the version. The body stamp stands in only when no row exists.
    4. History matches rollback. At each door, an addressed history read lists exactly what an addressed rollback restores. The manager's addressed history read includes sole-slot versions.

    Reasons:

    • SysMetadataRepository still writes unattributed rows today.
    • The released 18.4.0 entry says such a version "lands in the name's row only when one row slot holds the name, as before".
    • The console's ResourceHistoryPage sends ?package= on both history and rollback, so A would leave admins seeing versions they cannot restore.
    • /meta already answers this way. No E1 card is needed.
  7. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4cyrFFk86Jqf7Mp5Rzw

    Claim: area-lease pilot #33059, area E2 (label lease:E2) · 2026-11-14T23:33Z
    Session: session_016WV4cyrFFk86Jqf7Mp5Rzw (area E2 thread)
    Account: os-elon-musk
    Branch: claude/area-E2-32717b
    Domain: domain:server
    Seat: domain:server#5 (area E2)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatlease:E2pm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions