28 lines
1.2 KiB
Text
28 lines
1.2 KiB
Text
let s = import "purpose-schema.ncl" in
|
|
let c = import "purpose-constraints.ncl" in
|
|
|
|
# Factory for purpose.ncl files.
|
|
# Pattern mirrors adrs/adr-defaults.ncl: imports schema + constraints, exposes make_* factories.
|
|
# Cross-field constraints (ValidAppliesTo, SeoAppliesTo, ObjectiveAudienceCoverage) are applied
|
|
# here after schema validation so all fields are visible in the same record — same pattern as
|
|
# RequiresJustificationWhenRisky in adr-defaults.ncl.
|
|
|
|
{
|
|
make_purpose = fun data =>
|
|
let result | s.PurposeFile = data in
|
|
let result | c.NonEmptyObjectives = result in
|
|
let result | c.AtLeastOneHardCriterion = result in
|
|
let result | c.AtLeastOneHardSeoCriterion = result in
|
|
let result | c.ObjectiveAudienceCoverage = result in
|
|
let result | c.ValidAppliesTo = result in
|
|
let result | c.SeoAppliesTo = result in
|
|
result,
|
|
|
|
PurposeFile = s.PurposeFile,
|
|
PurposeDeclaration = s.PurposeDeclaration,
|
|
PublicationIntent = s.PublicationIntent,
|
|
ContentObjective = s.ContentObjective,
|
|
ValidationCriteria = s.ValidationCriteria,
|
|
SeoCriterion = s.SeoCriterion,
|
|
PropagationChannel = s.PropagationChannel,
|
|
}
|