todoapp-core 0.2.0

tda domain core: entities, capabilities, ports. No I/O deps (see spec §5).
Documentation
# todoapp-core

The domain core of `tda`: entities, capabilities, and the ports (traits) that
adapters implement. **No I/O, no runtime, no framework dependencies** — this
crate compiles without touching a filesystem, a network, or an async runtime
executor.

- Task = a stable identity (id + timestamps) plus a set of *capabilities*
  (`Status`, `Notes`, `Schedule`, `Estimate`, `Tags`, `Assignment`,
  `Recurrence`, `IssueRef`, `Attachments`, `Archived`, `TimeLog`) — composition
  instead of a fixed field list. See [`tda-spec.md` §3]../../tda-spec.md#3-core-concepts-glossary.
- The **decider pattern**: `decide` (capability-keyed guards, first denial
  wins) → `Event`s → `apply` (capability-keyed state changes). See
  [`tda-spec.md` §5a]../../tda-spec.md#5a-commands-the-decider-pattern.
- Ports (`ComponentStore`, `TaskEntityStore`, …) are defined here and
  implemented by adapters (`todoapp-store-mem`, `todoapp-store-turso`).

This crate sits at the bottom of the dependency rule:
`adapters → app → core`. Nothing above may leak into it — this is enforced by
`mise run lint` (`lint:core-no-io`, a `cargo tree` denylist).

See the root [README](../../README.md) and [`tda-spec.md`](../../tda-spec.md)
for the full picture; [`CLAUDE.md`](../../CLAUDE.md) for contributor
conventions.