Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

[decision-shaped] may an upstream-port-pin divergence ADD upstream code that postdates the pin, rather than ADAPT pinned code? objectui#9387 made one real and the gate's header does not describe it #10205

Closed as not planned

Description

@os-elon-musk

Ruled: 5770936679 · letter C + retirement card objectui#10208 · 2026-09-22T03:49Z — batch #211 item 5; closed not_planned

The question

May a declared divergence in scripts/upstream-port-pin.json ADD upstream code that postdates the pin, rather than ADAPT pinned code?

Route B on objectui#9387 did exactly that, and it is now real in the tree: entry proxy-rearm-plan on files[0] (scripts/pm/check-half-states.mjs) adds a 90-line block taken verbatim from objectstack eec56c37d, while the entry is pinned at bf10debd5. Every other divergence in that file adapts pinned code. ⇒ that port is now a deliberate SUPERSET of the ref it is pinned at, which is a relationship the gate's header does not describe.

Why it is being asked, and what it is NOT

The maintainer chose route B over a full --resync for its blast radius — a re-sync crosses roughly 23,000 lines of upstream change and silently re-homes every predicate the half-state patrol runs. ⛔ That is a decision about SCOPE, not a ruling that this gate's contract allows an ADD-shaped divergence. The two are separate and only the first has been made.

⚠️ The entry carries its own warning today (「⛔ ON THE NEXT RE-SYNC, DELETE THIS ENTRY rather than carrying it forward: once upstream's own bytes contain the block, applying this divergence forward inserts a SECOND copy and the duplicate export fails loudly at load」), and check:upstream-port-parity exits 0 with it. So nothing is broken. What is undescribed is the rule.

Why it recurs rather than being a one-off

The thing that forced it is structural: a port pinned behind the upstream that a NEW port depends on. That happens every time a sibling repository adopts a second objectstack tool whose own dependencies moved after the first adoption. objectui#9387 is the first instance; it will not be the last.

Options

route cost
A Ratify it — amend check-upstream-port-parity's header to describe the superset relationship, and require an ADD-shaped divergence to carry the ref it was taken from (this entry's why already does). the relationship becomes described instead of silently permitted
B Forbid it — make the gate refuse an ADD-shaped divergence by shape, forcing a full re-sync whenever a port needs something newer than its pin. defensible if ADD is rare; it is not
C Leave it undecided; the entry's own why carries the warning and the next re-sync deletes it. the gate's header stays out of step with what it permits

Recommendation: A, and the reason is this repository's own posture rather than taste — the failure mode it treats as worst is a gate whose header no longer matches what it permits, which is precisely what C leaves behind. ⛔ Not the filing seat's to do: it changes a gate's contract, and that belongs to whoever owns check:upstream-port-parity.

⛔ Not a blocker for objectui#9387 or PR objectui#10203 — that PR is green, the gate passes, and the entry documents itself. This is the rule the tree now needs stated.

业务含义直译

  • A(批准) —— 端口与它的上游钉之间「可以更新、不只可以改写」这件事,写进闸门自己的说明里。客户看不见任何变化,下一个读这个端口的人少踩一次坑。
  • B(禁止) —— 任何一次「新工具要的上游比老钉子新」都变成一次全量 re-sync。客户看得见的后果是:巡逻脚本会在一次无人预期的批次里整体换血,而换血的理由只是另一个工具想被采用。
  • C(不裁) —— 今天什么都不动。代价是闸门的说明书继续描述一件它已经不做的事,下一个人按说明书判断,判错。

四棱从业务立场论证

  • ① 项目长远合理性 —— 兄弟仓采用第二个、第三个上游工具是这个平台的既定方向(本卡是第一例,objectui#9387 就是它)。⇒ ADD 形背离不是意外,是这条路上的常态;让常态无名无据,是把长期成本记在每一个后来者头上。指向 A。
  • ② 实际业务拉动 —— 今天就有一条真的在树上:proxy-rearm-plan。⛔ 不是设想。闸门今天 exit 0,所以拉动不是「坏了」,而是「说明书与行为已经不一致,而且已经不一致了」。指向 A 或 B,⛔ 不指向 C。
  • ③ 防 AI 犯错 —— 这一棱最硬。C 的出错形态是静默:下一个 agent 读闸门 header,以为背离只能 ADAPT,于是把一个本该 ADD 的需求做成 re-sync,拖进两万多行上游变更,而闸门全程绿灯、没有任何一句拒绝。A 的出错形态是响亮:header 说清楚 ADD 允许且必须带来源 ref,漏带就是可判的缺失。B 也响亮(按形状拒绝),但它把每次 ADD 变成一次大改,AI 在大改里犯的错更难看见。指向 A。
  • ④ 创业阶段不扩散 —— A 不新增任何能力面:它描述一个已经存在的关系,并对它加一条「必须写明来源 ref」的约束。⇒ 是收敛,不是扩张,从紧原则在这里不反对 A。B 才是扩张——它要给闸门写一个新的形状判别器。指向 A。

Prior rulings read: upstream-port-pin,port parity divergence,superset of pin,add divergence → 0 hits; none; thread: none; repo: objectstack-ai/objectui

推荐 · 回退 · 置信缺口

推荐:A。 自检:只看①选 A;②③④ 是否翻转:否 —— ②③④ 与 ① 同向,④ 经判别不成立(描述既有关系 ≠ 新增面)。

回退:C,且只在一种情形下:check:upstream-port-parity 的所有者判定这个闸门根本不该有「端口可以领先它的钉」这层语义,那么正解不是改 header,而是另立一个「ADD 清单」结构——那是一张新卡,⛔ 不是本卡的字母。

⚠️ 置信缺口(本席看不见的部分):① 本席没有测量把形状判别器写进闸门要多少工作量,所以 B 的成本是估的;② 本席不知道 objectstack 侧是否已有别的仓在做同样的事而没有申报——若有,ADD 形背离的真实频次比本卡估计的高,而那只会让 A 更对。

裁后执行段(维护者只裁字母,不背执行)

  • 裁 A ⇒ 一张 domain:devx 卡:改 check-upstream-port-parity 的 header 描述 superset 关系,并让闸门要求 ADD 形条目带 upstream_ref(本卡的 proxy-rearm-plan 已经带了,所以它是第一个合规样本而不是第一个违例)。
  • 裁 B ⇒ 一张 domain:devx 卡:闸门按形状拒 ADD;同批必须把 proxy-rearm-plan 改成一次 files[0] 的 --resync,⛔ 不能只加拒绝而留着树上那条已存在的 ADD,否则 main 当天变红。
  • 裁 C ⇒ 关本卡 not planned,并在 proxy-rearm-plan 的 why 里补一行「本形状未经裁定」,让下一个读到的人知道这是未决而不是已许。

四棱卡面块

  • ① 项目长远合理性:兄弟仓采用上游工具是既定方向,ADD 形背离是这条路的常态;A 给常态一个名字,C 让它继续无名。
  • ② 实际业务拉动:树上今天就有一条真的(proxy-rearm-plan),闸门 exit 0 —— 拉动是「说明书与行为已不一致」,⛔ 不是「坏了」。
  • ③ 防 AI 犯错:C 静默(下一个 agent 读 header 会做成 re-sync,拖进两万多行,全程绿灯);A 响亮(ADD 允许但必须带来源 ref,漏带可判)。
  • ④ 创业阶段不扩散:A 描述既有关系 + 加一条约束 = 收敛;B 要新写一个形状判别器 = 扩张。从紧原则在这里不反对 A。

装箱记录

⚠️ 本卡立时未挂 needs-user-decision,现由立卡席补挂,时间 2026-09-21T08:57Z。理由与 objectui#10179 同一条:needs-user-decision 不在分诊席的垄断里(垄断是 domain:* 与 type),而 SKILL.md 〈升级与决策〉② 写的是「决策默认锚在所属 issue(分析发评论,中文;挂 needs-user-decision、退出活动队列)」—— 锚定决策的席位就是装箱的席位。⛔ 这正是 objectui#10171 量到的洞。priority:* 与 domain:* 仍是分诊的,仍然欠着。

Dedupe words: upstream-port-pin · ADD divergence · superset of its pin · check-upstream-port-parity contract · proxy-rearm-plan

Filed by the domain:ui execution seat · session_01Xr7APep6jm1Zta3KUzPzZf · 2026-09-21T08:27Z


Generated by Claude Code

Activity

  1. os-support-ai commented on Sep 22, 2026

    @os-support-ai
    Collaborator

    Ruling: batch #211 item 5 · letter C + retirement card objectui#10208 · maintainer 「同意,10205 根治(一张 devx 卡,你一字)——退役端口本身」 2026-09-22T03:49Z

    Director seat, summon #26 (session_01SPwf6Kmqo1gqzCSWSuMtQM). This seat first recommended A (describe the superset relationship, require upstream_ref); the maintainer asked whether this class of work is a waste of time and how to simplify (「这种开发是否浪费时间,怎么简化怎么处理」); the seat proposed C now plus retiring the port itself; the maintainer approved in the words quoted above.

    Governing text: the maintainer's 2026-09-21 「我们系统开发了太多无用的门禁,反而在浪费时间」 (ruling #202); the four-axis framework ④ (更少零件); objectstack .claude/skills/pm-dispatch/SKILL.md 「工装只答被告知的仓,缺 --repo/PM_SWEEP_REPO 即答 objectstack」 — the PM scripts are already built to run against any board.

    Ruled (C): this card closes with no change to the gate. The check-upstream-port-parity header is not amended and no upstream_ref requirement is added; proxy-rearm-plan's own why already carries its warning, and the port is retired under the card below.

    Ruled, the retirement — objectui#10208 (domain:devx, pm:queue, maintainer direct dispatch): objectui stops porting objectstack tooling through scripts/upstream-port-pin.json (13 entries, ~123 declared divergences) and its parity gate. Three classes, three treatments: ① PM scripts (check-half-states.mjs, board-snapshot.mjs; invoked-as.mjs / check-bash32-floor.mjs measured) — deleted from objectui; the objectui seats run the objectstack originals from an objectstack checkout with --repo objectstack-ai/objectui / PM_SWEEP_REPO; the two objectui-only switches are DROPPED, ⛔ not upstreamed — ruled here on the reading: PM_SWEEP_CLOSED_WINDOW_PAGES survives on origin/main 0cf2d6644bdb only in commented-out lines of .github/workflows/half-state-patrol.yml (an escape hatch that expired 2026-08-28) and in the port's own tests; closedWindowDisabled only in those tests (scripts/__tests__/check-half-states.test.ts), which are deleted with the port. ② .claude/hooks/* (8 files) — kept as plain copies the harness loads, one header line copied from objectstack@<sha>, no ledger, no parity check. ③ board-snapshot.yml — as ②, or a step calling the objectstack script. Then upstream-port-pin.json, check-upstream-port-parity.mjs, --resync, self-test, script entry and workflow step are deleted. Net −13 pins, −123 divergences, −1 gate; the accepted cost is that hook drift is found by hand.

    State in this stroke: closed not_planned; needs-user-decision removed.


    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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions