Tools/shadow_gap.py measures the vertical pixel gap between an object's lowest pixels and the top of its shadow, as a fraction of the object's height, and calls it contact or floating. It classifies a shadow by per-channel scaling - a shadow darkens every channel by the same proportion, an object does not - which separates the two where an absolute delta cannot. Four unit tests cover contact, floating, an empty box and the border median. On the real spawn view it returns 'unknown': the crop contains two surfaces (pale wall behind, dark road below) and one global background cannot classify both. Recorded as the next step, not presented as working. The spawn height is measured and cleared: tracing down from 30 m, the topmost surface under the player is Z 366 and the capsule's feet are at 369 - 3 cm, the capsule skin. If the character still reads as floating, the gap is between the rendered pavement and its collision surface, not the spawn Z, and that is what to measure next.
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.