0007. Doxygen XML is engine-managed, and lives outside the servable tree
Status
Accepted.
Context
Doxygen’s XML output is not documentation. It is a machine-readable intermediate that the test-specification extension parses to turn annotated C into rendered test cases — useful to the build, meaningless to a reader, and sizeable.
Decision
The engine controls both GENERATE_XML and XML_OUTPUT. XML is a
project-scoped opt-in through a single top-level registry key, and lands
outside the servable tree, at deploy/xml/<name>/.
“Opt-in” here means the engine decides in both directions. Because consumer doxyfiles already ask for XML, enabling-only-when-asked would be a no-op; the engine has to force it off for a document whose own doxyfile says yes. That distinction — the engine deciding, versus the engine relocating what the consumer already asked for — is what the test for the absent key pins.
Consequences
The servable tree contains no XML, asserted directly rather than inferred.
XML_OUTPUTmust be an absolute path. Verified against Doxygen with a control: a relative value lands inside the output directory, an absolute one lands where asked.A Doxygen document’s clean target removes two paths unconditionally, because a document can turn XML off across a re-configure and the previously generated XML must still go. This is exactly where the previous decision’s “a Doxygen document has one output location” reasoning stops holding.
The factory asks the registry for the key itself rather than being handed it by the dispatcher, because the factory is also called by hand and a value passed down would leave that path blind. A failure to read the key is fatal, never read as “off”.