Commit 4897791
committed
feat(ci): ADR-0087 台账完备性门禁 —— 声明为 breaking 的 changeset 必须写明台账处置 (#6148)
ADR-0087 台账原有两道门禁(check:spec-changes / check:upgrade-guide)钉的都是
「台账 ↔ 生成物同步」。生成物是 registry 的纯投影,所以当条目**从一开始就不存在**
时,两者互相一致 —— 全仓全绿。PR #6048 删除 ctx.user.roles 正是这个形状,靠人眼
比对才发现(#6011),补登记又另派了一轮(PR #6138)。
按维护者裁定,门禁以 changeset 自己的 breaking/major 声明为驱动,绕开「什么算一次
需要登记的退役」这个跨包不可判定问题:作者已经声明过「这是 breaking」,门禁只需
注意到它对台账**只字未提**。⛔ 不做跨包退役自动检测。
四种处置,三种可机械复验、每次运行都重新验证:
registered <id> —— id 必须在台账中存在,且至少一个是本次 diff 新增的
not-required (unpublished) —— 所有 bump 的包必须 private: true
not-required (already-registered) —— 命名的 id 必须在 merge base 就已存在
not-required (no-migration-prescription)
—— 当 changeset 自己带 FROM → TO 迁移说明时**拒绝**:
一份发布了改写指令的 changeset 不能同时声称无人需要改写
实测(main 最近 400 个 first-parent commit):32 条 breaking changeset 中仅 5 条
(15.6%)动过台账,故 not-required 是常态而非例外 —— 门禁的价值不是判定谁该登记,
而是让这个问题**被书面回答**。#6048 没有回答,也没有任何东西问过它。
反向验证:在真实提交 dca5bd3(#6048)上门禁转红并指名 tidy-donkeys-yawn.md;
去掉「必须有 marker」这一步后同一输入转绿。三处 ablation 各自让 self-test 相应
红路径转绿,证明 self-test 不是空转。
#4690:所有输入都断言非空,另有两道防空转断言 —— 生成物中的 migrationId 必须
都能被源码解析器看见(解析器腐化),以及库存中至少有一条能被 breaking 检测器
命中(约定改写)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014wsZeReNTqiceBfLb5Pyf51 parent 2bc1876 commit 4897791
4 files changed
Lines changed: 1216 additions & 0 deletions
File tree
- .github/workflows
- scripts
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
447 | 447 | | |
448 | 448 | | |
449 | 449 | | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
450 | 488 | | |
451 | 489 | | |
452 | 490 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
839 | 839 | | |
840 | 840 | | |
841 | 841 | | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
| 846 | + | |
| 847 | + | |
| 848 | + | |
| 849 | + | |
842 | 850 | | |
843 | 851 | | |
844 | 852 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
| 60 | + | |
60 | 61 | | |
61 | 62 | | |
62 | 63 | | |
| |||
0 commit comments