diff --git a/AGENTS.md b/AGENTS.md index 64b3c75..473577b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,6 @@ # AGENTS.md -Instructions and living roadmap for autonomous agents, AI coding assistants, and contributors working on this repository. +Working rules for autonomous agents, AI coding assistants, and contributors. Planned work is tracked in **[TODO.md](TODO.md)**; development direction is in **[ROADMAP.md](ROADMAP.md)**. ## Project Goal @@ -69,7 +69,7 @@ Always use a consistent scale test, named export presets, and repeatable import `.agents/skills/blender-skills/` holds 94 Blender skill packs (MIT, blender-skills 1.3.0). They are agent instructions, not add-ons, and nothing in the pipeline depends on them. -**All agents must consult the relevant skill packs before starting a task in that discipline.** Each patch section in `ROADMAP.md` lists its suggested skills; the general mapping is: +**All agents must consult the relevant skill packs before starting a task in that discipline.** Each patch section in `TODO.md` lists its suggested skills; the general mapping is: - **Modeling / procedural assets** — `blender-modeler`, `procedural-modeling`, `geometry-nodes`, `hard-surface`. - **Façades and architecture** — `archviz`, `historical-worlds` (1920s Hollywood Blvd direction), `realistic-style`. @@ -105,19 +105,22 @@ Any change that affects the game's appearance — meshes, materials, lighting, l New content that needs a different camera angle gets a new entry in the shot list in `Tools/ue_build_review_map.py`. -## Roadmap +## Roadmap and TODO -The living roadmap with per-version task checklists is in **[ROADMAP.md](ROADMAP.md)**. +The two files have separate roles: -- `ROADMAP.md` is the single, central TODO and progress list for all agents. Put planned work and actionable follow-ups there rather than creating parallel task lists. -- When working on a level-three (`###`) section, append ` - active - ` to its heading, using your current session ID. Remove the suffix when you stop working on that section. Mark checklist items currently being worked on `- [-]` or `- [~]`; update the marks as their status changes. -- Planned work is listed as checkbox items in `ROADMAP.md`, marked **open** (`- [ ]`), **in progress/active** (`- [-]` or `- [~]`), or **done** (`- [x]`). Keep the marks accurate. +- **[TODO.md](TODO.md)** is the single, central task list for all agents: checkbox items, progress marks, and active-section ownership. Put all planned actionable work and follow-ups there. Do not create parallel task lists elsewhere. +- **[ROADMAP.md](ROADMAP.md)** holds the development plan: milestone goals, scope, decisions, and release gates for each version. It is a planning document and contains **no checkbox items**. Read it for future direction; record scope changes there as prose, and record the resulting tasks in `TODO.md`. + +Rules for `TODO.md`: + +- Mark items **open** (`- [ ]`), **in progress/active** (`- [-]` or `- [~]`), or **done** (`- [x]`). Keep the marks accurate. +- When working on a level-three (`###`) section, append `- active - ` to its heading, using your current session ID. Remove the suffix when you stop working on that section. Mark the items you are working on `- [-]` or `- [~]`. - Existing in-progress marks can describe unfinished work, not necessarily a live session; use the active heading and assignment details to identify current ownership. - -- Each version is a `##` heading; task groups are `###` headings with `- [ ]` steps (`[-]` in progress, `[x]` done). -- When **all** steps in a version section are done: write a short descriptive entry to `CHANGELOG.md`, then remove the version section from `ROADMAP.md` to keep it concise. +- Each version is a `##` heading; task groups are `###` headings with `- [ ]` steps. +- When **all** steps in a version section are done: write a short descriptive entry to `CHANGELOG.md`, remove the version section from `TODO.md`, and leave its goal in `ROADMAP.md`. +- Release checks for each version are listed at the end of its `TODO.md` section; `Docs/release-checks.md` defines the checks themselves. If a check fails, do not tag the release; open a patch task in `TODO.md` and report the failing check in `CHANGELOG.md`. - Finish each milestone's release checks **before** expanding scope. Cut map size and simulation complexity before compromising the core walking/driving experience. -- Define the release checks in `Docs/release-checks.md`. If a check fails, do not tag the release; open a patch task in `ROADMAP.md` and report the failing check in `CHANGELOG.md`. ## Git workflow @@ -125,9 +128,9 @@ Every agent works on a dedicated git branch. **Never commit work directly to `ma Before starting any task: -1. **Scan `ROADMAP.md`** and pick a task — a level-three (`###`) section — to work on. Prefer sections that are already active (they may be yours) or open items in sections that are not owned by another agent. Check the active heading and assignment details to identify ownership. +1. **Scan `TODO.md`** and pick a task — a level-three (`###`) section — to work on. Use `ROADMAP.md` for the goal and scope of the version you are working in. Prefer sections that are already active (they may be yours) or open items in sections that are not owned by another agent. Check the active heading and assignment details to identify ownership. 2. **Create a branch** for that task from the current `main`: `git checkout -b -` (e.g. `git checkout -b facade-hero-0.1.4`). One branch per task; do not stack unrelated tasks on one branch. -3. **Record the active branch in the heading** of the section you are working on in `ROADMAP.md`: append ` - active - ` (and, if useful, the branch name) to the level-three heading. This is the only way other agents can see that work is in progress on this section. +3. **Record the active branch in the heading** of the section you are working on in `TODO.md`: append `- active - ` (and, if useful, the branch name) to the level-three heading. This is the only way other agents can see that work is in progress on this section. 4. **Commit changes often** on that branch — small, focused commits with clear messages. Do not accumulate large uncommitted changes. 5. **Push to remote when a checklist item is done** — each completed `- [x]` item in that section should be committed and pushed. This keeps the remote state visible and makes progress recoverable. 6. When the section is complete, report the branch, changes, checks, and unresolved issues to the coordinator for integration (see *Parallel agent workflow* below). Do not merge into `main` yourself unless authorized. @@ -135,18 +138,18 @@ Before starting any task: **Branch hygiene:** - Branch from the current `main` revision, not from a stale local checkout. -- Keep `ROADMAP.md` checkbox updates on your branch — they are part of the work. +- Keep `TODO.md` checkbox updates on your branch — they are part of the work. - If a task needs a different camera angle, or affects visual review, follow the *Visual review* section before pushing. -- If a task is abandoned, remove the ` - active - ` suffix from the heading in `ROADMAP.md` and leave the branch for the coordinator to clean up. +- If a task is abandoned, remove the `- active - ` suffix from the heading in `TODO.md` and leave the branch for the coordinator to clean up. ## Parallel agent workflow -- Designate one coordinator to serialize assignments, updates to the shared roadmap, and integration into `main`. Agree on task and file or asset ownership before work starts; avoid assigning the same section or binary asset to multiple agents at once. -- The coordinator records the session ID, branch name, and owned files or assets alongside the active roadmap section and items on the shared `main` coordination copy. Publish and synchronize this state through the remote when agents use different machines. Branch-local changes are not visible to other worktrees until integrated; the roadmap is not an atomic lock. +- Designate one coordinator to serialize assignments, updates to the shared `TODO.md`, and integration into `main`. Agree on task and file or asset ownership before work starts; avoid assigning the same section or binary asset to multiple agents at once. +- The coordinator records the session ID, branch name, and owned files or assets alongside the active `TODO.md` section on the shared `main` coordination copy. Publish and synchronize this state through the remote when agents use different machines. Branch-local changes are not visible to other worktrees until integrated; `TODO.md` is not an atomic lock. - For parallel implementation, use a separate branch and Git worktree per agent, based on the agreed `main` revision. Do not switch branches in a directory another agent is using. Create branches, commits, pushes, and merges only when authorized; never overwrite another agent's uncommitted work. - Keep ignored local references, generated files, build outputs, and Unreal editor processes in mind: worktrees do not automatically share ignored files, and shared output paths or concurrent editors can collide. Arrange required inputs and isolated outputs before running tools. - Blender and Unreal binary assets cannot be meaningfully merged like text. Give each asset one owner; use Git LFS locks when supported by the remote, but do not assume locking is available. -- When work is ready, report the branch, changes, checks, unresolved issues, and relevant memory findings to the coordinator. Review and integrate branches into `main` one at a time, reconcile roadmap and memory changes, and update ownership and status. Follow the visual review and user-approval requirements before marking visual work done. +- When work is ready, report the branch, changes, checks, unresolved issues, and relevant memory findings to the coordinator. Review and integrate branches into `main` one at a time, reconcile `TODO.md` and memory changes, and update ownership and status. Follow the visual review and user-approval requirements before marking visual work done. ## Memory @@ -155,8 +158,8 @@ Before starting any task: - discover a fact about the environment, a tool, or a data source that cost time to establish; - hit a gotcha, trap, or surprising failure mode, and what actually caused it; - find or fix a bug, and how it was found so it can be found again; -- make a decision that does not fit a `ROADMAP.md` checkbox, such as a workaround, an assumption, or a rejected approach and why. +- make a decision that does not fit a `TODO.md` item, such as a workaround, an assumption, or a rejected approach and why. Record scope or direction decisions in `ROADMAP.md` as prose. -Keep entries short and dated, with the evidence: the command, the log line, or the file path. Anything that belongs in a formal document (setup steps, tool versions, licensing) goes in `Docs/` as well — memory is for coordination, not a replacement for the record. Do not let `MEMORY.md` become a second roadmap: planned work stays in `ROADMAP.md`. +Keep entries short and dated, with the evidence: the command, the log line, or the file path. Anything that belongs in a formal document (setup steps, tool versions, licensing) goes in `Docs/` as well — memory is for coordination, not a replacement for the record. Do not let `MEMORY.md` become a second task list: planned work stays in `TODO.md`, and development direction stays in `ROADMAP.md`. Memory edits on an agent's branch are not shared live. Communicate important findings to the coordinator during work and reconcile them into the shared `main` copy when integrating. diff --git a/Docs/release-checks.md b/Docs/release-checks.md index bc77de0..3f1df17 100644 --- a/Docs/release-checks.md +++ b/Docs/release-checks.md @@ -1,6 +1,6 @@ # Release checks -Every version in `ROADMAP.md` ends with release checks. A version is not tagged until all of its checks pass. If a check fails, do not tag; open a patch task in `ROADMAP.md` and report the failing check in `CHANGELOG.md`. +Every version in `TODO.md` ends with release checks, and the scope and goal of each version are in `ROADMAP.md`. A version is not tagged until all of its checks pass. If a check fails, do not tag; open a patch task in `TODO.md` and report the failing check in `CHANGELOG.md`. Record results in the table at the end of this file, with the date, the exact build under test, and the evidence (screenshot, log, or command output). A check without recorded evidence counts as failed. @@ -31,7 +31,7 @@ Measured at 1440p on the development workstation: Bazzite, Ryzen 7 7700X, 64 GB 5. Fresh checkout builds against the documented external engine installation. 6. Linux build packaged and launched; controls documented in `Docs/` and shown in-game. 7. Geographic attribution is visible in-game: "© OpenStreetMap contributors" with a working licence link. -8. Tag `v0.1.0`, write the `CHANGELOG.md` entry, then remove the completed section from `ROADMAP.md`. +8. Tag `v0.1.0`, write the `CHANGELOG.md` entry, then remove the completed section from `TODO.md` (its goal stays in `ROADMAP.md`). ## Check-record template diff --git a/Docs/setup.md b/Docs/setup.md index 6d85ae7..c8ab35b 100644 --- a/Docs/setup.md +++ b/Docs/setup.md @@ -1,6 +1,6 @@ # Setup -Ordered procedure for bringing the workstation and the project to a buildable state. Status markers follow `ROADMAP.md`: +Ordered procedure for bringing the workstation and the project to a buildable state. Status markers follow `TODO.md`: - `[x]` done and verified - `[-]` started, not finished @@ -21,7 +21,7 @@ Anything marked **human step** needs credentials, licence acceptance, or a decis | 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 (attribution display, lighting, crossing) and the El Capitan Theatre, then the planned patches. Current board is [ROADMAP.md](../ROADMAP.md). +Next: `0.1.0` gameplay (attribution display, lighting, crossing) and the El Capitan Theatre, then the planned patches. Current task list is [TODO.md](../TODO.md); version direction is in [ROADMAP.md](../ROADMAP.md). ## 1. System diff --git a/Geo/README.md b/Geo/README.md index db50197..ba4dcd6 100644 --- a/Geo/README.md +++ b/Geo/README.md @@ -42,4 +42,4 @@ WGS84 (lat, lon) → EPSG:26911 (E, N metres) → project-local metres → Unrea The extract, both El Capitan footprints, the demo bounds, the building sets, the street profile, cross-sections, and the 3DEP DEM window are recorded in `Geo/verification/` and `Geo/manifests/`. The local CRS and origin are fixed in `manifests/local-origin.md`. -Open items live in `ROADMAP.md` under **Geographic data**. +Open items live in `TODO.md` under **Geographic data**. diff --git a/MEMORY.md b/MEMORY.md index 23b305c..1989645 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -2,7 +2,7 @@ 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](ROADMAP.md); formal setup, pins, and licensing live in [Docs/](Docs/). +Scope: facts and traps that cost time to establish. Planned work lives in [TODO.md](TODO.md); development direction lives in [ROADMAP.md](ROADMAP.md); formal setup, pins, and licensing live in [Docs/](Docs/). --- diff --git a/README.md b/README.md index 8d72eb6..4d87f00 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A Linux-first Unreal Engine game about walking and driving through a real city. `0.1.0` is in progress. The workstation, engine, geo pipeline and project bootstrap are done and verified; a walkable `DemoMap` exists with terrain, street, sidewalks, kerbs and the hero façade placed from measured coordinates. Façades are still blockouts, and materials are flat colours — both are planned patches. -Current state is in [ROADMAP.md](ROADMAP.md); what was learned the hard way is in [MEMORY.md](MEMORY.md). +Current tasks are in [TODO.md](TODO.md) and the development plan is in [ROADMAP.md](ROADMAP.md); what was learned the hard way is in [MEMORY.md](MEMORY.md). ## Layout @@ -31,7 +31,8 @@ The engine is installed outside the repository and pinned in [Docs/toolchain.md] ## Documents -- [ROADMAP.md](ROADMAP.md) — living task list, source of truth for progress +- [TODO.md](TODO.md) — living task list, source of truth for progress +- [ROADMAP.md](ROADMAP.md) — development plan: milestone goals, scope, and release gates - [MEMORY.md](MEMORY.md) — shared session memory: discoveries, traps, decisions - [AGENTS.md](AGENTS.md) — contributor and agent rules - [PLAN.md](PLAN.md) — scope, stack, release policy, timeline diff --git a/ROADMAP.md b/ROADMAP.md index f2c2b71..c2a8652 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,6 +1,6 @@ # ROADMAP.md -Living roadmap for this project. This file is the single source of truth for current progress. +Development roadmap for this project: milestone goals, scope, decisions, and release gates. Actionable tasks, claims, and progress marks live in [TODO.md](TODO.md). ## Status at a glance — 2026-11-07 09:45 @@ -16,482 +16,172 @@ Workstation, geo pipeline, and engine validation are done. The art pipeline has | Reference | 72 images local, uncommitted; hero entrance located; inherited eight-step claim overturned | | Unreal project | bootstrap complete: C++ project builds, blank Linux build packaged + launch-tested, scale test and MPFB skeletal character accepted | -**Next up:** model the hero façade and block frontage from the reference set, then first-person traversal on the site terrain. **Release gate:** `v0.1.0` is tagged only on the owner's explicit go-ahead once the release checks pass — not automatically when the checkboxes close. +**Next up:** model the hero façade and block frontage from the reference set, then first-person traversal on the site terrain (tasks in [TODO.md](TODO.md)). **Release gate:** `v0.1.0` is tagged only on the owner's explicit go-ahead once the release checks pass — not automatically when the TODO items close. **Open decision:** whether shipped builds carry a derived OSM database (ODbL posture). ## 0.1.0 — Local setup and walkable Hollywood block (weeks 1–6) -### Environment setup +**Goal:** a walkable exterior demo around 6840 Hollywood Blvd / El Capitan Entertainment Centre, built on verified geography, in one shared coordinate frame, and validated on the Linux workstation. Setup details are in [Docs/setup.md](Docs/setup.md) and pins in [Docs/toolchain.md](Docs/toolchain.md). -Status detail in [Docs/setup.md](Docs/setup.md); pins in [Docs/toolchain.md](Docs/toolchain.md). The workstation audit is local only. +**Environment and bootstrap (complete):** the Bazzite workstation, Unreal 5.8.4 (headless and Vulkan GUI launch), the system clang toolchain, and the pinned Blender, MPFB, Blosm, and QGIS versions are in place. The C++ project builds, a blank Linux build packages and launches, and two content-acceptance tests pass: the static-mesh scale test (1 m = 100 cm, axis mapping east → +X, north → −Y, up → +Z) and the MPFB skeletal character import. -- [x] Update Bazzite using its supported mechanism; verify NVIDIA driver and Vulkan operation. -- [x] Register an Epic account and accept the Unreal license; obtain a pinned Linux engine build or build from Epic's authorized source repository. -- [x] Validate Unreal runs on Bazzite before asset production (not an officially supported distribution). 2026-11-07: headless `-NullRHI` smoke test **and** full editor GUI launch with the Vulkan RHI passed — device `NVIDIA GeForce RTX 5070 Ti`, Vulkan loader 1.4.350, `VULKAN_SM5`, map check 0 errors. Only benign log noise (Android Turnkey status, telemetry DNS failures). -- [x] Install the engine-required compiler/SDK, Git, Git LFS, and an editor; use Distrobox for isolated CLI dependencies where useful. clang 23.1.4 / cmake 4.3.0 / ninja 1.13.2 installed; this engine build bundles no Linux clang, so the system compiler is the toolchain. **Accepted 2026-11-07:** the first C++ game-module compile and link (`libUnrealEditor-GigLine.so`) succeeded with system clang. -- [x] Pin Blender, MPFB, Blosm, and QGIS versions; confirm add-on compatibility; record in `docs/toolchain.md`. Done: Blender 5.2.0 LTS, MPFB 2.0.18, Blosm 2.7.28, QGIS 4.2.3 with PROJ 9.9.0 (stale `lts` removed 2026-11-07), Unreal 5.8.4 finalized as pin after the editor GUI launch. -- [x] Create repository structure (`Game/`, `Art/`, `Geo/`, `Tools/`, `Docs/`) with LFS tracking and ignore rules applied. -- [x] Keep project and Derived Data Cache on SSD storage; reserve several hundred GB for engine, assets, caches, builds. +**Geographic data (complete, with blockout detail open):** the OSM extract, address, footprints, demo bounds, EPSG:26911 frame with a recorded origin, and the 3DEP 1 m DEM are verified and committed. The meter→centimetre conversion lives in one function, and every exporter must call it. Block buildings still need height data for three placeholders and cleaning or detailing of the Blosm blockout. -### Project bootstrap +**Review and character (decision):** the review scene is the staging used for all visual approval. Its scope is the character's ground contact, the camera list, and the façade detail shots, and nothing in asset production or gameplay continues past it until these shots pass. The shot list is in `Screenshots/README.md`. Coordinator decision 2026-11-07: **`0.1.0` ships first-person only**, a capsule with a camera and no visible player body. The MPFB character asset (idle pose, warm skin) is the template for later **NPCs** (`0.2.0` body/camera toggle, `0.5.0` pedestrians). It stays a standalone character prefab, not wired into the `AGigLineCharacter` pawn. -- [x] Create a C++ Unreal project with Blueprint gameplay iteration and Enhanced Input. Created 2026-11-07 at `Game/GigLine/GigLine.uproject` (primary game module + default game mode, Enhanced Input plugin + input classes in `Config/DefaultInput.ini`); `GigLineEditor` target compiles clean with system clang (UBT: Result Succeeded). -- [x] Package and launch a blank Linux build. 2026-11-07: UAT `BuildCookRun` (cook + build + stage + pak, Development config) succeeded in 56 s; 1.1 GiB archive at `/run/media/system/DATA/Builds/GigLine` (outside the repo, uncommitted). `GigLine.sh` launched on the desktop session, created a Vulkan swapchain, and rendered 759 frames across a 60 s test. Known minor: one handled `PSOPrecache` ensure fires at exit only; not blocking, watch it in `0.1.x`. -- [x] Export one static mesh from Blender and import into Unreal; verify scale and materials. 2026-11-07: calibration scene (three 1 m cubes at origin / +10 m east / +10 m north) exported from Blender with preset `ue_metric_v1` (`Tools/scale_test_export.py`) and imported headless via `Tools/ue_scale_test_import.py`. Measured in UE: cubes exactly 100.00 cm, origin preserved, material imported. Axis mapping: **east → +X, north → −Y, up → +Z** (the Y mirror is inherent to the right-handed→left-handed conversion; importer handles winding). -- [x] Export one MPFB character with baked materials and deform skeleton; verify import. 2026-11-07: MPFB 2.0.18 generated human (19 158 verts, 1.66 m tall) + standard rig with weights (137 bones) + v2 skin baked to a 1024² diffuse texture (`Tools/mpfb_character_export.py`, export preset `ue_character_v1`). Imported headless (`Tools/ue_character_import.py`) into `/Game/Test/Character`: `SkeletalMesh` + 138-bone `Skeleton` + `Material` with the baked `Texture2D` assigned to slot 0. Quirks recorded: 5.8 Interchange skips materials for skeletal FBX imports (finished in script); Blender 5.2 dropped the FBX `armature_nla` option; the baked image needs `image.filepath` set for FBX to reference it. -- [x] Document initial setup in `Docs/`: engine install, project checkout, fresh-checkout build procedure. 2026-11-07: `Docs/setup.md` reconciled with reality (all engine/bootstrap items marked done with evidence); `Docs/build.md` completed with the fresh-checkout build, packaging, and headless-content-check procedures plus known engine quirks. +**Asset production:** the scale test and the `ue_metric_v1` export and import presets are established. The hero façade first pass is built and screenshot-approved; the north-side buildings (TCL Chinese Theatre, Madame Tussaud's) are staged. Open: reference collection for the door recess and the night frame, the surrounding block frontage, sidewalks, roads and collision, and materials for all assets. -### Geographic data +**Gameplay:** first-person movement, mouse look, pause, and reset are implemented. The walkable demo map is built but has not been checked by hand. Open: the designated crossing, daytime lighting and ambience, and the geographic attribution display. -Tools ported 2026-11-07: every geographic script now lives in `Geo/tools/` with `Geo/README.md` listing its purpose, and the Blender-side builders moved next to their outputs in `Art/blender/*/`, importing the shared helpers and the single unit conversion from `Geo/tools/osm_common.py`. +**Publication:** history is rewritten, secrets are scanned, and LFS support is validated. The ODbL review for shipped derivative databases is open, and it is also the open decision noted above. -| Tool | Purpose | -| --- | --- | -| `osm_common.py` | parse `.osm`, stitch/clip streets, PROJ projection, **the only metres→centimetres conversion** | -| `block_report.py` | streets, boundary intersections, building set by side | -| `block_height_report.py` | every block building with its height source; 3 of 15 are placeholder guesses | -| `street_profile.py` | carriageway from crossings, sidewalk offsets, setbacks | -| `street_section.py` | DEM cross-sections, crown and gutters | -| `elevation_probe.py` | 3DEP relief sampling | -| `dem_stats.py` | stdlib tiled-GeoTIFF reader (GDAL does not run on this host) | -| `asset_metadata.py` | writes and audits the `.geo.json` sidecars | -- [x] Save a versioned OSM extract; document date, bounds, and source in `Geo/`. -- [x] Acquire separately licensed elevation data if needed. Needed and acquired: USGS 3DEP 1 m DEM in EPSG:26911, public domain, NAVD88, 984 KB committed (`Geo/manifests/2026-11-06-3dep-dem.md`); measured relief 3.94 m. -- [x] Download the 3DEP 1 m DEM for the demo bounds, reproject it to EPSG:26911 with the recorded origin and vertical datum, and record the source, clip bounds, and checksum in `Geo/`. -- [x] In QGIS, set a suitable local projected CRS (e.g. EPSG:26911) and record a local origin. EPSG:26911, origin and projected easting/northing are recorded in `Geo/manifests/local-origin.md` with PROJ 9.9.0 control points; QGIS 4.2.3 is installed for the DEM reprojection step. -- [x] Verify the address, building footprints, and demo boundaries for 6840 Hollywood Blvd against source data. -- [~] Import OSM blockouts through Blosm; clean and detail them in Blender. Imported 2026-11-06 and re-framed to EPSG:26911. Tooling for the cleaning pass is now in `Geo/tools/` (height provenance, block report) and `Art/blender/blockout/blosm_blockout.py`. **Still open:** 3 of 15 block buildings carry no height data and render at a placeholder 6.4 m, roofs and facades are untextured, and Blosm `setupScript` façade styles are unused. Earlier: (`Art/blender/blockout/blockout-2026-11-06.blend`, 86 meshes, scale 1:1 against OSM, re-framed into EPSG:26911 with a 0.0 cm affine residual); cleaning and detailing not started. -- [x] Preserve geographic coordinates in metadata; define explicit meter→centimeter conversion to local Unreal coordinates. Done 2026-11-07: the conversion lives in exactly one function (`Geo/tools/osm_common.py::to_unreal_local`) and every exporter must call it; `.geo.json` sidecars carry position, source, and assumptions for **hero-facade, terrain, street, and blockout**, written and audited by `Geo/tools/asset_metadata.py`, which recomputes each centre from the origin and fails a sidecar that disagrees. Props follow the same schema when they are imported. The frame is defined (`Geo/manifests/local-origin.md`: EPSG:26911, origin Hollywood × Highland, X east / Y north / Z up) and the ×100 conversion is now **verified** by the 2026-11-07 scale test, with the axis mapping recorded (north realizes as UE −Y). Left: build the production export preset for the actual site meshes using these settings. - -### Review scene and player placement - -Owner: this session. Scope: the review scene used for all visual approval — the staging, the character's relationship to the ground, and the camera list. Nothing in `Asset production` or `Gameplay` continues until these pass. - -- [x] Put the character on the ground rather than floating. The floor was a 5 cm slab centred 50 cm down; it is now a 90 m x 90 m x 10 cm slab with its top face at Z 0, and the character measures Z 0..83 cm — feet on the plane (`Screenshots/README.md`). -- [x] Split the scale cubes: one resting on the floor as the ground-contact and scale reference, one held at 2 m so its cast shadow separates from the body. -- [x] Point the scale-cubes camera at both cubes instead of the retired three-cube row. -- [x] **Character placement shot**: `review-03-player-placement` shows the pawn (`AGigLineCharacter`) staged by `Tools/ue_build_review_map.py` with a cube behind it. Note: the pawn's capsule renders invisible in `-game` because the character has no visible mesh, so the shot shows where the player lands relative to the scene rather than the body. -- [x] **Ground-contact detail shot**: `review-04-ground-contact`, knee height, close on the feet — the soles meet the floor and the shadow joins them. -- [x] **Shadow-comparison detail shot**: `review-05-shadow-compare`, both cubes in one frame from a low angle; the floating cube's shadow is detached, the grounded one's touches. -- [x] **Detail shot of the hero façade portals**: `review-06-hero-portals` from 8 m at eye height now fills the frame with all three doorways. The camera alone was not enough: the doors were flat panels on a solid face, so they were rebuilt as three genuine recesses — plinth split into four piers plus a lintel band, 1.2 m reveal, stone jambs and lintels standing 0.10 m proud, three mullions each. Facade bounds are now exactly Z 0..14.50 m; a jamb overhang had been sinking the model 0.15 m into the ground. -- [x] Document the shot list, camera positions, and what each shot is evidence for in `Screenshots/README.md`; nine shots, each with an approval line. -- [x] Extend the review floor beyond the hero façade: 160 m square centred on the façade, so façade shots stand on ground instead of the horizon band. -- [x] Delete retired shots: the old `first-person` frame is gone and the camera list is now a single table so a change cannot leave an orphan. - -### Character development — decision: 0.1.0 is first-person only; NPCs planned later - -Coordinator decision 2026-11-07: **`0.1.0` ships first-person only** — a capsule with a camera, no visible player body. It is **not** a player-avatar blocker for `0.1.0`. - -The MPFB character asset (idle pose + warm skin, done below) is planned as the template for **NPCs** in later milestones (`0.2.0` adds the body/camera toggle; `0.5.0` adds pedestrians). Keep it as a standalone character/prefab rather than wiring it into the `AGigLineCharacter` pawn. Everything here is future/NPC work, not `0.1.0` scope. - -- [x] Give the MPFB character asset a standing idle pose so review and NPC shots show a person, not an A-pose bind. Done: `Tools/mpfb_character_export.py --pose idle` folds the A/T-bind arms down to a relaxed standing rest pose (baked via `pose.armature_apply` before export; `upperarm01.L` rest z −0.71 → −1.91 rad), re-exported, re-imported (138 bones), rendered in `review-01-character`. -- [x] Bake a second skin tone or clothing layer, so the character does not read as a grey mannequin in shots. Done: the v2-skin bake came out **black** and slow at 1024², so we synthesize a warm skin-tone diffuse directly (`Tools/mpfb_character_export.py` `make_diffuse`, with a darker shorts-suggestive bottom band) via a stdlib/numpy PNG writer. Character reads warm, not grey. Screenshot approved (`Screenshots/review-01-character`). -- [ ] (open) Keep the character as a reusable NPC prefab: a visible body, a collision capsule, and a head-height check that the camera does not clip at 1.60 m — for when NPCs/pedestrians are wired in (`0.2.0+`), not the `0.1.0` player. - -### Asset production - -- [x] Establish a consistent scale test, named export presets, and repeatable import settings. Scale test = the three-cube calibration scene (`Art/blender/scaletest/`, regenerable via `Tools/scale_test_export.py`); named export preset `ue_metric_v1` (FBX settings in that script); named import preset `ue_metric_v1` (`FbxImportUI` settings in `Tools/ue_scale_test_import.py`). Both scripts are the templates for production asset export/import. -- [-] Collect reference photography for manual façade work. Local only, never committed: `Art/reference/` is gitignored. **72 images in eleven folders**: hero façades to 4k, the El Capitan Theatre exterior series, premiere-night staging, Ovation Hollywood, the north side, and the Lee Drug neighbour. Gaps largely closed by the Flickr/web-search pass: the hero entrance is now documented (three portals with individual short flights — the inherited "eight steps, 12 m wide" is overturned), and the 6806–6822 retail run appears in an oblique 2013 frame. Still missing: a clean isolated frame of the door recess and a night frame of 6840 itself. -- [x] Download reference photography for the two north-side buildings inside the 50 m buffer — TCL Chinese Theatre (OSM way 424105908, 6925 Hollywood Blvd) and Madame Tussaud's (way 424105889, 6933 Hollywood Blvd). Done 2026-11-06 with `Tools/commons_fetch.py` against the Wikimedia Commons API: eleven frames in the local `Art/reference/north-chinese/` and `Art/reference/north-tussauds/`, provenance in each `sidecar.json`, nothing committed. -- [x] Model hero façade for the El Capitan Entertainment Centre site. **Second pass built 2026-11-07** (proportions recalibrated from the 2009 photograph: entablature 3.4 m, parapet 2.2 m, architrave and cornice bands, square pedestals — the first pass had 5.7 m of blank wall above the capitals and read as a warehouse). **First pass built 2026-11-07** (`Tools/hero_facade_build.py` → `Art/blender/hero/hero-facade-2026-11-07.blend` + JSON part report with evidence per part → `Tools/ue_hero_facade_import.py` → `/Game/Hollywood/ElCapitan/SM_HeroFacade`, 1892 tris, 4 materials, placed on the measured building line). Six columns at 4.96 m over the 25.75 m frontage, plinth, three portal flights (5 risers, not the old 8), entablature 2.2 m, parapet 1.6 m with motto band and medallions. **Screenshot approved** (`Screenshots/review-06` portals, `review-07/08` facade). Next pass: banner and window placement, then materials. -- [ ] Model surrounding block frontage. -- [x] Model simplified background buildings directly across Hollywood Boulevard. Done 2026-11-07, the two in-scope north-side buildings — TCL Chinese Theatre (SM_TCL_Chinese_Theatre) and Madame Tussaud's (SM_Madame_Tussauds) — taken from the verified OSM blockout volumes and exported with `ue_metric_v1`, with a Y-mirror so they land north of Hollywood Blvd across the street from the hero (TCL spans Unreal Y 1802..9431, Tussaud's 1888..7586; road centreline ≈ 0, hero façade at Y −1450). Staged in the DemoMap as `North_TCL_Chinese` / `North_Madame_Tussauds`; demo shot `review-03-demo-north-buildings` captured. Simple flat facade materials (surfaces are the `0.1.4` patch). -- [-] Build sidewalks, roads, and collision meshes. Terrain, road, sidewalks and kerbs exist (`Art/blender/terrain/`, `street/`) and are assembled in `site/site-2026-11-06.blend`; collision and details (crossing markings, kerb radii, aprons) are not built. Ground must follow the DEM: 3.94 m fall along the block, ~2 % crown between the gutters at ±10–11 m from the centreline, north sidewalk higher than south. Kerb height is an unresolved assumption — the DEM does not resolve it (`Geo/verification/2026-11-06-cross-sections.md`). -- [ ] Materials and look development for all exported assets. - -### Gameplay - active - gig-line-gameplay - -- [x] First-person movement, mouse look, and Enhanced Input bindings. Implemented 2026-11-07: `AGigLineCharacter` (C++, 1.75 m capsule, 1.60 m eye camera, 4 m/s walk, mouse look in deg/s, jump) as the default pawn, with five actions and an 11-entry context in `/Game/Input` built by `Tools/ue_create_input_assets.py`. **Not yet confirmed interactively** — launch PIE on `Test/ReviewMap` and walk. Screenshot review pending (`Screenshots/README.md`). -- [~] Collision, reset, and pause functionality. Reset (**R**) and pause (**Escape**, a real game pause that releases the cursor) are implemented in `AGigLineCharacter` with `/Game/Input/IA_Reset` and `IA_Pause`. Collision now exists — terrain, road and sidewalks import as complex-as-simple, so a simple hull cannot ramp over the kerbs. **Not verified by hand**: walk, reset and pause need a human at the keyboard. No pause menu widget yet, only the pause itself. -- [-] Build the walkable demo level: terrain, street, and hero facade assembled into one map with a start point on the north sidewalk, so the demo is something a player can walk rather than a review staging. **Built 2026-11-07** by `Tools/ue_build_demo_map.py` → `/Game/Hollywood/DemoMap`: sun/sky, `Hero_Facade`, six site meshes imported with collision (`Terrain_DEM`, `Road_Hollywood`, both sidewalks and both kerbs), and a `Demo_PlayerStart` on the north sidewalk 20 m back from the frontage. Demo views in `Screenshots/demo/` are ☐ pending review. -- [ ] Walkable sidewalks and a designated street crossing. Crossing chosen: mid-block signalised crossing, OSM way 385648319, at 130 m along the block (`Geo/verification/2026-11-06-street-profile.md`). -- [ ] Fixed daytime lighting and basic ambience. -- [ ] Geographic attribution display ("© OpenStreetMap contributors" + license link). - -### Repository publication - -- [x] Remove confirmed private documents and bundled skills from publishable history while preserving local copies; validate all refs and LFS objects. Rewritten 2026-11-07; original history is in a separate private local backup. -- [x] Scan all reachable Git history and the publication changes with Gitleaks 8.28.0. Removed an Android File Server security token from history and disabled the unused server; the rescans found no leaks. -- [x] Review Unreal asset provenance via the generation/import scripts and inspect all 18 reachable Unreal asset versions for recognizable private-reference paths. No such paths were found; this is not a full binary-content audit. -- [x] Review OSM source distribution notices: original data retains attribution and licence metadata, and the repository links directly to ODbL 1.0. -- [ ] Review ODbL obligations for each shipped derivative database or produced work before public release. -- [x] Validate Gitea LFS support. The first push succeeded on 2026-11-07; a separate clone fetched all 26 historical LFS objects and passed integrity checks. -- [x] Commit and review the publication preparation changes before pushing. Initial publication commit: `101db3f`. - -### Release checks - -- [ ] Player can traverse both sides of the demo without falling through geometry. Blender pre-check passes: 0 raycast holes along both sidewalks and the designated crossing; worst seam step 15.8 cm at the sidewalk's outer edge (`Art/blender/README.md`). Engine traversal still to be tested. -- [ ] Building placement, street scale, and site identity checked against references. -- [ ] No blocking collision or packaging defects. -- [ ] 60 FPS at 1440p on the dev workstation (Bazzite, Ryzen 7 7700X, 64 GB RAM, RTX 5070 Ti 16 GB) using a documented quality preset; record upscaling state; report performance without frame generation. -- [ ] Fresh project checkout builds with the documented external engine installation. -- [ ] Package Linux build with documented controls. -- [ ] Tag `v0.1.0` and write `CHANGELOG.md` entry; then remove this section. +**Release checks:** traversal on both sides of the demo, building placement and street scale checked against references, no blocking collision or packaging defects, 60 FPS at 1440p on the documented preset, a fresh checkout that builds with the documented engine installation, a packaged Linux build with documented controls, and then the `v0.1.0` tag and changelog entry. The detailed checks are tracked in [TODO.md](TODO.md). ## 0.1.1 — Collision fixes (patch) -Planned now, applied after `0.1.0` ships. Collision is not authored yet, so these are the defects already visible in the Blender pre-check; the engine pass will add to this list rather than replace it. - -Suggested blender skills: **collision-proxy** (UCX/UHX naming, convex hulls, simple collider meshes — the core of the authoring pass), **qa-review** (validation checklists, viewport screenshots, ship/no-ship verdicts for the audit), **asset-optimization** (pre-export validation of every collider). Note: these skills assume MCP-driven Blender; use them as method guides for the headless scripts. - -### Patch tasks - -- [ ] **Sidewalk outer edge against terrain.** The pre-check measured a **15.8 cm** step where a walk sample crosses from `Terrain_DEM` onto `Sidewalk_South` (`Art/blender/README.md`, s≈207 m). Mostly hidden by buildings; visible wherever the frontage is missing. Fix by extending the sidewalk mesh to meet the terrain, or by lowering the outer lip. -- [ ] **Crossing ramp gradient.** The kerb-flush transitions measure **10–13 cm over 1.5 m ≈ 10 %**, steeper than the 8 % a real ramp uses (`Geo/tools/street_section.py` output, s≈33, 39, 126 m). Grade the three ramp openings properly. -- [ ] **Collision authoring pass.** None exists yet: on Unreal import, complex-as-simple for terrain and street (walkable surfaces must not be approximated into ramps over kerbs), simple convex hulls per building. Record the settings in `Docs/build.md`. -- [ ] **Kerb height is an assumption.** 0.15 m modelled, 0.13 m as built, and the 3DEP DEM cannot resolve a kerb at all. Check against the photographs and record the final figure. -- [ ] Audit and fix any collision gaps or fall-through geometry found in `0.1.0` in the engine. -- [ ] Regression-test traversal on both sides of the demo. -- [ ] Verify no new packaging defects. -- [ ] Tag `v0.1.1` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix the collision and walkability defects already visible in the Blender pre-check, and add to the list as the engine pass finds more. Scope: the sidewalk outer edge against terrain (15.8 cm step), the crossing ramp gradient (about 10 % against the 8 % a real ramp uses), the collision authoring pass (complex-as-simple for terrain and street, simple hulls per building), the kerb height assumption, and traversal regression tests. Collision authoring uses the `collision-proxy`, `qa-review`, and `asset-optimization` skills as method guides. ## 0.1.2 — Scale and façade corrections (patch) -Suggested blender skills: **references** (reference-image-match and visual-match-checklist templates — measure the guessed heights and colonnade proportions against the photographs), **archviz** (real-world scale and façade composition discipline), **camera-cinematography** (reproduce the reference camera angles when comparing renders to photos). - -### Patch tasks - -- [ ] Correct building scale and street proportions flagged against references. -- [ ] Refine hero façade details where reference photography shows discrepancies. -- [ ] **Replace the placeholder heights.** Three of the fifteen block buildings carry no OSM height and render at a guessed 6.4 m (`Geo/tools/block_height_report.py`). Measure them off the photographs and correct the blockout. -- [ ] Resolve the remaining unknown on the hero: the colonnade currently occupies about 45 % of the height against roughly 50–60 % in the photographs. Fix the vertical proportions. -- [ ] Tag `v0.1.2` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** correct building and street proportions against the reference photography. Scope: the three placeholder heights (guessed at 6.4 m), the hero façade detail, and the colonnade proportion (about 45 % of the height against roughly 50–60 % in the photographs). Use the `references`, `archviz`, and `camera-cinematography` skills. ## 0.1.3 — Packaging and setup fixes (patch) -Suggested blender skills: **export-pipeline** and **unreal-export** (scale/pivot/normals/materials/collision verification) if any packaging defect traces back to the Blender export presets. - -### Patch tasks - -- [ ] Fix any packaging or build issues encountered in `0.1.x`. -- [ ] Update `Docs/` setup instructions for anything that changed. -- [ ] Tag `v0.1.3` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix any packaging or build issues found in `0.1.x` and bring `Docs/` up to date. Patches contain fixes only. If a Blender export preset is at fault, check it with the `export-pipeline` and `unreal-export` skills. ## 0.1.4 — Proper building façades (patch) -Planned explicitly so the shipped blockouts are not mistaken for finished architecture. **The existing geometry is deliberately kept** — this patch replaces surfaces and detail, not footprints or massing. - -Suggested blender skills: **procedural-modeling** + **geometry-nodes** (the façade module kit — bay, pilaster, cornice, parapet, window, shopfront, door — as reusable node groups), **archviz** (real-world scale and façade composition), **materials** (procedural brick, concrete, stone, render, glass — the ported generators), **texture-workflow** (AO/curvature/normal bakes and decals for the motto band and medallions), **uv-workflow** (texel density and modular UV layouts for the kit), **scene-assembly** (assembling kit pieces onto the fifteen block buildings), **lookdev** (screenshot-comparison loop until shading reads correctly), **historical-worlds** or **realistic-style** (1920s Hollywood Blvd neoclassical direction), **asset-optimization** + **unreal-export** (pre-export validation, `ue_metric_v1` preset), **qa-review** (final gate before the `Tools/render_screenshots.sh` review). - -### Patch tasks - -- [ ] **Define the façade module.** One set of reusable pieces (bay, pilaster, cornice, parapet, window, shopfront, door) at a fixed module, exported with the `ue_metric_v1` preset so every building assembles from the same kit. -- [ ] **Replace placeholder materials.** Every blockout building currently carries Blender flat colours. Port the procedural generators from `Tools/sibling_asset_audit.py`'s sibling project (`brick_facade`, `seamless_concrete`, `asphalt`) and add stone, render, and glass, then wire them through Unreal material instances. -- [ ] **Give OSM buildings a façade style.** Blosm exposes `scene.blosm.setupScript` (`setup/neoclassical.py` is the example) so a building can carry a real elevation instead of a plain extrusion. Build one style script for the south frontage and one for the north. -- [ ] **Hero façade detail pass.** Ionic capitals and fluting, the parapet motto band and medallions as geometry or decal, window rhythm behind the colonnade, and the three portal flights at their photographed proportions. -- [ ] **El Capitan Theatre (6838) and the retail neighbours.** Model from the 18-frame 5472×3648 reference set; the theatre shares the measured 4.96 m bay rhythm with the temple. -- [ ] Review every façade change with `Tools/render_screenshots.sh` before tagging. -- [ ] Tag `v0.1.4` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** replace the flat placeholder surfaces on the blockout buildings with real façades, keeping the existing footprints and massing. Scope: a reusable façade module kit (bay, pilaster, cornice, parapet, window, shopfront, door) exported with `ue_metric_v1`; procedural materials (brick, concrete, stone, render, glass) wired through Unreal material instances; Blosm façade style scripts for the south and north frontages; the hero façade detail pass; and El Capitan Theatre (6838) and the retail neighbours from the reference set. Use the façade, materials, UV, and QA skills named in `TODO.md`. ## 0.2.0 — MPFB player body, third-person camera, basic animation (weeks 7–9) -### Character setup - -- [x] Generate MPFB human base mesh; export baked materials and deform skeleton. Done in bootstrap: idle-pose 19 158-vert human with a 137-bone standard rig, `Tools/mpfb_character_export.py` (now `--pose idle` + warm `make_diffuse`). -- [x] Import character into Unreal; validate skeleton, scale, and materials. Done: `/Game/Test/Character` — `SkeletalMesh` (138 bones), `Skeleton`, warm `M_Character_Export` material with baked `T_Character_Diffuse`. -- [ ] Promote the character asset into a reusable NPC prefab (visible body, collision capsule, idle pose) ready for pedestrians (`0.5.0`) once the third-person body lands. -- [ ] Create basic idle/walk animation set. -- [ ] Verify animation plays correctly on the imported rig. - -### Camera and controls - -- [ ] Add third-person camera following the player body. -- [ ] Add first/third-person toggle. -- [ ] Add camera collision to prevent clipping through geometry. -- [ ] Document any input changes. - -### Release checks - -- [ ] Third-person traversal works end-to-end in the demo area. -- [ ] No blocking animation or rig defects. -- [ ] Performance target still met at 1440p. -- [ ] Tag `v0.2.0` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** a visible, animated player body with a third-person camera and a first/third-person toggle, walking end-to-end in the demo area. The MPFB character is promoted to a reusable NPC prefab for `0.5.0`. ## 0.2.1 — Rig fixes (patch) -### Patch tasks - -- [ ] Fix skeletal/rigging defects reported after `0.2.0`. -- [ ] Tag `v0.2.1` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix skeletal and rigging defects reported after `0.2.0`. ## 0.2.2 — Skin and hair tuning (patch) -### Patch tasks - -- [ ] Tune skin shading and hair materials on the player character. -- [ ] Tag `v0.2.2` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** tune skin shading and hair materials on the player character. ## 0.2.3 — Camera clipping fixes (patch) -### Patch tasks - -- [ ] Fix remaining camera clipping cases in `0.2.x`. -- [ ] Tag `v0.2.3` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix the remaining camera clipping cases in `0.2.x`. ## 0.3.0 — Chaos vehicle, enter/exit, closed driving route (weeks 10–13) -### Vehicle production - -- [ ] Model one vehicle in Blender with collision meshes; export to Unreal. -- [ ] Set up Chaos Vehicle with wheel and physics configuration. -- [ ] Implement enter/exit interaction. -- [ ] Build a closed driving route with boundaries. -- [ ] Tune basic handling to a drivable state. - -### Release checks - -- [ ] Player can enter, drive the closed route, and exit without defects. -- [ ] No blocking vehicle collision or packaging defects. -- [ ] Performance target still met at 1440p. -- [ ] Tag `v0.3.0` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** one drivable vehicle with Chaos Vehicle physics, enter and exit interaction, and a closed driving route with boundaries. ## 0.3.1 — Handling tuning (patch) -### Patch tasks - -- [ ] Refine vehicle handling feel based on `0.3.0` feedback. -- [ ] Tag `v0.3.1` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** refine vehicle handling feel based on `0.3.0` feedback. ## 0.3.2 — Vehicle collision fixes (patch) -### Patch tasks - -- [ ] Fix vehicle collision defects (mesh/physics mismatches). -- [ ] Tag `v0.3.2` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix vehicle collision defects (mesh and physics mismatches). ## 0.3.3 — Input fixes (patch) -### Patch tasks - -- [ ] Fix vehicle/character input issues in `0.3.x`. -- [ ] Tag `v0.3.3` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix vehicle and character input issues in `0.3.x`. ## 0.4.0 — Small connected neighborhood and map streaming (weeks 14–17) -### World expansion - -- [ ] Extend geo pipeline to a small connected neighborhood beyond the demo block. -- [ ] Produce modular buildings, sidewalks, and roads for the expanded area. -- [ ] Set up World Partition with streaming cells. -- [ ] Configure HLOD for distant buildings. -- [ ] Verify no seams or popping between streamed cells during traversal. - -### Release checks - -- [ ] Continuous walking (and driving) across the expanded area works. -- [ ] Streaming does not introduce blocking defects. -- [ ] Performance target re-validated at 1440p with streaming active. -- [ ] Tag `v0.4.0` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** extend the geo pipeline to a small connected neighborhood with World Partition streaming and HLOD, with no visible seams while walking or driving across it. ## 0.4.1 — Seam fixes (patch) -### Patch tasks - -- [ ] Fix visible seams between streamed cells. -- [ ] Tag `v0.4.1` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix visible seams between streamed cells. ## 0.4.2 — Streaming corrections (patch) -### Patch tasks - -- [ ] Correct streaming/loading issues found in `0.4.x`. -- [ ] Tag `v0.4.2` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** correct streaming and loading issues found in `0.4.x`. ## 0.4.3 — HLOD tuning (patch) -### Patch tasks - -- [ ] Tune HLOD quality and distance settings. -- [ ] Tag `v0.4.3` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** tune HLOD quality and distance settings. ## 0.5.0 — Pedestrians, crosswalk behavior, ambient traffic (weeks 18–21) -### Simulation - -- [ ] Add pedestrian characters with navigation, reusing the idle-pose character asset as the NPC prefab (`/Game/Test/Character`). -- [ ] Implement crosswalk behavior (pedestrians use the designated crossing). -- [ ] Add limited ambient traffic on the street network. -- [ ] Optimize simulation cost to stay within frame budget. - -### Release checks - -- [ ] Pedestrians and traffic behave without blocking defects. -- [ ] Performance target re-validated at 1440p. -- [ ] Tag `v0.5.0` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** pedestrians that navigate and use the designated crossing, limited ambient traffic on the street network, and simulation cost held within the frame budget. Pedestrians reuse the idle-pose character prefab. ## 0.5.1 — Navigation fixes (patch) -### Patch tasks - -- [ ] Fix pedestrian navigation issues. -- [ ] Tag `v0.5.1` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix pedestrian navigation issues. ## 0.5.2 — Crossing fixes (patch) -### Patch tasks - -- [ ] Fix crosswalk behavior defects. -- [ ] Tag `v0.5.2` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix crosswalk behaviour defects. ## 0.5.3 — Simulation optimization (patch) -### Patch tasks - -- [ ] Optimize pedestrian/traffic simulation cost. -- [ ] Tag `v0.5.3` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** optimize pedestrian and traffic simulation cost. ## 0.6.0 — Visual/audio pass and evening lighting preset (weeks 22–24) -### Look and sound - -- [ ] Create an evening lighting preset. -- [ ] Complete a visual polish pass across the neighborhood. -- [ ] Add ambient audio (city ambience, traffic, basic SFX). -- [ ] Verify licenses for all added audio files. - -### Release checks - -- [ ] Both day and evening presets render without defects. -- [ ] Audio plays without gaps or licensing issues. -- [ ] Performance target re-validated at 1440p. -- [ ] Tag `v0.6.0` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** an evening lighting preset alongside the day preset, a neighbourhood-wide visual polish pass, and ambient audio with verified licences. ## 0.6.1 — Lighting fixes (patch) -### Patch tasks - -- [ ] Fix lighting defects in day/evening presets. -- [ ] Tag `v0.6.1` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix lighting defects in the day and evening presets. ## 0.6.2 — Material corrections (patch) -### Patch tasks - -- [ ] Fix material errors found in `0.6.x`. -- [ ] Tag `v0.6.2` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix material errors found in `0.6.x`. ## 0.6.3 — Audio balancing (patch) -### Patch tasks - -- [ ] Balance audio levels across the scene. -- [ ] Tag `v0.6.3` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** balance audio levels across the scene. ## 0.7.0 — Settings, control rebinding, save/load, accessibility (weeks 25–27) -### Systems - -- [ ] Build settings menu (graphics and audio options). -- [ ] Implement control rebinding with persistence. -- [ ] Implement save/load for player state. -- [ ] Add accessibility basics (e.g. FOV, subtitle, colorblind options as applicable). - -### Release checks - -- [ ] Settings, rebinding, and save/load all persist across restarts. -- [ ] No blocking UI defects. -- [ ] Tag `v0.7.0` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** a settings menu for graphics and audio, control rebinding and save/load that persist across restarts, and accessibility basics (FOV, subtitles, colour-blind options where applicable). ## 0.7.1 — Save fixes (patch) -### Patch tasks - -- [ ] Fix save/load defects. -- [ ] Tag `v0.7.1` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix save and load defects. ## 0.7.2 — UI fixes (patch) -### Patch tasks - -- [ ] Fix UI issues in `0.7.x`. -- [ ] Tag `v0.7.2` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix UI issues in `0.7.x`. ## 0.7.3 — Input persistence fixes (patch) -### Patch tasks - -- [ ] Fix rebinding persistence issues. -- [ ] Tag `v0.7.3` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix rebinding persistence issues. ## 0.8.0 — Performance budgets and broader Linux hardware testing (weeks 28–30) -### Performance - -- [ ] Define performance budgets (frame time, VRAM) and document them. -- [ ] Profile the full neighborhood; fix budget violations. -- [ ] Test on broader Linux hardware and VRAM configurations; document results. -- [ ] Re-validate the 1440p quality preset with upscaling state recorded. - -### Release checks - -- [ ] Performance budgets met on documented hardware matrix. -- [ ] No blocking compatibility defects. -- [ ] Tag `v0.8.0` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** define frame-time and VRAM budgets, profile the full neighbourhood against them, test on a broader Linux hardware and VRAM matrix, and re-validate the 1440p quality preset with the upscaling state recorded. ## 0.8.1 — VRAM reductions (patch) -### Patch tasks - -- [ ] Reduce VRAM usage where profiling shows excess. -- [ ] Tag `v0.8.1` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** reduce VRAM usage where profiling shows excess. ## 0.8.2 — Frame-time fixes (patch) -### Patch tasks - -- [ ] Fix frame-time spikes found in `0.8.x`. -- [ ] Tag `v0.8.2` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix frame-time spikes found in `0.8.x`. ## 0.8.3 — Compatibility fixes (patch) -### Patch tasks - -- [ ] Fix compatibility issues from the hardware testing matrix. -- [ ] Tag `v0.8.3` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix compatibility issues from the hardware testing matrix. ## 0.9.0 — Feature freeze, public beta, license and build audit (weeks 31–34) -### Freeze and audit - -- [ ] Freeze features; document the freeze in `CHANGELOG.md`. -- [ ] Produce a public beta build for testers. -- [ ] Complete license audit: `THIRD_PARTY_NOTICES.md`, all MPFB assets, textures, animations, vehicles, audio. -- [ ] Review ODbL obligations for any distributed derived geographic database. -- [ ] Review Epic distribution requirements before publishing. -- [ ] Verify a fresh checkout builds and packages reproducibly. - -### Release checks - -- [ ] Beta feedback triaged; blockers logged for `0.9.x`. -- [ ] Tag `v0.9.0` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** freeze features, produce a public beta for testers, and complete the audits: licences for `THIRD_PARTY_NOTICES.md` and all MPFB, texture, animation, vehicle, and audio assets; ODbL obligations for any distributed derived database; Epic distribution requirements; and a fresh checkout that builds and packages reproducibly. ## 0.9.1 — Blocker fixes (patch) -### Patch tasks - -- [ ] Fix blockers reported during the public beta. -- [ ] Tag `v0.9.1` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix blockers reported during the public beta. ## 0.9.2 — Regression fixes (patch) -### Patch tasks - -- [ ] Fix regressions introduced by `0.9.x` fixes. -- [ ] Tag `v0.9.2` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** fix regressions introduced by `0.9.x` fixes. ## 0.9.3 — Documentation fixes (patch) -### Patch tasks - -- [ ] Update all `Docs/` for accuracy before `1.0.0`. -- [ ] Tag `v0.9.3` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** update all `Docs/` for accuracy before `1.0.0`. ## 1.0.0 — Stable neighborhood-scale walking/driving release (weeks 35–40) -### Final release - -- [ ] Complete final acceptance sweep across all `0.x` features. -- [ ] Confirm the stable, agreed game scope is met (neighborhood-scale walking and driving). -- [ ] Final build, documentation, and licensing verification. -- [ ] Tag `v1.0.0` and write `CHANGELOG.md` entry; then remove this section. +**Goal:** a final acceptance sweep across all `0.x` features, confirmation that the agreed scope (neighbourhood-scale walking and driving) is met, and final build, documentation, and licensing verification. `1.0.0` marks the stable scope, not completion of a whole city. diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..31b9afa --- /dev/null +++ b/TODO.md @@ -0,0 +1,481 @@ +# TODO.md + +Actionable task list for this project. This file is the single, central place for planned work, claims, and progress marks. Milestone goals, scope, and release gates are in [ROADMAP.md](ROADMAP.md). + +## Conventions + +- `- [ ]` open, `- [-]` or `- [~]` in progress/active, `- [x]` done. Keep marks accurate. +- A level-three (`###`) section being worked on carries ` - active - ` (and optionally the branch name) in its heading. Remove the suffix when you stop. +- When all steps in a version section are done: write a `CHANGELOG.md` entry, then remove the version section from this file. +- Release gate: `v0.1.0` is tagged only on the owner's explicit go-ahead once the release checks pass, not automatically when the checkboxes close. + +## 0.1.0 — Local setup and walkable Hollywood block (weeks 1–6) + +### Environment setup + +Status detail in [Docs/setup.md](Docs/setup.md); pins in [Docs/toolchain.md](Docs/toolchain.md). The workstation audit is local only. + +- [x] Update Bazzite using its supported mechanism; verify NVIDIA driver and Vulkan operation. +- [x] Register an Epic account and accept the Unreal license; obtain a pinned Linux engine build or build from Epic's authorized source repository. +- [x] Validate Unreal runs on Bazzite before asset production (not an officially supported distribution). 2026-11-07: headless `-NullRHI` smoke test **and** full editor GUI launch with the Vulkan RHI passed — device `NVIDIA GeForce RTX 5070 Ti`, Vulkan loader 1.4.350, `VULKAN_SM5`, map check 0 errors. Only benign log noise (Android Turnkey status, telemetry DNS failures). +- [x] Install the engine-required compiler/SDK, Git, Git LFS, and an editor; use Distrobox for isolated CLI dependencies where useful. clang 23.1.4 / cmake 4.3.0 / ninja 1.13.2 installed; this engine build bundles no Linux clang, so the system compiler is the toolchain. **Accepted 2026-11-07:** the first C++ game-module compile and link (`libUnrealEditor-GigLine.so`) succeeded with system clang. +- [x] Pin Blender, MPFB, Blosm, and QGIS versions; confirm add-on compatibility; record in `docs/toolchain.md`. Done: Blender 5.2.0 LTS, MPFB 2.0.18, Blosm 2.7.28, QGIS 4.2.3 with PROJ 9.9.0 (stale `lts` removed 2026-11-07), Unreal 5.8.4 finalized as pin after the editor GUI launch. +- [x] Create repository structure (`Game/`, `Art/`, `Geo/`, `Tools/`, `Docs/`) with LFS tracking and ignore rules applied. +- [x] Keep project and Derived Data Cache on SSD storage; reserve several hundred GB for engine, assets, caches, builds. + +### Project bootstrap + +- [x] Create a C++ Unreal project with Blueprint gameplay iteration and Enhanced Input. Created 2026-11-07 at `Game/GigLine/GigLine.uproject` (primary game module + default game mode, Enhanced Input plugin + input classes in `Config/DefaultInput.ini`); `GigLineEditor` target compiles clean with system clang (UBT: Result Succeeded). +- [x] Package and launch a blank Linux build. 2026-11-07: UAT `BuildCookRun` (cook + build + stage + pak, Development config) succeeded in 56 s; 1.1 GiB archive at `/run/media/system/DATA/Builds/GigLine` (outside the repo, uncommitted). `GigLine.sh` launched on the desktop session, created a Vulkan swapchain, and rendered 759 frames across a 60 s test. Known minor: one handled `PSOPrecache` ensure fires at exit only; not blocking, watch it in `0.1.x`. +- [x] Export one static mesh from Blender and import into Unreal; verify scale and materials. 2026-11-07: calibration scene (three 1 m cubes at origin / +10 m east / +10 m north) exported from Blender with preset `ue_metric_v1` (`Tools/scale_test_export.py`) and imported headless via `Tools/ue_scale_test_import.py`. Measured in UE: cubes exactly 100.00 cm, origin preserved, material imported. Axis mapping: **east → +X, north → −Y, up → +Z** (the Y mirror is inherent to the right-handed→left-handed conversion; importer handles winding). +- [x] Export one MPFB character with baked materials and deform skeleton; verify import. 2026-11-07: MPFB 2.0.18 generated human (19 158 verts, 1.66 m tall) + standard rig with weights (137 bones) + v2 skin baked to a 1024² diffuse texture (`Tools/mpfb_character_export.py`, export preset `ue_character_v1`). Imported headless (`Tools/ue_character_import.py`) into `/Game/Test/Character`: `SkeletalMesh` + 138-bone `Skeleton` + `Material` with the baked `Texture2D` assigned to slot 0. Quirks recorded: 5.8 Interchange skips materials for skeletal FBX imports (finished in script); Blender 5.2 dropped the FBX `armature_nla` option; the baked image needs `image.filepath` set for FBX to reference it. +- [x] Document initial setup in `Docs/`: engine install, project checkout, fresh-checkout build procedure. 2026-11-07: `Docs/setup.md` reconciled with reality (all engine/bootstrap items marked done with evidence); `Docs/build.md` completed with the fresh-checkout build, packaging, and headless-content-check procedures plus known engine quirks. + +### Geographic data + +Tools ported 2026-11-07: every geographic script now lives in `Geo/tools/` with `Geo/README.md` listing its purpose, and the Blender-side builders moved next to their outputs in `Art/blender/*/`, importing the shared helpers and the single unit conversion from `Geo/tools/osm_common.py`. + +| Tool | Purpose | +| --- | --- | +| `osm_common.py` | parse `.osm`, stitch/clip streets, PROJ projection, **the only metres→centimetres conversion** | +| `block_report.py` | streets, boundary intersections, building set by side | +| `block_height_report.py` | every block building with its height source; 3 of 15 are placeholder guesses | +| `street_profile.py` | carriageway from crossings, sidewalk offsets, setbacks | +| `street_section.py` | DEM cross-sections, crown and gutters | +| `elevation_probe.py` | 3DEP relief sampling | +| `dem_stats.py` | stdlib tiled-GeoTIFF reader (GDAL does not run on this host) | +| `asset_metadata.py` | writes and audits the `.geo.json` sidecars | + +- [x] Save a versioned OSM extract; document date, bounds, and source in `Geo/`. +- [x] Acquire separately licensed elevation data if needed. Needed and acquired: USGS 3DEP 1 m DEM in EPSG:26911, public domain, NAVD88, 984 KB committed (`Geo/manifests/2026-11-06-3dep-dem.md`); measured relief 3.94 m. +- [x] Download the 3DEP 1 m DEM for the demo bounds, reproject it to EPSG:26911 with the recorded origin and vertical datum, and record the source, clip bounds, and checksum in `Geo/`. +- [x] In QGIS, set a suitable local projected CRS (e.g. EPSG:26911) and record a local origin. EPSG:26911, origin and projected easting/northing are recorded in `Geo/manifests/local-origin.md` with PROJ 9.9.0 control points; QGIS 4.2.3 is installed for the DEM reprojection step. +- [x] Verify the address, building footprints, and demo boundaries for 6840 Hollywood Blvd against source data. +- [~] Import OSM blockouts through Blosm; clean and detail them in Blender. Imported 2026-11-06 and re-framed to EPSG:26911. Tooling for the cleaning pass is now in `Geo/tools/` (height provenance, block report) and `Art/blender/blockout/blosm_blockout.py`. **Still open:** 3 of 15 block buildings carry no height data and render at a placeholder 6.4 m, roofs and facades are untextured, and Blosm `setupScript` façade styles are unused. Earlier: (`Art/blender/blockout/blockout-2026-11-06.blend`, 86 meshes, scale 1:1 against OSM, re-framed into EPSG:26911 with a 0.0 cm affine residual); cleaning and detailing not started. +- [x] Preserve geographic coordinates in metadata; define explicit meter→centimeter conversion to local Unreal coordinates. Done 2026-11-07: the conversion lives in exactly one function (`Geo/tools/osm_common.py::to_unreal_local`) and every exporter must call it; `.geo.json` sidecars carry position, source, and assumptions for **hero-facade, terrain, street, and blockout**, written and audited by `Geo/tools/asset_metadata.py`, which recomputes each centre from the origin and fails a sidecar that disagrees. Props follow the same schema when they are imported. The frame is defined (`Geo/manifests/local-origin.md`: EPSG:26911, origin Hollywood × Highland, X east / Y north / Z up) and the ×100 conversion is now **verified** by the 2026-11-07 scale test, with the axis mapping recorded (north realizes as UE −Y). Left: build the production export preset for the actual site meshes using these settings. + +### Review scene and player placement + +Owner: this session. Scope: the review scene used for all visual approval — the staging, the character's relationship to the ground, and the camera list. Nothing in `Asset production` or `Gameplay` continues until these pass. + +- [x] Put the character on the ground rather than floating. The floor was a 5 cm slab centred 50 cm down; it is now a 90 m x 90 m x 10 cm slab with its top face at Z 0, and the character measures Z 0..83 cm — feet on the plane (`Screenshots/README.md`). +- [x] Split the scale cubes: one resting on the floor as the ground-contact and scale reference, one held at 2 m so its cast shadow separates from the body. +- [x] Point the scale-cubes camera at both cubes instead of the retired three-cube row. +- [x] **Character placement shot**: `review-03-player-placement` shows the pawn (`AGigLineCharacter`) staged by `Tools/ue_build_review_map.py` with a cube behind it. Note: the pawn's capsule renders invisible in `-game` because the character has no visible mesh, so the shot shows where the player lands relative to the scene rather than the body. +- [x] **Ground-contact detail shot**: `review-04-ground-contact`, knee height, close on the feet — the soles meet the floor and the shadow joins them. +- [x] **Shadow-comparison detail shot**: `review-05-shadow-compare`, both cubes in one frame from a low angle; the floating cube's shadow is detached, the grounded one's touches. +- [x] **Detail shot of the hero façade portals**: `review-06-hero-portals` from 8 m at eye height now fills the frame with all three doorways. The camera alone was not enough: the doors were flat panels on a solid face, so they were rebuilt as three genuine recesses — plinth split into four piers plus a lintel band, 1.2 m reveal, stone jambs and lintels standing 0.10 m proud, three mullions each. Facade bounds are now exactly Z 0..14.50 m; a jamb overhang had been sinking the model 0.15 m into the ground. +- [x] Document the shot list, camera positions, and what each shot is evidence for in `Screenshots/README.md`; nine shots, each with an approval line. +- [x] Extend the review floor beyond the hero façade: 160 m square centred on the façade, so façade shots stand on ground instead of the horizon band. +- [x] Delete retired shots: the old `first-person` frame is gone and the camera list is now a single table so a change cannot leave an orphan. + +### Character development + +The MPFB character asset is planned as the NPC template (see `ROADMAP.md`). Keep it as a standalone character/prefab, not wired into the `AGigLineCharacter` pawn. + +- [x] Give the MPFB character asset a standing idle pose so review and NPC shots show a person, not an A-pose bind. Done: `Tools/mpfb_character_export.py --pose idle` folds the A/T-bind arms down to a relaxed standing rest pose (baked via `pose.armature_apply` before export; `upperarm01.L` rest z −0.71 → −1.91 rad), re-exported, re-imported (138 bones), rendered in `review-01-character`. +- [x] Bake a second skin tone or clothing layer, so the character does not read as a grey mannequin in shots. Done: the v2-skin bake came out **black** and slow at 1024², so we synthesize a warm skin-tone diffuse directly (`Tools/mpfb_character_export.py` `make_diffuse`, with a darker shorts-suggestive bottom band) via a stdlib/numpy PNG writer. Character reads warm, not grey. Screenshot approved (`Screenshots/review-01-character`). +- [ ] (open) Keep the character as a reusable NPC prefab: a visible body, a collision capsule, and a head-height check that the camera does not clip at 1.60 m — for when NPCs/pedestrians are wired in (`0.2.0+`), not the `0.1.0` player. + +### Asset production + +- [x] Establish a consistent scale test, named export presets, and repeatable import settings. Scale test = the three-cube calibration scene (`Art/blender/scaletest/`, regenerable via `Tools/scale_test_export.py`); named export preset `ue_metric_v1` (FBX settings in that script); named import preset `ue_metric_v1` (`FbxImportUI` settings in `Tools/ue_scale_test_import.py`). Both scripts are the templates for production asset export/import. +- [-] Collect reference photography for manual façade work. Local only, never committed: `Art/reference/` is gitignored. **72 images in eleven folders**: hero façades to 4k, the El Capitan Theatre exterior series, premiere-night staging, Ovation Hollywood, the north side, and the Lee Drug neighbour. Gaps largely closed by the Flickr/web-search pass: the hero entrance is now documented (three portals with individual short flights — the inherited "eight steps, 12 m wide" is overturned), and the 6806–6822 retail run appears in an oblique 2013 frame. Still missing: a clean isolated frame of the door recess and a night frame of 6840 itself. +- [x] Download reference photography for the two north-side buildings inside the 50 m buffer — TCL Chinese Theatre (OSM way 424105908, 6925 Hollywood Blvd) and Madame Tussaud's (way 424105889, 6933 Hollywood Blvd). Done 2026-11-06 with `Tools/commons_fetch.py` against the Wikimedia Commons API: eleven frames in the local `Art/reference/north-chinese/` and `Art/reference/north-tussauds/`, provenance in each `sidecar.json`, nothing committed. +- [x] Model hero façade for the El Capitan Entertainment Centre site. **Second pass built 2026-11-07** (proportions recalibrated from the 2009 photograph: entablature 3.4 m, parapet 2.2 m, architrave and cornice bands, square pedestals — the first pass had 5.7 m of blank wall above the capitals and read as a warehouse). **First pass built 2026-11-07** (`Tools/hero_facade_build.py` → `Art/blender/hero/hero-facade-2026-11-07.blend` + JSON part report with evidence per part → `Tools/ue_hero_facade_import.py` → `/Game/Hollywood/ElCapitan/SM_HeroFacade`, 1892 tris, 4 materials, placed on the measured building line). Six columns at 4.96 m over the 25.75 m frontage, plinth, three portal flights (5 risers, not the old 8), entablature 2.2 m, parapet 1.6 m with motto band and medallions. **Screenshot approved** (`Screenshots/review-06` portals, `review-07/08` facade). Next pass: banner and window placement, then materials. +- [ ] Model surrounding block frontage. +- [x] Model simplified background buildings directly across Hollywood Boulevard. Done 2026-11-07, the two in-scope north-side buildings — TCL Chinese Theatre (SM_TCL_Chinese_Theatre) and Madame Tussaud's (SM_Madame_Tussauds) — taken from the verified OSM blockout volumes and exported with `ue_metric_v1`, with a Y-mirror so they land north of Hollywood Blvd across the street from the hero (TCL spans Unreal Y 1802..9431, Tussaud's 1888..7586; road centreline ≈ 0, hero façade at Y −1450). Staged in the DemoMap as `North_TCL_Chinese` / `North_Madame_Tussauds`; demo shot `review-03-demo-north-buildings` captured. Simple flat facade materials (surfaces are the `0.1.4` patch). +- [-] Build sidewalks, roads, and collision meshes. Terrain, road, sidewalks and kerbs exist (`Art/blender/terrain/`, `street/`) and are assembled in `site/site-2026-11-06.blend`; collision and details (crossing markings, kerb radii, aprons) are not built. Ground must follow the DEM: 3.94 m fall along the block, ~2 % crown between the gutters at ±10–11 m from the centreline, north sidewalk higher than south. Kerb height is an unresolved assumption — the DEM does not resolve it (`Geo/verification/2026-11-06-cross-sections.md`). +- [ ] Materials and look development for all exported assets. + +### Gameplay - active - gig-line-gameplay + +- [x] First-person movement, mouse look, and Enhanced Input bindings. Implemented 2026-11-07: `AGigLineCharacter` (C++, 1.75 m capsule, 1.60 m eye camera, 4 m/s walk, mouse look in deg/s, jump) as the default pawn, with five actions and an 11-entry context in `/Game/Input` built by `Tools/ue_create_input_assets.py`. **Not yet confirmed interactively** — launch PIE on `Test/ReviewMap` and walk. Screenshot review pending (`Screenshots/README.md`). +- [~] Collision, reset, and pause functionality. Reset (**R**) and pause (**Escape**, a real game pause that releases the cursor) are implemented in `AGigLineCharacter` with `/Game/Input/IA_Reset` and `IA_Pause`. Collision now exists — terrain, road and sidewalks import as complex-as-simple, so a simple hull cannot ramp over the kerbs. **Not verified by hand**: walk, reset and pause need a human at the keyboard. No pause menu widget yet, only the pause itself. +- [-] Build the walkable demo level: terrain, street, and hero facade assembled into one map with a start point on the north sidewalk, so the demo is something a player can walk rather than a review staging. **Built 2026-11-07** by `Tools/ue_build_demo_map.py` → `/Game/Hollywood/DemoMap`: sun/sky, `Hero_Facade`, six site meshes imported with collision (`Terrain_DEM`, `Road_Hollywood`, both sidewalks and both kerbs), and a `Demo_PlayerStart` on the north sidewalk 20 m back from the frontage. Demo views in `Screenshots/demo/` are ☐ pending review. +- [ ] Walkable sidewalks and a designated street crossing. Crossing chosen: mid-block signalised crossing, OSM way 385648319, at 130 m along the block (`Geo/verification/2026-11-06-street-profile.md`). +- [ ] Fixed daytime lighting and basic ambience. +- [ ] Geographic attribution display ("© OpenStreetMap contributors" + license link). + +### Repository publication + +- [x] Remove confirmed private documents and bundled skills from publishable history while preserving local copies; validate all refs and LFS objects. Rewritten 2026-11-07; original history is in a separate private local backup. +- [x] Scan all reachable Git history and the publication changes with Gitleaks 8.28.0. Removed an Android File Server security token from history and disabled the unused server; the rescans found no leaks. +- [x] Review Unreal asset provenance via the generation/import scripts and inspect all 18 reachable Unreal asset versions for recognizable private-reference paths. No such paths were found; this is not a full binary-content audit. +- [x] Review OSM source distribution notices: original data retains attribution and licence metadata, and the repository links directly to ODbL 1.0. +- [ ] Review ODbL obligations for each shipped derivative database or produced work before public release. +- [x] Validate Gitea LFS support. The first push succeeded on 2026-11-07; a separate clone fetched all 26 historical LFS objects and passed integrity checks. +- [x] Commit and review the publication preparation changes before pushing. Initial publication commit: `101db3f`. + +### Release checks + +- [ ] Player can traverse both sides of the demo without falling through geometry. Blender pre-check passes: 0 raycast holes along both sidewalks and the designated crossing; worst seam step 15.8 cm at the sidewalk's outer edge (`Art/blender/README.md`). Engine traversal still to be tested. +- [ ] Building placement, street scale, and site identity checked against references. +- [ ] No blocking collision or packaging defects. +- [ ] 60 FPS at 1440p on the dev workstation (Bazzite, Ryzen 7 7700X, 64 GB RAM, RTX 5070 Ti 16 GB) using a documented quality preset; record upscaling state; report performance without frame generation. +- [ ] Fresh project checkout builds with the documented external engine installation. +- [ ] Package Linux build with documented controls. +- [ ] Tag `v0.1.0` and write `CHANGELOG.md` entry; then remove this section. + +## 0.1.1 — Collision fixes (patch) + +Suggested blender skills: **collision-proxy** (UCX/UHX naming, convex hulls, simple collider meshes — the core of the authoring pass), **qa-review** (validation checklists, viewport screenshots, ship/no-ship verdicts for the audit), **asset-optimization** (pre-export validation of every collider). Note: these skills assume MCP-driven Blender; use them as method guides for the headless scripts. + +### Patch tasks + +- [ ] **Sidewalk outer edge against terrain.** The pre-check measured a **15.8 cm** step where a walk sample crosses from `Terrain_DEM` onto `Sidewalk_South` (`Art/blender/README.md`, s≈207 m). Mostly hidden by buildings; visible wherever the frontage is missing. Fix by extending the sidewalk mesh to meet the terrain, or by lowering the outer lip. +- [ ] **Crossing ramp gradient.** The kerb-flush transitions measure **10–13 cm over 1.5 m ≈ 10 %**, steeper than the 8 % a real ramp uses (`Geo/tools/street_section.py` output, s≈33, 39, 126 m). Grade the three ramp openings properly. +- [ ] **Collision authoring pass.** None exists yet: on Unreal import, complex-as-simple for terrain and street (walkable surfaces must not be approximated into ramps over kerbs), simple convex hulls per building. Record the settings in `Docs/build.md`. +- [ ] **Kerb height is an assumption.** 0.15 m modelled, 0.13 m as built, and the 3DEP DEM cannot resolve a kerb at all. Check against the photographs and record the final figure. +- [ ] Audit and fix any collision gaps or fall-through geometry found in `0.1.0` in the engine. +- [ ] Regression-test traversal on both sides of the demo. +- [ ] Verify no new packaging defects. +- [ ] Tag `v0.1.1` and write `CHANGELOG.md` entry; then remove this section. + +## 0.1.2 — Scale and façade corrections (patch) + +Suggested blender skills: **references** (reference-image-match and visual-match-checklist templates — measure the guessed heights and colonnade proportions against the photographs), **archviz** (real-world scale and façade composition discipline), **camera-cinematography** (reproduce the reference camera angles when comparing renders to photos). + +### Patch tasks + +- [ ] Correct building scale and street proportions flagged against references. +- [ ] Refine hero façade details where reference photography shows discrepancies. +- [ ] **Replace the placeholder heights.** Three of the fifteen block buildings carry no OSM height and render at a guessed 6.4 m (`Geo/tools/block_height_report.py`). Measure them off the photographs and correct the blockout. +- [ ] Resolve the remaining unknown on the hero: the colonnade currently occupies about 45 % of the height against roughly 50–60 % in the photographs. Fix the vertical proportions. +- [ ] Tag `v0.1.2` and write `CHANGELOG.md` entry; then remove this section. + +## 0.1.3 — Packaging and setup fixes (patch) + +Suggested blender skills: **export-pipeline** and **unreal-export** (scale/pivot/normals/materials/collision verification) if any packaging defect traces back to the Blender export presets. + +### Patch tasks + +- [ ] Fix any packaging or build issues encountered in `0.1.x`. +- [ ] Update `Docs/` setup instructions for anything that changed. +- [ ] Tag `v0.1.3` and write `CHANGELOG.md` entry; then remove this section. + +## 0.1.4 — Proper building façades (patch) + +Suggested blender skills: **procedural-modeling** + **geometry-nodes** (the façade module kit — bay, pilaster, cornice, parapet, window, shopfront, door — as reusable node groups), **archviz** (real-world scale and façade composition), **materials** (procedural brick, concrete, stone, render, glass — the ported generators), **texture-workflow** (AO/curvature/normal bakes and decals for the motto band and medallions), **uv-workflow** (texel density and modular UV layouts for the kit), **scene-assembly** (assembling kit pieces onto the fifteen block buildings), **lookdev** (screenshot-comparison loop until shading reads correctly), **historical-worlds** or **realistic-style** (1920s Hollywood Blvd neoclassical direction), **asset-optimization** + **unreal-export** (pre-export validation, `ue_metric_v1` preset), **qa-review** (final gate before the `Tools/render_screenshots.sh` review). + +### Patch tasks + +- [ ] **Define the façade module.** One set of reusable pieces (bay, pilaster, cornice, parapet, window, shopfront, door) at a fixed module, exported with the `ue_metric_v1` preset so every building assembles from the same kit. +- [ ] **Replace placeholder materials.** Every blockout building currently carries Blender flat colours. Port the procedural generators from `Tools/sibling_asset_audit.py`'s sibling project (`brick_facade`, `seamless_concrete`, `asphalt`) and add stone, render, and glass, then wire them through Unreal material instances. +- [ ] **Give OSM buildings a façade style.** Blosm exposes `scene.blosm.setupScript` (`setup/neoclassical.py` is the example) so a building can carry a real elevation instead of a plain extrusion. Build one style script for the south frontage and one for the north. +- [ ] **Hero façade detail pass.** Ionic capitals and fluting, the parapet motto band and medallions as geometry or decal, window rhythm behind the colonnade, and the three portal flights at their photographed proportions. +- [ ] **El Capitan Theatre (6838) and the retail neighbours.** Model from the 18-frame 5472×3648 reference set; the theatre shares the measured 4.96 m bay rhythm with the temple. +- [ ] Review every façade change with `Tools/render_screenshots.sh` before tagging. +- [ ] Tag `v0.1.4` and write `CHANGELOG.md` entry; then remove this section. + +## 0.2.0 — MPFB player body, third-person camera, basic animation (weeks 7–9) + +### Character setup + +- [x] Generate MPFB human base mesh; export baked materials and deform skeleton. Done in bootstrap: idle-pose 19 158-vert human with a 137-bone standard rig, `Tools/mpfb_character_export.py` (now `--pose idle` + warm `make_diffuse`). +- [x] Import character into Unreal; validate skeleton, scale, and materials. Done: `/Game/Test/Character` — `SkeletalMesh` (138 bones), `Skeleton`, warm `M_Character_Export` material with baked `T_Character_Diffuse`. +- [ ] Promote the character asset into a reusable NPC prefab (visible body, collision capsule, idle pose) ready for pedestrians (`0.5.0`) once the third-person body lands. +- [ ] Create basic idle/walk animation set. +- [ ] Verify animation plays correctly on the imported rig. + +### Camera and controls + +- [ ] Add third-person camera following the player body. +- [ ] Add first/third-person toggle. +- [ ] Add camera collision to prevent clipping through geometry. +- [ ] Document any input changes. + +### Release checks + +- [ ] Third-person traversal works end-to-end in the demo area. +- [ ] No blocking animation or rig defects. +- [ ] Performance target still met at 1440p. +- [ ] Tag `v0.2.0` and write `CHANGELOG.md` entry; then remove this section. + +## 0.2.1 — Rig fixes (patch) + +### Patch tasks + +- [ ] Fix skeletal/rigging defects reported after `0.2.0`. +- [ ] Tag `v0.2.1` and write `CHANGELOG.md` entry; then remove this section. + +## 0.2.2 — Skin and hair tuning (patch) + +### Patch tasks + +- [ ] Tune skin shading and hair materials on the player character. +- [ ] Tag `v0.2.2` and write `CHANGELOG.md` entry; then remove this section. + +## 0.2.3 — Camera clipping fixes (patch) + +### Patch tasks + +- [ ] Fix remaining camera clipping cases in `0.2.x`. +- [ ] Tag `v0.2.3` and write `CHANGELOG.md` entry; then remove this section. + +## 0.3.0 — Chaos vehicle, enter/exit, closed driving route (weeks 10–13) + +### Vehicle production + +- [ ] Model one vehicle in Blender with collision meshes; export to Unreal. +- [ ] Set up Chaos Vehicle with wheel and physics configuration. +- [ ] Implement enter/exit interaction. +- [ ] Build a closed driving route with boundaries. +- [ ] Tune basic handling to a drivable state. + +### Release checks + +- [ ] Player can enter, drive the closed route, and exit without defects. +- [ ] No blocking vehicle collision or packaging defects. +- [ ] Performance target still met at 1440p. +- [ ] Tag `v0.3.0` and write `CHANGELOG.md` entry; then remove this section. + +## 0.3.1 — Handling tuning (patch) + +### Patch tasks + +- [ ] Refine vehicle handling feel based on `0.3.0` feedback. +- [ ] Tag `v0.3.1` and write `CHANGELOG.md` entry; then remove this section. + +## 0.3.2 — Vehicle collision fixes (patch) + +### Patch tasks + +- [ ] Fix vehicle collision defects (mesh/physics mismatches). +- [ ] Tag `v0.3.2` and write `CHANGELOG.md` entry; then remove this section. + +## 0.3.3 — Input fixes (patch) + +### Patch tasks + +- [ ] Fix vehicle/character input issues in `0.3.x`. +- [ ] Tag `v0.3.3` and write `CHANGELOG.md` entry; then remove this section. + +## 0.4.0 — Small connected neighborhood and map streaming (weeks 14–17) + +### World expansion + +- [ ] Extend geo pipeline to a small connected neighborhood beyond the demo block. +- [ ] Produce modular buildings, sidewalks, and roads for the expanded area. +- [ ] Set up World Partition with streaming cells. +- [ ] Configure HLOD for distant buildings. +- [ ] Verify no seams or popping between streamed cells during traversal. + +### Release checks + +- [ ] Continuous walking (and driving) across the expanded area works. +- [ ] Streaming does not introduce blocking defects. +- [ ] Performance target re-validated at 1440p with streaming active. +- [ ] Tag `v0.4.0` and write `CHANGELOG.md` entry; then remove this section. + +## 0.4.1 — Seam fixes (patch) + +### Patch tasks + +- [ ] Fix visible seams between streamed cells. +- [ ] Tag `v0.4.1` and write `CHANGELOG.md` entry; then remove this section. + +## 0.4.2 — Streaming corrections (patch) + +### Patch tasks + +- [ ] Correct streaming/loading issues found in `0.4.x`. +- [ ] Tag `v0.4.2` and write `CHANGELOG.md` entry; then remove this section. + +## 0.4.3 — HLOD tuning (patch) + +### Patch tasks + +- [ ] Tune HLOD quality and distance settings. +- [ ] Tag `v0.4.3` and write `CHANGELOG.md` entry; then remove this section. + +## 0.5.0 — Pedestrians, crosswalk behavior, ambient traffic (weeks 18–21) + +### Simulation + +- [ ] Add pedestrian characters with navigation, reusing the idle-pose character asset as the NPC prefab (`/Game/Test/Character`). +- [ ] Implement crosswalk behavior (pedestrians use the designated crossing). +- [ ] Add limited ambient traffic on the street network. +- [ ] Optimize simulation cost to stay within frame budget. + +### Release checks + +- [ ] Pedestrians and traffic behave without blocking defects. +- [ ] Performance target re-validated at 1440p. +- [ ] Tag `v0.5.0` and write `CHANGELOG.md` entry; then remove this section. + +## 0.5.1 — Navigation fixes (patch) + +### Patch tasks + +- [ ] Fix pedestrian navigation issues. +- [ ] Tag `v0.5.1` and write `CHANGELOG.md` entry; then remove this section. + +## 0.5.2 — Crossing fixes (patch) + +### Patch tasks + +- [ ] Fix crosswalk behavior defects. +- [ ] Tag `v0.5.2` and write `CHANGELOG.md` entry; then remove this section. + +## 0.5.3 — Simulation optimization (patch) + +### Patch tasks + +- [ ] Optimize pedestrian/traffic simulation cost. +- [ ] Tag `v0.5.3` and write `CHANGELOG.md` entry; then remove this section. + +## 0.6.0 — Visual/audio pass and evening lighting preset (weeks 22–24) + +### Look and sound + +- [ ] Create an evening lighting preset. +- [ ] Complete a visual polish pass across the neighborhood. +- [ ] Add ambient audio (city ambience, traffic, basic SFX). +- [ ] Verify licenses for all added audio files. + +### Release checks + +- [ ] Both day and evening presets render without defects. +- [ ] Audio plays without gaps or licensing issues. +- [ ] Performance target re-validated at 1440p. +- [ ] Tag `v0.6.0` and write `CHANGELOG.md` entry; then remove this section. + +## 0.6.1 — Lighting fixes (patch) + +### Patch tasks + +- [ ] Fix lighting defects in day/evening presets. +- [ ] Tag `v0.6.1` and write `CHANGELOG.md` entry; then remove this section. + +## 0.6.2 — Material corrections (patch) + +### Patch tasks + +- [ ] Fix material errors found in `0.6.x`. +- [ ] Tag `v0.6.2` and write `CHANGELOG.md` entry; then remove this section. + +## 0.6.3 — Audio balancing (patch) + +### Patch tasks + +- [ ] Balance audio levels across the scene. +- [ ] Tag `v0.6.3` and write `CHANGELOG.md` entry; then remove this section. + +## 0.7.0 — Settings, control rebinding, save/load, accessibility (weeks 25–27) + +### Systems + +- [ ] Build settings menu (graphics and audio options). +- [ ] Implement control rebinding with persistence. +- [ ] Implement save/load for player state. +- [ ] Add accessibility basics (e.g. FOV, subtitle, colorblind options as applicable). + +### Release checks + +- [ ] Settings, rebinding, and save/load all persist across restarts. +- [ ] No blocking UI defects. +- [ ] Tag `v0.7.0` and write `CHANGELOG.md` entry; then remove this section. + +## 0.7.1 — Save fixes (patch) + +### Patch tasks + +- [ ] Fix save/load defects. +- [ ] Tag `v0.7.1` and write `CHANGELOG.md` entry; then remove this section. + +## 0.7.2 — UI fixes (patch) + +### Patch tasks + +- [ ] Fix UI issues in `0.7.x`. +- [ ] Tag `v0.7.2` and write `CHANGELOG.md` entry; then remove this section. + +## 0.7.3 — Input persistence fixes (patch) + +### Patch tasks + +- [ ] Fix rebinding persistence issues. +- [ ] Tag `v0.7.3` and write `CHANGELOG.md` entry; then remove this section. + +## 0.8.0 — Performance budgets and broader Linux hardware testing (weeks 28–30) + +### Performance + +- [ ] Define performance budgets (frame time, VRAM) and document them. +- [ ] Profile the full neighborhood; fix budget violations. +- [ ] Test on broader Linux hardware and VRAM configurations; document results. +- [ ] Re-validate the 1440p quality preset with upscaling state recorded. + +### Release checks + +- [ ] Performance budgets met on documented hardware matrix. +- [ ] No blocking compatibility defects. +- [ ] Tag `v0.8.0` and write `CHANGELOG.md` entry; then remove this section. + +## 0.8.1 — VRAM reductions (patch) + +### Patch tasks + +- [ ] Reduce VRAM usage where profiling shows excess. +- [ ] Tag `v0.8.1` and write `CHANGELOG.md` entry; then remove this section. + +## 0.8.2 — Frame-time fixes (patch) + +### Patch tasks + +- [ ] Fix frame-time spikes found in `0.8.x`. +- [ ] Tag `v0.8.2` and write `CHANGELOG.md` entry; then remove this section. + +## 0.8.3 — Compatibility fixes (patch) + +### Patch tasks + +- [ ] Fix compatibility issues from the hardware testing matrix. +- [ ] Tag `v0.8.3` and write `CHANGELOG.md` entry; then remove this section. + +## 0.9.0 — Feature freeze, public beta, license and build audit (weeks 31–34) + +### Freeze and audit + +- [ ] Freeze features; document the freeze in `CHANGELOG.md`. +- [ ] Produce a public beta build for testers. +- [ ] Complete license audit: `THIRD_PARTY_NOTICES.md`, all MPFB assets, textures, animations, vehicles, audio. +- [ ] Review ODbL obligations for any distributed derived geographic database. +- [ ] Review Epic distribution requirements before publishing. +- [ ] Verify a fresh checkout builds and packages reproducibly. + +### Release checks + +- [ ] Beta feedback triaged; blockers logged for `0.9.x`. +- [ ] Tag `v0.9.0` and write `CHANGELOG.md` entry; then remove this section. + +## 0.9.1 — Blocker fixes (patch) + +### Patch tasks + +- [ ] Fix blockers reported during the public beta. +- [ ] Tag `v0.9.1` and write `CHANGELOG.md` entry; then remove this section. + +## 0.9.2 — Regression fixes (patch) + +### Patch tasks + +- [ ] Fix regressions introduced by `0.9.x` fixes. +- [ ] Tag `v0.9.2` and write `CHANGELOG.md` entry; then remove this section. + +## 0.9.3 — Documentation fixes (patch) + +### Patch tasks + +- [ ] Update all `Docs/` for accuracy before `1.0.0`. +- [ ] Tag `v0.9.3` and write `CHANGELOG.md` entry; then remove this section. + +## 1.0.0 — Stable neighborhood-scale walking/driving release (weeks 35–40) + +### Final release + +- [ ] Complete final acceptance sweep across all `0.x` features. +- [ ] Confirm the stable, agreed game scope is met (neighborhood-scale walking and driving). +- [ ] Final build, documentation, and licensing verification. +- [ ] Tag `v1.0.0` and write `CHANGELOG.md` entry; then remove this section.