Artifact-storage seam.
Request user — threaded through every entity op for isolation/audit.
Entity-creation seam.
The provider every training read runs on; required because the training reads have no global fallback.
Record-loading seam (pipeline + next-version).
Sidecar /train seam.
The injected dependency bundle passed to TrainingEngine.trainModel. Bundling the seams (rather than constructor-injecting them) keeps the engine stateless and lets a caller vary implementations per call (e.g. a different artifact store per tenant).