Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Rules reference

intern ships 36 rules across four categories. Every rule has a stable id you can pass to --rules or --disable, or configure under [rules.<RULE_ID>] in .intern.toml.

Rules are either on (run by default) or off (must be opted in via enabled = true in [rules.<RULE_ID>] or named in --rules). The status is shown in the tables below.

Alignment

Geometric checks. All compare positions within a configurable pixel threshold.

Margin consistency (cross-slide)

Groups are treated as single units - only the group’s bounding box is considered, not its individual children.

RuleStatusWhat it catchesDefault threshold
LEFT_MARGINonSlide’s leftmost unit is off the typical left margin10 px
RIGHT_MARGINonSlide’s rightmost unit right edge is off the typical right margin10 px
BOTTOM_MARGINonContent extends deeper than the typical bottom margin (overflow only)10 px
TITLE_MARGINonGap between title and nearest content unit differs from the typical gap5 px

Proximity alignment (per-slide)

RuleStatusWhat it catchesDefault threshold
CLOSE_XonTwo units on the same slide have X positions within threshold - likely misaligned5 px
CLOSE_YonTwo units on the same slide have Y positions within threshold - likely misaligned5 px

Other alignment

RuleStatusWhat it catches
TITLE_YonTitle top edge inconsistent across slides
TITLE_X_WIDTHonTitle left edge or width inconsistent across slides
TEXT_ELEMENT_OVERLAPonTwo text-bearing elements on the same slide have overlapping rects
ELEMENT_OVERFLOWonElement extends outside the slide bounds

Typography

RuleStatusWhat it catchesLimit
TITLE_FONT_SIZEonTitle font size differs from the majority-
FONT_SIZE_VARIETYonToo many distinct body font sizes across the deck3 sizes
BODY_FONT_FAMILYonBody font family differs from the majority across slides-
BODY_TEXT_COLORoffBody text color differs from the majority across slides-
FONT_VARIETYonToo many distinct font families across the deck4 families
COLOR_VARIETYonToo many distinct text colors across the deck6 colors

BODY_TEXT_COLOR is off by default: color varies intentionally in most decks (branded slides, dark backgrounds, highlighted callouts).

Text quality

RuleStatusWhat it catchesLimit
DOUBLE_SPACEonParagraph contains two or more consecutive spaces-
LEADING_SPACEonParagraph starts with whitespace-
ALL_CAPSoffParagraph text is ALL CAPS-
REPEATED_WORDonTwo consecutive identical words (“the the”)-
BULLET_CAPITALIZATIONonBullets have inconsistent first-letter capitalization-
BULLET_PUNCTUATIONonBullet ending punctuation is inconsistent across the deck-
BULLET_LENGTHonBullet is too long20 words

ALL_CAPS is off by default: common in corporate decks for KPI labels, callout boxes, and section stamps.

Structure

RuleStatusWhat it catchesLimit
TITLE_PRESENToffSlide has no title element-
TITLE_LENGTHonTitle is too long10 words
TITLE_TRAILING_PUNCTonTitle ends with . , : or ;-
DUPLICATE_TITLEonTitle text is duplicated on another slide-
EMPTY_TEXTBOXonText box has no text content-
SLIDE_COUNToffDeck has too many slides20 slides

TITLE_PRESENT is off by default: section dividers and full-bleed image slides legitimately have no title element.

SLIDE_COUNT is off by default: the 20-slide limit is too deck-specific to be a useful default.

Auto-fixable rules

intern fix repairs the rules with an unambiguous correction - the alignment rules (snap to the peer median), the font-size rules, and DOUBLE_SPACE / LEADING_SPACE (normalise whitespace). The remaining text-quality and structural rules report the problem but leave the wording to you.

Threshold

Geometric comparisons use EMU (English Metric Units). The default threshold for most alignment rules is 2 px. The margin and proximity rules have their own defaults (10 px for LEFT_MARGIN, RIGHT_MARGIN, BOTTOM_MARGIN; 5 px for TITLE_MARGIN, CLOSE_X, CLOSE_Y). The global --threshold flag affects only rules that use the 2 px default; per-rule overrides always win:

intern check deck.pptx --threshold 5
# in .intern.toml - overrides the per-rule default for that rule only
[rules.LEFT_MARGIN]
threshold = 15

The word- and count-based limits (TITLE_LENGTH, BULLET_LENGTH, FONT_VARIETY, COLOR_VARIETY, SLIDE_COUNT) are tuned in each rule’s [rules.<RULE_ID>] table - see Configuration.