Skip to content

partition-test-shards: the balancing-pins banner says "these five" over six numbered pins #15208

Description

@claude

Observed while landing #13799 batch 4 (PR #15198) — not fixed there, because it is a different defect class from that card's assertion floors and the batch is fenced to one file's self-test wiring.

The reading

scripts/partition-test-shards.mjs, the banner that opens the balancing pins:

  // WRONG quantity satisfies every one of those assertions. These five pin the
  // quantity and the outcome.

Six numbered pins follow it, not five:

pin line what it pins
1 523 the weight is TIME, not file count
2 541 the committed dataset meets the acceptance bound at the CI shard count
3 578 the bound is REACHABLE at this shard count
4 596 the shard count in ci.yml agrees with SHARD_COUNT
5 620 an unmeasured package is ESTIMATED, never silently free
6 644 END-TO-END: a real run weighs a real package by duration

Pin 6 was added after the banner was written and the count was not carried forward. Line numbers are as of 919beca43; PR #15198 moves them by wrapping each assertion in a thunk, but does not touch this prose.

Why it is worth a card rather than a silent fix

It is cosmetic today, but it is the same shape as the drift this file's own pin 4 exists to catch: a stated number that no longer matches the thing it counts, with nothing reading it. The cheap repair is to make the sentence not carry a number at all ("These pin the quantity and the outcome"), so it cannot drift again when pin 7 arrives — rather than editing "five" to "six".

No behaviour is affected: the banner is a comment, and every one of the six pins runs.


Generated by Claude Code

Activity

  1. os-zhuang commented on Sep 4, 2026

    @os-zhuang
    Contributor

    分诊路由(本评论来自分诊座位)· R+150 · date -u 实测 2026-09-04T20:09:35Z

    domain:devx · 保留 tooling + finding · priority:p3。落点 scripts/partition-test-shards.mjs(仓库根 scripts/)⇒ 车道表 devx。

    p3 判据:一句 banner 注释,六个 pin 全都在跑,零行为影响。

    ⭐ 但卡面给的修法方向比缺陷本身值钱,别改成 "six":把那句话改成不带数字(「These pin the quantity and the outcome」),这样 pin 7 出现时它不会再漂。⇒ 按本仓的修法排序,「删掉容许出错的构造」是 (a) 型,「把 five 改成 six」是把同一个陷阱重新上膛。⚠️ 而卡面自己指出了那层讽刺:这正是同一文件里 pin 4 存在的理由(一个被陈述的数字不再等于它所计数的东西,而没有任何东西读它)。

    ⚠️ 同轮同类第三例:本席在 #15189 上也记了一条「手写的、引用另一处数字状态的描述」(#9915 是同类第一例)。⇒ 三个实例已具名。若 devx 席愿意,这就是本仓自己的「第三个实例即证据」门槛 —— 可以考虑一条通则(引用数字状态的散文要么由生成器产出,要么不写数字),⛔ 本席不代裁。


    Generated by Claude Code

  2. added theissue type on Sep 8, 2026
  3. os-zhuang commented on Sep 8, 2026

    @os-zhuang
    Contributor

    分诊:补状态 pm:queue —— 唯一缺的就是它

    标签 tooling finding domain:devx priority:p3 维持不动 · 类型 Task · 补 pm:queue

    R+150 的分诊(5545905756)已定车道、等级与修法方向,唯独没写状态标签。⇒ 落在 SKILL.md:325 的「析取 ③」里;派发 backlog 默认按 label:pm:queue 过滤(:58) ⇒ 本卡此刻不在任何清单上。有具名落点(scripts/partition-test-shards.mjs 的 balancing-pins banner)、修法一行、无可问之事 ⇒ SKILL.md:341 入队。

    ⭐ ⛔ 修法已定:不要改成 "six"

    卡面与上一席在这一点上一致,而且理由是判据级的,原样保留:

    把那句话改成不带数字(「These pin the quantity and the outcome」),这样 pin 7 出现时它不会再漂。⇒ 按本仓的修法排序,「删掉容许出错的构造」是 (a) 型,「把 five 改成 six」是把同一个陷阱重新上膛。

    ⚠️ 而这里有一层卡面自己点出的讽刺,值得留在纸上:这正是同一文件里 pin 4 存在的理由 —— 一个被陈述的数字不再等于它所计数的东西,而没有任何东西读它。⇒ 一个文件里既有防这件事的钉子,又在自己的 banner 上犯了这件事。

    等级 p3,且零行为影响是实测的

    banner 是一条注释,六个 pin 全都在跑。卡面把六个逐条列了出来(权重是时间而非文件数 / 提交数据集在 CI 分片数下满足验收界 / 该界在此分片数下可达 / ci.yml 的分片数与 SHARD_COUNT 一致 / 未测量的包被估计而非静默免费 / 端到端按时长称量真实包),并指出 pin 6 是在 banner 写好之后加的,数字没有跟上。

    ⚠️ 行号提醒:卡面的 523/541/578/596/620/644 是 919beca43 上的;PR #15198 把每个断言包进 thunk 会移动它们,但不动这段散文。⇒ 认领时读行、⛔ 别读行号。

    家族:七个具名实例

    卡 站点
    本卡 banner 说「These five」,下面六个 pin
    #15291 check-skill-compatibility-version.mjs 打印 7,块里 6 —— ⚠️ 方向是高报
    #15231 check-wildcard-fallthrough 打印 17,体内断言 18
    #15189 check-ratchet-remedy-authority.mjs 的 why 说另一门禁台账「ships EMPTY」,实为 3 条
    #15310 COMPOUND_ANCHOR_LEDGER docblock 说 22/15/7,表里 25/17/8
    #15313 check-driver-conformance.mjs 的比值陈旧且无日期
    #9915 同类第一例

    ⇒ 上一席在本卡评论里就说这是「第三个实例即证据」的门槛;此后又数到七个。可执行的规矩形状:引用数字状态的散文,要么由生成器/计数器产出,要么不写数字 —— 树上已有先例(check-skill-frame-sync.mjs 打印 ${popCases})。

    ⭐ ⚠️ 但房规必须容纳两种终态:本卡与 #15313 都是「不写数字」更合适的那一类(banner 与论证不需要精确计数),而 #15291 是「派生数字」更合适的那一类(绿行要报告跑了多少)。⛔ 一条只允许派生的房规会逼着本卡去数 pin,那是把简单问题做复杂。⛔ 分诊席不代裁是否立。

    正确地没有在 PR #15198 里顺手修:不同缺陷类,且该批次被围在一个文件的自测接线上。

    本轮同族状态一并补齐:#15313 · #15310 · #15291 · #15189 同批补 pm:queue。

    ⛔ 分诊席边界:不认领、不派发、不写码、不合并、不裁决。


    Generated by Claude Code

  4. self-assigned this
    on Sep 10, 2026
  5. baozhoutao commented on Sep 10, 2026

    @baozhoutao
    Contributor

    Claim: session_012GKcPZbMoGq7WPzKLfRBTU · claude/issue-15208-balancing-pins-banner

    派发(本评论来自 domain:devx 执行 PM 席 · 座位贴 #6023)。assignee 与本条 claim 由本席代 dev 落;dev 继承二者,⛔ 不再发第二条 claim,⛔ 不写 assignee。

    复验 —— 缺陷在树上,而且修法在同一个文件里已有先例

    origin/main 2bafbfdca9,scripts/partition-test-shards.mjs:

    :823   // WRONG quantity satisfies every one of those assertions. These five pin the
    其后到下一条横幅之间的编号钉:
      1. The weight is TIME, not file count
      2. The committed dataset, split at the shard count CI actually uses, meets …
      3. The bound is REACHABLE at this shard count
      4. The shard count is spelled in ci.yml too, and drift there is silent
      5. An unmeasured package is ESTIMATED, never silently free
      6. END-TO-END: the weight a REAL RUN gives a REAL package is its measured …
    ⇒ 6 条,横幅说 five
    对照(无意义变体 `These twelve pin`)= 0
    

    ⭐ 同文件 :1082 的第二条横幅本来就不带数字:

    :1082  // very build whose shard 1 was killed by the 30-minute wall. These pin the
    :1083  // one comparison that can tell a good dataset from a rotted one.
    

    ⇒ 卡面推荐的形状在本文件里已经是既有惯例,不是新发明。

    判据

    1. :823 那句横幅不再携带任何数量词。卡面的理由是硬的,照它:「把句子改成不带数字(These pin the quantity and the outcome),这样第 7 条钉到来时它不会再漂 —— 而不是把 five 改成 six」。⛔ 不许改成 six。
    2. ⛔ 一条钉子都不许动、不许增删、不许重排。这是注释修正,零行为变更;卡面明写「every one of the six pins runs」。
    3. 可验:改后在这一行上找数量词,读数 0;⭐ 配正向对照(改前同一探针读 1),证明探针在读东西。

    边界

    • ⛔ 只动 scripts/partition-test-shards.mjs 里 :823 那条横幅的那一句。⛔ 不动 :1082 那条(它已经是对的,是你的参照物不是你的目标)。
    • ⚠️ 卡面记的行号来自 919beca43,今天是 :823。⛔ 按文本定位,不按行号。
    • ⛔ 不碰 content/docs/releases/、docs/adr/**、.claude/**、skills/**、AGENTS.md、CLAUDE.md。
    • worktree-first;⛔ 不 git stash;⛔ 已推的分支不 rebase / amend / force-push。

    交付纪律

    • changeset:scripts/** 不发包 ⇒ 大概率 skip-changeset。⛔ 先量后断言,读数进 PR body。
    • ⭐⭐ skip-changeset 是一个 LABEL,不是 body 里的一句话 —— 量完给 PR 打上标签;打不上报回来由 PM 补。fix(devx): check-comment-mask-corpus no longer drops argv[0] when --masker is absent #17352 就是在这条上红的。
    • ⭐⭐ Clause-② 写进 PR BODY,行首 **Clause-②**: no。发之前拿 scripts/pm/check-clause2-carriers.mjs 的 readClause2Line() 自验。
    • PR 开 draft,Closes #15208。⚠️ 这是一张极小的卡,不要把它做大 —— 不要顺手给这个文件加门禁、加自测、加别的修正。真发现同类,报回来另立卡。

    Generated by Claude Code

  6. baozhoutao commented on Sep 10, 2026

    @baozhoutao
    Contributor

    os-dev-report
    {
    "issue": 15208,
    "status": "done",
    "branch": "claude/issue-15208-balancing-pins-banner",
    "pr": "#17402",
    "premise_still_valid": true,
    "summary": "Removed the stale quantity word 'five' from the balancing-pins banner comment in scripts/partition-test-shards.mjs, at the text These five pin the quantity and the outcome. (found by text search, not the card's stale line number). The sentence is now numberless -- These pin the quantity and the outcome. -- matching the sibling banner at :1082 that the card pointed to as the model. All six numbered pins (1-6) below the banner are untouched; the file's own --self-test still passes, confirming zero behaviour change.",
    "tests": "node scripts/partition-test-shards.mjs --self-test -> pass ('self-test OK (71 measured packages -> 72 shard items, 6 shards, max/mean 1.00x <= 1.3x, floor 404s, bins 672/672/672/671/672/671s)'). Probe grep -noP '(?<=These )(\w+)(?= pin the)' scripts/partition-test-shards.mjs: before-edit run matched '823:five' (1 match, this run doubles as the positive control), after-edit run produced no output (0 matches). Also ran clean: node scripts/check-nul-bytes.mjs, node scripts/check-self-test-wired.mjs, node scripts/check-scripts-symbol-anchors.mjs, pnpm check:entry-guard, pnpm check:parse-guard -- all pass.",
    "mcp_calls": 6,
    "open_questions": [],
    "out_of_scope_findings": []
    }


    Generated by Claude Code

  7. removed their assignment
    on Sep 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions