> ## Documentation Index
> Fetch the complete documentation index at: https://all.mimedal.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 实现检查与验收

> 用可读的检查项说明 FSP 服务和厂商设备接口应如何验收。

判断一个实现是否符合 FSP，要分别检查 FSP 服务和厂商设备接口。使用 HTTP、CLI、MCP、RPC 还是 SDK 不是判断依据；关键是动作契约、能力门控、适配器是否正确协作，以及厂商接口是否完整包含操作、对象和系统三个维度的内容。

## FSP 服务检查

| 检查项   | 通过条件                                 |
| ----- | ------------------------------------ |
| 动作契约  | 每项动作有稳定标识和版本，参数、前置条件、结果和完成证据定义完整     |
| 设备绑定  | 能根据设备、动作和版本找到唯一适配器；找不到时拒绝，不自动替换设备    |
| 能力门控  | 硬件能力、代码实现、配置验收、权限和当前状态分别检查           |
| 适配器   | 只按已审核规则转换单位、坐标和命令，不猜测未知结果            |
| 完成判定  | 只在契约要求的实际证据齐全时返回成功，ACK 或调用无异常不代表物理完成 |
| 失败和未知 | 保留已确认变化，未知字段明确标记，不提交预期成功状态           |

## 厂商设备接口检查

| 维度 | 输入必须表达                | 输出必须表达                     |
| -- | --------------------- | -------------------------- |
| 操作 | 动作标识、版本、参数和限制         | 是否执行、实际参数、执行结果、诊断和完成证据     |
| 对象 | 全部相关容器或样品、角色、预期状态和版本  | 已确认的状态变化、未知字段、观测时间和新版本     |
| 系统 | 设备状态、安全限制、资源、幂等键和执行模式 | 实际设备状态、安全检查、任务状态、资源占用和注意事项 |

这三个维度可以由一次调用直接返回，也可以由操作调用、状态查询、结果回调或事件合计提供，但任何一个维度缺失，都不能用另外两个维度猜测补齐。适配层只能转换厂商接口已经提供并可核验的信息，不能编造缺失的实际结果或状态。

## 运行时必须测试的场景

下列是人能直接看懂的验收场景，不使用缩写代号。每项都要记录请求、执行前状态、实际命令下发次数、返回结果、保存的状态和完成证据。

| 场景                        | 必须观察到的结果                       |
| ------------------------- | ------------------------------ |
| 契约存在，但目标设备没有绑定            | 拒绝；下发次数为零；不选择其他设备的同名实现         |
| 代码已实现，但配置或验收未完成           | 返回未就绪和具体原因；静态工具说明不能绕过          |
| 设备或容器正在被占用                | 拒绝或按公布规则排队；不越过资源互斥边界           |
| 来源容器版本已过期                 | 整个动作拒绝；源和目标都参与检查；不下发命令         |
| 受理响应丢失后使用原幂等键重试           | 返回原任务；底层动作不重复                  |
| 使用同一幂等键，但修改体积或目标          | 返回幂等冲突；下发次数不增加                 |
| 设备只返回 ACK，没有契约要求的完成证据     | 不标记成功；保留任务、缺失证据和恢复路径           |
| 部分动作完成后通信中断               | 保留已确认变化；受影响的未确认字段标记未知；保留必要占用   |
| 取消请求与完成结果同时到达             | 取消请求不直接改写为已取消；根据证据确认最终状态       |
| 服务在受理后、下发后或结果保存前崩溃        | 原幂等键和任务可恢复；无法证明未下发时不自动补发       |
| 重复读取缓存或反复轮询               | 不伪造新的观测时间，不随意改变状态版本            |
| MCP、HTTP、CLI 和 SDK 映射同一请求 | 等价输入产生相同语义；多处设备标识或幂等键冲突时拒绝     |
| 最终状态后到达延迟或冲突证据            | 不覆盖原最终状态历史；追加可审计更正记录，必要时阻止依赖动作 |

使用模拟驱动的测试与真机测试要分开记录。不支持的可选能力可以声明不适用并验证拒绝路径；强制的安全、幂等和实际结果要求不能标为不适用。

## 声明示例

```json theme={null}
{
  "implementation": "example-device-adapter",
  "fsp_version": "0.1",
  "service": {
    "action_contract": true,
    "capability_gating": true,
    "adapter": true
  },
  "device_interface": {
    "dimensions": ["operation", "object", "system"],
    "transport_agnostic": true,
    "asynchronous_result_supported": true
  }
}
```

这个 JSON 只是声明格式示例，不能代替上述逐项测试。正式声明必须说明依据的文档版本或提交、动作契约版本、设备定义版本、支持的动作和调用方式，并列出通过、失败和未验证项。
