test(sandbox): 闭环脚本纳入整条输入链和 RMLVO - #301
Merged
Merged
Conversation
compat.libinput 发布后补进依赖表(它把 compat.libudev + compat.mtdev 一起拉进
来),运行期加两段:libinput 经 libudev 起 context 并枚举 seat,以及 RMLVO 按名字
编译真布局(XKB_CONFIG_ROOT 未设时只报告——没有数据集的机器不是这里任何东西的缺陷)。
断言拆成两种,因为两半根本不是同一个问题:
kind = "shared" 的(现在多了 libudev)查**来源**——宿主有自己的 libudev.so.1,
而 compat.libudev 故意用同一个 soname。
kind = "lib" 的(libinput / libevdev / libmtdev / libxkbcommon / pixman)查
**缺席**——对象并进消费者,正确构建下根本不该有 DT_NEEDED。
把后者塞进原来那条 grep 是误导:永远匹配不到,而「没匹配到」会被读成「宿主没赢」,
实际上是压根没东西可赢。也没用 nm 查符号定义:strip 过的二进制没有 .symtab 会误报
FAIL,而「没有共享库提供它」是同一主张的另一面且不受 strip 影响。
用法注释补了两条实测教训:要装 xim:xkeyboard-config 才会真跑 RMLVO 那半;以及用
--add-xpkg 验过的包跑这个脚本前必须清 store——xlings 按 (name, version) 查找且忽略
namespace,残留的 local:foo@1.0 会让 xim:foo@1.0 的 install() 变成静默 no-op。
eco-2026-8-30-3,--sandbox --gpu,BRANCH=main:
libudev.so.1 => <project>/target/.../bin/libudev.so.1 ← 不是宿主那份
PASS: the host's copies were present and reachable, and none of them won
PASS: none of libinput/libevdev/libmtdev/libxkbcommon/pixman is a DT_NEEDED
libinput assign_seat=0 fd=3 dispatch=0
evdev/pc105/us keycode 24 -> "q"
input chain answers: yes
RESULT: PASS
文档 §10.8.1 记录这次运行,§10.10.1 记录 xim#733 那次回归——往 DISCOVERY 表加行
同时是一次对现有提供方的改动,因为 declare_subos_env 不传 only 就是「声明每一行」。
xim#734 补上 libinput-quirks 之后,把最后一格也变成断言,并做了一次性整体闭环
验证(不再分阶段)。
第 8 步的判据是**没有抱怨**,这不是偷懒而是唯一可观测的信号:两条数据变量都优雅
降级——不设也照样一路 PASS,libinput 用内置默认、xkbcommon 只编字符串 keymap。
所以它们必须有自己的检查:
不设 LIBINPUT_QUIRKS_DIR: libinput error: failed to find data files ← 在
设了: (无) ← 没了
变量未设时报告而不失败——没装数据集的 subos 是合法配置,不是缺陷。
为此第 7 步改成捕获输出(仍原样打印),因为断言是关于 libinput 打了什么。
eco-2026-8-30-3,--sandbox --gpu,五个发现变量齐备:
PASS: the host's copies were present and reachable, and none of them won
PASS: none of libinput/libevdev/libmtdev/libxkbcommon/pixman is a DT_NEEDED
glReadPixels 64 128 191 255 (wanted 64 128 191 255) ×2 个 DRM 节点
libinput assign_seat=0 fd=3 dispatch=0
evdev/pc105/us keycode 24 -> "q"
LIBINPUT_QUIRKS_DIR = .../share/libinput (52 files)
ok: libinput loaded the quirks database
XKB_CONFIG_ROOT = .../share/X11/xkb (151 layouts)
RESULT: PASS
文档:
- §10.8.2 这次一次性闭环验证的完整输出
- §10.9.3 libinput-quirks 已落地(xim#734),含「数据是不是构建出来的」这条判据
——它决定要不要重新发布归档;以及 install() 的 os 表是受限子集这个坑
- §10.9.4 USB_IDS_PATH 是**不该补**的那一格:libudev-zero 零个 getenv(机制不在),
且 libinput 从不读那两个属性(补了也没用)。之前把它与 quirks 并列是错的
- §10.9.5 发行版为什么不需要这些变量:它们拥有 /usr。需要环境变量的是可重定位的
那一类——Nix / Flatpak / Snap / Conda / 我们
- §10.10 发现变量表全部闭合,没有一格是留着的
Sunrisepeak
added a commit
that referenced
this pull request
Aug 30, 2026
设计文档此前停在 #734,漏掉最后两个 PR,而它们恰好含本轮最可迁移的发现。
§11.1 完整变更集:八个 PR 两个仓,标出哪三个是回归修复。
§11.2 为什么不是单 PR。两条是硬约束、一条是我的失误,分开写:
- 跨仓:一个 PR 无法跨两个 GitHub 仓库,而 §10.9 已论证这个切分是两个索引
各做各建模的事;
- 发布顺序:#301 的脚本从**已发布索引**解析 compat.libinput,只能在 #298
合入并发布产物之后才可能被验证;
- #733/#735 本可以不存在——它们修的是 #732 的回归,靠自我 review 而非新信息
找到,所以合 #732 之前跑完检查清单就都在 #732 里了。清单是被这两次回归逼
出来的,代价就是规则从事故里学、而事故已进历史。
§11.3 libs/** 三处缺席:前两处漏评审覆盖,第三处漏**交付**——#735 合了全绿、
镜像同步到位,xlings update 仍在发修复前那一版。这解释了本轮四处问题为什么
全部靠自我 review 发现、没有一处是 CI 抓到的。
§11.4 加一行 DISCOVERY = 三项检查,两项分别被 #733/#735 逼出来。
§11.5 最终状态,含用户侧产物核验(xim-index-ea36f6b.tar.gz)与两份数据归档
的双镜像 sha256 一致性。
头部状态从「待 review」改为「已实现并闭环验证(v1.0)」。
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.
compat.libinput发布后补进依赖表(它把compat.libudev+compat.mtdev一起拉进来),运行期加两段:libinput 经 libudev 起 context 并枚举 seat,以及 RMLVO 按名字编译真布局(XKB_CONFIG_ROOT未设时只报告 —— 没有数据集的机器不是这里任何东西的缺陷)。断言拆成两种,因为两半根本不是同一个问题
libudevkind = "shared"libudev.so.1,而compat.libudev故意用同一个 sonamekind = "lib"把后者塞进原来那条「有没有解析到宿主」的 grep 是误导:它们永远匹配不到,而「没匹配到」会被读成「宿主没赢」,实际上是压根没东西可赢。
也没用
nm查符号定义:strip 过的二进制没有.symtab,会误报 FAIL;「没有共享库提供它」是同一主张的另一面,且不受 strip 影响。代码真在且能跑,由第 7 步证明。实测
eco-2026-8-30-3,--sandbox --gpu,BRANCH=main:libudev.so.1那一行是这次新增里最有分量的:compat.libudev故意用规范 soname,理由是 soname 复用能让源码构建与生态 payload 共存。这是那条判断第一次被放进「宿主有同名库、可达、就在/usr/lib」的环境里正面检验 —— 而它赢了。用法注释补了两条实测教训
xim:xkeyboard-config才会真跑 RMLVO 那半,否则只报告。--add-xpkg验过的包,跑这个脚本前必须清 store —— xlings 按(name, version)查找且忽略 namespace,残留的local:foo@1.0会让xim:foo@1.0的install()变成静默 no-op:payload 是空的,而config()照常跑并声明环境变量。在 xkeyboard-config 上撞过,看起来和「包坏了」一模一样。文档
declare_subos_env不传only就是「声明每一行」,所以 mesa 在表变长后开始声明它并不提供的键盘布局路径。检查清单因此是两项:新提供方要有两个调用,以及回头检查每个现有调用点传没传集合。