Changelog

Copy Markdown

0.2.1

Fixes

  • Compile-time ETS ownership race — the runtime store's :named_tables were created by whichever parallel compiler worker first hit __after_compile__. When that transient worker exited, the tables died with it and the next worker's insert crashed with "the table identifier does not refer to an existing ETS table". A new Frontier.Store.Owner spawns an unlinked, detached process to own the tables, so ownership never rides on a worker's lifetime.

0.2.0

Features

  • mix frontier.check — on-demand boundary checks without adding :frontier to compilers. Supports --warnings-as-errors for CI.

Docs

  • Restructured README for clearer narrative flow
  • Added @moduledoc, @doc, and @spec to all public modules and functions
  • Added hierarchical configuration example to README
  • Added Hex.pm, HexDocs, and CI badges

0.1.2

Docs

  • Added public_schemas examples to Boundary comparison section
  • Improved option documentation for public_schemas in context modules

0.1.1

Features

  • public_schemas option — control whether schemas are auto-exported. Set at root level (global default) or context level (per-frontier override). Accepts true (default), false (schemas treated as internal), or a list of specific schemas to auto-export. Context settings override root settings.

  • Application modules are god mode — modules that use Application are automatically exempt from all boundary checks. No configuration needed. Application modules wire up supervision trees and need to call into every context during startup.

Fixes

  • Renamed Config to Store — the module manages ETS-backed runtime state, not configuration. All internal references updated.

  • mix frontier.spec now works after compilation — previously showed "No contexts declared" because tracer state wasn't persisted. Store now rebuilds state from persisted module attributes.

  • Tracer no longer wipes references on every trace eventinitialize_module/1 is now idempotent, only clearing references once per module per compilation.

  • Violation detection fixed — cross-context violations are now properly detected and reported.

0.1.0

Initial release.

  • Convention-based boundary enforcement for Elixir projects
  • use Frontier macro with options: globals:, ignore:, reaches:, externals:, exports:, skip_violations:, enforce:, belongs_to:
  • Module classification: ignored → global → reclassified → context root → schema → exported → internal → unowned
  • Compile-time tracer with actionable warnings
  • mix frontier.spec — text summary of boundaries
  • mix frontier.visualize — DOT/PNG dependency graph with violation legend
  • Config validation for misconfigured options