A patch release. The bundled ValidationReport serialises with the summary CPP's internal report carries, so a caller can read a report's worst severity from it.
Added
ValidationReport.to_dict()['summary']:block,warn,infoandpass(the number of findings at each severity),total, andworst_severity, the worst severity present, ranked BLOCK > WARN > INFO > PASS, and PASS for a report with no findings. The keys and values are the internal report's, in its order.cpp-critical-path-validatorreadssummary['worst_severity']from its embedded DCMA-14 report.ValidationReport.worst_severity, the property the summary reads, andcount()with no argument, the number of all findings.
count, worst_severity, the summary block and the severity ranking are AST-identical to the internal module without docstrings.
Nothing moves
The release adds a key, a property and an optional argument, and changes no existing value. to_dict() still carries counts and lists findings in the order they were added (the internal report sorts them worst first), and count(severity) is unchanged. xer_parser.py and config_profiles.py are unchanged.
Why a patch. Before 1.0 this project moves the minor number for a release that changes results a caller already reads, as v0.2.0 did, and the patch number for one that only adds.
Testing
tests/test_report_summary_2026_09_29.py has 9 synthetic tests; all 9 fail against v0.2.0's validation.py, and 7 mutants of the port are each killed. pytest tests/ is 109 tests across 11 files: 108 pass and the engine-parity test skips, and all 109 pass with cpp-cpm-engine's python_reference on sys.path. CI is green on Linux, macOS and Windows against Python 3.10, 3.11 and 3.12.
See CHANGELOG.md.