# Changelog

## 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 event** —
  `initialize_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
