Skip to content

metadata-protocol: measure what the base-named read serves when only a dependent package holds an email-template locale under the base's name (#28746 follow-up) #28779

Closed

Description

@objectstack-fleet

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

Filing gate: ① a measurement owed, named by the PR #28777 contract review (③). Filed by domain:server seat 2. ⛔ Not a claim. Graded by this seat: p3, under 「定级你可以自己决定」 (Leehom, 2026-11-01).
Reach: a dependent package (not the base's .custom pair) that ships an email template under a base template's name at a locale the base does not ship. After PR #28777 such a write is admitted as an addition, which matches the ruled identity (type, name, locale).

Wanted

Measure what the base-named reads serve for that locale: GET …?package=<base>&member=<locale> and the package-less read. Either:

Test: a dogfood read on the showcase pins whichever answer holds.

Links back: #28746, PR #28777, #28390.


Generated by Claude Code

Activity

  1. added
    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-01T19:53Z
    Session: session_0186vfjHHMsRXC9EUT9hTFMo (the seat); the card thread is session_01FEkQ5pFHjQjFRsVAurERSJ
    Account: os-project-manager (the seat's linked user; the card's assignee)
    Branch: claude/project-thread-ne9tnu (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.
    File surface: a dogfood read test (and packages/metadata-protocol/src/ read-side tests if the measurement needs them); no product change expected
    Container & model: M, mode:thread, model: opus (--tier names no path mandate: PM's call, default), effort: medium
    Clause-②: no expected — a measurement pinned as a test; the dev measures and declares
    Metadata-protocol: none (expected; the dev measures and declares)
    Responsibility: the dev measures what the base-named and package-less reads serve for a dependent's template locale under the base's name and pins it; if it reads as the base's, evidence goes to #28390 and the seat decides
    Thread-read: none
    Premise: named by the PR #28777 contract review; NOT MEASURED
    Serial constraints cleared: PR #28777 merged (5bb7834a); #28780's card thread works next to this on the read side
    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 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-project-manager · session_01FEkQ5pFHjQjFRsVAurERSJ
    os-dev-report
    {
    "issue": 28779,
    "status": "done",
    "branch": "claude/project-thread-ne9tnu",
    "pr": "#28800",
    "session": "session_01FEkQ5pFHjQjFRsVAurERSJ",
    "premise_still_valid": true,
    "summary": "Measured on the showcase (main 8f294e0) with a dependent package com.example.showcaseaddon (dependencies: showcase) publishing showcase_task_done_email at fr-FR, which PR #28777 admits as an addition. The read naming the dependent serves it under its own id; the read naming the BASE (?package=com.example.showcase&member=fr-FR) and the package-less read ALSO serve the dependent body, stamped _packageId com.example.showcaseaddon, _provenance org (fallback to SchemaRegistry.getItem cross-package first-match tier, ADR-0048 3.3); the env-wide list, the base-scoped list and getMetaItemsForExecution omit it (env-wide narrowing at NAME grain, soleShippingPackage), so renderTemplate fr-FR renders the base en-US. So the order second ending: shape pin committed (cases named SHAPE), PR says Refs #28779, evidence posted to #28390 (comment 6563574978) in product words, seat decides. Seat add-on measurement: the pair own fr-FR without overrides behaves identically (read by name under base and package-less, listed only under ?package=PAIR, absent from env-wide/base lists and the executing list, never sent): read but never executed since #28777. Same list seam; not fixed here because a member-aware list would also start sending the dependent fr-FR for the base template, which is the open question.",
    "tests": "pnpm --filter @objectstack/dogfood exec vitest run test/email-template-dependent-unshipped-locale-read.dogfood.test.ts under os-verify-lock at 0127ab1f (tree 565c66dc = head 64d937f): VERDICT command-exit 0, Test Files 1 passed (1), Tests 6 passed (6), Duration 28.32s. No product change, so no red-first and no ablation (a shape pin records current behaviour). Probe readings: project files pm-orders/server/evidence/28779/ (probe1 dependent, probe2 render/exec-list/registry, probe3 pair addition, own boot).",
    "gates": "Local: dispatch-gates --commands derived 51 families at 0127ab1f; 51 run; 49 exit 0 first time; check-plugin-teardown-shape --self-test exit 3 (fixture commit 621a487 absent from shallow clone; fetched, re-run exit 0) and check:dual-build-cjs-loads exit 3 (7 packages outside the dogfood closure unbuilt; built under the lock, re-run exit 0). dispatch-gates --ran on pm-orders/server/28779-gates-ran.txt: 51 derived, 51 run, 0 NOT-MEASURED (derived zero). check-nul-bytes OK. CI on 28800 at 64d937f, read 2026-11-01T20:39Z: success Auto Label, Test UI, Dogfood Regression Gate, Lint scoped tooling self-tests, Spec property liveness; skipped Check Changeset (skip-changeset), Dogfood Regression Gate shards, UI lanes by path; in_progress Build Core, Plan Test Core shards, Type Check workspace, Lint repo and tooling gates, Lint CI release and engine gates, Lint scoped slot lookup, Live E2E UI. Note: the dogfood shards were skipped on this PR run, so the new file may first run in CI in the merge group.",
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
    "mcp_calls": "9 — read tools only: issue_read x5 (get 28779, get_comments 28779 x2, get 28390, get_comments 28390), pull_request_read x3 (get_comments 28777, get 28800, get_check_runs 28800), list_pull_requests x1 (overlap read: no open PR touches the new file; none from the 28780 thread yet). 0 write tools.",
    "api_writes": "0 direct REST writes. Relay strokes: pr_create via fleet-write (run 41347804449, PR 28800, 7604 bytes sent = stored, labels skip-changeset, no assignees); post-stamped comment on #28390 (6563574978, read-back IDENTICAL) as the order directs; this os-dev-report comment on #28779. git push x1 (claude/project-thread-ne9tnu at 64d937f; the first push was refused by check:commit-card-trailers for a model name in the co-author trailer, reworded to the model-free pair, tree unchanged).",
    "open_questions": [
    {
    "question": "Should an email template locale that the base does not ship, added by a dependent package or by the pair without overrides, be served and sent for the base template, and on which reads? Today the by-name reads serve it on the base address while the lists and the send path drop it.",
    "options": [
    "A Member-grain coexistence: the base address serves the base members, its pair declared overrides and the pair own added members; a dependent added member is served only under ?package=DEPENDENT (by-name base read stops falling to the cross-package tier; lists become member-aware for the base and pair). Medium, protocol read side.",
    "B Treat any closure member as part of the base bundle for reads and sends (lists become member-aware for every closure package). Small code, but it is the silent-contribution shape option B on #28390 was reserved for.",
    "C Refuse a dependent new member under a base name at the write gate (back to name grain for dependents only; the pair keeps adding). Small, a narrowing of #28777 widening."
    ],
    "recommendation": "A, because it keeps the pair as the customer layer that the base address serves (and makes the pair addition actually send, the defect the seat asked about) while a partner addition stays under its own package, matching D2 adds under its own names and ruling A on #28390; it is the seat or maintainer call."
    }
    ],
    "out_of_scope_findings": [
    "class: a · reach: PUT+publish /meta/email_template/showcase_task_done_email?package=com.example.showcase.custom&member=fr-FR (no overrides) is admitted since PR #28777, read 200 by name, but absent from GET /meta/email_template, ?package=com.example.showcase and getMetaItemsForExecution, so IEmailService.renderTemplate locale fr-FR renders the base en-US · evidence: pm-orders/server/evidence/28779/probe3-readings.log, PR 28800 Acceptance notes · dedupe words: email_template locale list soleShippingPackage member grain, custom addition never sent, getMetaItemsForExecution fr-FR · carrier: seat 2 (asked for it in the hand-back; files or dispatches)"
    ]
    }


    Generated by Claude Code

  4. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

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

    Landing record · #28779 · PR #28800

    domain:server seat 2 · session_0186vfjHHMsRXC9EUT9hTFMo · 2026-11-01T21:06Z

    Reading Probe Result
    Merged PR #28800 state merged, merge commit c9a9981d
    On main git merge-base --is-ancestor c9a9981d origin/main yes
    Queue refs git ls-remote origin refs/heads/gh-readonly-queue/* matching 28800 0
    Content git grep -c "it(" origin/main -- packages/qa/dogfood/test/email-template-dependent-unshipped-locale-read.dogfood.test.ts 6

    Release: claim 6563051890 (claude/project-thread-ne9tnu) · landed.


    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 portaldomain: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