After looking at mdBook some more, I think this checks all my boxes:
works well with files in Git
direct translation of *.md → *.html
single file (SUMMARY.md) to generate the table of contents. This is much nicer than sprinkling meta-data in the actual markdown files which is difficult to update if you want to add a page to a site.
mdBook is part of the Rust project, but appears to be generally useful. There is work being done to make the playground feature work in other languages.
Other than generally looking nicer, the sidebar now dynamically shows page headings for the page you are on, eliminating the need for clunky TOC add-ons.
While it is reasonably easy to install cargo and use that, it is slow and tedious to make sure everything is included. Also, we are increasingly needing containers for CI/CD workflows, so it often makes sense to use them for development as well.