Strictness

Strictness is two independent axes — presence and closure. Start lax, dial up with a single closure rule.

Hammond: "We spared no expense." Muldoon: ...the fences are only as strict as you set them.

Two independent axes: is it present, and is anything undeclared allowed?

Presence

FlagSection missing
requirederror; must also be non-empty
required allowEmptyerror; may be empty
recommendedwarning, exit 0
nonefine
<!-- mdv: section recommended content.words.min=3 -->
## Rollback Plan
## Other

Stuff.

Closure

ElementClosure rule
checkliststrict (same as labels.eq=@template)
tablestrict with columns.has=[…]
sectionsstrict on document or section
frontmatterfront strict

Lax: the checklist must exist, but its labels are only a starter.

lax
<!-- mdv: section required -->
## Checklist

<!-- mdv: list required -->
- [ ] Tests added or updated
- [ ] Docs updated

Strict: exactly these items.

strict
<!-- mdv: section required -->
## Checklist

<!-- mdv: list required labels.eq=@template -->
- [ ] Tests added or updated
- [ ] Docs updated
passes lax, fails strict
## Checklist

- [ ] Tests added or updated
- [ ] Docs updated
- [ ] Fed the raptors

Section structure

strict forbids undeclared sections, ordered enforces order, freeText opts a scope out (all atoms).

<!-- mdv: document strict ordered -->

<!-- mdv: section required content.words.min=5 -->
## Summary

<!-- mdv: section required content.words.min=5 -->
## Changes
## Changes

Five words are right here.

## Summary

Five words are right here.

## Notes

Extra.

out-of-order on the swap, unexpected-section on ## Notes.

Conditional sections

requiredWhen makes a section mandatory only when a checkbox is ticked or a frontmatter key matches (requiredWhen.type=incident).

Migration Notes only if 'Breaking change' is checked
<!-- mdv: section required -->
## Type of Change

<!-- mdv: list required checked.eq=1 -->
- [ ] Bug fix
- [ ] Breaking change

<!-- mdv: section requiredWhen.checked="Breaking change" content.words.min=5 content.none=@placeholders -->
## Migration Notes

Dropping the `v1` payload shape; callers must send `schemaVersion: 2` and the renamed `ownerId` field.
## Type of Change

- [ ] Bug fix
- [x] Breaking change

How to adopt

Start with required, add one closure rule per element once the shape settles, and soften with Overrides. Lock release checklists; leave design notes loose.

On this page