13. @import Resolution and Merge

This page covers FACET v2.1.3 import and merge semantics.

Basic import

@import "relative/path/module.facet"

Rules:

  1. resolved relative to importing file
  2. constrained by allowlisted roots
  3. deterministic source-order expansion (in-place)

Security constraints (F601)

The following must be rejected:

Missing file also raises F601. Import cycle raises F602.

Standard facet cardinality

Singleton-map facets (deep-merged):

Repeatable-block facets (concatenated):

Singleton merge behavior

Repeatable merge behavior

Repeatable blocks are appended in resolved encounter order.

Example: override with stable key order

a.facet:

@vars
  x: "a"
  y: "a"

b.facet:

@vars
  y: "b"
  z: "b"

main.facet:

@import "a.facet"
@import "b.facet"

Effective @vars values:

Effective key order remains first-insertion order: x, y, z.

Policy list merge (allow/deny)

Inside @policy:

Determinism implications

Phase 1 output must be deterministic:

These order guarantees are later used by Phase 3 tie-break and canonical rendering.