test_camera was the only Catch2 target missing the `if(TARGET glm::glm)`
link block — every other test linked glm but this one didn't, so the
macOS arm64 builder failed to find `glm/glm.hpp` from camera.hpp.
Five fopen call sites in tools/editor/cli_* passed
fs::directory_entry::path().c_str() — that's wchar_t* on Windows.
Routed them through `.string().c_str()` so MSYS2 GCC and clang both
accept the const char* parameter.
Pairs with the per-zone inventory module from c0f2ab75. Moves
the five project-wide inventory handlers into their own file:
--list-project-meshes (per-zone WOM aggregate)
--list-project-meshes-detail (per-mesh sorted listing)
--list-project-audio (per-zone WAV aggregate)
--list-project-textures (per-zone + global texture refs)
--info-project-summary (BOOTSTRAPPED/PARTIAL/EMPTY rollup)
All five enumerate zones the same way; consolidated that into
a shared enumerateZones() helper at file scope.
main.cpp drops 27,200 → 26,650 lines (-550). Behavior unchanged
across all 5 commands (verified against /tmp/proj_starter).