Component
anolisa (CLI: anolisa upgrade --assume-yes → RPM component resolution via ComponentResolver)
Bug Description
anolisa upgrade --assume-yes returns ok: false with status: blocked because 5 default-profile components (os-skills, sec-core, tokenless, ws-ckpt, agent-memory) have RPM spec files missing the Provides: anolisa-component(<name>) virtual provide. The ComponentResolver::resolve_rpm() in src/anolisa/crates/anolisa-cli/src/resolution.rs:296-361 tries three resolution paths:
- Component index (
components-v2.toml / components.toml) — not available (404 / fallback to v1 which lacks these entries)
package_map in repo.toml — no entries for these components
- RPM Provides fallback:
rpm_component_provide(component) at resolution.rs:644 generates anolisa-component(<name>), then what_provides_installed() at resolution.rs:344-345 queries installed RPMs — returns empty because RPMs lack the Provides declaration
All three paths fail → ResolutionSet::None → error at check.rs:819: cannot resolve RPM package for default component '<name>': no package mapping or provider found
This is the same root cause as the closed umbrella issue #2575, but 2 of 5 PRs are still OPEN (#2563 agent-sec-core, #2568 ws-ckpt) and the ECS mirror has not yet synced any rebuilt RPMs. The test tests/test_upgrade.py::test_upgrade_assume_yes_upgrades_rpm_components continues to fail 3 consecutive nights (2026-08-14, 08-15, 08-16).
Steps to Reproduce
-
SSH to the test ECS (ALinux 4, anolisa 0.3.1 installed):
-
Verify the 5 component RPMs are installed but lack the anolisa-component() provides:
for pkg in agent-sec-core os-skills tokenless ws-ckpt agent-memory; do
echo "=== $pkg ==="
rpm -q --provides $pkg | grep anolisa-component || echo " NO anolisa-component provides"
done
# All 5 print "NO anolisa-component provides"
-
Run upgrade:
anolisa --json upgrade --assume-yes
Actual Behavior
{
"ok": false,
"schema_version": 1,
"command": "upgrade",
"data": {
"target": "agentic_os-latest",
"backend": "rpm",
"status": "blocked",
"errors": [
{"name": "os-skills", "reason": "cannot resolve RPM package for default component 'os-skills': no package mapping or provider found"},
{"name": "sec-core", "reason": "cannot resolve RPM package for default component 'sec-core': no package mapping or provider found"},
{"name": "tokenless", "reason": "cannot resolve RPM package for default component 'tokenless': no package mapping or provider found"},
{"name": "ws-ckpt", "reason": "cannot resolve RPM package for default component 'ws-ckpt': no package mapping or provider found"},
{"name": "agent-memory", "reason": "cannot resolve RPM package for default component 'agent-memory': no package mapping or provider found"}
],
"warnings": []
}
}
Exit code: 0 (anolisa JSON returns ok=false)
Expected Behavior
anolisa upgrade --assume-yes should return ok: true with status: up-to-date (no-op when all components are current). The ComponentResolver should resolve each default component's RPM package via the anolisa-component(<name>) virtual provide declared in the spec file. This is the contract established by rpm_component_provide() at resolution.rs:644 — the resolver expects RPMs to declare Provides: anolisa-component(<name>).
Root Cause
- File:
src/agent-sec-core/agent-sec-core.spec.in — missing Provides: anolisa-component(sec-core)
- File:
src/ws-ckpt/ws-ckpt.spec.in — missing Provides: anolisa-component(ws-ckpt)
- Resolution chain:
src/anolisa/crates/anolisa-cli/src/resolution.rs:296-361 (resolve_rpm())
- Provide generation:
src/anolisa/crates/anolisa-cli/src/resolution.rs:644 (rpm_component_provide() → format!("anolisa-component({component})"))
- Error site:
src/anolisa/crates/anolisa-cli/src/commands/tier1/update/check.rs:819
3 of 5 spec files are already fixed on main:
os-skills.spec.in — fixed in commit aa2f3b73 (merged)
tokenless.spec.in — fixed in commit aa2f3b73 (merged)
agent-memory.spec.in — fixed in commit fb48fcd5 (merged)
2 of 5 still need PR merge:
This is a regression — the anolisa-component() resolution contract was introduced but these 5 spec files were not updated at that time.
Suggested Fix
Add Provides: anolisa-component(<name>) to the 2 remaining spec.in files:
--- a/src/agent-sec-core/agent-sec-core.spec.in
+++ b/src/agent-sec-core/agent-sec-core.spec.in
@@ -33,6 +33,7 @@
Name: agent-sec-core
Version: @VERSION@
Release: %{anolis_release}%{?dist}
+Provides: anolisa-component(sec-core)
--- a/src/ws-ckpt/ws-ckpt.spec.in
+++ b/src/ws-ckpt/ws-ckpt.spec.in
@@ -10,6 +10,7 @@
Name: ws-ckpt
Version: @VERSION@
Release: %{anolis_release}%{?dist}
+Provides: anolisa-component(ws-ckpt)
PRs already filed: #2563 (agent-sec-core), #2568 (ws-ckpt + tokenless). After merging these PRs and rebuilding + syncing RPMs to the mirror, anolisa upgrade --assume-yes should return ok: true.
Environment
- ALinux 4 ECS (cn-hongkong, 8.217.205.52)
- anolisa 0.3.1
- anolisa main: ba20d94 (2026-08-16)
- RPMs: agent-sec-core-0.9.0, os-skills-0.6.1, tokenless-0.7.3, ws-ckpt-0.4.2, agent-memory-0.2.6
- Test case:
tests/test_upgrade.py::test_upgrade_assume_yes_upgrades_rpm_components (ANL-022-05)
- First seen: 2026-08-14, consecutive_days: 3
Component
anolisa (CLI:
anolisa upgrade --assume-yes→ RPM component resolution viaComponentResolver)Bug Description
anolisa upgrade --assume-yesreturnsok: falsewithstatus: blockedbecause 5 default-profile components (os-skills, sec-core, tokenless, ws-ckpt, agent-memory) have RPM spec files missing theProvides: anolisa-component(<name>)virtual provide. TheComponentResolver::resolve_rpm()insrc/anolisa/crates/anolisa-cli/src/resolution.rs:296-361tries three resolution paths:components-v2.toml/components.toml) — not available (404 / fallback to v1 which lacks these entries)package_mapinrepo.toml— no entries for these componentsrpm_component_provide(component)atresolution.rs:644generatesanolisa-component(<name>), thenwhat_provides_installed()atresolution.rs:344-345queries installed RPMs — returns empty because RPMs lack the Provides declarationAll three paths fail →
ResolutionSet::None→ error atcheck.rs:819:cannot resolve RPM package for default component '<name>': no package mapping or provider foundThis is the same root cause as the closed umbrella issue #2575, but 2 of 5 PRs are still OPEN (#2563 agent-sec-core, #2568 ws-ckpt) and the ECS mirror has not yet synced any rebuilt RPMs. The test
tests/test_upgrade.py::test_upgrade_assume_yes_upgrades_rpm_componentscontinues to fail 3 consecutive nights (2026-08-14, 08-15, 08-16).Steps to Reproduce
SSH to the test ECS (ALinux 4, anolisa 0.3.1 installed):
Verify the 5 component RPMs are installed but lack the
anolisa-component()provides:Run upgrade:
Actual Behavior
{ "ok": false, "schema_version": 1, "command": "upgrade", "data": { "target": "agentic_os-latest", "backend": "rpm", "status": "blocked", "errors": [ {"name": "os-skills", "reason": "cannot resolve RPM package for default component 'os-skills': no package mapping or provider found"}, {"name": "sec-core", "reason": "cannot resolve RPM package for default component 'sec-core': no package mapping or provider found"}, {"name": "tokenless", "reason": "cannot resolve RPM package for default component 'tokenless': no package mapping or provider found"}, {"name": "ws-ckpt", "reason": "cannot resolve RPM package for default component 'ws-ckpt': no package mapping or provider found"}, {"name": "agent-memory", "reason": "cannot resolve RPM package for default component 'agent-memory': no package mapping or provider found"} ], "warnings": [] } }Exit code: 0 (anolisa JSON returns ok=false)
Expected Behavior
anolisa upgrade --assume-yesshould returnok: truewithstatus: up-to-date(no-op when all components are current). TheComponentResolvershould resolve each default component's RPM package via theanolisa-component(<name>)virtual provide declared in the spec file. This is the contract established byrpm_component_provide()atresolution.rs:644— the resolver expects RPMs to declareProvides: anolisa-component(<name>).Root Cause
src/agent-sec-core/agent-sec-core.spec.in— missingProvides: anolisa-component(sec-core)src/ws-ckpt/ws-ckpt.spec.in— missingProvides: anolisa-component(ws-ckpt)src/anolisa/crates/anolisa-cli/src/resolution.rs:296-361(resolve_rpm())src/anolisa/crates/anolisa-cli/src/resolution.rs:644(rpm_component_provide()→format!("anolisa-component({component})"))src/anolisa/crates/anolisa-cli/src/commands/tier1/update/check.rs:8193 of 5 spec files are already fixed on main:
os-skills.spec.in— fixed in commitaa2f3b73(merged)tokenless.spec.in— fixed in commitaa2f3b73(merged)agent-memory.spec.in— fixed in commitfb48fcd5(merged)2 of 5 still need PR merge:
agent-sec-core.spec.in— PR fix(sec-core): add missing Provides: anolisa-component(sec-core) to RPM spec #2563 (OPEN, MERGEABLE, CI green)ws-ckpt.spec.in— PR fix(ckpt): add RPM component identity #2568 (OPEN, MERGEABLE, CI green)This is a regression — the
anolisa-component()resolution contract was introduced but these 5 spec files were not updated at that time.Suggested Fix
Add
Provides: anolisa-component(<name>)to the 2 remaining spec.in files:PRs already filed: #2563 (agent-sec-core), #2568 (ws-ckpt + tokenless). After merging these PRs and rebuilding + syncing RPMs to the mirror,
anolisa upgrade --assume-yesshould returnok: true.Environment
tests/test_upgrade.py::test_upgrade_assume_yes_upgrades_rpm_components(ANL-022-05)