0.1.3 packaging and setup fixes from what 0.1.x actually exposed. - New Tools/ue_common.py: make_writable() clears the read-only bit an LFS .umap checks out with (save_map() otherwise returns False silently and the staged actor is lost) and require_saved() makes that failure visible. ue_hero_facade_import and ue_import_north_buildings now call it; the map builders already did. Verified from a forced 0o444 map: chmod logged, save_map True, exit 0. - Docs/build.md: pipeline table now lists the seven site FBXs plus frontage, north, hero and map steps and the shared FBX preset; packaging archive corrected to Builds/GigLineQA; packaged-log location and -qaselftest usage documented; new 'Traps that cost real time in 0.1.x' table (read-only save, hero --out is the FBX, MPFB add-on path, shot actor quitting under QA, null-RHI trace trap). - Docs/setup.md: fresh-checkout build marked verified 2026-11-08 and the blocker closed; new optional-keys section for OPENROUTER_API_KEY and MAPBOX_ACCESS_TOKEN (gitignored .env, not needed by build/tests/release). - Docs/Architecture 07 + architecture.md: build-output path corrected, marked outside the repository. - 5 new tests for ue_common (54 total).
11 KiB
Setup
Ordered procedure for bringing the workstation and the project to a buildable state. Status markers follow TODO.md:
[x]done and verified[A]started, not finished[ ]not started
Anything marked human step needs credentials, licence acceptance, or a decision that cannot be automated. Never store Epic credentials, tokens, or licence keys in the repository.
Status — 2026-11-07
Initial setup is complete. Sections 1 to 4 are done and verified; the project builds, packages, and imports Blender assets with the pinned toolchain. What remains in section 3 is one optional geo environment.
| Section | State |
|---|---|
| 1. System | done — Bazzite 45.20261105, driver 615.78.08, Vulkan verified, host build tools layered |
| 2. Engine | done — UE 5.8.4 at /run/media/system/DATA/Engines/UE_5.8.4, editor launches with Vulkan on the 5070 Ti |
| 3. Tooling pins | done except the optional geo venv; Blender 5.2, MPFB 2.0.18, Blosm 2.7.28, QGIS 4.2.3 all verified |
| 4. Project bootstrap | done — C++ project, packaged blank build, static-mesh scale test, MPFB character import |
| 6. Content pipeline | in progress — blockout, terrain, street, hero façade and the walkable DemoMap exist; façades and materials are planned patches (0.1.4) |
| 5. Repository | procedure documented; a fresh checkout has not yet been exercised end to end |
Next: 0.1.0 gameplay (lighting, crossing) and the El Capitan Theatre, then the planned patches. Current task list is TODO.md; version direction is in ROADMAP.md.
1. System
[x]Update Bazzite with its supported mechanism.ujust update(orrpm-ostree upgrade) followed by a reboot. Deployment45.20261105is booted and default;44.20261026retained as rollback.[x]Verify the NVIDIA driver and Vulkan from the desktop session.nvidia-sminames the RTX 5070 Ti on driver615.78.08and the Wayland desktop renders through it. Vulkan enumerates it as GPU0: discrete, proprietary driver615.78.08, API1.4.351, conformance1.4.3.3. The integrated RADV GPU is GPU1 — watch that the engine does not select it.[x]Installgit-lfs,cmake,ninja-build,clangas an ostree layer, reboot, thengit lfs install. Done:git-lfs 3.7.1,clang 23.1.4,cmake 4.3.0,ninja 1.13.2; lfs filter active,Tools/check-lfs.shpasses.
2. Engine acquisition
[x]Human step. Create an Epic account, accept the Unreal license. Done on 2026-11-06 with the account email recorded locally; no credentials stored in the repository.[x]Human step. Acquire one pinned engine build. Two routes:- Launcher build: install the Linux Epic Games Launcher, download the pinned engine version, install to the DATA volume, and disable auto-update so the pin holds.
- Source build: clone the pinned
releasebranch from the Epic Games GitHub organisation, then./Setup.sh,./GenerateProjectFiles.sh,make -j16. Budget 120–200 GB and a multi-hour first build on 16 threads. 5.8.4 downloaded to/run/media/system/DATA/Downloads/Linux_Unreal_Engine_5.8.4.zip: 39 819 212 076 bytes (37.08 GiB), ZIP central directory present with 299 959 entries,Engine/Build/Build.versionreports 5.8.4, changelist 58902052,++UE5+Release-5.8.
[x]Verify the archive end to end before extracting.unzip -tqon 2026-11-06: "No errors detected", exit 0.[x]Extract to the DATA volume and record the install path. Done 2026-11-07:/run/media/system/DATA/Engines/UE_5.8.4, 73 GiB on disk, extraction verified by full headless editor start.[x]Resolve the engine version: 5.8.4 pinned (see the decision below). The 5.2.0 archive (19.59 GiB, CL 25360045) remains on disk as a fallback only and should be deleted once the pin is trusted.[x]Record the exact engine version and build route in toolchain.md. Done: 5.8.4, Epic download route, CL 58902052.[x]Validate that the engine editor opens and a blank project runs on Bazzite. Done 2026-11-07: headless-NullRHIsmoke test and full editor GUI launch with Vulkan RHI on the RTX 5070 Ti (loader 1.4.350,VULKAN_SM5, map check 0 errors). No distribution workarounds were needed; only benign log noise (Android Turnkey status, telemetry DNS failures).
Engine version decision
The archive on disk is Unreal Engine 5.2.0, released May 2023, three and a half years before this project started. That is a legitimate choice — nothing in the 0.1.0 scope needs a newer feature — but it carries known costs that must be recorded before pinning it:
- The bundled Linux toolchain in 5.2 targets an older glibc than Bazzite 45 ships. Project C++ compilation may need the bundled clang with older sysroot flags, or may simply fail; that has to be tested before any C++ work.
- GPU support: 5.2 predates the driver and Vulkan paths that Blackwell cards (RTX 50 series) exercise. Vulkan RHI should still work, but shader compilation and Lumen behaviour on a 5070 Ti are unvalidated.
- No engine fixes from 5.3 through 5.8, and no compatibility with content or plugins authored for newer versions.
- Bazzite is not a supported Unreal distribution in any version, so this risk compounds rather than introduces.
Decision taken 2026-11-06, archive delivered 2026-11-07, extracted and validated 2026-11-07: the current stable release is 5.8.4, and that is the pin. The 5.2.0 archive stays only until the 5.8.4 pin is trusted through asset production, then gets deleted; two engines on disk invite accidental mixing. The 5.2.0 costs listed above are why the newer build was preferred. Note: this 5.8.4 build ships no bundled Linux clang — the system clang (23.1.4) is the game-code toolchain, accepted by the first C++ compile and by the packaged build.
3. Tooling pins
[x]Blender 5.2 LTS (Flatpak) and MPFB 2.0.18 recorded.[x]Install QGIS and record its version. QGIS 4.2.3, Flatpakstable, runtimeorg.kde.Platform 6.11, bundled PROJ9.9.0. The stalelts3.28.9 install was uninstalled 2026-11-07; onlystableremains.[x]Install Blosm in Blender, record its version, and confirm it loads on Blender 5.2. Blosm 2.7.28 imports the block extract headless in3Dsimplemode; the exact command and the two required headless workarounds are inArt/blender/README.md. No second Blender version was needed.[ ]Optional. Confirm the geo tool Python environment (venv withpyproj,GDAL,shapely). Not needed so far: every geo script inGeo/tools/is standard-library only, and PROJ 9.9.0 is invoked from the QGIS Flatpak (LD_LIBRARY_PATHtrick inGeo/manifests/local-origin.md). Add the venv only when a step genuinely needspyprojor GDAL in-process.
4. Project bootstrap
[x]Create the C++ Unreal project atGame/GigLine/GigLine.uprojectwith Enhanced Input enabled and Blueprint gameplay enabled. Created 2026-11-07: primary game module + default game mode, Enhanced Input plugin and input classes inConfig/DefaultInput.ini.Config/,Source/, andGigLine.uprojectare committed;Binaries/,Intermediate/,Saved/, and the DDC stay out via.gitignore.[x]Point the local Derived Data Cache at the DATA volume. The engine lives on the DATA volume and installed builds defaultLocalDDCunder the engine root, so the DDC is already off the repository SSD tree. Revisit only if a project-local DDC is later configured.[x]Enable Git LFS integration in the editor before importing content, so large assets are routed to LFS on import rather than on a later re-add. Satisfied by repo-level.gitattributesrouting: content is added viagit add(CLI or editor), and the attributes send.uasset/.umap/.blendto LFS regardless of which tool wrote them.Tools/check-lfs.shis the guard.[x]Package and launch a blank Linux build from the command line, so the packaging path is proven before any content exists. Done 2026-11-07: UATBuildCookRunsucceeded in 56 s; 1.1 GiB archive at/run/media/system/DATA/Builds/GigLine;GigLine.shrendered 759 frames across a 60 s smoke test. Full procedure in build.md.[x]Export one static mesh from Blender with a known metric size and import it into Unreal. Verified 2026-11-07 with the three-cube calibration scene: 1 m → exactly 100.00 cm, origin preserved, material imported; axis mapping east → +X, north → −Y, up → +Z. Presets and scripts in build.md andArt/blender/README.md.[x]Export one MPFB character with baked materials and a deform skeleton and verify it imports with the expected skeleton hierarchy and scale. Done 2026-11-07: MPFB 2.0.18 generated human (19 158 verts) + standard rig (137 bones, weights) + v2 skin baked to a 1024² diffuse; imported into Unreal as aSkeletalMeshwith a 138-boneSkeleton, aMaterialcarrying the bakedTexture2D, in/Game/Test/Character.[x]Commit the baseline and write the fresh-checkout build procedure into build.md. Done 2026-11-07.
5. Repository
git clone <remote> gig-line
cd gig-line
git lfs install # writes filter.lfs.* into git config; required before any content commit
git lfs pull
Tools/check-lfs.sh # fails when the lfs filter or the pointer storage is missing
Without git lfs install, adding an LFS-matched file does not error — it commits the file as a plain blob. Tools/check-lfs.sh is the guard for that.
Sizes: the engine lives outside the repository (pinned install path recorded in toolchain.md). The repository holds the Unreal project, Blender sources, geo sources, and tooling.
Fresh checkout verified 2026-11-08. A clean clone of main with git lfs pull built both GigLineEditor and GigLine against the documented external engine (recorded in release-checks.md). Re-run it before a release tag if the engine pin or the module's dependencies change.
Optional keys (local only)
Two tools talk to paid services and read their keys from the gitignored .env:
| Variable | Used by | Needed for |
|---|---|---|
OPENROUTER_API_KEY |
Tools/judge_screenshot.py, Tools/facade_detail_concepts.py |
vision pre-check and AI concept plates |
MAPBOX_ACCESS_TOKEN |
Geo/tools/mapbox_buildings.py |
the second building-height source |
Nothing in the build, the tests or the release path needs either key. Never commit .env; git check-ignore .env should succeed.
Known blockers
| Blocker | Owner | Needed for |
|---|---|---|
Delete the fallback 5.2.0 engine archive (/run/media/system/DATA/Downloads/Linux_Unreal_Engine_5.2.0.zip) once the 5.8.4 pin is trusted through asset production |
agent | Disk hygiene (19.6 GiB), pin safety |
| — | Done 2026-11-08 |
Closed 2026-11-07: Epic account and engine download, QGIS lts removal, Blosm and MPFB on Blender 5.2 (headless invocation fix in Art/blender/README.md), engine validation on Bazzite, full project bootstrap. Earlier closed: Bazzite update and reboot, driver and Vulkan verification, git-lfs/clang/cmake/ninja layering.