Skip to content

metadata-protocol: the layered read of an email template answers 404 for a locale the <base>.custom pair adds, while the list, by-name and send serve it (#28802 follow-up, ADR-0146 D8) #28830

Closed

Description

@objectstack-fleet

domain:server#2 · os-project-manager · session_0186vfjHHMsRXC9EUT9hTFMo

Filing gate: ① a gap named by the PR #28828 contract review (card #28802) and noted on PR #28800. Filed by domain:server seat 2. ⛔ Not a claim. Graded by this seat p3 under 「定级你可以自己决定」 (Leehom, 2026-11-01): one read of five disagrees for a customization that the other four now serve.

Reach: an admin or tool reading the layered view of a vendor email template whose <base>.custom pair adds a locale the base does not ship.

What happens (read by the review, after PR #28828)

  • The list, the by-name reads, the execution list and the send serve a pair-added locale on the base's address.
  • The layered read /meta/email_template/<name>/layers?package=<base>&member=<locale> still answers 404 for it. ADR-0146 D8 lists the layered read among the reads that must agree.
  • Not measured: the version token the base-named read returns for a pair-added member. No door edits such a member through the base's address today, so it is dormant; measure it alongside.

Wanted

The layered read on the base's address answers a pair-added member with the pair's layer, as the other reads do, and a dependent's added member stays 404 there (served under its own package). Measure first; red first on the showcase pair.

Dedupe: searched layers member email_template; #28337 is the door-only refusal on the layered view, not this. New.

Links back: #28802, PR #28828, PR #28800, ADR-0146 D8.


Generated by Claude Code

Activity

  1. added
    bugSomething isn't working
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    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

    Claim: PM loop round 4 · card thread · 2026-11-01T23:20Z
    Session: session_0186vfjHHMsRXC9EUT9hTFMo (the seat); the card thread is session_01FEkQ5m2Ryfx2Wubuz716mw
    Account: os-project-manager (the seat's linked user; the card's assignee)
    Branch: claude/project-thread-p5198q (the card thread's harness-pinned branch; it names no issue, so this claim is the identity record)
    Worktree: the card thread's own container checkout
    Domain: domain:server
    Seat: domain:server#2
    Ruling-ref: the maintainer, 2026-11-01T03:46Z: 「server 车道现在就是你负责,任务有一大堆啊,都可以派,包括 p3」, with 2026-10-26T10:29Z 「p1 p2 处理完了,就可以处理 p3」. With 2026-11-01T12:11Z 「定级你可以自己决定」; graded p3 by this seat at filing. Option A (the #28802 pick) extends to the layered read.
    File surface: the layered read path in packages/metadata-protocol/src/ (one seam, PR #28828's predicate, bundle types from the registry key table); dogfood and unit tests; changeset
    Container & model: M, mode:thread, model: opus (--tier names no path mandate: PM's call, default), effort: medium
    Clause-②: yes (widening) expected — a layered read that answered 404 for a pair-added member now answers; the dev measures and declares
    Metadata-protocol: none (expected; the dev measures and declares)
    Responsibility: the dev serves a pair-added member on the base's layered read and keeps another package's member 404 there, measures the version token, red first with ablation; the seat reviews and lands
    Thread-read: none
    Premise: named by both PR #28828 contract-review records (ADR-0146 D8)
    Serial constraints cleared: PR #28828 merged (1920e480); the branch restarts from origin/main after the squash; seat 1's #28831 works nearby, overlap re-read before pr_create
    Resume-from: none — fresh from origin/main

    State: → pm:dispatched, assigned to os-project-manager, recorded by this claim.


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-project-manager · session_01FEkQ5m2Ryfx2Wubuz716mw
    os-dev-report
    {
    "issue": 28830,
    "status": "done",
    "branch": "claude/project-thread-p5198q",
    "pr": "#28845",
    "session": "session_01FEkQ5m2Ryfx2Wubuz716mw",
    "premise_still_valid": true,
    "summary": "Option A extended to the layered read. getMetaItemLayered: when the served-row resolution finds no row at a bundle member on a package's address, the pair's own row at that member is the overlay, read by a new private findPairAddedMemberRow (PR #28828's pairOfAddedMember predicate + findServedOverlayRow naming the pair). readMetaItem's #28802 branch now calls the same helper, so one predicate and one read serve both. Layers of a pair-added fr-FR on BASE or package-less: {code:null, overlay:pair row, effective:pair row}; a dependent's fr-FR stays 404 there and answers under ?package=DEPENDENT; base en-US, a declared en-US override and non-bundle types unchanged.",
    "tests": "Dogfood email-template-dependent-unshipped-locale-read.dogfood.test.ts: RED on main 1920e48 2 failed / 10 passed (pair layered case, pair-beside-dependent case); GREEN at c53513b 12/12 (os-verify-lock VERDICT command-exit 0). objectql src/protocol-bundle-member-base-address.test.ts: new [#28830] describe, 4 cases; GREEN 10/10. Ablation (one seam leg): if (row) served = { row }; -> void row; via ablation-replace.mjs (restore blob == HEAD verified), metadata-protocol rebuilt, ablation-dist-preflight --absent: unit 2 red / 8 green, dogfood 2 red / 10 green, only the pair-added cases; dependent and controls green; restore build, marker present again. metadata-protocol typecheck+test: 297 files passed 4 skipped, 22080 tests passed. objectql typecheck+test: 521 files, 10008 tests passed.",
    "gates": "Local at c53513b: dispatch-gates --commands derived 66; 66 run; 65 exit 0 first time; check:dual-build-cjs-loads exit 3 (7 out-of-closure packages unbuilt), built under the lock, re-run exit 0. dispatch-gates --ran on pm-orders/server/28830-gates-ran.txt: 66 run, 0 NOT-MEASURED (derived zero), exit 0. Full dogfood battery not run: (widening) arm, no ! title.",
    "version_token": "Measured on main 1920e48, showcase, pair-added fr-FR: by-name read naming the base -> version: null; package-less and pair-named reads -> the pair row's token (hmac-sha256:a8a29081...); base en-US naming the base -> null. readVersionToken reads at the request's address (the base has no row at fr-FR). Not the same seam (OCC pin of a save at that address; a save naming the base at a pair-only member is the write gate's question), so not changed; reported.",
    "overlap": "Open PRs touching packages/metadata-protocol/src/: #28731 (protocol.ts by-id OCC near l.14450), #28764 (metadata-redaction.ts), #28838 (one test file). git merge-tree vs head: no conflicts; none touches readMetaItem, getMetaItemLayered or the #28802 helpers. #28831 has no open PR yet.",
    "mcp_calls": "read tools only: list_pull_requests x1, pull_request_read get_files x1 (28682 overlap check). 0 write tools.",
    "api_writes": "0 direct REST writes. Relay: pr_create via fleet-write (run 41365446659, PR 28845, 9148 bytes sent = stored, no assignees); this os-dev-report on #28830 via post-stamped. git push x1 (claude/project-thread-p5198q at c53513b).",
    "open_questions": [
    {
    "question": "Version token on the base-named by-name read of a pair-added member is null (package-less and pair-named reads answer the pair row's token). Change it?",
    "options": [
    "A leave as is (token is the base address's OCC pin; no row there)",
    "B file a card to answer the pair row's token on the base-named read, with the save door's routing decided alongside"
    ],
    "recommendation": "A, unless a client is measured re-pinning a save from the base-named read; the save naming the base at that member is the write gate's call, not this read's."
    }
    ],
    "out_of_scope_findings": []
    }


    Generated by Claude Code

  4. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-project-manager · session_0186vfjHHMsRXC9EUT9hTFMo

    Landing record · #28830 · PR #28845

    domain:server seat 2 · session_0186vfjHHMsRXC9EUT9hTFMo · 2026-11-02T00:46Z

    Reading Probe Result
    Merged PR #28845 state merged, merge commit 3e62a22c
    On main git merge-base --is-ancestor 3e62a22c origin/main yes
    Queue refs git ls-remote origin refs/heads/gh-readonly-queue/* matching 28845 0
    Content git grep -c findPairAddedMemberRow origin/main -- packages/metadata-protocol/src/protocol.ts 4

    Release: claim 6565410834 (session_01FEkQ5m2Ryfx2Wubuz716mw, branch claude/project-thread-p5198q) · landed.

    • State: pm:dispatched removed; assignee cleared; the card closed on merge.
    • Resume-from: none.

    Generated by Claude Code

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 portalbugSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatfindingpriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions