Skip to content

[anolisa] refactor: define ComponentSnapshot contract #2669

Description

@ikunkun-sys

Parent tracking issue: #2668

问题

首个 lifecycle 纵向切片需要同时读取 state record、native package 和 pending journal,但现有 planner facts 使用各自的缺省或错误约定,尚不能作为跨消费者共享的只读 observation contract。尤其需要避免把“调用方未请求”“probe 无法完成”和“权威来源确认不存在”合并。

实现边界

  • anolisa-core 新增 ComponentSnapshot 核心类型。
  • 初始仅覆盖 statenative packagepending journal 三类事实。
  • 使用通用 typed evidence envelope 区分:
    • not-requested
    • unavailable,携带 provenance 和原因
    • absent,携带 provenance
    • present,携带 provenance 和 typed value
  • state、native package 和 journal 使用各自的 typed provenance,避免来源与事实类型错配。
  • snapshot request 显式声明 probe 集合;构造时拒绝 requested probe 缺失证据或 unrequested probe 携带证据。
  • 仅定义 core contract 与纯单元测试,不接入 filesystem、rpmdb 或 journal IO。

必须保持

  • 不迁移 statusdoctorupdaterepair 或 lifecycle handler。
  • 不修改现有 planner FactsRecordFactsNativeProbe 行为。
  • 不添加 serde/wire contract,不改变 CLI、JSON schema、输出或退出码。
  • 不提前加入 service、health、integrity 或 adapter snapshot 字段。
  • 不访问宿主机真实 state、rpmdb、service 或 journal。

验收标准

  • 四种 evidence 状态具有隔离测试。
  • requested/unrequested probe 与最终 evidence 的一致性由构造器验证。
  • state active/quarantined、native installed/multiple-version 和 pending journal 使用 typed value 表达。
  • provenance 和 unavailable reason 原样保留。
  • anolisa Rust workspace 的 fmt、check、clippy、test 和 doc gates 通过。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions