从当前测试覆盖的 provider 起步,不要从旧规划文档起步。在 ARC 源码树中:
| 产物 | 作用 |
|---|---|
providers/core/json/src/index.ts | 紧凑实现基线(AFSJSON 继承 AFSBaseProvider) |
providers/core/json/test/conformance.test.ts | 经 runProviderTests 的 conformance fixture |
packages/testing(@aigne/afs-testing) | 共享套件与「声明即配套」fixture |
docs/guides/provider-authoring.md | 编写纪律(标准 ops vs 语义 action、ifMatch、query) |
最小公开合同
| 部分 | 要实现什么 |
|---|---|
| 模块身份 | name、可选 description、uri / load 参数 |
| 路径归属 | 稳定路径布局;不滥用保留虚拟前缀(.actions、.meta、.as …) |
| 操作 | 只实现能强制执行的方法:list / read / write / delete / stat / search / exec / explain / rename / 可选 query / 可选 batch |
| 能力声明 | OperationsDeclaration(+ features)。声明 ⇒ 执行;未强制执行就不要宣传 ifMatch/query |
| 错误 | 使用共享 AFS*Error 码(AFS_NOT_FOUND、AFS_VALIDATION_ERROR、AFS_CONFLICT …) |
| Conformance | test/conformance.test.ts 调用 runProviderTests |
JSON provider 的典型模式:
- 继承
AFSBaseProvider。 - 提供
static manifest()/load()供 registry/URI 加载。 - 用
@List、@Read、@Write、@Delete、@Search、@Stat、@Explain… 装饰处理器。 - 需要
ifMatch等 feature 时覆盖getOperationsDeclaration()。 - 暴露
/.meta/.capabilities供运行时发现。
跑 JSON 基线 conformance
在当前 ARC monorepo(package @aigne/afs-json)中:
pnpm --filter @aigne/afs-json test -- test/conformance.test.ts在 ARC 源码 44fbd616f 上实测(2026-08-10):
372 pass
6 skip
0 fail
Ran 378 tests across 1 file.该结果只证明这一基线与这一 commit,不证明每个 provider 或每个发行版。未声明可选能力时跳过套件(如 subscribe)是预期行为。
建议实现顺序
- 先画 FS 布局(目录 vs 叶子 vs action 路径)。
- 先实现检视:
list+read(+stat/explain)。存了什么就应能枚举——不要只把数据藏在自定义 action 后。 - 仅在存储能强制执行时再加路径变更(
write/delete/rename)。 - 仅当操作需要超出路径 CRUD 的语义时,再加语义
@Actions。 - 用匹配真实数据的
structurefixture 接入runProviderTests。 - 若声明
query,必须配套collectionQueryfixture(声明即测试)。 - 若声明
write.features.ifMatch,必须配套ifMatch与指向同一后端的peerProvider。 - 把数据、认证、search、失败边界写在通用 AFS 合同之外的 provider 文档里。
不要因为能 list 就声称 query,也不要因为暴露了 search 就声称某种搜索质量。
保留验收记录
在把 provider 当作公开 catalog 候选之前,使用下表。这是检查清单,不是「每个 provider 都已通过」的声明。
| 记录 | 要捕获什么 |
|---|---|
| 合同 | 拥有的路径、操作、声明的能力;不要互相推断 |
| 数据与访问边界 | 后端系统、凭证或调用方边界、读写的数据、可观察失败 |
| Conformance 证据 | 精确测试命令、ARC/源码版本、pass/skip/fail |
| 本地验收 | 隔离的本地演练:ARC 版本、命令、非密钥环境选择、观察结果。不要用 DID Space 部署替代本地证据 |
| 兼容性 | 观察所依赖的 ARC/runtime 与 provider 后端版本 |
| 支持归属 | 维护者、生命周期状态、用户应依赖的文档位置 |
任一行未知,就不要进公开 catalog。源码树中的 package 是实现证据,不是支持承诺。见 Provider catalog。