Presence

Whether a section must exist, and whether it may be empty: required, recommended, optional, required na, allowEmpty.

Ground control: If it isn't on the manifest, it isn't on the ship.

Quick reference

A bare section with no presence flag is optional: validated when it is there, never required. optional says so explicitly, and next to a rule set (use=name optional) it switches the set's presence off.

Examples

required

Require the section to exist and to have real content (an empty heading fails).

A required section with content passes

contract.mdv.md
<!-- mdv: section required -->
## Mission Context
document.md
## Mission Context

The change validates generated flight notes.

✓ passes

A missing required section is flagged

contract.mdv.md
<!-- mdv: section required -->
## Mission Context
document.md
## Crew Roster

Six crew, all aboard.

✗ missing-section error · line 1

Warn (rather than error) when the section is missing, but still validate it when present.

contract.mdv.md
<!-- mdv: section recommended -->
## Flight Background
document.md
## Mission Context

The change validates generated flight notes.

✗ missing-recommended-section warn · line 1

optional

Never require the section; validate its content only if the author included it.

An absent optional section passes

contract.mdv.md
<!-- mdv: section required -->
## Mission Context
<!-- mdv: section -->
## Away Team Notes
document.md
## Mission Context

The change validates generated flight notes.

✓ passes

na

Require real content OR the block's empty-state marker — for sections like visual evidence that sometimes genuinely don't apply.

N/A stands in for real content

contract.mdv.md
<!-- mdv: section required na -->
## Viewscreen Captures
document.md
## Viewscreen Captures

N/A: no cockpit display changed.

✓ passes

An empty section needs content or an N/A marker

contract.mdv.md
<!-- mdv: section required na -->
## Viewscreen Captures
document.md
## Viewscreen Captures

✗ needs-content-or-na error · line 1

allowEmpty

with required (or required na), the section must still exist but an empty body passes — for sections that are legitimately empty at times (a changelog's Unreleased).

An empty section passes when empty is allowed

contract.mdv.md
<!-- mdv: section required allowEmpty -->
## [Unreleased]
document.md
## [Unreleased]

✓ passes

See also: Contracts

On this page