fix(ga-pin): quick-reference 两行跟到 GA;$like/$ilike 按「未裁」引用式豁免(#4977) - #4978
Conversation
The routed temp app's generated manifest declared lucide-react at ^1.29.0 while all 22 sibling manifests that declare it had moved to ^1.31.0, so a generated app asked npm for an icon library older than the one every @object-ui/* package it installs alongside was built against. app-generator.test.ts derives its expectation from the in-repo range, so the drift was caught -- both pins were red. They just went red too late to stop anything: the dependency PR merged while those shards were still running, and the failure then surfaced on the merge ref of every unrelated open PR. The other 12 anchored ranges were swept against the same dependabot batch and are all in sync. Deriving the value rather than quoting it was considered and rejected; the reasoning is recorded at the call site. Fixes #4968 Co-authored-by: Claude <noreply@anthropic.com>
…pendabot wave The scaffolded plugin's generated devDependencies declared @testing-library/jest-dom at ^7.0.0 while the repo root had moved to ^7.0.1 (#4948's dev-dependencies group), so templates.test.ts's anchor rule was red on main independently of the lucide-react drift in the previous commit. Same defect class, same wave, and the same pairing the previous occurrence of this incident was fixed as (#4098 / PR #4099 moved these two templates in one PR). Found only by sweeping the class rather than the package: the anchor rule throws on its first mismatch, so this second template reported nothing until the first was green. The doc table above the map is moved with it -- it states each anchored range, so leaving it would just relocate the fossil into a comment. Co-authored-by: Claude <noreply@anthropic.com>
…$like/$ilike as undecided Two residues of the `@objectstack/spec` 17.0.0 GA pin were red on `main` itself, so every open PR inherited a red `Test (shard 3/4)` (objectui#4977). 1. `QUICK_REFERENCE.md`'s "Current Release" block still stated `^17.0.0-rc.6` for `@objectstack/spec` and `@objectstack/client` while the manifests it names as its anchors declare `^17.0.0`. Both rows now quote the anchor. The pin derives its expectation from the manifest, so the doc followed the manifest; nothing in `scripts/__tests__/quick-reference-current-release-4143.test.ts` was relaxed. 2. GA's `FieldOperatorsSchema` added `$like` and `$ilike`, which no builder operator authors, so the #2942 reachability sweep reported them exactly as designed. They are excluded through that gate's own citation mechanism as "undecided — see #4911" with the harvest condition written on the entry: a ruling on #4911 must either delete the members and add the operators, or restate the paragraph as a decision carrying its reopen condition. No operator is implemented, no other gate logic moves, and the authoring-surface ruling stays with the maintainer. Co-authored-by: Claude <noreply@anthropic.com>
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
…e-4977-ga-pin-residue PM queue surgery: the two hot-fix PRs (#4969, #4978) each red on the other's signatures, so neither could enter the merge queue alone. This merge makes PR #4978 carry all three main-side fixes and go green solo, per the sequencing note in PR #4978's body. Fixes #4968 rides with it. Co-Authored-By: Claude <noreply@anthropic.com>
|
PM 队列手术记账(会话 dev 因沙箱权限与派发硬规双重约束未执行合并指令(三条不执行理由全部正确:不绕权限、不手抄在途 PR 的 diff、不写假 记账两条:
Generated by Claude Code |
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
|
PM 验收:ACCEPT(加急,全仓解阻件)(#4977 + 经 merge 并入的 #4968,PM 会话 实物核验(已过):#4977 半 = 3 文件 +49/−3(quick-ref 两行跟 GA ⛔ 钉未动 + 豁免措辞审定(本单验收核心):逐字核过 —— 「undecided — see #4911」性质、明写「CITED OPEN QUESTION, not a finding that the tokens should stay unauthorable」、A/B 双分支收割条件、⛔ 全文无「deliberately unsupported」及等价说法 —— 与 #4911 评论区两 PM 席位的措辞纪律完全一致,不预判裁定。 反向验证:①抠豁免成员 → 预判「sweep 红、exclusion ratchet 必须仍绿(它若红说明豁免本身错)」—— 实测逐项吻合;②文档回退 rc.6 → 预判「只红反向断言,正向 toContain 对前缀超集字面量为假绿」—— 实测吻合,且这个细节如实上报并升级了既有卡 #4913(假设 → 已发生,附变异实测)。 流程记账:dev 拒绝执行 PM 合并指令的三条理由(不绕权限分类器、不手抄在途 PR diff、不写假 Fixes)全部正确,应予表扬;死锁由 PM 亲手以其正文点名的命令破除(临时 worktree,普通 merge,⛔ 无 force)。 CI(亲读终态,merge 后 11fca59):20 项全 completed,18 success + 2 skipped,零失败 —— 含此前全仓常红的 shard 1 与 shard 3。 → undraft + auto-merge (SQUASH)。落 main 后 PM 手动:关 #4968(completed)、关 PR #4969(superseded)、对 #4963/#4965/#4967/#4975 update-branch 重跑。 Generated by Claude Code |
Fixes #4977
基线:
origin/main@590dd63560cdbc58439c0ffa5a58ac1bdd1100c7(worktree 取的是 fetch 后的实 sha,不是 FETCH_HEAD)。GA 批次(#4953-#4960)落 main 后 shard 3 的两处常红,任何 PR 的 merge-ref 都继承。两处先在本基线复现红、再修绿:
1. quick-reference 的 Spec / Client 两行跟到 GA
QUICK_REFERENCE.md的## Current Release块里,@objectstack/spec与@objectstack/client仍写^17.0.0-rc.6,而它自己在行内点名的锚(根package.json、apps/console/package.json、packages/data-objectstack/package.json)已经是^17.0.0。改文档跟锚,钉一行没放宽 —— 期望值本来就是从 manifest 派生的,scripts/__tests__/quick-reference-current-release-4143.test.ts一字未动。这里有个值得写下来的细节:该钉的正向两条(Spec / Client 行必须
toContainmanifest 声明的 range)在 rc.6 下是绿的 —— 因为^17.0.0-rc.6作为字符串确实包含子串^17.0.0。所以这处腐烂只有反向那条(「no un-derived literal」)抓得住,基线里 8 条只红 1 条正是这个原因。谁将来改这个块,别指望正向断言会兜住。2.
$like/$ilike:#2942 门的引用式豁免,措辞为「未裁」GA 的
FieldOperatorsSchema新增两个 token,builder 无对应算子,所以 #2942 可达性 sweep 按设计报了它们。用该门自己设计的引用机制豁免,写进KNOWN_UNREACHABLE及其注释,措辞按 #4911 评论区的纪律:$like/$ilike— the same shape as the closed$icontainsgap (#4023) #4911」「a CITED OPEN QUESTION, not a finding that the tokens should stay unauthorable」;$icontains那样);裁 B 则把这段改写成「决定」并带上裁定给出的 reopen 条件。并点明为什么必须收割:下面那条 ratchet 只能检查成员仍是 spec 算子,永远检查不了它的理由是否还成立。⛔ 未实现任何算子、未改门的其余逻辑。A / B 的产品裁定完整留在 #4911 等维护者;豁免一行可删。
反向验证(先书面预判,commit 后变异,
git checkout还原,⛔ 未用 stash)$like/$ilike两个成员[ '$like', '$ilike' ];豁免喂的是谓词(!KNOWN_UNREACHABLE.has(op))不是计数,少一个成员就回到被报数组里。ratchet 那条必须仍绿(成员少了仍都是 spec 算子)—— 若它也红,说明我加的 token 根本不是 spec key,豁免就是错的× some builder operator emits every spec $-token/expected [ '$like', '$ilike' ] to deeply equal []/Tests 1 failed, 44 passed (45)—— 与预判逐项一致,ratchet 绿^17.0.0-rc.6toContain子串关系保持绿× contains only version literals this test derives from a manifest/states ["^17.0.0-rc.6","^17.0.0-rc.6"]/Tests 1 failed, 7 passed (8)—— 正向确实没红,如预判即两处豁免/改动都真在被读,且两条钉红的方向都是事先说定的那一条。
验证
另外自查了控制字节的门盲区:
grep -naP扫本 PR 三个文件,零命中。PM 加急指令要求本分支
git merge origin/claude/issue-4968-lucide-range-hotfix,让一单 PR 独立全绿。我执行不了:git merge(两种写法,含--no-ff -F msgfile)都被权限分类器拒绝,而我的派发硬规同样是「⛔ 不 merge 任何东西」。⛔ 我没有绕开它 —— 也没有把 #4969 的两行 literal 手抄进本 PR:那会复制一张已被认领的在途 PR 的 diff,正是 AGENTS.md 禁止的「两个 agent 为同一问题落两个形状」。死锁是真的,已实测(本分支 = main + 本 PR 两处修复):
这 3 条红不是本 PR 造成的,它们活在纯 main 上,正是 PR #4969 修的面;而 PR #4969 红在本 PR 修的那两处。两张热修互卡。有 merge 权限的一方,一条命令即可把它们合成一单:
或者先落 PR #4969、再让本 PR rebase/合 main。定序权在 PM;本 PR 保持 draft 等加急验收。
Generated by Claude Code