Skip to content

Declared overrides: a mapping override publishes but is never served, doc and mapping overrides cannot be restored, and an override's label can be hidden by translation #30062

Closed

Description

@objectstack-fleet

epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff

The maintainer: 「全部立,继续测试验证」 (2026-11-04), on the seat's evaluation of which metadata types should support override.

Measured by the seat through the metadata API and in a browser on main 63b86b385d, on examples/app-crm and examples/app-showcase, each overriding through its paired customization package. No domain:* label is set: triage routes this card.

Business reason

ADR-0146 D2 promises one mechanism: an item in the customization package replaces the base's item, and removing it brings the base's back. These gaps break that promise in ways a customer cannot see or undo. A published change that does nothing looks like success. A customization that cannot be removed leaves the customer stuck with it. A renamed page that keeps its old name looks like the rename failed.

Defects

1. A mapping override publishes and is not served. showcase_inquiry_feed, with overrides: save 200, publish published, then GET /api/v1/meta/mapping/showcase_inquiry_feed returns the base's body, with no overrides. SEALED_ROW_SERVED_OVERRIDE_TYPES in packages/metadata-protocol/src/protocol-package-bindings.ts:350 holds page, app, dataset, doc and book. Its note says mapping "is overridable and sealed too, and is not here: no card has measured its reads."

2. Doc and mapping overrides cannot be removed. DELETE /api/v1/meta/doc/showcase_docs_guide?package=com.example.showcase.custom answers 403, "provided by a managed package and is sealed against removal", and the override stays served. Mapping answers the same. The same call succeeded for view, dashboard, report, email_template, page, app, dataset, book and flow.

  • packages/spec/src/kernel/metadata-plugin.zod.ts:933 and :1191: mapping and doc are supportsOverlay: false, which refusePackagedBaseRemoval (packages/metadata-protocol/src/protocol.ts:9286) treats as sealed.
  • packages/metadata-protocol/src/protocol-packaged-base-refusal.ts:510 and :540: the pair-row admission is flow only.

3. An override's own label can be hidden by the base's translation. On the zh-CN CRM:

Item Override's value Served
Page crm_welcome label OVpage 欢迎页
Dataset opportunity_metrics label and description, and a measure label Changed The base's zh-CN text
View crm_lead.all and dashboard pipeline_dashboard label Changed The override's text
Report showcase_hours_by_status label OV-报表-1104 Runtime shows the override; the Studio header shows 工时按状态分布

A page's content did change, so this is about labels and descriptions, not the override itself. A new translation item in the pair does take effect (showcase_task read 任务 and then the new text), so a customer has a workaround, but nothing points to it.

4. The All metadata tile disagrees with the door. 全部元数据 marks 流程 只读, while a read-only flow's header offers 定制.

5. A refusal offers a way out that does not exist. A sharing_rule override is told to "create your own sharing_rule under a new name", and that create answers 403 NOT_CREATABLE. The same sentence cites ADR-0146 D6 for types that are outside D6's security catalog, and reads "a api" (protocol-packaged-base-refusal.ts:713).

Acceptance

  1. A mapping override is served by the reads and used at import, or the save refuses it loudly. Do not leave a published override that does nothing. Add it to the measured list, with a test.
  2. Removing a pair's override succeeds for every type isOverridableMetadataType admits that a pair can hold, and the base's item is served again. Pin this per type. A removal of a base's own item stays refused.
  3. Label precedence is one rule across types and across runtime and Studio. The seat's proposal: a translation in the pair, then the override's own label, then the base's translation. The maintainer may overrule this on the card.
  4. The tile and the door agree for every type.
  5. Each refusal names a remedy that works for that type: for example a Setup record for sharing rules and queues, and a new package version for a code-only type.

Not measured

An import through an overridden mapping, because the override is not served today. Report and email template behaviour beyond the label: the report did render; no email was sent.

Re-check

git grep -n "SEALED_ROW_SERVED_OVERRIDE_TYPES: ReadonlySet" origin/main -- packages/metadata-protocol/src/protocol-package-bindings.ts

Activity

  1. objectstack-fleet commented on Nov 4, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff

    The maintainer, 2026-11-04: 「30079这种不是应该在元数据应用中自己去开发自定义操作吗?你的意见是批量换负责人放到内核吗?其他全部同意」.

    Ruling on acceptance item 3: the seat's proposal stands. Label precedence is a translation in the pair, then the override's own label, then the base's translation.

  2. objectstack-fleet commented on Nov 4, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: first-touch audit · p1 kept · domain:server · 2026-11-04T12:59Z

    ⛔ Not a claim.

    • Read fresh. Three gaps in declared overrides (ADR-0146 D2): a mapping override publishes and is never served; doc and mapping overrides cannot be removed (403, sealed); and the base's translation hides an override's own label. A published change that does nothing, or cannot be undone, so p1 kept.
    • Fix site: packages/metadata-protocol (protocol-package-bindings.ts, protocol-packaged-base-refusal.ts), plus the spec supportsOverlay flags that the PR names.

    Generated by Claude Code

  3. added
    domain:serverDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 4, 2026
  4. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb

    Claim: PM loop round 1
    Session: session_01Utp6CYVV6fcAQrNTDQRvPb (seat) · dev = project card thread session_01Utp6CaHjE2N5aEp4ogQnWY
    Account: os-bill
    Branch: claude/project-thread-yenpdr (harness-pinned thread branch; platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-30062
    Domain: domain:server
    Seat: domain:server#5
    File surface: packages/metadata-protocol/src/** (pair-row removal admission, served-override set, refusal text, label resolution) and its tests; the label-resolution seam wherever measurement places it inside domain:server packages; item 4's tile only if its fix is in ui/** and minimal; one changeset. ⛔ packages/spec/**, docs/adr/**, skills/**, .claude/**, AGENTS.md (stop on breach; explain in the report)
    Container & model: M–L, mode:thread, model: default tier (opus) — dispatch-gates --tier at 31fe289f: no path-derived mandate, effort: xhigh (p1)
    Clause-②: no — removing a pair's own override and serving a published mapping override follow ADR-0146's chartered revert ("Restore package original" = delete the overriding item from .custom, so the base's document is served again) and D2; if item 1 lands as a loud save refusal, that arm narrows and owes a contract-review-tier review before the queue
    Metadata-protocol: semantic
    Responsibility: metadata-protocol's flow-only pair-row admission and its served-override set (reading at 0fd363d1, not built) | no platform path removes a doc or mapping override today | every customer of a .custom pair on 18.3.0 and main
    Thread-read: 6631274683
    Premise: holds — at 0fd363d1, SEALED_ROW_SERVED_OVERRIDE_TYPES = page, app, dataset, doc, book (no mapping); isPairRowRemoval admits only CONDITIONS_DELIVERED = {flow}
    Serial constraints cleared: #30106 (seat 3, Claim 6646484259, branch claude/project-thread-j915rv) may read protocol-served-overrides.ts; triage marks a possible metadata-protocol intersection — the dev merges main before the PR and after #30106 lands. No other in-flight claim names these paths.

    Ruling carried: acceptance item 3, the seat's proposal stands (6631250894). Seat 4 yielded this card to seat 5 in the project. Order: project file server-seat5/dispatch-30062.md, delivered to the card thread.

  5. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb

    Split · 2026-11-05T01:03Z. The card thread measured that acceptance item 3 (label precedence, ruled in 6631250894) can only be met in packages/spec/src/system/i18n-resolver.ts: translatePage, translateDataset, translateApp and translateBook take no packagedBase option, and a pair translation never wins on any type. Item 3's spec half is carried by #30193 (no domain:*, for triage). The PR on this card delivers items 1, 2, 4 and 5 as Refs #30062, not Fixes. At its landing this card is released back to the queue with item 3's server half (the protocol's getPackaged*Base accessors for page, dataset, app and book, and the PACKAGED_BASE_ACCESSORS rows) as pm:blocked, Blocked-by: #30193.

  6. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
    os-dev-report

    {
      "issue": 30062,
      "status": "done",
      "branch": "claude/project-thread-yenpdr",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30226",
      "session": "session_01Utp6CaHjE2N5aEp4ogQnWY",
      "premise_still_valid": true,
      "summary": "Delivers acceptance items 1, 2, 4 and 5 (PR body: Refs #30062 (items 1, 2, 4, 5), per the seat's ruling; item 3 is split to the spec lane and its server half stays on this card). Item 1: mapping joins SEALED_ROW_SERVED_OVERRIDE_TYPES, so a pair's mapping override is served by the by-name read the import door and the connector pull use. Item 2: isPairRowRemoval admits the pair's own row for every open overridable type (was flow only), so removing a doc or mapping override no longer answers 403 and every read serves the base's item again; a base-named removal keeps main's answer per kernel. Item 5: the declared_type_not_overridable sentence cites the type's own basis and names a remedy that works for it (same code, status and rule). Item 4: PageShell.tsx typeStateWord reads the Customize doors (studioOffersCustomize), not allowEnvironmentOverlay; StudioCustomizeControls.tsx untouched.",
      "tests": "metadata-protocol full: 312 files passed (4 skipped), 22375 tests passed (26 skipped); typecheck exit 0. objectql full: 548/548 files, 10910/10910 tests; typecheck exit 0. runtime meta-object-extension-item-door-fit.test.ts 6/6. ui: the six test files importing PageShell or DirectoryPage 149/149; turbo type-check --filter=@object-ui/app-shell 68/68 tasks. Ablations (scripts/ablation-replace.mjs wrap; objectql legs rebuilt metadata-protocol and passed ablation-dist-preflight present, then absent after restore; every leg restored blob == HEAD with git diff HEAD empty): A1 isPairRowRemoval flow-only: 7/78 red. A2 mapping out of the served set: 6/71 red. A3 pair check widened to the base: 2/71 red (doc, mapping, env kernel, base-named). A4 typeStateWord back to allowEnvironmentOverlay: 15/114 red. A5 refusal back to the old D6 'create your own' sentence: 16/87 red.",
      "gates": "Local: node scripts/pm/dispatch-gates.mjs --commands derived 57 commands, plus 8 changeset families once the changeset was added; each run with its exit code recorded before any pipe. dispatch-gates --ran: '65 derived famil(ies) accounted for — 64 run, 1 NOT-MEASURED', exit 0. NOT MEASURED: pnpm check:dual-build-cjs-loads exit 3 (PREREQUISITE NOT MET: 32 packages outside this closure have no dist), left to CI. check-plugin-teardown-shape --self-test exit 3 on the shallow clone, exit 0 after fetching the pinned fixture commit. check:type-check-debt exit 3 on a lock queue timeout, exit 0 re-run under the lock. Outside the derivation, also run: check:authz-resolver, check:error-code-casing, check:overlay-whitelist-table, check:changeset-fixed, all exit 0. pnpm lint exit 0; ui eslint on the two ui files 0 errors; check-nul-bytes exit 0. CI: the PR's check-runs are in_progress at report time (head 69812d8212).",
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "line_budget": "13 paths, +448 / -61 against origin/main: source +173 / -45 (7 files, 4 of them comment-only), tests +259 / -16 (5 files), changeset +16 (1 file)",
      "files_changed": [
        "packages/metadata-protocol/src/protocol-package-bindings.ts",
        "packages/metadata-protocol/src/protocol-packaged-base-refusal.ts",
        "packages/metadata-protocol/src/protocol-diff-delete-load.ts (comments)",
        "packages/metadata-protocol/src/protocol-lock-state.ts (comments)",
        "packages/metadata-protocol/src/protocol-registry-hydration.ts (comments)",
        "packages/metadata-protocol/src/protocol.ts (comment)",
        "packages/metadata-protocol/src/protocol-package-bindings.sealed-override.test.ts",
        "packages/metadata-protocol/src/protocol.packaged-base-refusal.test.ts",
        "packages/objectql/src/protocol-custom-override-bare-slot-envelope.test.ts",
        "packages/objectql/src/protocol-flow-custom-override.test.ts",
        "ui/packages/app-shell/src/views/metadata-admin/PageShell.tsx",
        "ui/packages/app-shell/src/views/metadata-admin/DirectoryPage.stateVocabulary-29705.test.tsx",
        ".changeset/30062-declared-override-mapping-removal-remedies.md"
      ],
      "deviations": [
        "Closing line is Refs #30062 (items 1, 2, 4, 5), not the order's Fixes #30062: seat ruling after the item 3 fork report.",
        "Item 3 not implemented: it needs packages/spec/src/system/i18n-resolver.ts (fork condition); readings are in the PR's Acceptance notes.",
        "NODE_OPTIONS=--max-old-space-size=6144 for the closure build (spec DTS emit) and the gate runner, above the 4096 default.",
        "A ui run of the whole metadata-admin directory (721 test files) was stopped by its recorded PIDs after holding the lock about 15 minutes; narrowed to the six files that import PageShell or DirectoryPage, the full ui set is left to CI.",
        "origin/main was merged once at 474c030b before the PR; it has since moved 5 commits with no path overlap, and #30106 has not landed, so the second merge waits for #30106.",
        "Changeset level minor on @objectstack/metadata-protocol and @object-ui/app-shell (Metadata-protocol: semantic); app-shell is private but carries changesets in this repo.",
        "PR opened with no labels and no assignees; this session subscribed to the PR's activity (harness default)."
      ],
      "mcp_calls": "6 — mcp__github__issue_read get x2, issue_read get_comments x2, pull_request_read get x1 (PR #30183 body as a template), subscribe_pr_activity x1 (claude-code-remote, not a GitHub write). No GitHub MCP write.",
      "api_writes": "2 — relay repository_dispatch pr_create (run 41955305846, read_back landed/identical, PR #30226); this os-dev-report comment via post-stamped. git push is not a REST write.",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "class: b · reach: exception: release-text · skills/objectstack-platform/SKILL.md ADR-0146 paragraph says the read honours a pair's declared override 'today only for a view, dashboard, report, email_template, translation or flow' (stale since page/app/dataset/doc/book, now mapping) and says nothing of the removal · dedupe words: skills ADR-0146 paragraph, declared override served types, Skills-docs follow-up · carrier: seat 5 (Skills-docs follow-up line in the PR body)",
        "carrier: #30063 / #30064 · noted, not filed: whichever of #30063 and this PR lands second flips the hard-coded page 只读 pins in DirectoryPage.stateVocabulary-29705.test.tsx (:129 tile, :178-:186 header) to 可定制; the new agreement rows derive from STUDIO_CUSTOMIZE_TYPES and follow on their own"
      ]
    }

    Generated by Claude Code

  7. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb

    Seat ACCEPT on PR #30226 (items 1, 2, 4, 5) at head 5663983b: #30226 (comment) · pr_ready + automerge_enable sent 2026-11-05T03:18Z. This card stays open at merge: item 3 server half → pm:blocked, Blocked-by: #30193.

  8. added
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    and removed
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Nov 5, 2026
  9. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 5, 2026
  10. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb

    Release: domain:server#5 · 2026-11-05T05:12Z · claim 6646593490 (session session_01Utp6CYVV6fcAQrNTDQRvPb, dev branch claude/project-thread-yenpdr) released after a partial landing; back to pm:queue, assignee cleared.

    Resume-from: PR #30226's Acceptance notes, the "Item 3 (label precedence) is not here" bullet (measured reading at b7075d99), and the split comment 6646706337. Re-measure the four resolvers' signatures on current main first.

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

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb

    Claim: PM loop round 2
    Session: session_01Utp6CYVV6fcAQrNTDQRvPb (seat) · dev = project card thread session_01Utp6CajcU31aZRQuQzwWj6
    Account: os-bill
    Branch: claude/project-thread-c288y8 (harness-pinned thread branch; platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-30062
    Domain: domain:server
    Seat: domain:server#5
    File surface: packages/metadata-protocol/src/** (the page, dataset, app and book packaged-base accessors, their facade stubs, tests); packages/rest/src/meta-item-read-gate.ts and its tests; content/docs/** only for sentences this PR makes false (not releases/**); one changeset. ⛔ packages/spec/**, ui/**, skills/**, docs/adr/**, .claude/**, AGENTS.md (stop on breach; explain in the report)
    Container & model: S–M, mode:thread, model: default tier (opus) — dispatch-gates --tier at 5db77f73: no path-derived mandate, effort: xhigh (p1)
    Clause-②: yes (widening) — four public packaged-base accessors join their siblings on the protocol class; the dev names them, measured on the built entry
    Metadata-protocol: semantic — the label a pair's declared override of a page, dataset, app or book serves follows the ruled order
    Responsibility: rest's PACKAGED_BASE_ACCESSORS wires the packaged base for object, dashboard, view and report only, so a page, dataset, app or book override serves the base's translation over its own label (PR #30226 Acceptance notes, measured at b7075d99) | none: the override's label is lost in every locale the base translates | every customer who relabels a packaged page, dataset, app or book
    Thread-read: 6650306162
    Premise: holds — the spec half landed with PR #30236 (bb86ff96c): all eight document translators take packagedBase; the server wiring for the four types is what remains (release 6650306162)
    Serial constraints cleared: seat 3 holds the protocol.ts half of #30053 (facade docblock moves) until this card lands (seat 3, 05:14Z); seat 2's p0 #30255 is in the same queue window, no shared file expected.

    Order: project file server-seat5/dispatch-30062-item3.md, delivered to the card thread. This Claim covers item 3's server half only; items 1, 2, 4, 5 landed with PR #30226.

  13. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
    os-dev-report

    Card thread session_01Utp6CajcU31aZRQuQzwWj6 · branch claude/project-thread-c288y8 · draft PR #30353 · head 644edc24 · item 3, server half

    {
      "issue": 30062,
      "status": "done",
      "branch": "claude/project-thread-c288y8",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30353",
      "session": "session_01Utp6CajcU31aZRQuQzwWj6",
      "premise_still_valid": true,
      "summary": "Premise held at 5db77f73: page, dataset, app and book had no packaged-base accessor, so a declared override's changed label read the base's translation, and no type was handed the pair's own translations. Four protocol accessors (getPackagedPageBase/DatasetBase/AppBase/BookBase) answer the base's own item through the shadow-immune packagedArtifactBase, and PACKAGED_BASE_ACCESSORS gains the four rows. servedOverrideBaseOf names the base a served declared override replaces; getPairTranslationBundle reads that base's pair's active translation rows through readAuthoredTranslationLayer; the REST gate passes the result as pairBundle on the item and list reads (one read per base per list). The book tree route now passes resolveProtocol, so the tree and the list agree (#26690). Object is extended (D10): seven types take a pairBundle.",
      "tests": "head 644edc24 after merging origin/main c1240a38: metadata-protocol Test Files 313 passed | 4 skipped, Tests 22388 passed | 26 skipped (lock VERDICT command-exit 0), typecheck exit 0; rest Test Files 386/386, Tests 7330 passed | 332 skipped, typecheck exit 0 after a one-line test typing fix (7d0394ab); objectql Test Files 550/550, Tests 10967/10967, typecheck exit 0. New pins: rest pin file 108/108 (19 red on the pre-fix code), objectql real boot 16 new (file 87/87), metadata-protocol 15/15. Ablations through scripts/ablation-replace.mjs, each restored blob == HEAD with git diff HEAD empty; metadata-protocol legs rebuilt and proved in dist by ablation-dist-preflight (exit 0), clean rebuild proved free of all markers (--absent exit 0): A1 four REST rows deleted -> rest 18 red; A2 pair fetch skipped -> rest 11 red; A3 tree resolveProtocol deleted -> rest 1 red; A4 servedOverrideBaseOf always undefined -> mp 1, objectql 8, rest 11 red; A5 pair package_id filter dropped -> mp 2, objectql 8 red (objectql first stayed green: the package-less row sorted before the pair's; renamed, 4a6c33da), re-run on the conforming fake -> mp 2 red; A6 getPackagedBookBase undefined -> objectql 4, rest 4 red.",
      "gates": "dispatch-gates --commands on 644edc24 vs merge base c1240a38: 100 derived; --ran reconciliation 100 derived / 99 run / 1 NOT-MEASURED (exit 3: check-plugin-teardown-shape --self-test on a shallow clone) / 0 UNRUN. Round 1 on 7d0394ab: check:engine-double-contract, check:objectql-double-limit and check:where-matcher red on the new pair-bundle fake engine; fixed (operators refused, limit held, findOne asserted) and the engine-double ledger ratcheted (644edc24), all three exit 0 in round 2. pnpm lint exit 0; check-facade-delegation-only exit 0. CI check-runs on #30353: not yet read at report time. Records: /mnt/project-files/server-seat5/gates-30062-item3-ran.txt (round 1: gates-30062-item3-ran-r1.txt).",
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "line_budget": "12 files, +868 / -35 vs c1240a38; production code about 340 lines, the rest pins, docs and a changeset; under the 3000-line threshold",
      "deviations": [
        "packages/rest/src/meta-item-read-routes.ts +2 (book tree resolveProtocol): outside the dispatched surface, widened by the seat.",
        "packages/objectql/src/protocol-custom-override-bare-slot-envelope.test.ts +93, test only: metadata-protocol does not depend on objectql (objectql depends on it), so the real-boot pins cannot live there; widened by the seat.",
        "scripts/engine-double-contract.pinned.json +5/-1, generated by node scripts/check-engine-double-contract.mjs --write for the two new findOne doubles; accepted by the seat.",
        "pairBundle comes from the pair's active translation rows only: a .custom package has no code translation source, and code bundles reach the i18n static layer without provenance (seat ruling).",
        "Seven types take a pairBundle, not eight: an object is extended, never replaced (ADR-0146 D10).",
        "Not covered: the view container read builds slots without the served-override envelope (no pairBundle there; packagedBase as today); form-routes.ts is outside the surface and unchanged.",
        "dispatch-gates --commands run without paths: the script derives the change set itself.",
        "No subscribe_pr_activity on #30353 and no assignee or review request: the seat hands off.",
        "One merge commit subject names origin/main only; no commit carries a card trailer."
      ],
      "files_changed": [
        ".changeset/30062-declared-override-label-order.md",
        "content/docs/ui/translations.mdx",
        "packages/metadata-protocol/src/protocol-discovery-and-bases.ts",
        "packages/metadata-protocol/src/protocol.pair-translation-bundle.test.ts",
        "packages/metadata-protocol/src/protocol.ts",
        "packages/metadata-protocol/src/served-override.test.ts",
        "packages/metadata-protocol/src/served-override.ts",
        "packages/objectql/src/protocol-custom-override-bare-slot-envelope.test.ts",
        "packages/rest/src/meta-dashboard-view-i18n-explicit-override.test.ts",
        "packages/rest/src/meta-item-read-gate.ts",
        "packages/rest/src/meta-item-read-routes.ts",
        "scripts/engine-double-contract.pinned.json"
      ],
      "mcp_calls": "6 — issue_read get x2 (#30062, #30229), issue_read get_comments x2 (#30062), pull_request_read get x2 (#30226, #30236); no write tool",
      "api_writes": "3 — git push (branch claude/project-thread-c288y8), relay pr_create (#30353, run 41985248502, 11478 bytes sent and stored identical), this os-dev-report comment through post-stamped",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "carrier: PR #30353 · noted, not filed — the view container read serves slots without the served-override envelope, so a pair's translation does not rank first there",
        "carrier: PR #30353 · noted, not filed — form-routes.ts (public form views) passes packagedBase but no pairBundle; outside this surface"
      ]
    }

    Report taken 2026-11-05T07:10Z.


    Generated by Claude Code

  14. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb

    Landing · 2026-11-05T07:13Z: item 3 → PR #30353 (head 644edc24), seat ACCEPT posted, ready + auto-merge enabled. Fixes #30062 (items 1/2/4/5 landed in PR #30226).

  15. added
    pm:blockingDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-set
    on Nov 5, 2026
  16. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb

    Landed · 2026-11-05T07:58Z: PR #30353 merged as fdad1786e (item 3; seat ACCEPT 6652081140). With PR #30226 (items 1/2/4/5) every item of this card is landed; closed by Fixes #30062.

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:seatpm:blockingDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-setpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions