Documentation, kept apart from the code, becomes a lie the moment the code changes.
Hand-maintained documentation loses to drift. The separate docs site, the wiki page, the README aging in private: all share one failure mode, sitting in a different file from the thing they describe, touched by a different person at a different time, until they stop being true. The compromise most teams settle for is sparse, lowest-common-denominator docstrings that survive only because there is almost nothing to them.
ae-xtr removes the second file. Documentation is written as structured comments inside the source, marked with the @ae::dx family of tags, in the file the author is already editing. One command rebuilds the markdown tree from whatever the syntax tree currently holds. There is no second copy to keep in sync, only a read of the source repeated on demand.
The same small tag set, read from a Rust doc comment, a JSDoc block, a Python docstring, a Svelte comment.
The same syntax works across ten languages, each with a dedicated parser adapter that surfaces the comment nodes its grammar emits. Svelte gets special handling: one file embeds markup, script, and style, and the adapter reads all three.
Scan, parse, extract, generate. Validation forks off the same read.
One ae-xtr generate runs four stages left to right. The check subcommand runs the same read without the write, so the gate and the build share one path.
Four commands over one read of the source.
The same pipeline drives a small command surface: generate writes the tree, check gates it, stats reports on it, and watch keeps it live.
Hand-written docs can be wrong. A projection can only be stale or absent.
A documentation tree maintained by hand is an artefact living beside the code, free to disagree with it. The tree ae-xtr writes is a read of the AST as it stands, so it never says something the code does not. When it falls behind it falls behind visibly: missing coverage stats can name file and line, and one rerun closes the gap.