feat: carry validation rationale through risk assessment

Risk tier is now derived from the worst validation issue severity and
the issues that drove it travel with the summary, so consumers can show
operators why a tier was assigned instead of an opaque level.

- Add RiskSummary.rationale (defaulted, backward-compatible) holding
  human-readable '[code] message' lines from the validation report
- Pin severity -> risk mapping: ERROR->HIGH, WARNING->MEDIUM, INFO->LOW
- DefaultRiskAssessor folds the validation-driven level into the summary
This commit is contained in:
2026-05-30 13:06:39 +04:00
parent 32d15de034
commit ee3f9b8aaa
5 changed files with 73 additions and 9 deletions
@@ -4,4 +4,5 @@ data class RiskSummary(
val level: RiskLevel,
val signals: List<RiskSignal>,
val recommendedAction: RiskAction,
val rationale: List<String> = emptyList(),
)