Skip to content

metadata-protocol: a pair row declared for package X is served at an addition package Z's exact address as Z's item, where the registry answers Z's own (ADR-0150 D4, red line 2) #32606

Closed

Description

@objectstack-fleet

epic:#31527#1 · os-bill · session_01Utp6CYGYEUhpi29FpjLmxT

Parent: #31527 (ADR-0150, epic red line 2: ambiguity reported, never guessed; another package's customization is never served at this address). Found by server seat 5 while working #32561, measured at PR #32557's head 075fb3188 and again after #32561's local fix, which does not change it. Detail: /mnt/project-files/server-seatC/card-32561/finding-declared-row-at-addition.md.

Premise

Setup:

  • App A (com.acme.suite) has module packages X and Z. Z depends on A and on X.
  • X ships welcome in en-US. Z ships only fr-FR, a bundle addition to X's template.
  • A.custom stores a fr-FR row declaring overrides: { package: X }, both stored and hydrated.

What happens:

  • ?package=X&member=fr-FR serves the row. This is correct: the row is declared for X.
  • ?package=Z&member=fr-FR serves the same row, restamped _packageId: Z with provenance: package and _diagnostics.valid: false.
  • The registry answers Z's own item there: getPackageScopedItem(Z, 'welcome', 'fr-FR') is Z's fr-FR.
  • CONTROL: a full holder Y (which ships en-US and fr-FR) serves its own item at ?package=Y&member=fr-FR.

So a row declared for X is served at an addition's address as that addition's item. The exact qualifier's pair arm never sees it: the item arrives already stamped Z, so exactQualifierItem returns it.

Likely surface (estimated by the finder, not measured): findServedOverlayRow and servedOverlayRowCandidates in packages/metadata-protocol/src/protocol-environment-rows.ts. These produce the pair's served-override candidate for a package that depends on the declared base.

Re-check: the harness above in packages/objectql/src/package-scoped-exact-qualifier.test.ts, reading ?package=Z&member=fr-FR.

Fix shape

  • At Z's exact address, a row whose overrides.package names X is not Z's layer. Serve what the registry answers at Z, which is Z's own item.
  • Sweep every served-override candidate reader for the same "depends on the declared base" shortcut.
  • Pin both registration orders, with CONTROLs for X's own address and for a full holder.
  • Declare the move FROM → TO with its arm, narrowing. The first-party count is expected to be 0.

Order

Same lane as #32561 (server seat 5). Lands after #32561, because both touch the exact read's pair rows.

Blocked-by: #32561

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Nov 12, 2026
  2. objectstack-fleet commented on Nov 12, 2026

    @objectstack-fleet
    ContributorAuthor
  3. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    domain:serverDomain lane — seat card indexed by label:pm:seat
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Nov 12, 2026
  4. objectstack-fleet commented on Nov 12, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#1 · os-sales · session_01L6bhgVaKJ9TPfXPRhdqx3e

    Parked by the epic #31527 release-line ruling 6824949405 (the maintainer's decision card on the epic seat's thread, project "Objectstack security ui"): this is a p2 card of the epic with no open PR, so it is not on the release line. The maintainer's follow-up (13:30Z) keeps cards that are already built on a pushed branch going to merge; this card has no branch, so it parks.
    Restart-when: the release that carries the epic #31527 release line is published (ruling on #31527, comment 6824949405)

    State: Unclaimed and unstarted; its Blocked-by: line stays for the restart. pm:blocked → pm:on-hold; no assignee. Nothing is deleted.

  5. added
    pm:on-holdDecision made, deliberately deferred — no dispatch, no nag; restart condition in the hold comment
    and removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 12, 2026
  6. objectstack-fleet commented on Nov 12, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#31527#1 · os-sales · session_01L6bhgXQnNkXTT1Wu7i7Y3i

    Un-parked · #32606 · 2026-11-12T21:35Z. The maintainer (Sales) lifted the park of unstarted p2 epic cards (ruling record 6836538545 on #31527, amending 6824949405). pm:on-hold → pm:queue; the epic seat dispatches it (see that record for the seat).


    Generated by Claude Code

  7. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:on-holdDecision made, deliberately deferred — no dispatch, no nag; restart condition in the hold comment
    on Nov 12, 2026
  8. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH

    Path: none

    Triage: H14 · pm:blocking derived · 2026-11-13T12:18Z

    ⛔ Not a claim; grade and state unchanged. Open card(s) #32849 name this card on a line-leading Blocked-by:, so the derived cache is added. It comes off when they close or drop the line.

  9. added
    pm:blockingDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-set
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 13, 2026
  10. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

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

    Claim: area-lease pilot #33059, area E1 (seat domain:server#5, rules /mnt/project-files/server-area-pilot/pilot-rules.md) · 2026-11-14T14:53Z
    Session: session_016WV4cy1y7UNVbT2QAdmgdn (area E1 thread)
    Account: os-elon-musk
    Branch: claude/project-thread-725bea
    Worktree: objectstack-issue-32606
    Domain: domain:server
    Seat: domain:server#5 (lease E1)
    File surface: packages/metadata-protocol/src/** (the moved-edit predicates and their three callers), packages/objectql/src/package-scoped-exact-qualifier.test.ts, the spec semantic entry, changesets
    Clause-②: no
    Metadata-protocol: semantic
    Responsibility: an App pair row declared for X is no longer served at a bundle addition Z's address, list, execution list or customizations read while X still ships the name (PR #33251)
    Premise: holds — measured on main e540baf in both registration orders before any edit (Z's address, list and execution list served the row stamped Z)

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

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:serverDomain lane — seat card indexed by label:pm:seatlease:E1pm:blockingDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-setpm: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