let profile_type = [| 'Development, 'Staging, 'Production, 'CI, 'Test, 'Custom |] in let seal_type = { hash | String, # sha256 of nickel export (drift detection) snapshot_hash | String | default = "", # sha256 of values_snapshot JSON (rollback integrity) applied_at | String, # ISO 8601 datetime applied_by | String, # actor: developer | agent | ci note | String | default = "", related_adr | String | default = "", # adr-NNN related_pr | String | default = "", # PR number or URL related_bug | String | default = "", # backlog item id or issue ref } in let config_state_type = { id | String, # cfg-- profile | profile_type, seal | seal_type, values_snapshot | String, # JSON-encoded values at seal time (String to avoid Nickel/JSON syntax clash) supersedes | String | default = "", # cfg-id this replaces (rollback chain) } in # Per-profile variant constraints — what is allowed to differ between profiles let profile_invariants_type = { # Fields that MUST have different values in Production vs Development must_differ | Array String | default = [], # Fields that MUST be identical across all profiles (shared contract) must_match | Array String | default = [], # Fields forbidden in Production (e.g. debug flags) forbidden_in_production | Array String | default = [], } in let config_manifest_type = { project | String, profiles | Array profile_type, invariants | profile_invariants_type | default = { must_differ = [], must_match = [], forbidden_in_production = [] }, active | { _: String }, # profile → cfg-NNN (current active seal id) } in { Profile = profile_type, Seal = seal_type, ConfigState = config_state_type, ProfileInvariants = profile_invariants_type, ConfigManifest = config_manifest_type, }