Skip to content

objectql/rest/analytics: picklist, mapping, dataset, the api matcher's name key and engine functions by referrer (ADR-0150 child E6) #31678

Closed

Description

@objectstack-fleet

epic:#31527#1 · os-project-manager · session_01FEkQ5mLd7pR2PHjsPwiGkz

Ruled: 6729820123 · letter B · 2026-11-09T01:10Z
Ruling-ref: 6729820123

Filing gate: ④ coordination node: child E6 of the epic #31527 (parent and per-layer children), as ADR-0150 (docs/adr/0150-behavioural-metadata-addressed-by-package-objects-keep-the-literal-prefix.md, merged in #31586 at 5d1382a)'s execution plan lists it. Hand-over card: filed undispatched as the epic seat signs off (maintainer 2026-11-08T16:34Z 「专题卡当前任务处理完,合并后就下班」). ⛔ Not a claim.
Ruling-ref: per-type table A (6723462584); epic A 「立专题」 (6723499113); division of labour A 「留核心,其余交车道」 (6723571682); ADR-0150 accepted by merge (#31586, 2026-11-08T21:16Z).
Business reason: inherited from the parent #31527. Behavioural metadata is addressed by (package, name), so two installed packages can each ship an item of the same name and every reader answers the right one, or refuses with the candidates, instead of silently taking the first match.
Reader: the next domain:server seat picks it from the queue (pm-dispatch selection) and accepts its PR against the red lines below.
Dedupe (open AND closed): picklist mapping dataset package (37; top hits #30806(open) #31527(open) #30803(closed), none on point: they are this epic, its parent #30806, or unrelated cards).
class: d · type: Feature
Grade: p1, inherited from the parent (self-graded under 「定级你可以自己决定」).
Blocked-by: #31575

维护者速读

选项列表、映射、数据集、API 名称匹配和引擎函数按引用方所在的软件包解析。

What to build

Picklist, mapping, dataset, the api matcher's name key (endpoint-matcher.ts) and engine functions resolve by the referrer's package through R's resolver. Every type here is covered by phase 1, so there is no two-holder arm.

Surface

  • Expected file surface: objectql, rest (endpoint-matcher.ts), service-analytics.
  • Clause-②: no.
  • Narrowing: yes, for a package item's bare reference that only an environment-authored item holds (D3 (a); not measurable first-party; the D10 upgrade report lists each case).

Acceptance — the epic's three red lines (every child shares them)

  • Resolution never loosens. No first-registered fallback, no environment-wide guess for a caller with a package, no silent pick.
  • Ambiguity is reported, never guessed. Every refusal and every migration report names every candidate.
  • Independently releasable (red line 3). The PR proves it with ADR-0150's four readings: (a) the phase-1 one-holder tests stay green; (b) bare-name behaviour (URLs, MCP, SDK) is unchanged for every name with one holder, except this card's declared narrowing; (c) any migration is re-runnable and never guesses; (d) its Clause-②: declaration and, where it changes the protocol, its ADR-0087 migration entry.
  • The epic seat is off duty after hand-over: the accepting lane seat checks these lines itself, and a narrowing beyond the declared one goes to the maintainer before landing.

Parent: #31527.

Activity

  1. added
    enhancementNew feature or request
    priority:p1High: required for production / M2
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Nov 8, 2026
  2. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: confirmed · domain:server · p1 · pm:blocked · 2026-11-08T21:57Z

    ⛔ Not a claim.


    Generated by Claude Code

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

    @objectstack-fleet
    ContributorAuthor

    epic:#31527#1 · os-steve · session_01ADHkmP7o3uDTti21wLTfPf

    Unblocked 2026-11-08T23:01Z: Blocked-by: #31575 is closed. R merged in #31637 as 0ebb080 (resolvePackageScopedName, packageResolutionClosure and the three read-only SchemaRegistry package-scoped methods in objectql; packageDependencyClosure in metadata-protocol). pm:blocked → pm:queue in this stroke. Read the resolver through those exports only, and never re-implement the rule. The epic seat reviews this card's PR against the three red lines before it lands.

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

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-steve · session_01ADHkmQKZzp4DLtqiCkZZRM

    Claim: PM loop round 6 · 2026-11-08T23:06Z
    Session: session_01ADHkmRb3wUaRcujR7QEm2o (card thread, dev) · seat session_01ADHkmQKZzp4DLtqiCkZZRM
    Account: os-steve
    Branch: claude/project-thread-vbgxgi
    Worktree: objectstack-issue-31678
    Domain: domain:server
    Seat: domain:server#2
    File surface: packages/objectql/src/** (the five E6 readers; not registry.ts installPackage), packages/metadata/src/endpoint-matcher.ts, packages/services/service-analytics/src/**, tests, root .changeset/. ⛔ No packages/spec/**, ui/**, docs/adr/**, packages/mcp/**, package-scoped-resolver.ts
    Container & model: L, mode:thread, model: default tier, effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: epic #31527 (ADR-0150) child; hand-over card, epic seat reviews the PR against the red lines before the seat lands it
    Thread-read: 6728378545
    Premise: holds as filed, read at claim on origin/main b126c130: R (#31575, PR #31637 0ebb0801) is on main and no reader calls resolvePackageScopedName yet
    Serial constraints cleared: R merged (Blocked-by #31575 closed). ⛔ registry.ts installPackage is seat 1's (N/K/G1); E6 and E8 split the by-name readers by type (E6: picklist, mapping, dataset, api name key, function; E8: app, page, dashboard, report, book, cube, tool, skill, agent); packages/mcp stays with this seat, G2 #31692 after E8

    Scope: Fixes #31678. Picklist, mapping, dataset, the api matcher name key and engine functions resolve by the referrer package through resolvePackageScopedName; no two-holder arm (phase 1 covers every type); declared narrowing D3 (a) only. Order: /mnt/project-files/server-seat2/standard-order.md + /mnt/project-files/server-seat2/31678-delta.md. Summons: the maintainer's 「并发都是5」 (project chat, 2026-11-08T16:13Z) and 「待审批的不算补ing发」 (2026-11-08T21:25Z).

  7. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-steve · session_01ADHkmQKZzp4DLtqiCkZZRM

    待裁 · E6 选项列表按软件包解析时,两处超出已声明收窄 · 2026-11-08T23:10Z

    一句话问题: 同一发布包里的兄弟软件包互相引用选项列表,今天能用。按 ADR-0150 的规则接入后,没有声明依赖的那一方会被拒绝。而且选项列表的检查跑在启动时,被拒的引用会让整个部署起不来,不只是那一个字段没有选项。

    背景

    E6 (#31678) 让选项列表、映射、数据集、API 名称键和引擎函数按引用方所在软件包解析,走 R 的解析器 resolvePackageScopedName(#31575,PR #31637)。卡面只声明了一个收窄 D3 (a):软件包里的引用,如果名字只有环境里手写的条目持有,就拒绝。卡线程在动手前实测后停下:选项列表是 E6 唯一能在本卡范围内接入的读取方,而接入它还会带来卡面没声明的两处收窄。读数见 /mnt/project-files/server-seat2/31678-readings.md,树为 b126c130。

    Governing text

    • ADR-0150 第 24 行与 D3 第 107 行:解析顺序是自己的软件包,然后是已声明依赖闭包(ADR-0141 的 manifest.dependencies 传递闭包,加 sys),最后拒绝。第 34 行与第 114 行把 D3 (a) 列为已声明收窄。
    • ADR-0150 D10 第 262 行:「No rename, no alias window, no author action.」
    • packages/cli/src/utils/picklist-references.ts 第 42 行(ADR-0130):「a list a SIBLING package in the same artifact owns resolves here exactly as one the declaring package owns」。
    • packages/objectql/src/plugin.ts 约 1190–1201 行:kernel:ready 上 findUnresolvedPicklistReferences 有结果即 throw,部署不能启动。

    协议声明:Clause-②: no,Metadata-protocol: none。本裁只定收窄范围,不改协议形状。

    前提复核: git grep -n "SIBLING package in the same artifact" origin/main -- packages/cli/src/utils/picklist-references.ts 命中第 42 行;git show origin/main:packages/objectql/src/plugin.ts | sed -n 1190,1205p 可见 if (unresolvedPicklists) throw。

    具体问题

    • N1:兄弟软件包不在闭包里。 软件包 A 的字段引用同一发布包里兄弟 B 持有的选项列表,A、B 之间没有声明依赖。今天这能解析,R 的第 3 步会拒绝(outside-closure)。卡面和 ADR-0150 的收窄清单里都没有这一条。
    • N2:拒绝落在启动上,不落在读取上。 D3 (a) 以及 N1 一旦命中,启动时的选项列表检查就把它算作「未解析」并抛错,整个部署停在启动阶段。D10 写的是「无需作者动作」。

    选项

    选项 做什么 客户可感知后果 工作量
    A 闭包只认已声明依赖,N1 作为新增的已声明收窄;启动检查与读取用同一答案,outside-closure 在启动时拒绝 兄弟包互引而未声明依赖的应用,升级后启动失败,补一行 dependencies 即恢复;只引用环境条目的软件包字段同样启动失败 server · 1 PR(E6 选项列表部分);无先例
    B 闭包只认已声明依赖(N1 收窄);启动检查对 outside-closure 只响亮告警并进入 D10 升级报告(S4 #31693),读取时拒绝 部署照常启动,告警列出每个违规引用;被拒字段读出来没有选项,保存时被校验拒绝 server · 1 PR;无先例
    C 修订 ADR-0150 D3:闭包加入同一发布包的共同所有者(ADR-0130 边界),R 随之改;启动检查对 D3 (a) 告警 兄弟包互引照旧可用,无需作者动作;只有环境条目那一支(D3 (a))告警 需 ADR 修订(Tier H)+ R 改动(核心,epic 席)+ E6 · 2–3 PR;无先例

    业务含义直译:

    • A:像 npm 和 Salesforce 托管包那样,要用别人的东西就得写进依赖。没写的,升级时当场报错。
    • B:规则与 A 相同,但升级当天不停机,先发告警和清单,让作者补依赖。
    • C:同一个安装包里的几个模块默认彼此可见,等于把「同一发布包」当作一个隐式依赖组。

    os-decision-facets
    ① 项目长远合理性:A/B 只保留一条规则,即已声明依赖闭包;C 在闭包上加了「同一发布包」这个特例,契约变大。
    ② 实际业务拉动:第一方 examples/app-multi-package 已声明依赖,也不持有选项列表;HotCRM 的五个包同属 crm 命名空间,本席没有实测它们之间是否声明了依赖(置信缺口)。
    ③ 防 AI 犯错:A 最响(启动拒绝);B 是响亮告警加读取拒绝,不静默;C 对兄弟包不报任何东西。
    ④ 创业阶段不扩散:A/B 不新增键;C 新增一条闭包规则和一次 ADR 修订,是永久义务。
    Prior rulings read: closure, co-owner, SIBLING package, no author action in ADR-0150 / ADR-0130 / ADR-0141 → 6 hits; ADR-0150 D3, D10; ADR-0130; thread: epic #31527 (the E6 card thread raised it there too).

    推荐:A,分期执行

    • 只看 ① 的终态: 两年后,平台上软件包之间的引用只按声明依赖解析(对照 npm 的 dependencies、Salesforce 托管包的依赖声明)。未解析的引用在作者侧(defineStack、os validate、保存入口)和安装时就被拒绝,而不是在读取时静默落空。所以选 A。
    • ②③④ 只调时序: D10 承诺升级无需作者动作。所以上线顺序是先按 B 的告警形态发布,同时在 D10 升级报告里列出每个 N1 和 D3 (a) 引用。等 S4 的升级报告上线后,再把启动检查收紧为拒绝。字母不变,仍是 A。
    • 不取的理由: B 单独作为终态时,启动检查与读取的处理长期分叉。C 为一个尚无实测拉动的情形扩大了闭包契约。
    • 置信缺口: HotCRM 是否在兄弟包之间互引选项列表而没有声明依赖,本席没有实测。
    • 自检: 只看 ① 选 A;②③④ 是否翻转:否,只把执行分成两期。

    裁后执行

    • 选 A:
      • E6 只做选项列表:以声明它的贡献方软件包作为调用方,走 R 解析;启动检查第一期告警,并把 N1 和 D3 (a) 写进 D10 升级报告的待列清单。
      • S4 上线后另立一卡,收紧为启动拒绝。
      • 函数和 API 名称键缺 R 的接缝(R 不接受 function 类型;@objectstack/metadata 的匹配器不能 import R),由 epic 席补接缝后在 E6b 中处理。
      • 映射和数据集在本卡范围内没有带软件包引用方的读取方,按 R 视作无软件包调用方,不写代码。
    • 选 B: 同 A 的第一期,不再收紧。
    • 选 C: epic 席先起 ADR-0150 D3 修订(Tier H)和 R 的改动,E6 等它们落地后再接入。

    相关:#31527(epic)、#31575 / PR #31637(R)、#31670(N)、S4 #31693(D10 升级报告)、ADR-0130、ADR-0141。

  8. 2 remaining items

  9. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-steve · session_01ADHkmQKZzp4DLtqiCkZZRM

    待裁范围收窄 · 2026-11-08T23:13Z

    The epic seat ruled inside ADR-0150 after the seat's analysis above (comment 6728478528 on this card; reading 6728487836 on #31527). The maintainer's question is now N1 only.

    • N2, ruled. The kernel:ready audit warns and does not throw when the outside-closure refusal's only candidate is the environment. The read then serves no options and the validator refuses the reference. The post-seal install judge refuses loudly.
    • A package holder outside the declared closure, general case, ruled. This is step 3 of the ruled resolution rule (6723462584). It is declared in Narrowing: with its count. Child A corrects the ADR text.
    • Seams, ruled. function moves to R2, which the epic seat builds. The api name key is re-keyed in MetadataManager.listForIndex('api') within E6, so no seam is needed on R. Mapping and dataset get no code.
    • Still open for the maintainer: N1. A sibling package in the same release artifact that is not in the declared closure, which ADR-0130 resolves today (picklist-references.ts line 42). The seat recommends A, the same as the epic seat: declared closure only, and the narrowing is listed by the D10 upgrade report. The four-facet analysis above stands for N1.

    E6 continues as a DRAFT PR and does not land until this card shows Ruled: on N1.

  10. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#31527#1 · os-steve · session_01ADHkmP7o3uDTti21wLTfPf

    Epic seat ruling — picklist extension targets · 2026-11-08T23:22Z

    The E6 card thread asked whether a picklistExtensions.extend target resolves by the extending package (as a field's list does) or caller-less.

    Ruling: caller-less (option X). An extension adds values to a list another package owns. It is a contribution to that item, like an overlay or an object_extension, not a reader of it. So its target resolves through R as a caller with no package: the unique holder in the environment, else a refusal naming every holder. That is the treatment ADR-0150 D3 gives an environment-authored overlay. It loosens nothing (no first-match pick) and guesses nothing. Phase 1's suite stays untouched (red line 3 (a)).

  11. objectstack-fleet commented on Nov 9, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-steve · session_01ADHkmRb3wUaRcujR7QEm2o
    os-dev-report

    {
      "issue": 31678,
      "status": "needs_decision",
      "branch": "claude/project-thread-vbgxgi",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/31731",
      "session": "session_01ADHkmRb3wUaRcujR7QEm2o",
      "premise_still_valid": true,
      "summary": "Picklist field references now resolve through R's resolvePackageScopedName, with the declaring packaged contributor's package as caller. picklistExtensions targets resolve caller-less (ruling X). The boot audit warns, and does not throw, for an environment-only outside-closure refusal (ruling N2). The post-seal install judge refuses with R's message, reading pending manifests' dependencies. MetadataManager.listForIndex('api') keeps one slot per (package, name). Functions (R seam S-a, R2 #31716) and mapping/dataset (no package-referrer reader in surface) are out, so the PR is 'Part of'. Draft, held on the maintainer's N1 ruling and on R2 #31716 (core boundary).",
      "tests": "objectql suite on 42bdbe6c: 571 files / 11655 tests pass, 2 red and both held: manifest-service-residual-objects 'a residual object whose field names a picklist a BODY declares is served with that list' (N1 sibling case) and core-boundary.ratchet 'core.ts closure pulls neither metadata-protocol nor plugin/kernel-factory' (R imports @objectstack/metadata-protocol; root fix R2 #31716). metadata suite on 62e2f40c: 71/71 files, 984/984 tests. typecheck objectql and metadata exit 0. Red on main: engine-picklist 2 red ('expected [{Gold}] to be undefined') + 3 controls pass; boot audit 2 red ('expected [technology] to deeply equal []', 'expected [Function] to throw') + 1 control; api index 1 red ('expected undefined to be b') + 2 controls. Ablations via scripts/ablation-replace.mjs, restored with blob == HEAD each time: referrer dropped, 2 red; boot environment-held arm folded into the throwing set, 1 red; api byPackage delegation removed, 1 red.",
      "gates": "dispatch-gates --ran on 42bdbe6c: 72 derived, 72 run, 0 NOT-MEASURED, 0 UNRUN. 71 exit 0, including check-plugin-teardown-shape --self-test (exit 3 at first because the shallow clone lacked pinned commit 621a4876; passed after fetching it) and check:dual-build-cjs-loads (exit 3 before a build; exit 0 after a full turbo build, 122 entries / 72 packages). check:lean-entry-closure exit 1: @objectstack/metadata-protocol FORBIDDEN, plus UNLISTED @objectstack/lint and @objectstack/sdui-parser via it, in @objectstack/objectql/core. Same R seam as the ratchet, held for R2 #31716. eslint --no-inline-config on packages/objectql/src and packages/metadata/src: exit 0. CI check-runs not yet read (PR just opened).",
      "dogfood_battery": "62e2f40c44b94169b70965702458e77184a7121d · os-verify-lock: VERDICT command-exit 0 · Test Files 440 passed | 3 skipped (443) · Tests 3652 passed | 41 skipped (3693) · no failures",
      "files_changed": [
        ".changeset/31678-picklist-by-referrer-package.md",
        "packages/metadata/src/metadata-manager-match-endpoint.test.ts",
        "packages/metadata/src/metadata-manager.ts",
        "packages/objectql/src/engine-picklist.test.ts",
        "packages/objectql/src/picklist-resolution.ts",
        "packages/objectql/src/plugin-picklist-boot-audit.test.ts",
        "packages/objectql/src/plugin.ts",
        "packages/objectql/src/registry.ts"
      ],
      "line_budget": "+646 / -68 over 8 files (714 changed lines, under the 3000 human-merge threshold): source +426/-64, tests +198/-4, changeset +22",
      "deviations": "1) PR body opens with the attribution block, then 'Part of #31678' (functions and mapping/dataset stay on the card). 2) Two tests held red on the draft, both named in the body (N1, and the R2 core-boundary seam). 3) check:lean-entry-closure exit 1 for the same seam. 4) Gates ran on 42bdbe6c, before the origin/main merge, which touches no objectql or metadata file. 5) The first full-suite run chained with && stopped at the objectql failure, so the metadata suite and the typechecks were re-run separately on the merge head. 6) The api re-key is in metadata-manager.ts (listForIndex), not endpoint-matcher.ts, per the epic seat's ruling.",
      "mcp_calls": "4: mcp__github__issue_read x3, mcp__github__pull_request_read x1 (all reads)",
      "api_writes": "2: POST /repos/objectstack-ai/objectstack/dispatches (relay pr_create -> #31731, read-back 13846 bytes sent == stored), and this comment via post-stamped.mjs (POST /repos/objectstack-ai/objectstack/issues/31678/comments). Plus git pushes to the branch.",
      "open_questions": [
        {
          "question": "N1: should a field resolve a picklist that a sibling package in the same artifact holds, with no declared dependency? R refuses it today.",
          "options": [
            "A: dependency required. The residual fixture gets a forced dependencies edit, and the D10 report names such references.",
            "B: siblings resolve each other. R's closure, or this card's referrer, adds the artifact's siblings."
          ],
          "recommendation": "Maintainer's call (needs-user-decision on the card). This PR is A-shaped as built and only holds the one residual test red."
        },
        {
          "question": "New names (seat's call): findEnvironmentHeldPicklistReferences, picklistReferenceVerdict, the private listForIndex byPackage option; types PicklistFieldResolver, UnresolvedPicklistReference, UnresolvedPicklistExtension.",
          "options": [
            "A: keep",
            "B: rename at ACCEPT"
          ],
          "recommendation": "A, because each one names what it answers and none is a public schema key."
        }
      ],
      "security_findings": "none",
      "out_of_scope_findings": [
        "class: b · reach: named producer: package-scoped-resolver.ts imports @objectstack/metadata-protocol, so any core-closure caller of R breaks ADR-0076 D2 (ratchet + lean-entry-closure) · evidence: core-boundary.ratchet.test.ts red on this head · dedupe: R2 #31716 amendment",
        "carrier: epic seat, R2 #31716 · noted, not filed"
      ]
    }

    Generated by Claude Code

  12. objectstack-fleet commented on Nov 9, 2026

    @objectstack-fleet
    ContributorAuthor

    director#1 · os-steve · session_01ADHkmQeqsbmwiy7dAiv7Jy

    Brief-claimed-by: session_01ADHkmQeqsbmwiy7dAiv7Jy · batch #438 · 2026-11-09T00:58Z

    Director thread opened at the maintainer's word (project thread, 2026-11-09T00:55Z 「开一个 fable 总监 thread,和我沟通这三个决策」). This batch holds three ADR-0150 cards: #31678 N1, #31697, #31677 Q1. The maintainer's letter lands here as Ruling:; the analysis above is presented as filed, with the director's increment in the thread.

  13. objectstack-fleet commented on Nov 9, 2026

    @objectstack-fleet
    ContributorAuthor

    director#1 · os-steve · session_01ADHkmQeqsbmwiy7dAiv7Jy

    Ruling: batch #438 item 1 · letter B (epic seat's table 6728478528; = letter A of server seat 2's table 6728476284) · maintainer 「同意」 2026-11-09T01:07Z

    N1 ruled: declared dependency closure only · 2026-11-09T01:07Z

    Meaning, not letter. The two analyses on this card use opposite letters for the same choice, so the ruling is recorded by meaning: a sibling package in the same release artifact is NOT in a package's resolution closure unless its manifest declares the dependency. R stays as merged in #31637 (own package → declared closure per ADR-0141 + sys → refuse outside-closure, naming every candidate). The maintainer agreed to the director's presentation in the project thread (2026-11-09T01:05Z, the maintainer's word), which recommended this option: one rule like npm dependencies and Salesforce managed-package dependencies; no "same release artifact" special case in the closure; the author's fix is one dependencies line.

    Severity follows the N2 ruling (6728478528): the kernel:ready picklist audit WARNS and names every candidate for an outside-closure refusal; the read serves that field with no options and the validator refuses the value; the post-seal install judge refuses loudly. The D10 upgrade report (S4 #31693) lists each N1 reference. Tightening the boot audit to a refusal is a later card after S4 lands, as seat 2's analysis proposed ("分期执行").

    Execution (from the analyses' 裁后执行):

    Blind spot carried: HotCRM's five crm packages were not measured for sibling picklist references without declared dependencies; the S4 upgrade report is where that count surfaces.

  14. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    needs-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PR
    on Nov 9, 2026
  15. objectstack-fleet commented on Nov 9, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-steve · session_01ADHkmQKZzp4DLtqiCkZZRM

    ACCEPT → PR #31731 comment 6733524027 · head bf7e3295 · contract review PASS · epic final PASS 6733282134 · 2026-11-09T06:09Z · landing: pr_ready + automerge_enable

    Contract review nits carried:

  16. objectstack-fleet commented on Nov 9, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-steve · session_01ADHkmQKZzp4DLtqiCkZZRM

    落地 · 2026-11-09T06:45Z

    reading value
    PR #31731 MERGED 2026-11-09T06:44Z, merge commit cc16008a (ACCEPT 6733524027; CONTRACT_REVIEW_TIER PASS 6733495572; epic final PASS 6733282134)
    #31678 stays open: the PR is Part of #31678, as ruled (functions went to R2, and mapping and dataset have no package-referrer reader in this surface)

    Landed:

    • A packaged field's picklist resolves from the package that declares the field, through R's resolvePackageScopedName: its own list, then its declared dependency closure plus sys, then a refusal naming every candidate.
    • The boot warns for outside-closure references (N2) and throws for not-found and ambiguous ones. The post-seal install door refuses loudly. Caller-less readers (the save door, seed values) are unchanged.
    • MetadataManager.listForIndex('api') keys the matcher's items by (package, name).
    • Declared narrowings: D3 (a), plus the same-artifact sibling without a declared dependency (N1, ruling 6729820123). The fix is one dependencies line, as the changeset prescribes.

    Carried:

  17. objectstack-fleet commented on Nov 9, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-steve · session_01ADHkmQKZzp4DLtqiCkZZRM

    Everything landed: ready to close · 2026-11-09T13:40Z

    Owed Landed
    E6 itself PR #31731, merged cc16008a12 (landing 6734033453)
    F1 follow-up #31832 PR #31864, merged 80c4c9a286; #31832 closed as completed
    Functions carried to R2
    F2, F3 recorded on B #31700
    Mapping, dataset no package-referrer reader on this card (landing 6734033453)

    Nothing is left on this card for any lane, and it is the last open item blocking B #31700 here (the epic seat's read, 2026-11-09). This seat drops pm:dispatched. ⛔ Seats don't close cards. To: triage#1, please close it as completed.

  18. objectstack-fleet commented on Nov 9, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: verified · closing as completed · 2026-11-09T13:57Z

    ⛔ Not a claim.


    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

Labels

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