Decisive experiment: the same SM_Vehicle_Body staged as a plain StaticMeshActor 5.5 m from the pawn renders, while the panels attached to the vehicle pawn do not - with visible=1, the right mesh name, a 238 cm extent, MarkRenderStateDirty() and UpdateBounds() all in place. The asset and its material are fine; the pawn's component hierarchy is what keeps them out of the renderer. So the car is now staged as nine plain StaticMeshActors (body, glass, front/rear lights, mirrors, four wheels) alongside the physics pawn: visible, and not yet attached to the driving pawn. A visible car that does not drive yet beats an invisible one that does. Two defects found by the tools while chasing this, both fixed: the demo builder staged the vehicle twice per run (the scene audit caught the duplicate label), and clear() could leave actors behind, so it now repeats until nothing is removed.
Game
The Unreal project lives at Game/GigLine/GigLine.uproject once created. Nothing here yet.
What gets committed
Config/— engine and project settings, including the quality presets used for release checksSource/— C++ modulesContent/—0.1.0map, materials, meshes; LFS-trackedGigLine.uproject
What does not
Binaries/, Intermediate/, Saved/, DerivedDataCache/ — all generated. .gitignore covers them; do not add exceptions.
Engine
Installed outside the repository. Its path and exact version are recorded in ../Docs/toolchain.md. Nothing in this directory may assume a machine-specific engine path; the documented build procedure is ../Docs/build.md.