SiteExporter
Phase-3 website export pipeline (in-app-docs-decoupling §EP-1 → §EP-7).
Declared in src/libs/libuiautomation/exporter/SiteExporter.hpp.
Detailed description
Walks content/doc/published walking the pure-markdown source tree, merges each <page>.meta.yaml sidecar with section / top-level defaults from route-map.yaml + wrapper-defaults.yaml, and emits YAML-frontmattered .md files into a staging directory. Non-widget images are copied verbatim. The website autorouter consumes the result unchanged — this tool only writes frontmatter and never emits HTML.
Distinct from WebExporter, which generates widget catalog pages into the published tree from WidgetRegistry. SiteExporter operates on the already-written published tree.
Atomic swap ("mv -T"): writes to "<staging>.next/", validates, then renames into place. Refuses to follow symlinks in either source or target — surfacing one is a hard error.
Git audit log: on first run, "git init" inside the staging tree; on every successful swap, "git add -A && git commit". This is the §EP-6 structural prevention for the 2026-05-26 staging incident.