Operator Input Compatibility (facts.conf / facter.conf)

This file is the reference for the operator input surface: the facts-native input names, the facter-named compatibility reads, the precedence between them, and the pinned configuration-file subset both names share.

Facts-native names and facter-compatible reads (ADR-0008)

Facts accepts its operator input surface under facts-native names while continuing to read the facter-named equivalents for compatibility. Native names win when both are present; semantics are identical for both tiers.

The pinned facter.conf parsing subset

Ruby Facter parses facter.conf with the Ruby hocon gem (Hocon.load). The Go port parses the documented facter.conf surface with a pinned-subset parser instead of a general HOCON library — and parses the facts-native facts.conf with exactly the same parser and semantics. This file defines that subset; the boundary is pinned by tests in internal/engine/config_test.go.

Why not a HOCON library

A 2026-06 bake-off (summarized in docs/HISTORY.md) ran the two maintained Go HOCON candidates against a fixture corpus drawn from the documented facter.conf surface:

Neither reproduces Ruby Hocon.load on the corpus, so the Go port keeps its own parser for the supported subset below.

Supported configuration surface

Everything Ruby Facter documents for facter.conf:

Leniencies beyond Ruby (accepted by the Go parser, kept for backward-compatibility with the port’s earlier releases):

Unsupported HOCON features

These general-HOCON features are not part of the documented facter.conf surface and are not supported; the boundary tests pin the behavior:

Invalid or unreadable config files produce a warning and are ignored (Facter runs with defaults), matching Ruby Facter’s diagnostic-not-fatal handling.