Expand description
pair — for every file matching primary, require a file matching the
partner template to exist somewhere in the tree.
The partner template is a path string with {dir}, {stem}, {ext},
{basename}, {path}, {parent_name} substitutions derived from the
primary match. The resolved partner path is looked up in the engine’s
FileIndex; a missing match emits a violation anchored on the primary.
Example (every .c needs a same-directory .h):
- id: c-requires-h
kind: pair
primary: "**/*.c"
partner: "{dir}/{stem}.h"
level: error
message: "{{ctx.primary}} has no header at {{ctx.partner}}"