fix(os-skills,tokenless): add Provides: anolisa-component() to RPM spec - #2576
Conversation
os-skills.spec.in and tokenless.spec.in were missing the Provides: anolisa-component(<name>) declaration that other components (agentsight, cosh-ng) already carry. Without this virtual provide, anolisa upgrade/install cannot resolve these components via RPM Provides lookup when the repo-side component index is unavailable. Fixes #2575 (partial — covers os-skills and tokenless)
Forrest-ly
left a comment
There was a problem hiding this comment.
总体评价
本次审查仅覆盖 tokenless 组件部分(src/tokenless/tokenless.spec.in,+1 行)。该改动在 spec 中补充 Provides: anolisa-component(tokenless) 虚拟能力声明,能力名与 resolver 的构造逻辑及组件清单声明完全一致,与既有组件(agentsight/cosh-ng/skillfs/copilot-shell)的惯例统一,改动最小、正确,且已经过实际 RPM 构建验证。
(src/os-skills/os-skills.spec.in 非 tokenless 组件文件,不在本审查范围内,未审查。)
审查结论
approve
详细意见
🔴 必须修改(阻塞合并)
无。
🟡 建议修改(不阻塞但推荐)
- [scripts/rpm-build.sh:440
build_tokenless()] 目前构建脚本仅对 cosh-ng 做了Provides: anolisa-component(...)与 component.toml 安装的构建期强校验(rpm-build.sh:825-834 的grep -Fqx检查),tokenless 没有同类防护。若后续有人误删/改错该行,构建不会失败,只会在anolisa upgrade的 Provides 回退路径上再次暴露为运行期问题。建议作为后续跟进项,为 tokenless 增加同样的构建期校验(本次 PR 不必扩大范围)。
🟢 值得肯定
- 能力名精确对齐消费方:与 resolver 的构造逻辑
anolisa-component({component})(src/anolisa/crates/anolisa-cli/src/resolution.rs:644rpm_component_provide)及组件清单中 rpm backend 的provides = "anolisa-component(tokenless)"(src/anolisa/manifests/components-v2.toml:125)逐字匹配;与 agentsight.spec.in:20、cosh-ng.spec.in:21、skillfs.spec.in:26、copilot-shell.spec.in:18 的既有惯例一致,且全仓库无其他包提供同名能力,无歧义冲突。 - 位置与格式得当:新行位于运行时依赖块(tokenless.spec.in:33,紧随
Requires:之后),16 列对齐与其他 tag 一致,与 rpm-build.sh 中 cosh-ng 校验所用的精确行格式相同。 - 补齐了回退链路的最后一环:tokenless 的组件契约(component.toml 安装与 %files 归属,tokenless.spec.in:150-152、248、278)此前已完备,本 PR 恰好补上 repo 侧组件索引不可用(HTTP 404)时 RPM Provides 回退所缺的声明;清单侧
legacy_adopt = true也保证存量旧 RPM(无此 Provides)仍可被正确识别,前后向兼容均无问题。 - 验证充分:PR 描述附带了 ECS 上的实际构建验证(
bash scripts/rpm-build.sh tokenlessexit=0)与rpm -qp --provides输出证据;纯新增 Provides 声明,不改变任何既有行为,风险极低。 - 未在两个版本之间单独加 %changelog 条目,符合仓库惯例(同类独立 spec 修复如 6c115ae、917f151 均在下次版本 bump 时统一归入 changelog)。
Forrest-ly
left a comment
There was a problem hiding this comment.
Code review 通过(APPROVE)。
审查范围: 52587cf — 2 files, +2/-0(src/os-skills/os-skills.spec.in、src/tokenless/tokenless.spec.in)
正确性
- 两条
Provides: anolisa-component(<name>)均位于 spec preamble(%description 之前),位置正确;两个 spec 均无 %package 子包,主包声明即可覆盖整个包。 - 能力名与 resolver 期望完全一致:
crates/anolisa-platform/src/rpm_query.rs以字面量anolisa-component(tokenless)查询 what_provides;os-skills与 src/os-skills/component.toml 中name = "os-skills"/ rpm package 名一致。 - 格式与 agentsight / cosh-ng spec 中已有的同类声明一致(对齐、命名规范相同)。
- PR 描述附带真实环境 RPM 构建 +
rpm -qp --provides验证输出,结论可信。
安全性 / 性能: 纯 spec 元数据变更,无影响。
注意(非阻塞): 与 #2568 在 src/tokenless/tokenless.spec.in 上存在重叠 —— #2568 也添加同一行 Provides: anolisa-component(tokenless),但插入位置不同(Summary 之后 vs 本 PR 的 Requires 块之后)。两 PR 先后合入时 git 预计可干净合并,但 spec 中会出现重复的 Provides 行。#2568 当前为 REQUEST_CHANGES 状态,建议先合入本 PR,待 #2568 更新时删除其 tokenless hunk(仅保留 ws-ckpt 部分)。
问题
Fixes #2575 (partial — covers os-skills and tokenless)
anolisa upgrade --assume-yesreturnsstatus: blockedbecause os-skills and tokenless RPM spec files are missingProvides: anolisa-component(<name>). When the repo-side component index is unavailable (HTTP 404), the resolver falls through to RPM Provides — but finds noanolisa-component(...)capability for these 2 packages.修复
验证
两个 RPM 均构建成功,
rpm -qp --provides包含anolisa-component(<name>)。Co-Authored-By: Claude noreply@anthropic.com