The profile code of the shapes validate_nc_merged runs: the combined
manifest’s keyword, as cimschema::shacl::resolve::MERGED_PROFILE assigns it.
Repeated here because cimoxide-schema is optional; a test holds the two
together.
The CGMES profile index in force: md:Model.profile IRI → short code, and
every short code, read from CGMES/PROF. Loaded together with the shapes,
like nc_profile_index.
Build a combined Config by auto-detecting profiles/solved-state across all files,
then applying explicit overrides (each None/default leaves the detected value).
The SHACL half of validate_crossprofile: every enabled profile’s
cross-profile rules on the merged dataset, its not-solved (!NS, the
NotSolvedMAS files) rules when cfg.not_solved — written for a model
authority set, like the hand-written ones in sparql::mas_groups — and
the rules for every profile when cfg.common.
Run full two-phase validation: per-file local checks (header + per-profile SHACL/SPARQL)
in parallel, then crossprofile checks on the merged dataset, then apply rule silencing.
validate_files, with each finding’s origin: the index into per_file
of the file it was found in, or None for a finding on the merged dataset.
An object several files write is reported against one of them, which
cimlsp needs to put the finding there.
The NC rules that relate datasets: the Complex files only the combined
manifest imports, as table shapes and hand-written rules, on the merged
dataset. validate_crossprofile runs this when an NC profile is in play.