You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add behavior-preserving regression coverage using real adapter scan/status collectors and component status projections on shared fixtures. Cover source authority, candidate versus receipt sets, integrity precedence, and read-only boundaries, including existing framework-query invocation logs.
No production evidence model, public API, or behavior changes. Conflicting behavior discovered by tests will be reported separately. Validate targeted and full Rust suites in isolated unprivileged ALinux 4 containers with fake framework commands, read-only source/vendor and no network.
Local implementation and validation completed on feature/anolisa/adapter-observation-contract, based on upstream 9fc69e0. Tests only; no production API or behavior changes.
All requested targeted tests passed in an unprivileged, network-disabled ALinux 4 temporary container with read-only source/vendor and an independent target: core manager 99, managed_files 10, adapter_manager 87, CLI adapter 73, CLI status 104. Full CLI: 1177 passed; full workspace including doctests: 2577 passed. fmt, workspace check, all-target clippy with warnings denied, rustdoc and diff check passed.
Checks preserve protected state/receipt/resources/framework files and no install lock. OpenClaw status retains its existing plugins list invocation audit. Named component status retains its separate repository-index cache behavior, isolated with a temporary file:// index fixture.
No commit, push or PR yet, per the requested execution boundary. This issue and R5 tracker #3309 remain open until merge.
A PR for this is up: #3313 (head 0ace70d0). Tests only — two test files, +705/-2, no production evidence model / public API / behavior change.
Coverage, all driven through the realAdapterManager::scan / status collectors on shared fixtures:
source authority — receipt row reports Available; a receipt that outlives its source stays listed but flips to Missing with a reason, and the vanished directory stops being offered as resource_root
candidate vs receipt sets — a declared/discovered row with no receipt carries source_status: None and yields zero status rows
integrity precedence — SourceAvailable leads, then ManagedBundleMatches, then SourceRevisionMatches in fixed order and never duplicated by the driver's copies; a lost source degrades without faking integrity (Unknown, never False); on-disk tampering is attributed to ManagedBundleMatches=False only
read-only boundaries — scan spawns no framework query at all, status issues only read-only verbs; installed.toml stays byte-identical, the package-owned datadir and framework-side trees are unchanged, no install lock is taken, and the queries remain auditable via the existing central log plus the fake CLI's argv log
Plus three CLI tests that project a real scan result into AdapterObservation instead of a hand-written ScanEntry, so collector/projection drift fails in test.
CI is green (Test anolisa, AW / required, AW / contracts); the PR is only blocked on a review. Locally: cargo test --workspace --locked green (adapter_manager 86 → 93, CLI bin → 1109), cargo fmt --all --check and all-target clippy clean, and both mutations were re-confirmed to fail exactly the tests that pin them (dropping the projection's source_status mapping; reordering the manager's condition insertion).
One acceptance criterion I could not meet, flagged rather than papered over: validation in an isolated unprivileged ALinux 4 container. My host has no usable container runtime, so my run was unprivileged ALinux 3 x86_64 with fake framework commands and no network. The suite is host-agnostic (tempdir-rooted layouts, no privileges, no real framework binary), but since you already have the ALinux 4 harness that validated feature/anolisa/adapter-observation-contract, it would close the gap if you could run it against #3313 — happy to respin the branch if anything shows up.
One thing the tests surfaced, deliberately not changed here: AdapterSourceRevision is built from the recorded package inventory rather than from disk, so SourceRevisionMatches cannot see on-disk tampering — only ManagedBundleMatches can. Coherent, but its doc comment doesn't say which bytes are compared. Worth a doc-only clarification in a later #3309 slice.
Activity
github-actions commentedon Sep 17, 2026
🔀 Issue Router
anolisa96%问题涉及 ANOLISA CLI 中适配器观测契约的回归测试。
Evidence: 标题前缀和组件标签均指向 anolisa,正文未出现其他组件的路径或模块线索。
This routing was applied by the ANOLISA Issue Router through GitHub Actions.
ikunkun-sys commentedon Sep 17, 2026
Local implementation and validation completed on feature/anolisa/adapter-observation-contract, based on upstream 9fc69e0. Tests only; no production API or behavior changes.
All requested targeted tests passed in an unprivileged, network-disabled ALinux 4 temporary container with read-only source/vendor and an independent target: core manager 99, managed_files 10, adapter_manager 87, CLI adapter 73, CLI status 104. Full CLI: 1177 passed; full workspace including doctests: 2577 passed. fmt, workspace check, all-target clippy with warnings denied, rustdoc and diff check passed.
Checks preserve protected state/receipt/resources/framework files and no install lock. OpenClaw status retains its existing plugins list invocation audit. Named component status retains its separate repository-index cache behavior, isolated with a temporary file:// index fixture.
No commit, push or PR yet, per the requested execution boundary. This issue and R5 tracker #3309 remain open until merge.
Forrest-ly commentedon Sep 17, 2026
A PR for this is up: #3313 (head
0ace70d0). Tests only — two test files, +705/-2, no production evidence model / public API / behavior change.Coverage, all driven through the real
AdapterManager::scan/statuscollectors on shared fixtures:Available; a receipt that outlives its source stays listed but flips toMissingwith a reason, and the vanished directory stops being offered asresource_rootsource_status: Noneand yields zerostatusrowsSourceAvailableleads, thenManagedBundleMatches, thenSourceRevisionMatchesin fixed order and never duplicated by the driver's copies; a lost source degrades without faking integrity (Unknown, neverFalse); on-disk tampering is attributed toManagedBundleMatches=Falseonlyscanspawns no framework query at all,statusissues only read-only verbs;installed.tomlstays byte-identical, the package-owned datadir and framework-side trees are unchanged, no install lock is taken, and the queries remain auditable via the existing central log plus the fake CLI's argv logPlus three CLI tests that project a real scan result into
AdapterObservationinstead of a hand-writtenScanEntry, so collector/projection drift fails in test.CI is green (
Test anolisa,AW / required,AW / contracts); the PR is only blocked on a review. Locally:cargo test --workspace --lockedgreen (adapter_manager86 → 93, CLI bin → 1109),cargo fmt --all --checkand all-target clippy clean, and both mutations were re-confirmed to fail exactly the tests that pin them (dropping the projection'ssource_statusmapping; reordering the manager's condition insertion).One acceptance criterion I could not meet, flagged rather than papered over: validation in an isolated unprivileged ALinux 4 container. My host has no usable container runtime, so my run was unprivileged ALinux 3 x86_64 with fake framework commands and no network. The suite is host-agnostic (tempdir-rooted layouts, no privileges, no real framework binary), but since you already have the ALinux 4 harness that validated
feature/anolisa/adapter-observation-contract, it would close the gap if you could run it against #3313 — happy to respin the branch if anything shows up.One thing the tests surfaced, deliberately not changed here:
AdapterSourceRevisionis built from the recorded package inventory rather than from disk, soSourceRevisionMatchescannot see on-disk tampering — onlyManagedBundleMatchescan. Coherent, but its doc comment doesn't say which bytes are compared. Worth a doc-only clarification in a later #3309 slice.test(anolisa): cover adapter observation contracts
test(anolisa): cover adapter observation contracts
test(anolisa): cover adapter observation contracts
Merge branch 'main' into fix/AGE-7186-openclaw-adapter-enable-memory-…
test(anolisa): cover adapter observation contracts