Units generalize the pull request
- Context: a loop keyed by pull request cannot hold a Slack thread, a session or a workspace.
- Decision: work is keyed by
unit.Unit{Provider, Key}; only the provider’s codec mints and parses a key. - Consequence: the turns, the workflows, the task core and the read model serve any provider.
- Enforced by:
TestLoopCodeImportsNoPR,TestTheCoreNamesNoProvider.