classDiagram direction TB class PassageEvidence { <> } class LabelPolicy { -String policyId -String version +label(PassageEvidence evidence) Labels } class PointLabel { -String exampleId -String sourceEvidenceId -String outcome -String targetRouteStop -Instant labelAvailableAt } class IntervalTrainingExample { -String exampleId -String sourceEvidenceId -String outcome -List~String~ candidateRouteStops -double weightPerCandidate } class FeatureSpec { -String featureSpecId -String version -String requirementsDigest } class FeatureSnapshot { -String exampleId -String featureSpecId -Instant availableAt -String contentDigest } class DatasetSnapshot { -String snapshotId -String purpose -String labelPolicyId -String featureSpecId -String rowManifestDigest } class ModelRecipe { -String recipeId -String version -String family -String role } class TrainingRun { -String trainingRunId -String datasetSnapshotId -String recipeId -String status } class ModelArtifact { -String artifactId -String contentDigest } class CalibratorArtifact { -String artifactId -String baseArtifactDigest -String contentDigest } class ModelBundle { -String bundleDigest -String baseArtifactDigest -String calibratorDigest -String featureSpecId -String labelPolicyId -String supportedScope } class EvaluationRun { -String evaluationRunId -String datasetSnapshotId -String bundleDigest -String protocolId -String resultManifestDigest } class SelectionDecision { -String decisionId -String status -String selectedBundleDigest -String releasePolicyId } class ModelRelease { -String releaseId -String bundleDigest -String purpose -Instant approvedAt } class FullRiskPredictor { <> +requires() List~FeatureRequirement~ +supports(RouteAxisRef axis, ModelBundle bundle) boolean +predict(target, features, bundle) Prediction } LabelPolicy ..> PassageEvidence LabelPolicy --> PointLabel LabelPolicy --> IntervalTrainingExample FeatureSpec --> FeatureSnapshot DatasetSnapshot --> FeatureSnapshot DatasetSnapshot --> PointLabel DatasetSnapshot --> IntervalTrainingExample ModelRecipe --> FeatureSpec ModelRecipe --> LabelPolicy TrainingRun --> DatasetSnapshot TrainingRun --> ModelRecipe TrainingRun --> ModelArtifact TrainingRun --> "0..1" CalibratorArtifact CalibratorArtifact --> ModelArtifact ModelBundle --> ModelArtifact ModelBundle --> "0..1" CalibratorArtifact EvaluationRun --> DatasetSnapshot EvaluationRun --> ModelBundle EvaluationRun ..> FullRiskPredictor SelectionDecision --> EvaluationRun SelectionDecision --> "0..1" ModelBundle ModelRelease --> SelectionDecision ModelRelease --> ModelBundle FullRiskPredictor ..> FeatureSnapshot FullRiskPredictor ..> ModelBundle