Skip to content

objectui: DecisionOutputDef 派生分歧已纯冗余——塌缩为 re-export,反转 parity 钉子(#4525 收尾) #4562

Closed
objectstack-ai/objectui
#3185

Description

@os-zhuang

#4525 核查确认:spec 自 cd6b9f202(2026-07-29,objectui#2955)起已建模 DecisionOutputDef.required,服务端强制语义与 spec 一致;objectstack 侧 PR #4561 补齐了 schema 层钉子。objectui 侧因此留下三处待收尾(代码落地仓库:objectui,发现自 #4561 的范围外记录):

  1. 塌缩冗余派生:packages/app-shell/src/utils/decisionOutputParams.ts:56 的 DecisionOutputDef extends SpecDecisionOutputDef { required?: boolean } 已纯冗余——spec 早有该键,接口应塌缩为纯 re-export;
  2. 修正过期注释:同文件 48–54 行的模块 TSDoc 仍断言「the spec does not model it yet」,已过期且误导;
  3. 反转 parity 钉子:packages/app-shell/src/__tests__/spec-symbol-parity.test.ts:246 钉住 Equal<Exclude<keyof DecisionOutputDef, keyof SpecDecisionOutputDef>, 'required'>——塌缩后该断言必须同步反转(这正是原注释第 54 行承诺的「fails on that day」绊线,今天就是那一天)。

三处应在同一个 PR 内完成,避免钉子与实现脱节。

验收:parity 测试反转后通过;app-shell 构建、测试、typecheck 全绿;无其他行为变化。

另注(供 PM 与维护者参考):#4525 源自 objectui 台账燃尽批次 3(objectui#3169 / #4115)的誊录,同批次其他「spec 尚未建模 X」类 issue 可能带有同样过期的前提,分诊时应先对照当前 spec 核查。

Activity

  1. added
    pm:queueReady for the PM dispatch loop
    repo:objectuiSeam card: cross-repo ordering with objectui is the substance (pure objectui fixes live in objectui)
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Aug 2, 2026
  2. self-assigned this
    on Aug 2, 2026
  3. os-zhuang commented on Aug 2, 2026

    @os-zhuang
    ContributorAuthor

    认领:PM 循环第 2 轮(代码落地仓库:objectui,repo:objectui 路由)
    分支:claude/issue-4562-decision-output-collapse(objectui 仓库)
    Worktree:objectui-issue-4562
    如另有会话已在做本 issue,以更早的认领评论为准,本认领让行。


    Generated by Claude Code

  4. os-zhuang commented on Aug 2, 2026

    @os-zhuang
    ContributorAuthor

    决策请求(第 2 轮开发 agent 上报,PM 复核后升级):塌缩本身已写完并验证,但无法按原范围落地——发现两个前置问题。已打 needs-user-decision。

    发现

    1. objectui 锁定的 spec 是 17.0.0-rc.0,没有 required;只有 rc.1 才有。塌缩在 rc.0 下直接编译失败(TS2339)。而只升 spec 一个包不可行:client/core/formula/lint 以精确版本钉住 rc.0,单独升 spec 会造成双版本依赖图——靠引用同一性判断「re-export vs fork」的 parity 守卫全部失效(agent 已实测);且 rc.1 把 ~22 个 automation/ui schema 从 $strip 翻成 $strict(此前被接受的元数据将开始报错),需要独立的回归验证。已立案 objectui#3182(全家族 lockstep 升级方案)。
    2. issue 里说的「parity 钉子会在那天变红」是错的——绊线从未生效:app-shell 的 tsconfig 排除了所有 *.test.ts,CI 没有任何 gate 编译这些类型断言;agent 实测在 parity 测试里写入 Assert<Equal<1,2>>(必假断言),pnpm type-check 依然 exit 0。这正是 declared ≠ enforced 在测试层的形态,也解释了 objectui: DecisionOutputDef 派生分歧已纯冗余——塌缩为 re-export,反转 parity 钉子(#4525 收尾) #4562 前提为何会错。已立案 objectui#3181(最小修法:专用 tsconfig.typetests.json 进 CI)。

    建议的落地顺序(两轴分析)

    ① objectui#3181(先) → ② objectui#3182(升级 PR) → ③ 本 issue 塌缩(改动已在分支 claude/issue-4562-decision-output-collapse 上,commit 139b9df,rc.1 下验证绿)。

    • 长远合理性:契约族必须单版本、lockstep 移动——双版本图恰好摧毁本仓库赖以自保的守卫;升级独立成 PR 才能给 $strict 翻转做正经回归,而不是藏在一个 3 行类型塌缩的 rider 里。
    • 防 AI 犯错:test(formula): lock ADR-0053 Phase 2 Slice 3 acceptance criteria (#1980) #3181 先行,否则 ③ 反转后的钉子仍是装饰品——本次 issue 的错误前提正是被「未生效的绊线」误导的实例;绊线真的通电后,这类前提错误将在 PR 内直接变红。
    • 升级 changeset 按 objectui 版本政策记 minor(fixed group 不得声明 major)。

    同意此顺序请回复,PM 即按序派发 ①②,③ 在 ② 合并后直接开 PR(改动现成)。若你认为 rc.1 的 $strict 翻转此刻不宜引入 objectui,说明后可改为暂缓整链、本 issue 挂起等升级窗口。


    Generated by Claude Code

  5. added
    needs-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PR
    and removed
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Aug 2, 2026
  6. os-zhuang commented on Aug 2, 2026

    @os-zhuang
    ContributorAuthor

    已经有单独的pr ,升级到 rc.1 了。

  7. added
    pm:queueReady for the PM dispatch loop
    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 Aug 2, 2026
  8. os-zhuang commented on Aug 2, 2026

    @os-zhuang
    ContributorAuthor

    PM 验收:ACCEPT → objectui#3185(已转正并加入 merge queue,合并后本 issue 自动关闭)。

    确认未被 #3178 顺手完成(它只升依赖,派生接口与旧钉子原样在),三项收尾齐备:塌缩为 export type DecisionOutputDef = SpecDecisionOutputDef(保留 re-export 入口,三个调用方零改动)、过期 TSDoc 改写为当前事实(并保留 type 闭合枚举收窄的 load-bearing 说明)、parity 钉子反转(排除集断言 never + 新增精确同一性断言,负向对照证实旧钉子现在必红)。CI 15 项全绿;changeset 按版本政策标 patch。

    两项跟进仍然成立(PR 已向 reviewer 显式标注):

    • objectui#3181 未落地前,反转后的钉子尚未被任何 CI gate 编译(装饰状态);
    • objectui#3182 核心发现仍然有效——feat(formula,lint): advisory type-soundness warnings for expressions (#1928 tier 4) #3178 只升了 spec 一个包,objectui main 当前同时装着 rc.0 与 rc.1 两份 spec(client/core/formula/lint 精确钉在 rc.0),依赖引用同一性的守卫处于隐患状态;另 rc.1 的 ~22 个 schema $strip→$strict 翻转已在 main 上、尚无人做过解析回归。

    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

pm:dispatchedDispatched to a dev agent by /pm-dispatchpm:queueReady for the PM dispatch looprepo:objectuiSeam card: cross-repo ordering with objectui is the substance (pure objectui fixes live in objectui)

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions