Skip to content

[Decision] 承重出处该用什么形式:同一周已合并 PR 编号有 11.7–15.1% 今天已 404,而本仓源码正以它作凭据 #19123

Description

@os-bill

维护者速读

事情:我们在自己的源代码里用 GitHub 的工单/PR 编号当作「这条规则是哪来的」的凭据。现在实测出来:这些编号会消失 —— 同一周已合并的 PR 编号里,一成多(11.7%–15.1%,两把独立仪器同向)今天在 GitHub 上已经打不开了,而且是被删除、不是被转移,所以「改指到新地址」这条路没有靶子。最刺眼的一条:有个 PR 的标题就叫「修复陈旧引用」,它自己的编号今天也是 404。

为什么现在要你拍板:这不是清理杂务。AGENTS.md 现在明文规定一条规则的出处住在落地它的那个 PR 里 —— 也就是说,换形式是改约定,席位不能自己选。而代价已经落在两个真实的地方:已发运的 tarball 里有两行把客户送去 404;还有一条打印给作者看的拒绝消息,在他正要决定「这次失败算不算测不了」的那一刻,递给他一个不存在的编号 —— 而那条规则存在的全部理由就是不让这种事发生。这个形状已经造成过一次实测事故。

四个选项,一句话各自的代价:

  • A 什么都不改 —— 零风险,但上面那两处继续烂下去。
  • B 每个死号改指落地它的 PR —— ⚠️ 实测盖不住:15 行里有 2 行的 PR 对象本身就没了;而且每个新号都带着同样一成多的概率一年内再死一次。
  • C 改锚到 commit sha(我们自己的仓里,永不 404,可附 PR 号作便利链接)—— 15 行重写,但换来的是一个我们掌控的对象;代价是 sha 不可点、不带故事,散文得自己说清那个 commit 裁了什么。
  • D 去掉编号,把教训直接写进正文 —— ⭐ 这对运行时字符串其实已经裁过了:check-doc-authoring 对其余每个包都在强制它,引的就是你自己的原话「处理 issue 时犯的错应该总结成经验,保留 issue id没有意义」。此后没有东西会再腐烂。

席位意见:施工席推荐 运行时字符串取 D、承重的内部锚取 C,分期做,A 作回退;四棱里①③④ 同向指 C/D,② 只影响先做哪一段、不改字母。⚠️ 两个没测的要说在前面:全树 9174 个编号只探了约 1250 个,所以清理的真实规模未知;而且看不出那 133 个对象为什么没了 —— 如果这是持续的仓维护,下季度会更糟,如果是一次性清扫,可能再不复发。这两种世界支持不同的字母。

⚠️ 还有一件相关但不要混在一起的:选项 D 今天够不到 packages/spec/scripts/**(门禁有个声明过的盲区),那是兄弟卡 #19124 的事 —— 本卡定形式,那张定这形式能不能被强制。

你要做的:回一个字母 —— A / B / C / D(若同意分期,回「C+D」即可)。

Governing text: AGENTS.md(一条规则的出处住在落地它的那个 PR 里)· scripts/check-doc-authoring.mjs 里 #13179 的裁决(运行时字符串去编号,含维护者原话)。


Filed by the domain:spec 执行席 2(座位帖 #18549,会话 session_01JbZnqu8bt6YqfJsr9vaFb3)⏱️ 2026-09-18T21:22Z,从 #17698 那一轮的 open_questions 接出。那一轮零编辑、零 PR:卡面自己的栅栏写着「在『删除还是转移』有答案前 ⛔ 不要动任何引用」,而答案改变了修法的形状,⛔ 不是解锁卡面假设的那一种。⛔ 本席只陈述,不打分。

一句话

这个仓在自己的源码里用追踪器编号当出处凭据,而那些编号会消失:同一周已合并 PR 的编号里,有一成多今天在 GitHub 上不存在。⇒ 路标指向空地,而我们正在继续立同样的路标。

测量 —— 两把独立仪器

(1) 那三个号确实死了,而且是删除、⛔ 不是转移

⏱️ 2026-09-18T21:22Z,origin/main = b7eaf6a617,本席第一手复核:

#16714 -> 404    #16715 -> 404    #16697 -> 404
LIT controls(同一分钟、同一令牌): #16712 -> 200   #16862 -> 200   #17698 -> 200

任何通道都没有 301。GitHub 对转移的 issue 答 301 Moved Permanently ⇒ 判据落在 DELETED,所以「重新指向」那条修法没有靶子。

(2) ⭐ 决定性仪器:问 GitHub「这个 commit 归哪个 PR 对象所有」

7936b29ce5  (squash 后缀写着 #16697)  ->  []          ← PR 对象没了
b37f0b1767  (squash 后缀写着 #16847)  ->  [16847]     ← LIT,仪器发火
1124c45641  (squash 后缀写着 #19107)  ->  [19107]     ← LIT,仪器发火

⇒ 不是「本会话的路由够不着」,是对象本身不在了。而那些 commit 今天就在 origin/main 的历史里、后缀就写着那个号 ⇒ 被引用者确实存在过、确实产出过已发运的代码。

(3) 这是仓级状况,⛔ 不是两张卡的意外 —— 两次独立普查

仪器 总体 读数
#17698 施工席:全量普查 2026-09-05..09-12 的 882 个 squash 后缀(全是已合并的 PR 号) 133 dead / 882 = 15.1%
本席:独立提取 + 抽样 本席用自己的提取式得到同样的 882;均匀抽 120 个 14 dead / 120 = 11.7%
近期对照(两边都做) 最近的 squash 后缀 施工席 300/300 live;本席 60/60 live = 0.0% dead

⚠️ 两个数不同,而两个都别当「那个数」:15.1% 是全量,11.7% 是 120 个的抽样,抽样在这个量级上本就有可观区间。⭐ 站得住的是两把独立仪器同向,以及近期对照两边都读到 0 ⇒ 这是分代的真实衰减,⛔ 不是路由或令牌的假象。

⚠️ ⛔ 未测:全树有 9174 个不同的追踪器形状 token,两轮合计只探了约 1250 个。仓级死引用的真实规模没测过,清理成本因此未知。

⭐ 样本里最刺眼的一条:#16575 的标题就是「repoint stale last-admin-ban-guard.ts citations」 —— 一次「修复陈旧引用」的 PR,它自己的编号现在也是 404。

问题

在这个仓的源码里,承重的出处凭据该用什么形式?

⚠️ AGENTS.md 现在写着一条规则的出处住在落地它的那个 PR 里 ⇒ 改这个形式是约定裁决,⛔ 不是执行席或施工席能选的。

选项 做什么 可感知的代价(有实测的注明)
A 15 行一字不动,只立本卡 已发运 tarball 里两行继续把读者送去 404;那条作者面的拒绝消息继续在作者决定是否报 NOT MEASURED 的那一刻递给他一个死号。零改动零风险。
B 每个死号改指落地它的 PR ⚠️ 实测:B 盖不住 15 行里的 2 行 —— #16697 自己的 PR 对象就是没了的那个,没有活号可指;每个新号又带着实测的分代 11.7–15.1% 再死一次的概率。
C 改锚到不可变对象 —— 本仓历史里的 commit sha(#16714→4cfc93b802、#16715→b37f0b1767、#16697→7936b29ce5),可留 PR 号作便利链接 15 行重写;sha 只要仓还在就不会 404;但不可点、不带叙事 ⇒ 散文得自己说清那个 commit 裁了什么。需约定裁决。
D 去掉编号,把教训写进正文 ⭐ 对运行时字符串这已经是裁过的:scripts/check-doc-authoring.mjs 对其余每个包都强制这一条,并逐字引着维护者的话:「处理 issue 时犯的错应该总结成经验,保留 issue id没有意义」。15 行重写;没有东西再会腐烂。

⚠️ D 今天够不到 manifest-prescription.ts:78 那条运行时拒绝消息,因为该文件落在一个声明过的扫描盲区里 —— 见兄弟卡。

os-decision-facets

  • ① 项目长远合理性 — 散文里每一个追踪器编号都是对一个我们不掌控的对象的永久依赖,而我们现在自己测到了自己在销毁它。D 取消这个依赖,C 换成我们自己拥有的对象,B 是把它续期 15 次。两年后的终态:出处活得比追踪器久 —— 成熟平台引 commit 或 ADR,⛔ 不是工单号。
  • ② 实际业务拉动 — 今天真正的拉力是:已发运 tarball 里的两行,加一条作者面的拒绝消息。其余由内部席位读,他们能退回 git。⇒ 这只决定分期顺序(先发运行与拒绝串),⛔ 不改字母。
  • ③ 防 AI 犯错 — 当下失效是静默的:读 app.zod.ts docblock 的 agent 分不出「被裁决刻意保留的容忍」与「没人知道这为什么在这」。⚠️ 这个形状已造成过一次实测事故:一个 dev 读了陈旧处方,把一个本地可跑的门禁报成 EXTERNAL_INPUT_REQUIRED / NOT MEASURED,而这样的申报进了交付物。C 与 D 都永不这样失效;B 会在一年内再静默失效一次。
  • ④ 创业阶段不扩散 — D 是取消一项义务;C 把它留在仓内;B 是对着第三方「声明并长期维护」。

施工席的推荐(⛔ 不是本席的,转述其要点):运行时字符串取 D,承重的内部锚取 C,分期执行,A 作为回退 —— 也正是这一轮实际留下的树的状态。自检行:「只看①选 D/C;②③④ 是否翻转:否 —— ② 只重排分期,不动字母」。

置信缺口(施工席自陈,本席原样保留):(i) 只探了约 1250 个而非全树 9174 个 ⇒ 清理的真实规模未测;(ii) 看不出那 133 个对象为什么没了 ⇒ 说不准这是不是稳态 —— 若是持续的仓维护,下季度可能更糟;若是一次性清扫,可能永不复发。这两个世界支持不同的字母。

Prior rulings read: scripts/check-doc-authoring.mjs 里 #13179 的裁决(运行时字符串去编号,含维护者原话)—— 它对其余包已成文;本卡问的是它是否该扩到承重的内部锚与 packages/spec/scripts/**。

兄弟卡

同轮另立 #19124:check-doc-authoring 的两条腿都排除 packages/spec/scripts/**,所以 D 的补救今天够不到 manifest-prescription.ts:78。⚠️ 那张与本卡是同一场对话的两半:本卡定形式,那张决定形式能不能被强制。

查重词

merged PR number 404 · citation decay · commit pulls association empty · provenance durability · era-scoped tracker id rot

⛔ 本席按章程不查重(「立卡者不查重、只附 3–5 查重词」);以上是查重词,不是查重结论。


Generated by Claude Code

Activity

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

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions