Skip to content
ADR-0010: Engine-specific names are reserved

ADR-0010: Engine-specific names are reserved

  • Status: proposed
  • Date: 2026-10-06
  • Deciders: @fzipi
  • Category: Clarification

Context

Each engine ships features the others do not: Coraza’s SecDataset, @pmFromDataset, @ipMatchFromDataset, @restpath, @validateNid, SecRxPreFilter, SecResponseBodyJsonDepthLimit, ctl:responseBodyProcessor, ctl:forceResponseBodyVariable and the RESPONSE_ARGS/RES_BODY_*/JSON/ARGS_PATH variables; libmodsecurity v3’s @rxGlobal, @verifySVNR, SecAuditLogPrefix, MSC_PCRE_*, STATUS. The matrix lists them with status Engine-specific. Without a rule, a second engine could reuse a name with different semantics and rulesets would silently change meaning.

Decision

A name with status Engine-specific is reserved for the engine that defined it. Another engine MUST NOT define a feature with that name unless it implements the same semantics, in which case the feature is promoted by an Extension ADR (as ADR-0012 did for uppercase) and becomes Extended or Core. Engine-specific names are documented in outline only; their semantics are the owning engine’s documentation.

Options considered

  • Leave unlisted: collisions go unnoticed; rejected.
  • Specify them fully: the specification would describe one engine’s internals; rejected.
  • Reserve and outline (chosen).

Consequences

  • For all engines: check the matrix before naming a new directive, operator, action, transformation or variable; new names need a matrix row and an index entry.

Tests

None; a reservation is checked by review, not by a runner.

References