himalaya/cairn/changes/capability-shared-api/tasks.md
2026-08-24 22:45:17 +02:00

18 lines
1.6 KiB
Markdown

---
cairn: tasks
change: capability-shared-api
---
# Tasks
- [ ] Capability enum + per-backend static registry (one declaration site per backend, next to its adapter).
- [ ] Resolver: verb -> capability -> configured transport, with `--backend` as filter and explicit override; assert it reproduces today's `select_storage` order for every existing shared verb.
- [ ] Dynamic tier: per-client capability probe (IMAP `CAPABILITY`, JMAP session, ManageSieve `SIEVE`) consulted only after connection, only for verbs that need it.
- [ ] Capability error type: account, resolved backend, missing capability, protocol-specific alternative; non-zero exit, printed like every other error.
- [ ] Ungate the clap tree from cargo features, keep dispatch gated; confirm `json-schema` output is identical for `--no-default-features` and full builds.
- [ ] Generate the per-command backend support annotation into `--help` and the manual from the registry.
- [ ] Compatibility suite: every existing shared command's stdout (table + `--json`) unchanged against 2.x for each backend.
- [ ] `nix develop --command cargo build/test --bins`; reduced-feature builds; `cargo fmt`; clippy clean.
- [ ] MIGRATION.md note: new capability error replaces unknown-subcommand for unsupported verbs; nothing removed.
- [ ] Rewrite the `cairn/spec/commands.md` opening paragraph: the shared API is a capability union held coherent by one-meaning-per-verb, no longer the least-common-denominator intersection.
- [ ] Fold `delta.md` into `cairn/spec/commands.md` and `cairn/spec/backends.md`; add `cairn/log` entry; mark change `landed`.