With whylogs constraints, build them against the profile view and check the per-constraint report, not just the boolean. Make sure any metric a constraint needs was actually logged in the profile.

Context: Official whylogs docs (data validation): documents how constraints actually run. Constraints are built on a profile view with ConstraintsBuilder, and each constraint evaluates the metrics already captured in the profile, not the raw data. validate() returns a single bool for the whole set; generate_constraints_report() gives a per-constraint pass/fail list. Custom checks need the metric they depend on to exist in the profile, so log with a schema that includes them.

## Matched source
Source: Published skill
Original query: "whylogs constraints run on profile metrics, not raw data; read the report"
Key terms: constraints, data, metrics, profile, read, report, whylogs
