fix(ci): ADR-0087 迁移说明探测器读得懂「只由表头起框」的改写表 (#6559) - #6588
Merged
os-project-manager merged 1 commit intoAug 8, 2026
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
os-project-manager
marked this pull request as ready for review
August 8, 2026 06:09
Collaborator
Author
|
PM 验收:通过,转 ready 并开启自动合并。( 边界:验收时 独立复核过的六点
一处处置我认可但要说明理由:祈使句处方那一类没有另立单,理由是 #6559 线程 05:06Z 的评论已带复现记录在案,再立就是 #4949 警告的孪生单。同意 —— 但要注意那条评论现在承担着「唯一载体」的职责,若那个线程随本单关闭而沉没,该类就没有可分诊的入口了。留给分诊座位一句话:关闭 #6559 前请判断祈使句类是否值得独立立卡。
Generated by Claude Code |
os-project-manager
deleted the
claude/issue-6559-header-framed-rewrite-table
branch
August 8, 2026 06:23
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #6559
findMigrationPrescription()新增分支 4:改写表的框架来自表格自己的表头行,而不是上方的迁移标题。#6497(分支 3)仍要求正文里有一个迁移标题;本仓大量 changeset 从不写那个标题,因为表头行已经说明了两列是什么 ——| Wrote | Write instead |。11 条声明为 breaking 的存量 changeset 正是从这个缝里拿到了not-required (no-migration-prescription)豁免,而且这个缝是前向的:今后任何 PR 都可以这样写。先量误报,再放宽(#6419 / #6497 / #6558 三次未变的次序)
新词表是从存量里推导出来的,不是发明的:先枚举 1402 条 changeset 里所有带改写行的表格表头,再从真实拼法里收敛出两组列词。
旧列词(作者原来有什么,单元格开头锚定):
wrote/you wrote、removed、retired、原写法/旧写法新列词(现在该写什么):
write instead/use instead、live replacement、use、now、改写为/改成两侧都要有,且新列必须排在旧列之后。这个配对是全部的锚:本仓的两列表格绝大多数在比较行为而不是开处方,单独一个
Removed领一张取证表和领一张处方表一样常见(| Removed | Built | Why it 404ed |)。误报面在写之前就量了,而且是隔离测量 —— 不只是新收的 15 条,而是这条臂在整个存量上所有会命中的正文(因为将来的 changeset 可能只命中这一条臂):1402 条里命中 22 条,其中 18 条声明 breaking,逐条人工核对全部是真实的改写处方。误报 0 条,无论是否声明 breaking。
它还顺带、且不带那条误报地收下了 #6558 为被否决的「复用
MIGRATION_FRAMING_RE读表头」捷径量到的那 1 条真阳性(filter-icontains-and-regex-retirement.md,| 原写法 | 改写为 |)。捷径会把rate-limit-config-dual-source-c9.md一起带进来;列词词表读得到前者、读不到后者,因为那里的(renamed)在给列命名,不在起框(P34 钉住)。数字
存量 1402 条 / 245 条声明 breaking(比卡片的 1384 / 241 有漂移 —— #6558 之后又落了 18 条,如实报告)。
新增 15 条,消失 0 条,且既有命中的分支与证据行 0 条发生变化。
--audit-stock桶位移动:exempt-no-prescription139 → 128(−11),residue96 → 107(+11)。超集性质是结构性的,沿用 #6558 的做法:本臂的命中同样扣到循环结束才返回,且排在分支 3 之后,所以整个函数恰好是
arrowBranches(body) ?? framedTable(body) ?? headerFramedTable(body)。后来的人只改这条臂,拿不走任何旧臂的命中 —— 不需要谁记得重测。11 条 breaking,但不是卡片点名的那 11 条 —— 差异是诚实的部分
卡片点名的 11 条里有 10 条在这里。少的一条是
adr-0114-field-error-catalog.md,表头是| Was | Now |;多的一条是script-branch-keys-retired.md,表头| Retired | Use instead |—— 卡片没有枚举到的第五种拼法。从存量推导的封闭词表会找到手列清单漏掉的拼法,也会丢掉手列清单想当然的拼法。为什么
was被拒(已量,写进脚本自述并由 P33 钉住):was/now(连同before/after、之前/之后、改前/改后、修复前/修复后)是本仓的行为对照表头词表,不是改写词表。存量里它出现在| route | was | now |(wire envelope)、| compiler | was | now |、| | was | now |(一张类型推断探测表)等十几处,没有一处要求读者改写任何东西。1 条真阳性 vs 同一表头拼法下至少 4 条误报,且从表头行无法把两者分开 —— 所以adr-0114-field-error-catalog.md是故意继续漏掉的。误报没有诚实的出口:作者被错误拒掉一条他有权使用的豁免时,封闭词表里没有别的选项给他。第二类(标签行起框)实测是第一类的真子集 —— 没有实现,因为它会是死代码
卡片把「表头起框 14/11」和「标签行起框 4/2」列为两个目标面,说两者重叠。在表格臂上,两者实测是严格嵌套的。 在 #6559 之前的基线上单独实现「粗体标签行为表格臂起框」:收 13 条 / 10 条 breaking —— 而分支 4 单独把这 13 条全部收下。在整个存量里,凡是在改写表上方写
**Migration.**的 changeset,同时也用旧/新表头行写了那张表。所以本 PR 没有加标签起框的表格臂:它落地当天就是死代码。另一种更宽的读法 —— 让标签行也为箭头分支起框 —— 单独量过并否决:收 11 条 / 6 条 breaking,其中至少 3 条是明确误报(一致性用例表
{d: {$null: true}}变['3','4']、env 归一化映射production/prod变production、以及一条命中行是与改写无关的_packageId散文)。没有下一个标题收口的标签会给文档剩余全部起框,这是原因。它还会把分支 4 的 13 条命中改标成framed-table,掩盖是哪条臂读到的。两条理由都写进了脚本的「被否决规则」清单。自述(
残余盲区)已更新 —— 这是 #6497 的成因,不能留旧was词与宽标签起框两条,各带数字);regex-retirement-icontains-drivers.md,PR feat(drivers,objectql):$regex响亮拒收 + SQL 族$icontains实现(#4706 裁决 B 案 · 驱动半边) #6549)尚未落 main,不在本次 1402 的口径内,故不给存量数字。反向验证:红集在运行之前预测,结果完全吻合
把
headerFramesRewrite改成return false(删掉分支 4)后:fixture 分诊:P25 被整条替换,这正是要点
P25 原来把
TABLE_EN换头成## What changed来钉「标题不带迁移词就不起框」。但TABLE_EN的表头行就是| Wrote | Write instead |—— 分支 4 现在正当地读得到它,所以旧 fixture 钉的恰好是本次要移动的那条边界,并在自测里转红。断言的意图原样保留(不带迁移词的标题不为其下的表格起框),只是把表格换成表头中性的一张,让它不再自带框架。门禁输出
自测断言 90 → 100(新增 P28–P38 与整合红用例 R13)。
changeset
不加,改用
skip-changeset标签 —— 与 #6558 同。按pr-automation.yml的规则,该标签的含义是「本 PR 自己不发布任何东西」;本 PR 只改scripts/check-adr-0087-registration.mjs一个 CI 门禁脚本,不属于任何已发布包,对消费者不可见。范围外,未做
check-adr-0087-registration.mjs的 CLI 派发在模块顶层执行 —— 任何import都会真的把门跑一遍,判红时还会process.exit(1)掐死调用方 #6566(脚本 CLI 派发在模块顶层执行)。测量时按卡片要求屏蔽process.exit绕过,未动它。--audit-stock的 residue 工作清单,由人判断,不由本 PR 决定。Generated by Claude Code