Expand description
Service capabilities and the mirror-side driver bindings that satisfy them (W265).
The problem this solves: a mesofact-static component wants “somewhere to
put bytes that a browser can GET”. At the dev tier that used to be a
disk-served directory, at sim it is MinIO over S3, at cloud it is R2. If the
app has to know which, it grows an if dev { fs::write } else { s3_put }
branch, and every later app inherits the same fork.
So the app declares a tier-agnostic capability and the mirror declares which driver implements it at this tier:
component kind ──derives──▶ Capability ◀──binds── [drivers.<cap>] in mirrors/<env>.toml§P1 scope
Requirements are derived from the component kind — one match arm per kind,
zero per-service boilerplate, because every service in-tree today is
kind-implied. The explicit [requires] block in service.toml (for needs
that aren’t kind-implied) and the binding-error surface (“service X needs s3,
mirror Y binds no s3 driver”) are P2; see W265 §“Open follow-ups”.
Enums§
- Capability
- A tier-agnostic thing a service needs, independent of who provides it.