Skip to content

objectui-range.mjs 默认仍按 feat|fix 类型过滤 —— 发布页 Console 段落同样会丢掉破坏性 refactor! #4843

Description

@xuyushun441-sys

未认领。 刷 #4731(bump-objectui.sh 的 pin changeset 改成读 objectui 声明的 changeset)时发现的邻近问题,不在那条 PR 的范围内,另立。

现状

scripts/objectui-range.mjs —— docs/releases-maintenance.md 里「两个平台版本之间前端改了什么」的聚合层,产物直接贴进发布页的 Console 段落 —— 用的还是同一套类型猜测:

const KEEP = ALL_TYPES ? null : new Set(['feat', 'fix']);

--all 是显式 opt-in,默认只收 feat + fix。

后果

与 #4731 同源:破坏性变更是唯一被类型过滤挡在门外的一类。在 #4731 实测的真实区间 7d9734d5e321..785b8a5d432c 里,默认输出会丢掉 13 条真正发版的提交,其中 6 条带 !(refactor(layout)!: delete PageNodeRenderer、burn ledger batch 2/4/5/6/7),外加 chore(deps): lockstep the @objectstack family onto 17.0.0-rc.1;同时会收进 5 条在 objectui 侧 release-nothing 的提交(两条 fix(ci))。

比 #4731 轻一点的地方:这里的过滤在 --help 里写明了,也有 --all,不是完全无声。重的地方:它的产物是发布页正文,读者拿到的是一份看不出被过滤过的 markdown —— 尾部没有「另有 N 条被类型过滤排除」的说明,--all 又不是默认。

建议

与 #4731 收敛到同一个判据:改用 scripts/objectui-changeset-digest.mjs(#4731 引入)的导出函数 —— collectAddedChangesets() / parseChangeset() —— 按 objectui 声明的 changeset 取「发版的前端改动」,级别也现成。若要保留按 commit 类型分组的呈现,至少让被排除的条数在产物尾部出声。

关联

Activity

  1. xuyushun441-sys commented on Aug 3, 2026

    @xuyushun441-sys
    CollaboratorAuthor

    认领(PM 分派)

    • session:session_018iARDqtrhQgz6fVHDeDkbQ
    • 分支:claude/issue-4843-objectui-range-read-changesets
    • 车道:domain:devx(落点 scripts/objectui-range.mjs)

    阻塞已解除:#4731 的 PR #4842 已于今日合入 main,scripts/objectui-changeset-digest.mjs 导出的 collectAddedChangesets() / parseChangeset() 现已可复用 —— 本单要的正是让两处收敛到同一个判据,而不是各写一份。


    Generated by Claude Code

  2. xuyushun441-sys commented on Aug 3, 2026

    @xuyushun441-sys
    CollaboratorAuthor

    审核通过 — PR #4905 已取消草稿并挂上 auto-merge(SQUASH)

    判据没有复制第二份,这是本单最要紧的一点。 议题建议「改用 objectui-changeset-digest.mjs 的导出函数」,dev 没有停在"调用它的现有导出",而是把原先内嵌在 buildDigest() 里的分类循环抽成新导出 classifyRange(),让 bump-objectui.sh(平台发布记录)和 objectui-range.mjs(发布页 Console 段落)走同一个函数。两份实现一定会漂,而第一个会漂掉的正是已经丢过一次的那一类:破坏性 refactor(...)!。buildDigest() 的 20 条既有断言全绿,即是重构未改行为的证据。

    抽出来的那段文档也写对了立场:分组按类型是呈现,归调用方;绝不能再变回筛选。

    反向验证有承重:把同一构造 fixture 喂给改前脚本,新用例的 8 条断言 8/8 全部失败 —— 改前产物实录里 ### Fixes 列的正是两条 release-nothing 的 fix(ci),而破坏性 refactor(layout)! 与 chore(deps) 完全不见。0 条失败才是该担心的情况。

    实测与构造分得清楚:区间 7d9734d5e321..785b8a5d432c 的数字来自真实 objectui 检出,与本单正文逐条吻合(13 条漏收、其中 6 条带 !、5 条误收含两条 fix(ci)),dev 明确标注了 self-test 里那组 3/4/5 是构造数字,没有混用。上一单(#4731)核出了正文两处 ground truth 偏差,这一单核完是没有偏差 —— 两种结论都照实报,这正是我要的。

    两处需要记录的行为契约变化:

    1. --all 的语义从「关掉类型过滤」变成「逐条点名被排除项」。过滤已不存在,旧语义没有对应物;--help 与 changeset 都写明了。这是本 PR 唯一对外可见的契约改动。
    2. 账目改成无条件打印(releasing / added / commits 三个总数,加 release-nothing 与无-changeset 计数),排除为 0 时也打印 0。理由是产物是发布页正文:一份看不出被过滤过的 markdown 与一份完整的 markdown,读者无法区分 —— 这正是本单要防的沉默。

    共享文件已压到最小:package.json 只在既有的 check:objectui-changeset 那一行后串了第二个 self-test(未新增 script key),lint.yml 只加 3 行注释。与本批其余 PR 无交集 —— #4842 上一轮被合并队列踢出正是栽在这两个文件上,这次提前排过了。

    顺带的发现已立单:#4904 —— objectui 可以在改动已发布包源码的同时不带 changeset(实测区间里就有两条:fix(charts) 动了 packages/plugin-charts/src/、fix(i18n) 动了 packages/i18n/src/)。旧口径碰巧收了它们,但那是 subject 以 fix 开头的巧合,不是发版信号。本 PR 让它们出声(计数 + --all 点名)但修不好,真正的洞在 objectui 侧缺一道门禁。立单是对的 —— 只活在某个 PR 叙述里的事没有 owner。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions