Files
gig-line/MEMORY.md
T
zwitschi 1c6b956435 bootstrap: finish project bootstrap — scale test, MPFB character, build docs
- Static-mesh scale test passes: 1 m = 100.00 cm, origin preserved, axis
  mapping east→+X / north→−Y / up→+Z (named presets ue_metric_v1 both sides).
- MPFB 2.0.18 acceptance passes: generated human + standard 137-bone rig
  with weights + v2 skin baked to 1024² diffuse; imports as SkeletalMesh
  with Skeleton, Material, and Texture2D in /Game/Test/Character.
- MPFB headless requires XDG_CONFIG_HOME at the Flatpak config tree;
  documented in Art/blender/README.md, probe in Tools/addon_compat_probe.py.
- Docs/build.md completed: fresh-checkout build, packaging, headless checks.
- Docs/setup.md reconciled with reality; ROADMAP/bootstrap closed out.
2026-11-07 09:29:11 +01:00

7.6 KiB
Raw Blame History

MEMORY.md

Shared working memory between sessions and collaborators. Short, dated entries with evidence: the command, the log line, or the file path.

Scope: facts and traps that cost time to establish. Planned work lives in ROADMAP.md; formal setup, pins, and licensing live in Docs/.


2026-11-07 — Unreal Engine 5.8.4

  • Extracted to /run/media/system/DATA/Engines/UE_5.8.4 (73 GiB, unzip exit 0). CL 58902052, ++UE5+Release-5.8.
  • Gotcha: the editor needs a writable ~/.config/Epic. In the agent shell it crashed with signal 11 twice and looked like a broken install. The log named it: create dir('/home/zwitschi/.config/Epic/') failed: errno=30 (Read-only file system) → Fatal error: Failed to create Intermediate directory '…/.config/Epic/UnrealEngine/5.8/Intermediate/'. Rerunning with HOME=/tmp/uehome XDG_CONFIG_HOME=/tmp/uehome/.config reached LogInit: Display: Engine is initialized.
  • Vulkan RHI is still unproven. The successful run used -NullRHI. Untested: UnrealEditor -vulkan from a desktop terminal.
  • A packaged game does not need ~/.config/Epic, so this failure does not follow the build.

2026-11-07 — Agent shell limits

  • The agent shell has a read-only home and read-only /run: sudo is blocked (no new privileges), flatpak run and podman cannot create instances, /dev/nvidia* is absent so nvidia-smi always fails there. None of this is a broken machine; verify GPU things from a normal terminal.
  • Anything outside the session workspace (/run/media/system/DATA/Engines, /tmp) needs the wider sandbox with an approval prompt.

2026-11-07 — Reference photography

  • Licensing is not a gate for local development. Reference images live in the gitignored Art/reference/ and are never committed. What each set establishes is written into Docs/reference-notes-hollywood.md.
  • Commons text search runs dry; categories do not. Tools/commons_fetch.py --category "Category:Hollywood Masonic Temple" surfaced 15 files a search never showed, including 4–5k px façades.
  • upload.wikimedia.org throttles hard. Batches of six or fewer with --delay 3; a throttled file is skipped and recorded rather than killing the run (HTTP 429).
  • Unqualified queries return junk. Hollywood Boulevard shops returned a Münster street, Hollywood Masonic Temple entrance a Seattle card index. Check the hit list before accepting a set.
  • OpenRouter web search is expensive. One gpt-5.2 + openrouter:web_search call ran 17 searches and cost $0.38; two of its eight URLs were Commons files already held. Use it for a known gap, not a sweep. Tools/page_image_fetch.py turns results into files by reading og:image.
  • The inherited "eight stone steps, 12 m wide" is wrong. Photographs show three portals, each with its own short flight. Do not copy that number into geometry.

2026-11-06 — Blender and Blosm, headless

  • flatpak run does not work here. Call the binary inside the app tree: B=/var/lib/flatpak/app/org.blender.Blender/x86_64/stable/active/files, then LD_LIBRARY_PATH="$B/blender/lib" "$B/blender/blender" -b … with BLENDER_USER_SCRIPTS="$HOME/.var/app/org.blender.Blender/config/blender/5.2/scripts".
  • Blosm needs two headless workarounds, both already in Tools/blosm_blockout.py:
    1. it refuses to import until an asset directory is set, and the check fires before the mode is honoured;
    2. in background mode the default level table is empty, and the add-on then takes a path with a broken relative import (from gui import addDefaultLevels). Seeding one entry avoids it.
  • Blosm projects on a sphere, not an ellipsoid. Its frame is about 0.4 % oversized and rotated by meridian convergence — roughly 2 m at the theatre. Fixed with a six-parameter affine into EPSG:26911 (0.0 cm residual).
  • Transform roots only. 256 of 275 objects are children; transforming both parent and child applies the correction twice and reads as a 2 m placement error.
  • Blosm quietly fetches from Overpass for relation members missing from the extract. loadMissingMembers is off by default in the tool so imports stay offline and reproducible.

2026-11-06 — Geo data traps

  • The 3DEP export is a tiled TIFF, not strips. A strip reader silently scrambles rows and produces fake 0 m / 127 m bands. Geo/scripts/dem_stats.py handles tiles.
  • Sample walk routes through PROJ. Placing samples with the OSM spherical approximation put them metres off the UTM meshes and reported 91 phantom holes. /tmp is not shared between tool calls here either — regenerate instead of saving intermediate files there.
  • 3DEP cannot resolve kerbs. Sharpest break near the kerb line is 0.09–0.12 m/m, a gutter transition, not a 0.15 m upstand. Kerb height stays a stated assumption.
  • Building interiors are not ground. Points inside the hero footprint returned 114.5–117.1 m — structure, not terrain. Excluded from the relief figure.
  • Two measurements independently agree on the carriageway: crossing length 20.9 m and gutter spacing −10 / +10…12 m.

2026-11-06 — Repository traps

  • Without git lfs install the lfs filter is inactive and git add does not warn — it stores the file as a plain blob. Tools/check-lfs.sh is the guard.
  • Never commit reference images or .env. .gitignore covers /Art/reference/, .env, *.env. When images slipped in early, history was rewritten to remove them.
  • The project origin is Hollywood × Highland: E 376 515.389 / N 3 774 224.083 in EPSG:26911. Blender X east, Y north, Z up, metres, Z measured from the origin ground (NAVD88 115.911 m). The whole block sits at negative X.

2026-11-07 — Unreal pipeline findings

  • UE 5.8 game targets must use BuildSettingsVersion.V7 to share the installed editor's build environment; V5 is rejected with "modifies the values of properties … not allowed".
  • UnrealEditor-Cmd -run=pythonscript swallows Python print() with -stdout in 5.8 — write results to a file instead (see Tools/ue_scale_test_import.py).
  • unreal.Box has min/max, not origin/get_extent() in 5.8 Python; compute centre/size from the corners.
  • FBX Blender→UE axis mapping is east→+X, north→−Y, up→+Z with preset ue_metric_v1; the Y mirror is inherent (RH→LH). Compass math in game code: north = −Y. Verified with the three-cube scale test.
  • Headless asset import works fine with -nullrhi; unreal.AssetImportTask + FbxImportUI is the pattern (Interchange pipeline under the hood).
  • Flatpak Blender headless needs XDG_CONFIG_HOME=$HOME/.var/app/org.blender.Blender/config for extensions: bpy.utils.user_resource('EXTENSIONS') otherwise resolves to ~/.config/blender/5.2/extensions (empty) and bl_ext.blender_org.mpfb is undiscoverable. Blosm unaffected (scripts/addons via BLENDER_USER_SCRIPTS). Found via Tools/addon_compat_probe.py; documented in Art/blender/README.md.
  • UE 5.8 Interchange skips material/texture assets for skeletal FBX imports (static imports do get materials). Finish the chain in Python: import texture, build Material via MaterialEditingLibrary, assign with sm.set_editor_property('materials', [SkeletalMaterial]) — the struct field is material_interface, not material, and SkeletalMesh.set_material() does not exist. See Tools/ue_character_import.py.
  • Blender 5.2 FBX exporter removed armature_nla (passes for 4.x recipes fail). Also: a baked image is only referenced by the FBX exporter when image.filepath (not just filepath_raw) is set and the exporter can map the node — MPFB's v2 skin node-group tree can't be mapped, so a flat export material is required.