Good news: got Devstack up and running in about half an hour, which is a new record for me! Also found the source of the problem; see below.
Bad news: Man, that's a lot of warnings. Like, even before I try to import the course, just piles and piles of them. Then, once I
do import the course, I end up with an import log that's 3.7 MB of
just straight text. Luckily the issue was related to one of the most common warnings: a non-unique filename. The line looks like this:
2017-12-08 10:25:04,888 WARNING 14647 [xmodule.modulestore.xml] xml.py:170 - Non-unique url_name in xml. This may break state tracking for content. url_name=45f8da6114d14701a46d176ea8e38de1. Content=<problem url_name="45f8da6114d14701a46d176ea8e38de1"/>
I tested by making a tiny new course with two sections, one subsection each, one unit each. One of them had a problem component. Then I exported, copied the XML for that problem into the other unit, and re-imported. The second occurrence of the component did not appear. I checked switching the order of the sections to make sure that it was the second one in the course outline (which it is) and not just the second one that I added chronologically (no). The problem is even stripped from the XML as the course is rebuilt (I checked by re-exporting).
It may also be useful to know that no component in a unit with a duplicate will show up. The presence of the duplicate makes it so that none of the others appear. This is particularly bizarre for me, because the duplicate does not appear in the XML export. If you make your XML edit, import, export, and reimport, you get a unit where the remaining components appear. If you just edit and import, no luck.
Yes, I know, there's not much of a use case for duplicate components, but there is one. I did what I did intentionally. It should break nothing. Nevertheless, only the first appearance of a particular component counts, and the rest of them are thrown out.
I'm gonna see what I can do to work around this, but I need to go be voice talent for a video now.