Validates the only structural field that is genuinely required: style or defaultStyle.
id is NOT required — the schema stopped demanding it in S1/PRF-SCHEMA ("filename acts
as id for ~20% of style files"), and the loader derives it from the file name
(_ensureStyleId). This validator still required it: id-less styles were thus
rejected, and since the loader throws on a validation error, their layers were
never loaded. The id format stays validated when present (validateId).
⚠️ This line quantified the defect per profile ("guyane 9,
france-risques-inondation 5, france-rail 1") until 29/07/2026 — all three
profiles have since been deleted. The tally is removed rather than corrected:
it dated a repaired defect, on a corpus that no longer exists, and keeping it
would have required re-measuring at every profile added or removed. What stays
here is the motive, which does not expire.
scaleConfig is not required either: absent means no scale constraint (S5/N-1).
Its shape is validated by validateScales.
Validates the only structural field that is genuinely required:
styleordefaultStyle.idis NOT required — the schema stopped demanding it in S1/PRF-SCHEMA ("filename acts as id for ~20% of style files"), and the loader derives it from the file name (_ensureStyleId). This validator still required it: id-less styles were thus rejected, and since the loader throws on a validation error, their layers were never loaded. Theidformat stays validated when present (validateId).⚠️ This line quantified the defect per profile ("guyane 9, france-risques-inondation 5, france-rail 1") until 29/07/2026 — all three profiles have since been deleted. The tally is removed rather than corrected: it dated a repaired defect, on a corpus that no longer exists, and keeping it would have required re-measuring at every profile added or removed. What stays here is the motive, which does not expire.
scaleConfigis not required either: absent means no scale constraint (S5/N-1). Its shape is validated byvalidateScales.