pub fn run(config: &Config) -> Result<(), Error>
Run the full pipeline: git → filter → highlight → PDF. Files are processed one at a time to keep memory usage low.