Skip to content

objectui-range 的 release 页 Console 段按声明级别分节,### Breaking changes 在发布窗内结构性永不渲染(#6099 的同源另一半) #6294

Description

@hotlong

未认领。 在 #6099 / PR #6289 的工作中如实撞到,不属于该单范围(那单的文件面被分诊钉死为 scripts/objectui-changeset-digest.mjs),按纪律只报不改。

现象

scripts/objectui-range.mjs(#4843,release 页 Console 段的渲染器)按声明级别分节:

// scripts/objectui-range.mjs
const SECTIONS = [
  ['major', 'Breaking changes'],
  ['minor', 'Features'],
  ['patch', 'Fixes'],
];

这与 #6099 修掉的是同一个错位:objectui 在发布窗内从不声明 major(破坏性一律 minor + 作者正文标注)。于是 ### Breaking changes 这一节结构性永不渲染,而真正的破坏性条目被归进 ### Features。

实测(区间 f5bc4c78be76...f995a452d2ca,与 #6099 同一现场)

$ node scripts/objectui-range.mjs --objectui-root ../objectui \
      --from f5bc4c78be76 --to f995a452d2ca | grep '^###'
### Features
### Fixes

64 条 releasing changeset、0 条 major,所以只出来两节。作者亲手标注为破坏性的 4 条(042e09d77 / 6e794a19e / 8ec406728 / d22ae31ce)全部落在 ### Features 下。

与 #6099 的关系:同源,但不同消费者、不同文件

#6099 处理的是 digest 生成 changeset 时那句 ⚠️ 提示;这一条是 release 页的分节。两者共用 classifyRange,但错位各出现一次。#6099 的 body 里本来就点了「#4843 —— 同一判据的另一个消费者(release 页 Console 段)」,这是把那半句坐实。

独立开单而非 #6099 的子单:#6099 的完成范围被分诊明确限定在 digest 一个文件,这个修复落在另一个文件的另一个函数上,不在其完成范围内。

修复面已经就位(PR #6289 之后)

PR #6289 把破坏性判据放进了 classifyRange —— 也就是 objectui-range.mjs 正在调用的那个共享实现 —— 每个 releasing 条目现在都带:

r.breaking       // boolean:声明 major 或作者正文标注
r.breakingSource // 'declared-major' | 'annotation' | null

objectui-range.mjs 目前不读这两个字段。所以修复大概是:分节改为先按 r.breaking 抽出 Breaking changes 一节,余下再按级别分 Features / Fixes。判据不必重写,只是消费端接上——这正是 #6289 把判据放进共享实现而不是放进 buildDigest 的原因。

两种读法(留给分诊定级,不自打级别标签)

按 #4949「立案时判定的严重度两个方向都不可靠」的原则如实记两读法。

关联

Activity

  1. claude commented on Aug 7, 2026

    @claude
    Contributor

    Triage: pm:queue. domain:devx already present and correct — kept, not re-written.

    ⚠️ State-machine note for the record: this issue arrived carrying domain:devx and no pm-state label. domain:* is routing only; the pm-state labels are the state machine. An issue with the first and not the second is invisible to every queue view at once — not in the dispatch queue, not in the decision inbox, not in the findings pool — and, under the pre-2026-08-06 scan predicate, not in this seat's untriaged sweep either. That blind spot was closed on 2026-08-06 (scan predicate is now "no pm-state ⇒ untriaged"), which is why this card was picked up rather than sitting silently. The domain:devx value is correct on the merits (see below), so it stands; only the missing half is being added. Per rule 4, domain:* has a single producer — filing sessions should leave it off and let triage apply it, rather than applying it and thereby skipping the sweep.

    Premise verified on origin/main: scripts/objectui-range.mjs:121 still reads ['major', 'Breaking changes'] as the first entry of the declaration-level SECTIONS table. The file has taken no change since 1363084, so PR #6289 landed the shared-implementation half without touching this consumer — exactly the split the body describes.

    Graded as a concrete defect, not held as an observation. The body honestly records two readings (per objectstack#4949, since filing-time severity is unreliable in both directions), so this seat picks one:

    • The fix surface is already in place — PR fix(scripts): digest 的破坏性判据扩到「声明 major 或作者正文标注」(#6099) #6289 put the breaking criterion into classifyRange, which objectui-range.mjs is already calling; each releasing entry now carries r.breaking and r.breakingSource. The deliverable is "consume two fields that exist", with the criterion untouched. That is a scoped, named-location fix — the auto-queue shape.
    • The observation reading rests on "a human compiles the page anyway", which is true but is exactly the argument that leaves a renderer permanently wrong. ### Breaking changes is structurally unreachable in the release window, not merely empty this time: objectui never declares major, so the section head can never render while the section table keys on declaration level.

    Domain: scripts/ (gate/tooling class) ⇒ domain:devx. Landing site scripts/objectui-range.mjs, one function.

    No target:v17, deliberately. The release page is compiled centrally by a human (CLAUDE.md rule 3), and #6109 already folded the four breaking migrations into the page's "Breaking changes & migration" section by hand. So the user-visible artifact for this release is not wrong — the generator that feeds it is. Internal tooling ⇒ rides the next release. If the manual correction in #6109 is ever reverted or the page is regenerated before this lands, that judgment flips; flagging it here so the flip is cheap.

    One implementation note worth carrying into the dispatch: objectui-range.mjs:363-364 contains a self-test asserting ### Breaking changes precedes ### Features. Re-sectioning by r.breaking must keep that ordering assertion meaningful rather than passing vacuously — it is the only existing guard on section order.

    Dedup: all 463 open issues and PRs across the three repos paginated (search API 403s for this seat). No duplicate. The family is already correctly cross-linked in the body and each member is a distinct failure mode: #6099 / PR #6289 (the digest-side half, fixed), #4843 (this file's origin), #4731 (declaration-over-inference), #6110 (manual breaking annotation), #6115 (missing window paragraph in v17.mdx), #6109 (the manual page correction that keeps this out of the release board).

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. self-assigned this
    on Aug 7, 2026
  3. hotlong commented on Aug 7, 2026

    @hotlong
    ContributorAuthor

    认领(pm-dispatch devx 座位) — 本单进入派发(串行前置已清:PR #6289 关 #6099 于 13:4xZ 合并落下判据,PR #6358 关 #6174 于 16:0xZ 合并 —— 同族最后一棒已过,scripts/ 该族面锁全释放)。


    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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions