Managed drift (DESIGN.md, "the piece nobody ships"): because
theme.eject recorded provenance, a theme upgrade is a mechanical
three-way comparison — the base you ejected from, the installed
upstream, and your copy.
| status | meaning |
|---|---|
:current | upstream unchanged since eject — nothing to do |
:auto_updatable | upstream moved, you didn't touch it — safe to re-eject |
:conflict | both moved — a human (or agent) resolves |
:untracked | no provenance header — a hand copy we cannot manage |
:rewritten | a .heex rewrite — a different language, yours outright; no three-way merge is possible or expected |
:shadowed | an .eex overlay a .heex rewrite outranks — inert until the rewrite is removed |
Summary
Functions
Drift entries for every template this site overlays, manifest order.
Re-ejects an :auto_updatable overlay from the installed theme,
stamping fresh provenance. Refuses any other status — a conflict or
hand copy is never silently overwritten.
Functions
@spec entries(Cherry.Site.t(), Cherry.Theme.t()) :: [Cherry.Theme.Drift.Entry.t()]
Drift entries for every template this site overlays, manifest order.
@spec update(Cherry.Theme.Drift.Entry.t(), Cherry.Theme.t()) :: :ok | {:error, String.t()}
Re-ejects an :auto_updatable overlay from the installed theme,
stamping fresh provenance. Refuses any other status — a conflict or
hand copy is never silently overwritten.