Merge blocked
欢迎来到 openUBMC 社区
Hey @xiaoxinglxs , 感谢你对社区的贡献.
机器人使用手册
有关指令的使用,可以点击 说明文档 或 论坛 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。您可以自助配置此仓库的 PR 合并规则,更多详情,请参阅机器人自助配置使用手册。
联系指引
有疑问可以联系 SIG: sig-interface ,
维护者是: @DataSculptor, @WeliveWelove, @aaronlee, @huanghan ,
优秀贡献者是: @PLUS_ONE .


CI已开始运行,查看流水线详情:流水线链接


/ai review


代码审查
审查结论
发现清单(按优先级)
- P3 × 2:
VIEW_ENV中false值遮蔽_G全局的风险(置信度 0.3);echo的nil分支缺少覆盖且用例名与实参不符(置信度 0.4)。 - P0/P1/P2 无:未发现编译/语法、安全、数据一致性或高概率运行时回归问题。
逐文件复核
| 文件 | 结论 |
|---|---|
CHANGDELOG |
no issues(1.140.2 条目格式与既有条目一致,描述与实现相符) |
mds/service.json |
no issues(仅 version 由 1.140.1 → 1.140.2,与 CHANGDELOG 同步;键名拼写未变,无新增拼写错误) |
src/lualib/template/engine.lua |
主逻辑改动正确:parser 对 {* *} 生成 template.output(...)、对 {{ }} 生成 template.escape(...)(escape 对非字符串委托 output),因此 cjson.null 在两处均被收敛为空串;echo 改用 template.output 后与插值口径一致;VIEW_ENV 按 nil 判定缺失,保留 false/0。仅余 1 条 P3 边界风险(false 遮蔽 _G 同名全局) |
test/unit/test_template.lua |
新增 5 个用例断言与实现一致(null→空、缺失→空、false/0 保留、函数返回 null、字面 <null> 转义、echo 组合);仅 1 条 P3 覆盖/命名问题(echo 的 nil 分支未覆盖) |
总体风险判断
本次改动仅作用于 CLI 显示层,范围小、方向与 Issue #7 一致,cjson.null 的判定方式与仓库既有惯例(src/lualib/common.lua 中的 cjson.null 比较)保持一致,无破坏性契约变更。整体风险低,建议合入;上述两条 P3 属于可选改进,不阻塞合并。需注意的是,该测试文件中原有的 3 个 include 用例(尾随换行差异)在修复前后均失败,属于既有问题,不计入本次变更。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 2 |
💬 仅评论


| 任务名称 | 结果 |
|---|---|
| pre-commit检查 | ✅ SUCCESS |
| PR描述检查 | ✅ SUCCESS |
| 防投毒检查 | ✅ SUCCESS |
| 开源合规检查 | ✅ SUCCESS |
| 编译构建 | ✅ SUCCESS |
| 版本校验 | ✅ SUCCESS |
| ipmi修改 | ✅ SUCCESS |
| 修改行数检查 | ✅ SUCCESS |


🔵 Low Priority
改动点:engine.lua:99 把 echo 从 tostring(...) 改为 template.output(...),这一改动的两个可观测行为变化是:①cjson.null 由 userdata: NULL 变为空串;②nil 由 nil 字面量变为空串。
新增用例 test_template.lua:140-142 名字是 test_echo_formats_missing_and_boolean_values_consistently,但实参只传了 cjson.null、false、0,并没有传真正「缺失」(nil / 上下文缺键)的值,因此上表第 ② 项(对既有模板输出影响最大的那条)没有任何断言覆盖。
失败模式:若后续有人回退/调整 echo 的 nil 处理(例如改回 tostring),测试仍然全绿,但 CLI 输出会重新出现 nil 字面量,属于静默回归。这是测试质量/覆盖缺口,不是运行时缺陷。
建议:在该用例中补充对真正缺失值(nil / context 无该键)的 echo 断言,例如断言 tmpl.process('{% echo(missing) %}', {}) == ''。


已补充两个实际缺失值断言:空 context 的 echo(missing) 输出空串,以及 echo(nil, false, 0) 输出 false0。真实来宾 Lua/cjson 上新增 5 项回归全部通过,pre-commit 通过。本轮只增加测试,生产 engine.lua 哈希保持不变。
对应提交:5ad8c6965717387ce7ed8d3f98568e4d8cb62951。
🔵 Low Priority
改动点:VIEW_ENV.__index(engine.lua:43-47)由 return t.context[k] or t.template[k] or _G[k] 改为「context[k] ~= nil 时直接返回」。这确实修好了 context 中 false 被丢弃的问题,但同时改变了回退语义:只要 context 里存在某个键且其值为 false,就再也不回退到 _G。
影响链:生成的视图代码里 template.*(如 template.output)走的是 env 表上的 raw 字段 template,不受影响;但视图 {% ... %} 代码里调用的 Lua 全局(ipairs/type/string/table/tostring 等)只能通过 __index → _G[k] 解析。若接口响应(context)中恰好含同名键且值为 false(例如 JSON {"type": false}、{"string": false}),改后 _G.type 会被 false 遮蔽。
失败模式:视图模板中若执行 {% for _, v in ipairs(list) do %} 或 {* type(v) *} 之类调用,会抛 attempt to call a boolean value 运行时报错,整条 CLI 命令失败;改前该场景会回退到全局函数而正常工作。触发需要「响应字段名与 Lua 全局同名 + 值为 false + 视图确实调用了该全局」,概率很低,故置信度给低。
建议:在保留 false 的同时避免遮蔽全局:当 context 取到的值为 boolean 且 _G[k] 存在时仍优先返回 _G[k],或显式限定只对业务数据键生效。
|
47 | + local value = t.context[k] |
|
48 | + if value ~= nil then |
|
49 | + if type(value) == 'boolean' and _G[k] ~= nil then |
|
50 | + return _G[k] |
|
51 | + end |
|
52 | + return value |
|
53 | + end |
| 47
54 | return t.template[k] or _G[k] |


###注意:
当前PR代码已经发生变化(代码更新或者PR关闭),所以移除以下标签: limit_1k_suc.


CI已开始运行,查看流水线详情:流水线链接


| 任务名称 | 结果 |
|---|---|
| pre-commit检查 | ✅ SUCCESS |
| PR描述检查 | ✅ SUCCESS |
| 防投毒检查 | ✅ SUCCESS |
| 开源合规检查 | ✅ SUCCESS |
| 编译构建 | ✅ SUCCESS |
| 版本校验 | ✅ SUCCESS |
| ipmi修改 | ✅ SUCCESS |
| 修改行数检查 | ✅ SUCCESS |


当前PR是否有AI参与:
[ ] 否
[x] 是
__1. AI Agent 平台: OpenAI Codex(会话元数据 cli_version: 0.155.1)
__2. AI 模型: gpt-6-astra
__3. Prompt上下文 : 升级指定仿真实例,继续比较真实设备与仿真的 DBus、Redfish、Web、CLI 接口;复现缺陷、修复、验证并提交任务 Issue 和 PR。模型参与实现、测试和代码复核。
PR功能描述 / 为什么需要这个合入:
响应含 JSON null 时,CLI 模板把它输出成 userdata: NULL;context 中 false 也会因 or 回退而丢失。VNC 信息查询可复现空字段泄漏内部类型。
修改方案:
将 cjson.null 与 nil 都输出为空,context 按 nil 判断缺失而保留 false/0;echo 与普通/转义插值使用一致转换。版本只升至 1.140.2。
验证方案:
验证 JSON null、缺失、false、0、函数返回 null、字面、转义输出和 echo;确认正常 CLI 字段格式保持。
测试建议:
验证 JSON null、缺失、false、0、函数返回 null、字面、转义输出和 echo;确认正常 CLI 字段格式保持。
自验证报告:
使用仿真实例真实 Lua/cjson/工具库运行生产模板引擎:新增 5 项回归全通过,其中 4 项在原引擎失败。完整相关集 13 项中 10 项通过,3 项 include 旧用例在修复前后均因尾部换行差异失败,未声称全绿。隔离运行真实 ipmcget -t vnc -d info,空字段不再打印 userdata: NULL,有效字段保持。pre-commit 通过。
最终部署验证(2026-10-29):使用提交
5ad8c696的引擎,22000 完整冷启动后经普通 CLI 入口完成 35 条只读查询,VNC 空字段不再显示userdata: NULL;布尔 false 与真正 nil 的 5 项新增回归均通过。现有完整模板测试仍有 3 项基线换行差异,未将其描述为全套通过。该PR关联的issue
fixes #7
希望检视人员了解:
仅修复显示层,不把空字段视作已实现远程控制台功能,不伪造设备属性;实机只进行只读查询。 请维护者人工检视;未合入 PR,未执行合入机器人命令。