Commit Graph
41 Commits
Author SHA1 Message Date
zwitschi 81f7cd3991 feat(geo): cross-check block heights against Mapbox building data (#25)
Merged PR #25: Mapbox building-height cross-check

Co-authored-by: Zwitschi <zwitschi82@gmail.com>
2026-11-08 16:31:39 +01:00
zwitschi 68d8745534 docs(agents): tooling + architecture-upkeep rules, with tool tests (#24)
Merged PR #24: tooling + architecture-upkeep rules, tool tests

Co-authored-by: Zwitschi <zwitschi82@gmail.com>
2026-11-08 16:25:35 +01:00
zwitschi e75e5500a7 fix(street): 0.1.1 collision patch — flush sidewalk edge, graded crossing ramps (#21)
Merged PR #21: 0.1.1 collision patch (flush sidewalk edge, graded ramps)

Co-authored-by: Zwitschi <zwitschi82@gmail.com>
2026-11-08 16:19:11 +01:00
zwitschi 47bf3a2415 docs: fill the traversal row in the 0.1.0 check-record table (#19)
Co-authored-by: Zwitschi <zwitschi82@gmail.com>
2026-11-08 15:22:57 +01:00
zwitschi 3a1db78473 qa: package + document controls (0.1.0 release check PASS) (#18)
Merged PR #18: package + document controls

Co-authored-by: Zwitschi <zwitschi82@gmail.com>
2026-11-08 15:22:34 +01:00
zwitschi b27d30d556 qa: fresh-checkout build PASS (0.1.0 release check) (#17)
Merged PR #17: fresh-checkout build PASS

Co-authored-by: Zwitschi <zwitschi82@gmail.com>
2026-11-08 15:19:21 +01:00
zwitschi 4bc41e9faf perf: capture 1440p frame times; PASS the 60 FPS release check (#16)
Merged PR #16: 1440p perf capture (60 FPS check PASS)

Co-authored-by: Zwitschi <zwitschi82@gmail.com>
2026-11-08 15:17:47 +01:00
zwitschi 71acffec12 qa(collision): no-blocking-collision release check — seam + wall audit (#13)
Merged PR #13: no-blocking-collision release check

Co-authored-by: Zwitschi <zwitschi82@gmail.com>
2026-11-08 14:55:58 +01:00
zwitschi 82a408bc33 qa(placement): record release-check 2 evidence + fix north-buildings camera (#12)
Merged PR #12: release-check 2 placement evidence + camera fix

Co-authored-by: Zwitschi <zwitschi82@gmail.com>
2026-11-08 14:43:15 +01:00
zwitschi 95011d678a docs: close ODbL review and finish active TODO items (#10)
Merged PR #10: close ODbL review and active TODO items

Co-authored-by: Zwitschi <zwitschi82@gmail.com>
2026-11-08 14:31:07 +01:00
zwitschi 2f87002711 docs(licensing): remove ODbL attribution requirements and HUD credit references
Drop the OpenStreetMap/ODbL attribution requirement, the Google imagery rule,
and the related F-4 requirement, risk R-4, release check, and TODO items across
AGENTS, PLAN, ROADMAP, README, setup, architecture sections, and manifests.
OSM data is now documented as local private use only. Also normalize
numbered-list indentation in the architecture docs.
2026-11-08 14:11:06 +01:00
zwitschi 4832e66c00 fix(input): restore working controls + add input harness + build fixes
Consolidated from the qa-input-collision-fix-0.1.0 work, applied onto main so
only the changes main genuinely lacks are carried (main already merged the
walkable-demo/collision work independently).

- fix(input): populate the UE 5.8 FInputMappingContextMappingData
  DefaultKeyMappings field in ue_create_input_assets.py (the runtime reads
  GetMappings()->DefaultKeyMappings.Mappings; the script previously wrote only
  the deprecated 'mappings' array, so the cooked game had 0 runtime mappings
  and every key silently did nothing — in packaged AND PIE). Regenerated
  IMC_Default.uasset. WASD/mouse/Space/R/Escape verified working.
- fix(build): drop editor-only APIs that break the game target build —
  UStaticMesh::PostEditChange() (GigLineAssetTools) and AActor::GetActorLabel()
  (character ground probe). GigLine and GigLineEditor now both compile clean.
- tools: OS-level uinput input harness (input_emulation.py + input_test.py) and
  run_pie.sh for PIE isolation; document the PIE-vs-packaged input test in
  Docs/build.md. Removed the temporary SIM/EI/screenshot diagnostics from the
  character.
2026-11-08 13:43:33 +01:00
zwitschi 6b4e1252c5 docs(glossary): add PIE and UE entries
PIE — Play In Editor: an Unreal Editor feature that runs the current
map as a live game session inside the editor.
UE — Unreal Engine: Epic Games' real-time 3D creation platform,
comprising the editor (including PIE), C++ framework, and runtime.
2026-11-08 13:40:46 +01:00
zwitschi fe8740c1e3 docs: remove .adoc sources — markdown is the canonical format now 2026-11-08 13:38:52 +01:00
zwitschi 5aa883eaff docs: convert all architecture .adoc sections to markdown, prettier-format all .md
- Converted 13 individual .adoc section files to .md via
  asciidoctor→docbook5→pandoc(gfm) + post-processing, placed alongside
  the .adoc sources in Docs/Architecture/
- Rebuilt architecture.md from the individual section .md files
- Ran prettier --write on all .md in the repo (23 files changed):
  normalised table column alignment, trailing whitespace, line breaks
- Added .agents/ to .prettierignore (vendored third-party content)
- All .md now passes prettier --check
2026-11-08 13:33:44 +01:00
zwitschi e93c27054a docs: reconvert architecture.adoc to markdown via asciidoctor→docbook→pandoc
Replaced the Python-converted architecture.md with a proper pandoc
conversion chain:

  asciidoctor -b docbook5  →  pandoc -f docbook -t gfm

This fixes table rendering (pipe tables instead of grid tables),
interpolates AsciiDoc attributes ({project-name} → Gig Line), strips
anchor IDs, and normalises escaping. Post-processed: glossary italic
leak from cols="e,2e" table, ® → (R) for the reset key, \>/> escapes.

Also:
- prettier 3.9.10 installed globally as the Markdown formatter/linter
- .prettierrc: proseWrap=never, tabWidth=2
- .prettierignore: skips Binaries/, *.uasset, *.umap, *.blend, images
- architecture.md passes prettier --check
2026-11-08 13:26:17 +01:00
zwitschi d03829b699 docs: add Markdown rendering of arc42 architecture documentation
architecture.md is the combined 450-line single-page rendering of all 12
arc42 sections. The Asciidoctor source (.adoc) files remain for future
editing; the Markdown is the readable deliverable.
2026-11-08 13:12:33 +01:00
zwitschi 72705268b5 docs: arc42 architecture documentation for Gig Line
Populated from the arc42-template (EN/adoc) with project-specific content
across all 12 sections:

1.  Introduction and Goals — requirements overview, quality goals, stakeholders
2.  Architecture Constraints — technical (engine, collision, coordinates),
    organisational (squash-merge, visual review, provenance), conventions
3.  Context and Scope — business and technical context tables
4.  Solution Strategy — technology decisions, top-level decomposition,
    quality achievement approach
5.  Building Block View — Gameplay (6 C++ classes), Site (7 meshes + 7
    materials), Facades (9 buildings), Art Pipeline, QA & Review; Level 2
    white boxes for input flow and collision model
6.  Runtime View — walk, screenshot capture, QA self-test, build/import
    pipeline scenarios
7.  Deployment View — dev workstation and packaged build infrastructure
8.  Cross-cutting Concepts — coordinate system, collision model, lighting,
    materials, data provenance, QA harness
9.  Architecture Decisions — 7 ADRs (dynamic lighting, UE materials,
    C++ collision helper, grounded reset, core ticker, Y convention,
    headless Blender)
10. Quality Requirements — overview table + 7 measurable scenarios
11. Risks and Technical Debts — 5 risks, 2 debts with mitigations
12. Glossary — 16 domain-specific terms

Master document: Docs/Architecture/architecture.adoc
Config: Docs/Architecture/config.adoc
2026-11-08 13:08:35 +01:00
zwitschi 52b1212cf3 qa: make the demo walkable — terrain collision root cause, spawn, scripted QA
The reported fall-through was a misdiagnosis: the player never fell. The
imported Terrain_DEM had only a bounding-box simple collision proxy, so a
downward trace anywhere in the block hit the terrain at Z 819 (the mesh
bbox max) and the street sat under an invisible 8 m lid. Standing on that
box looked plausible, which is why it read as working.

- add UGigLineAssetTools (C++): force CTF_UseComplexAsSimple on a static
  mesh. UE 5.8 dropped bUseComplexAsSimpleCollision and Python cannot set
  the flag; the builder also saves the asset, since the flag lives there
  and a map-only save silently reverts it.
- spawn (-13336, -1150, 600): inside the carved corridor (the cut is a
  10.7 m half-width around the road centreline), lands on the road at 456.
- fix ResetToStart returning to the mid-air PlayerStart captured in
  BeginPlay: StartLocation is now captured on the first grounded frame.
- HighResShot 1280x720 instead of "1280 720", which is a multiplier.
- add -qaselftest: scripted walk/reset/pause on a core ticker plus a
  swept ground transect. Results: walk 746 cm/2 s with Z steady, reset
  0 cm from spawn, pause/unpause 1/0, transect 84 samples 0 holes.
- rebase onto main, keeping the frontage materials and placement fixes.
2026-11-08 11:56:19 +01:00
zwitschi c3a92d008b docs: update task status markers in setup and TODO files 2026-11-07 18:24:52 +01:00
zwitschi 5ab8b556f3 docs: move task list to TODO.md and keep ROADMAP.md as plan
Split the former ROADMAP.md checklists into TODO.md, which now holds
all actionable work and progress marks. ROADMAP.md keeps milestone
goals, scope, and release gates as prose with no checkboxes.

Update AGENTS.md, Docs/, Geo/README.md, MEMORY.md, and README.md to
point to the new file roles.
2026-11-07 15:17:10 +01:00
zwitschi e48a0cd82b docs: bring every document in line with the current build
README rewritten around the actual state (walkable DemoMap, blockout facades,
planned patches); Tools/README now lists all seventeen tools by role; build.md
gains the content pipeline table and the two enforced rules (one unit conversion,
collision decided at import). Setup gains a content-pipeline row, the toolchain
state notes the demo level exercises the engine path, release checks record the
Blender pre-check that backs traversal, PLAN points at ROADMAP/MEMORY/Screenshots,
and THIRD_PARTY_NOTICES gains rows for the hero facade and the candidate props.

Also fixed the last stale reference to Geo/scripts in MEMORY.md - a sweep found
old paths in six documents after the tool move, which the memory entry now warns
about.
2026-11-07 13:21:10 +01:00
zwitschi 386d4bee78 geo: one tool directory, one unit boundary, per-asset provenance
Geo/tools/ is now every geographic script, with Geo/README.md documenting each
one; the Blender-side builders moved beside their outputs in Art/blender/*/ and
import their helpers from Geo/tools/osm_common.py.

That module gains to_unreal_local() and to_blender_local(): the only place in the
repository that multiplies metres by 100, so a second silent scale cannot be
introduced. block_height_report.py adds height provenance for the block — 3 of
15 buildings have no height data and render at a placeholder 6.4 m.
asset_metadata.py writes and audits <asset>.geo.json sidecars; four now exist
(hero-facade, terrain, street, blockout) and the audit recomputes each centre from
the origin, failing anything that disagrees.
2026-11-07 12:28:26 +01:00
zwitschi 101db3f2a4 chore: prepare repository for Gitea publication 2026-11-07 11:08:04 +01:00
zwitschi f9f4f887dd docs: bring setup and toolchain in line with a finished bootstrap
Initial setup is complete: setup.md opens with a per-section status table and
drops the stale blockers, toolchain.md records that every pin has been exercised
on real work (engine compile + package, Blender/MPFB/Blosm assets, PROJ origin),
and MPFB's load-and-export check moves from pending to verified. Records the one
unexercised path — a fresh checkout — as a v0.1.0 release check.
2026-11-07 09:30:47 +01:00
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
zwitschi 01939de9a0 docs: add the memory convention and seed MEMORY.md
AGENTS.md now states that planned work is checkbox items in ROADMAP.md marked
open, in progress, or done, and that discoveries, gotchas, notes, and bugs go to
MEMORY.md for coordination between collaborators. MEMORY.md is seeded with what
this build-up actually cost: the Unreal read-only-home crash, Blender/Blosm
headless workarounds and the spherical projection, the tiled-TIFF DEM trap, the
reference licensing and throttling rules, and the LFS silent-blob trap.

Also stages the concurrently created Unreal project files, and stops per-project
Build/ output (FileOpenOrder logs) from entering the repository.
2026-11-07 09:08:58 +01:00
zwitschi 7ea3accbc5 engine: 5.8.4 extracted and initialising on Bazzite
Extraction finished clean (73 GB). The editor crashed twice with signal 11, but
the log named the real cause: the agent shell's home is read-only, so the editor
could not create ~/.config/Epic and died in pre-init. With HOME redirected it
reaches 'Engine is initialized' under -NullRHI, proving the install and bundled
libraries are sound on Bazzite.

The Vulkan RHI is still unproven: the successful run used -NullRHI. A desktop
terminal run is the remaining step, recorded in Docs/environment.md, ROADMAP and
the toolchain pin.
2026-11-07 08:58:54 +01:00
zwitschi 9c4a49dff2 docs: record the verified 5.8.4 archive and the extraction target 2026-11-07 08:47:16 +01:00
zwitschi 327c906a7c chore: install blender-skills 1.3.0 for modelling work
94 MIT-licensed skill packs plus their shared references, copied unedited from
the local checkout of github.com/arjun988/blender-skills at commit 8f778d2
(1.2 MB, 269 Markdown files). They are agent instructions, not add-ons; the
pipeline still drives Blender headlessly through bpy, so the optional Blender MCP
server is not required. Provenance recorded in THIRD_PARTY_NOTICES.md and the
version, source, and update procedure in Docs/toolchain.md.
2026-11-06 23:49:19 +01:00
zwitschi bf23a27939 feat: headless Blosm blockout of the demo block
Tools/blosm_blockout.py imports the committed extract in 3Dsimple mode and
reports per-building dimensions so a units failure is visible in the log. The
result (87 meshes) is committed as the blockout baseline: hero 25.68 x 54.88 x
14.50 m against 25.75 x 54.88 m of OSM geometry, so the import is 1:1 metres.

Two headless defects needed working around: the asset-directory check that
fires before mode is honoured, and an empty default-level table sending the
add-on down a broken relative import. Member fetching stays off so the import
does not depend on Overpass.
2026-11-06 23:33:41 +01:00
zwitschi 103042fca7 docs: pin QGIS 4.2.3 and compute the projected origin with PROJ
QGIS stable is 4.2.3 on the current KDE runtime; the stale 3.28.9 lts install
stays flagged for removal. PROJ 9.9.0 from that flatpak turns the recorded
origin into E 376515.389 / N 3774224.083 (NAD83 UTM 11N), with six control
points whose projected spans reproduce the OSM footprint measurements. Engine
decision recorded: 5.8.4 is downloading, 5.2.0 stays only as a fallback.
2026-11-06 22:58:06 +01:00
zwitschi 1c476e4fb5 docs: verify the downloaded Unreal archive and record the 5.2.0 pin conflict
The archive on disk is Unreal Engine 5.2.0 (CL 25360045, payload dated
2023-05-06), 19.59 GiB, ZIP central directory present and unzip -tq clean.
That contradicts the planned 5.8.x pin, so the decision, its costs, and the
extraction plan are written into Docs/setup.md rather than silently pinned.
2026-11-06 22:52:05 +01:00
zwitschi 65fb3759c9 geo: measure block elevation and pick the DEM source
Probe 22 points with the USGS 3DEP point service: walkable surfaces span
115.65-119.59 m, a 3.94 m relief, so elevation data is required by the AGENTS
rule. Grade falls ~3.3 m eastward over the 279 m block (1.2%) and the north
sidewalk sits 0.4-0.7 m above the south. 3DEP 1 m is public domain and becomes
the chosen source; the tile itself is still to be downloaded.

Factored the shared OSM helpers into Geo/scripts/osm_common.py so the street
profile and the elevation probe read the same geometry.
2026-11-06 22:43:13 +01:00
zwitschi 7a1eb0be66 chore: keep reference photography local and out of the repository
Reference images are development-only material: licensing is not a gate for
local private use, so they are simply never committed. Art/reference/ is now
gitignored; the licensed status of anything shipped is still recorded in
THIRD_PARTY_NOTICES.md.

Adds Tools/commons_fetch.py, which fetches Wikimedia Commons imagery by search
or exact title and writes a provenance sidecar, plus Docs/reference-notes-hollywood.md
recording what each local set is evidence for.
2026-11-06 22:04:37 +01:00
zwitschi 737e16e7db geo: add block extract, boundary verification, and the carried-over reference set
Inventory the sibling security-game project and copy only the evidence: nine
licensed photos with their sidecar provenance into Art/reference/hollywood/,
now LFS-tracked. Add the block-wide OSM extract with a manifest, resolve the
demo bounds (Orange Dr -118.341434 .. Highland Ave -118.338718, 279 m) and the
south/north building sets, and add Geo/scripts/block_report.py to reproduce it.

The sibling docs place the El Capitan Theatre west of 6840; OSM geometry and
the house numbering put it east. Recorded with the two unresolved measurement
conflicts rather than averaged.
2026-11-06 21:47:29 +01:00
zwitschi 8c73d16a39 docs: record git-lfs/clang/cmake/ninja install and flag the stale QGIS flatpak
git-lfs 3.7.1 with an active lfs filter, clang 23.1.4, cmake 4.3.0, ninja
1.13.2. The flathub lts branch installed QGIS 3.28.9 on an EOL Qt5 runtime, so
it is recorded as an invalid pin with the replacement path.
2026-11-06 21:41:16 +01:00
zwitschi ea0cb53a36 docs: confirm Vulkan device enumeration and close the Bazzite setup check
vulkaninfo names GPU0 as the discrete RTX 5070 Ti (NVIDIA 615.78.08, API
1.4.351), with the RADV iGPU as GPU1 and llvmpipe as GPU2. Note the device
selection risk for the engine and mark the ROADMAP environment item done.
2026-11-06 21:30:32 +01:00
zwitschi 3363c2e3f0 docs: record post-reboot environment and GPU verification
Deployment 45.20261105 booted (kernel 7.2.15-ogc1.1.fc45). Operator nvidia-smi
confirms the RTX 5070 Ti renders the Wayland session on driver 615.78.08;
vulkaninfo loads instance 1.4.350 but the physical-device line was not captured.
Tooling gaps after the update are listed as current state.
2026-11-06 21:28:12 +01:00
zwitschi e95ba033be docs: correct the LFS trap and add Tools/check-lfs.sh
The lfs filter is inactive until 'git lfs install' writes filter.lfs.*, and a
matched file is then stored as a plain blob without any warning. Document that
instead of the wrong claim that git add fails, and add a guard script.
2026-11-06 21:21:32 +01:00
zwitschi eceaff1397 chore: scaffold repository and record 0.1.0 setup state
Create Game/, Art/, Geo/, Tools/, Docs/ with LFS and ignore rules, record the
workstation audit, toolchain pins, setup checklist, release checks, and
licensing policy. ROADMAP 0.1.0 environment tasks marked to match verified state.
2026-11-06 21:20:57 +01:00