作用域、修订与完整性
可用有效 Provider 范围是三层集合的交集:
请求只能收窄,不能扩大宿主或集成配置。V1 的授权粒度是 Provider 集合;ID 前缀、父节点和分类是查询过滤,不是节点级授权。
“未被 Agent 选择”也不等于“被 scope 拒绝”。能力仍可在目录中被发现,Runtime instanceOf 也可引用它;只有知识查询必须限制在非空已选能力集合内。
Adapter 与 Core 在同一进程中运行,Provider scope 不是进程沙箱。接入层仍需负责用户、租户和项目授权。
例如宿主允许 acme.http 和 acme.database,集成只启用前者,那么请求加入后者不能扩大范围,会被拒绝。只选择 acme.http 中的 route.validation 是知识选择;同 Provider 的 schema.request 仍可被发现,它不是因此被禁止访问。
故障排查见 配置与作用域。
修订模型
Static Revision 是经过完整校验的 Provider 静态快照身份。Runtime Revision 是 Adapter 对运行观察的身份,两者不能互换。
单 Provider 目录查询返回 meta.staticRevision;多 Provider 查询使用 meta.staticRevisionByProvider。后续绑定同一 Provider 的详情、关系、知识或 Runtime 查询可以传 requiredStaticRevision,保证一次任务继续使用同一静态视图。
例如 Acme 的目录返回修订 S1,Agent 选择验证能力后继续用 S1 读取知识。此时作者发布 S2,仍可读取的 previous 允许任务继续用 S1;若 S1 已退休,调用失败并要求重新发现,不能以 provider.version = '0.1.0' 替代 S1。
reload() 只有在新候选完整校验成功后才替换 current。Core 保留 current 和 previous:
- 刷新失败时,仍可读取的旧 current 保留,并通过
refreshFailed暴露失败; - 指定 previous 修订时可读取前一视图;
- 更旧或已不可读的指定修订返回
CG_REVISION_MISMATCH; - 首次加载失败没有旧视图可回退。
Runtime 观察会记录依据的静态修订。仅身份相同但修订变化,不自动等于兼容。
结果完整性
查询成功不代表返回全集。消费结果时同时查看数据、meta.completeness、warnings 和游标。
批量查询保留输入槽位,每个 BatchItem 都要检查 ok。单个 Provider 离线不应清空其他来源的合法结果;指定权威修订不可读则是查询级失败。
预算不会通过静默删除 whenToUse 或 distinction 制造“成功”。无法取得任何进展时返回 CG_BUDGET_EXCEEDED。实践见 处理错误与部分结果。