pub fn analyze(source: &str) -> AnalysisResultExpand description
Run the full analysis pipeline: lex → MWE → discover → parse → index.
Uses block-level error recovery: if the full parse fails, splits source
at ## BlockHeader boundaries and parses each block independently.