# `CMDC.Backend.Results`
[🔗](https://github.com/tuplehq/cmdc/blob/v0.4.0/lib/cmdc/backend/results.ex#L1)

CMDC.Backend 标准 Result struct 集合。

对标 deepagents `BackendProtocol` 的 8 个 dataclass：
`ReadResult / WriteResult / EditResult / LsResult / GrepResult / GlobResult /
FileUploadResponse / FileDownloadResponse`，加 `FileData` typed map。

## 设计

- 所有 Result struct 都有 `:error` 字段（成功为 `nil`，失败放原子或字符串）
- 错误码用 atom 标准化：`:file_not_found / :permission_denied / :is_directory / :invalid_path`
  （4 基础 + 允许 backend 在 metadata 中扩展自定义码）
- `@derive Jason.Encoder`，便于 Web API / Postgres 序列化
- `FileData` 是 typed map，支持 `v1`（legacy `list[str]`）和 `v2`（plain `str` +
  `encoding` 字段）格式向后兼容

## 错误码标准

| atom | 含义 |
|---|---|
| `:file_not_found` | 路径不存在 |
| `:permission_denied` | 权限不足 |
| `:is_directory` | 期望文件得到目录 |
| `:invalid_path` | 路径格式非法（含 traversal / 非绝对等） |

允许 backend 实现在不同错误场景下额外返回 string，但**鼓励**先映射到上述 4 个 atom。

# `standard_error?`

```elixir
@spec standard_error?(term()) :: boolean()
```

判断给定 reason 是否为标准错误码。

# `standard_errors`

```elixir
@spec standard_errors() :: [atom()]
```

4 个标准错误码 atom 白名单。

Backend 实现优先映射到这 4 个，无法对应时再用 string。

---

*Consult [api-reference.md](api-reference.md) for complete listing*
