Skip to content

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

Closed

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. added
    domain:devxDomain lane — seat card indexed by label:pm:seat
    on Aug 7, 2026
  2. 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

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 7, 2026
  4. self-assigned this
    on Aug 7, 2026
  5. 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

Labels

domain:devxDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatch

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions