Skip to content

objectql: narrow the phase-1 one-holder refusal from environment to namespace for action (ADR-0150 child B, action family) #31697

Open

Description

@objectstack-fleet

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

Filing gate: ④ coordination node: child B 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. Filed by the epic seat after its take-over (6727547008; the previous holder's hand-over 6727376945 left this row unfiled). ⛔ Not a claim.
Ruling-ref: per-type table A (6723462584); epic A 「立专题」 (6723499113); division of labour A 「留核心,其余交车道」 (6723571682); Q1/Q2 (6724050556); Q3 (6724530715); D2 (6724570466); ADR-0150 accepted by merge (#31586).
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 once every Blocked-by: below is closed; the epic seat reviews its PR against the red lines below (ruling 6723571682).
Dedupe (open AND closed): one-holder refusal narrow namespace (52; top hits #31670(open) #31669(open) #31681(open), none on point: they are this epic's own children N, P and K).
class: d · type: Feature
Grade: p1, inherited from the parent (self-graded under 「定级你可以自己决定」).
Blocked-by: #31673
Blocked-by: #31691
Blocked-by: #31692
Blocked-by: #31693

维护者速读

收尾卡:action 这几类的「全环境只能一个持有者」拒绝收窄为「同一命名空间内唯一」。只在这些类型的索引、入口和存储引用都带上软件包之后做。

What to build

Phase 1's one-holder refusal for action narrows from one package holder per environment to one holder per namespace (D2, D9), only after this family's E, G and S children have landed. Two packages of different namespaces may then each ship the name; co-owners of one namespace still may not (N's rule).

Surface

  • Expected file surface: objectql bare-name-one-holder.ts.
  • Clause-②: no.
  • Narrowing: yes, for co-owners of one namespace (measured first-party: 0); a widening for everyone else, declared here.

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 accepts the PR against these lines; a narrowing beyond the declared one goes to the maintainer (needs-user-decision) 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-08T22:53Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

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

    待裁 · 两个软件包在同一个对象上放了同名动作,调用时没指明软件包,该怎么办? · 2026-11-08T23:17Z

    一句话问题: 两个软件包都在「客户」对象上放了一个叫 convert 的动作。今天调用 /actions/客户/convert 时,后注册的那个包的处理程序在运行,界面上显示的却可能是另一个包的定义。启动时有警告,但调用照常执行。

    为什么到你这里: 你在 10 月 19 日的裁决 6262054499(#24472)里定了「18.x 先只告警」,要拒绝这种重名,得先回来问你。ADR-0150 以为动作已由阶段一兜底,其实阶段一只管不挂对象的动作(E2 #31673 实测,6728528150)。所以这种重名是 ADR-0150 没覆盖的一块,本席不能代裁。

    Governing text: 6262054499(只告警,拒绝须先问维护者);ADR-0150 D5(裸名字有歧义时返回 409 并列出候选)与专题三条红线(不放宽、歧义要报不能猜、每步可单独发版)。

    选项 做什么 客户看到什么 工作量
    A 拒绝 不指明软件包时,入口返回 409 并点名两个包;指明软件包(/actions/<命名空间>/客户/convert)就能调到 有重名的部署升级后,这类按钮要带上软件包才能用;首方实测预计为 0(E2 正在测) 在本卡(动作收尾卡)落地,约 1 个 PR;改 2 个旧测试文件的 6 个用例
    B 保持今天的行为 继续由后注册的运行,继续告警 什么都不变;但同一个调用可能执行一个包、显示另一个包,这个错配一直存在 无

    业务含义: A 等于「两个供应商的同名按钮必须写清是谁的」;B 等于「谁后装谁说了算」。

    四棱(os-decision-facets):

    Prior rulings read: bound action collision → 6262054499 (#24472), landed as #24526 (warn only); ADR-0150 D5; thread: E2 #31673 report 6728528150.

    推荐 A。 置信缺口:首方重名计数待 E2 实测,非零就会先报回来。只看①选 A;②③④ 是否翻转:否。

    裁后执行: E2 #31673 现在按「保持今天的行为」落地(不拒绝、不改变任何可见结果),只把引擎键换成带软件包的。选 A,拒绝在本卡(动作的收尾卡)落地,排在 E2、G1、G2、S4 之后;选 B,本卡只收窄阶段一的不挂对象动作,同对象重名维持告警。

  4. added
    needs-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PR
    on Nov 8, 2026
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:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:serverDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestneeds-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PRpm:blockedBlocked by another issue/PR — body carries Blocked-by: #Npriority: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