1.6 KiB
1.6 KiB
| cairn | change |
|---|---|
| tasks | 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
--backendas filter and explicit override; assert it reproduces today'sselect_storageorder for every existing shared verb. - Dynamic tier: per-client capability probe (IMAP
CAPABILITY, JMAP session, ManageSieveSIEVE) 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-schemaoutput is identical for--no-default-featuresand full builds. - Generate the per-command backend support annotation into
--helpand 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.mdopening paragraph: the shared API is a capability union held coherent by one-meaning-per-verb, no longer the least-common-denominator intersection. - Fold
delta.mdintocairn/spec/commands.mdandcairn/spec/backends.md; addcairn/logentry; mark changelanded.