Merge local map tasks into the 3D review track
Full build / Import + headless tests (push) Successful in 40s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-03 18:41:21 +01:00
1 parent b79e30e9df
commit 8fac1b47cf
9 files changed
+213 -215

No files matched your search

+191 -194
View File
@@ -3,7 +3,7 @@
Work is grouped by theme. Each item should be small enough to complete and verify on its own;
see `AGENTS.md` for the workflow and `MEMORY.md` for the decisions behind these plans.
**Priority order:** 3D model re-evaluation → character development → local map development →
**Priority order:** 3D model and local map re-evaluation → character development →
versioned release milestones (0.10.0) → future/deferred work. See `AGENTS.md` §Priority and
Versioning and §Local Blender skills.
@@ -212,9 +212,6 @@ and never ship a generated or downloaded image without provenance.
used; the public-domain frames cover the same evidence. (`docs/screens/refs/joke-shop/`.)
**Removed 2026-11-03:** the committed Comedy Store photo board was replaced by the local-only
`tmp/research/comedy-store/` research set (owner override; see §3D model re-evaluation → A).
- [ ] Find more pictures from the Comedy Store, the Sunset Boulevard block, collect at least five additional shots for reference; do not care about licensing, these images are only stored locally for reference and inference during development. Find pictures from the neighboring hotel building and the street surroundings.
- [ ] Fill the Joke Shop gaps: better visual representation of actual facade, parking lot to the side, neighboring hotel parking ramp and building, night canopy/sign, entrance recess, south-side neighbours, buildings across the street, hillside behind the building, hill detail.
house detail, neighbouring buildings, and any relevant street-level context.
- [x] TV Studio: no separate board — the venue is the same El Capitan Entertainment Centre block as
the Hollywood day shift, restaged for a late-night arrival. The Hollywood board covers both
venues and the premiere-staging photo is the arrival evidence; the reuse is now stated in
@@ -224,11 +221,6 @@ and never ship a generated or downloaded image without provenance.
Walk of Fame terrazzo band, star close-up, and a night street-lighting context frame (cropped
to remove people and a plate). The board now has nine photos. (CC BY-SA night frame is
redistributed unmodified for study only; the review is recorded in the sidecar.)
- [ ] Remaining Hollywood gap: a licensed **night photograph of the hero facade and blade sign**
(the night frame on the board is a different block, near Vine), plus a sidewalk-level shot of
the steps/door recess and the east retail neighbour. For the committed board the licence gate
stays (no unlicensed Street View or scraped social media); local-only copies of the same
viewpoints go through section A instead.
- [ ] Generate one concept board per venue with `tools/scene_concepts.py generate` (palette, facade
rhythm, lighting), keep raw output gitignored, commit only the selected board, and record the
model, prompt and spend in the sidecar.
@@ -267,6 +259,193 @@ and never ship a generated or downloaded image without provenance.
`docs/architecture.md` and `AGENTS.md` with the skill routes and the new gates.
- [ ] Record accepted limits and deferred rebuilds in `docs/known-limitations.md` and `MEMORY.md`.
**Local map workstreams (H–M).** Build a local, data-backed map pipeline that can replace or
supplement the stylized venue geometry with licensed OpenStreetMap footprints, 3D building
massing, reference-derived photoreal facades and AI-assisted composition. This remains part of
the same unversioned track, not a release gate. The shared reference/provenance gates in A/F
still apply; the map pipeline has its own exit in M.
*Local-map skill route: `environment-artist`, `archviz`, `hard-surface`, `geometry-nodes`,
`procedural-modeling`, `vegetation-artist`, `set-dressing`, `lighting`, `materials`,
`texture-workflow`, `lookdev`, `scene-assembly`, `qa-review`.*
### H. Local map data, licensing and scope
- [ ] Define the first target block and whether the result replaces, supplements or only informs
the current stylized venue specs (`docs/hollywood-boulevard-map.md`,
`docs/joke-shop-map.md`).
- [ ] Audit OpenStreetMap's ODbL attribution/share-alike obligations and decide whether derived
geometry ships, stays development-only, or needs a separate data layer.
- [ ] Choose an offline OSM extract workflow (Overpass/Geofabrik) and pin the extract date and
query so the map build is reproducible.
- [ ] Evaluate licence-compatible 3D building datasets (OSM Buildings, Overture, CityGML/LOD1–2
or local authority data); record coverage, accuracy, format and redistribution terms.
- [ ] Add a provenance sidecar for every map source and derived asset, including source URL,
licence, capture/extract date and attribution text.
### I. Local map reference imagery
**Recent-photo research (2026-11-03):** Commons geosearch around 34.10118/-118.34009 (500 m) plus
category/date sorting shows usable imagery from the last 12 months: Dolby Theatre billboards
(2026-09-30, CC0, 6 frames), Dolby street level and a fresh Walk of Fame star (2026-07-17, CC0),
a Michael Jackson impersonator at the El Capitan frontage (2026-02-25, CC BY-SA 4.0), the Celia
Cruz Square marker and a 2025-09-28 star series (CC0), and a Thunderbolts premiere (2025-04-28,
CC BY-SA 2.0). No recent frame shoots the El Capitan facade straight-on in daylight; the best
facade evidence is still the 2009 CC BY frame. The 8 downloaded candidates are in
`tmp/research/elcapitan-2026/` (gitignored) with `meta.json`; nothing was committed.
- [x] Wire `tools/refboard.py` (standalone, stdlib-only): `search --source search|geo|category`
lists candidates with ISO date, age-in-months and a commit/review/skip licence gate
(`--allow-ccbysa` after a recorded review); `fetch` downloads usable rows into `tmp/` with
spaced requests and writes `meta.json`; `rows` emits SIDECAR + README table rows from the
manifest. Six recent CC0 photos of the block were re-fetched into
`tmp/research/elcapitan-2026-tool/`. Tests in `tools/test_refboard.py` (licence gate, recent
filter, review-row exclusion, row emission).
- [ ] Add a `--max-age-months` filter (default 12) and a `--must-reuse` mode that matches the
folder's existing sidecar entries so a refresh only reports what changed.
- [ ] Research-diff step: keep the last-12-months board as the "current reality" evidence and the
older photos as the geometry evidence, labelled per photo; no sidecar date field needs to
change, only the purpose column.
- [ ] Write a reference shot list per block: facade materials, windows, signage, rooflines,
street furniture, curb cuts and lighting.
- [ ] Download and catalogue **committed** reference images from Wikimedia Commons, local/own
photography or other clearly licensed sources; record author, licence and attribution with
the §F sidecar template. Local-only research that ignores licence limits (DuckDuckGo,
street-view frames, neighbours, across-street buildings) is collected under §A into
`tmp/research/` and is never committed.
- [ ] Separate development-only references from shipped textures; commit only images with clear
redistribution rights and keep the rest under `tmp/` or the ignored reference folders.
- [ ] Build the per-block real-photo board under `docs/screens/refs/<block>/` using the sidecar
template from the 3D review §E, and link it from the venue map documents.
- [ ] Define the photoreal target and a material-derivation workflow (albedo/normal/roughness,
AO, weathering) that matches the existing Compatibility renderer (`texture-workflow`,
`materials`, `lookdev`), with the recent 2026 street frames as the current-reality reference
and the 2009 facade frame as the geometry reference.
- [ ] Remaining Hollywood gap: a licensed **night photograph of the hero facade and blade sign**
(the night frame on the board is a different block, near Vine), plus a sidewalk-level shot of
the steps/door recess and the east retail neighbour. For the committed board the licence gate
stays (no unlicensed Street View or scraped social media); local-only copies of the same
viewpoints go through section A instead.
### J. Local map geometry and AI-assisted composing
- [ ] Prototype OSM footprint import into Blender at game scale and orientation, then compare it
against the current venue footprint/collider layout.
- [ ] Import 3D building massing for the target block, clean the topology and assign LOD bands;
do not import unbounded city-scale meshes into the runtime (`scene-assembly`,
`asset-optimization`, `lod-pipeline`).
- [ ] Build a reusable photoreal facade kit (window bays, cornices, storefronts, awnings, signage)
with `environment-artist`/`hard-surface`/`geometry-nodes` so buildings share materials and
stay inside the venue triangle/material budgets.
- [ ] Run the assisted Blender pipeline end to end on the first block (OSM import → `inspect` →
retopo/UV assist → atlas → `audit`), and document the exact commands in
`docs/asset-tooling.md`.
- [x] Joke Shop building-appearance pass: `dark_stucco` tile (1024 px) promoted via the picks
pipeline and wired into `_build_comedy_store_building`, replacing the grey paver tile so the
hall reads as flat matte charcoal instead of masonry; photo-anchored day concept generated
from the hillside PD frame (the branded frontage photo trips the model's image-recitation
filter — recorded in the concept README); day capture promoted and the three-up board rebuilt.
Test asserts the hall wall carries `dark_stucco`.
- [x] Building-appearance realism pass, measured against the reference set: bring the masonic
facade's material response (limestone value/roughness, joint lines, weathering streaks),
the banner/canopy and marquee materials, and the night emissive balance to the level of the
2009 facade photo and the 2026 street frames; capture before/after and record each delta.
(Ashlar field: `limestone_ashlar` tile, reference-anchored on the facade photo, 768 px over
~4.6 m of wall = ~167 px/m, promoted via the picks pipeline, warm-shifted tint behind
`VENUE_SPECS`. Banner cloth: warm self-light registered with `_marquee_emissive` (0.14 base;
0.28 night / 0.028 day). Marquee sign face + bulbs: warm-incandescent already in the prop
PALETTE, now test-verified to brighten at night via `_marquee_emissive`. Day and night
captures promoted, both three-up boards rebuilt.)
- [ ] Upgrade the facade from flat material bands to photoreal detail: either texture-projected
detail (Path B below) or AI-generated material tiles derived from the facade photo (with
provenance), then verify texel density, tiling and the night look.
- [ ] Integrate the result behind `WorldBuilder.VENUE_SPECS` with colliders, navigation obstacles,
occlusion and the existing day/night materials.
### K. Comedy Store map recreation
*Plan (2026-11-03): rebuild the Joke Shop venue geometry from the new local-only reference set
(`tmp/research/comedy-store/`, gitignored) and the four photo-anchored scene pairs now in
`docs/screens/concepts/joke_shop/`. Evidence wins for shape; the concepts win for material/mood.
Nothing is committed until the licence gate on any promoted reference and the map-budget tests
pass. The current `_build_comedy_store_building()` stays as the fallback.*
- [ ] Extract the real proportions from the local frames (facade width/height, canopy depth and
slope, blade-sign diameter and pole height, red curtain bay count, entrance recess, kerb
setback, hillside rise) and reconcile them against the current 27 m / 8.4 m / 12.2 m spec
in `WorldBuilder.VENUE_SPECS["joke_shop"]` and `docs/joke-shop-map.md`.
- [ ] Rank the shape-language gaps between the current procedural building and the four scene
pairs: canopy fascia depth, blade-sign shape/position, curtain-bay rhythm, entrance recess,
hillside silhouette and the neighbouring hotel/parking mass. Write the top-five fix list
with measurements.
- [ ] Rebuild the canopy + blade sign as library props or procedural geometry through the assisted
pipeline (`blender_assets.py inspect` → scripted edits → `audit`/`fit`), keeping the 4,000
prop-triangle budget; verify against the street/strip concept pairs before committing.
- [ ] Add the neighbouring hotel/parking ramp as a low-detail blocker mass (no interior) so the
block silhouette matches the hotel reference frame, inside the venue mesh budget.
- [ ] Re-work the facade field from flat boxes to the reference's actual banding: black stucco
field (`dark_stucco`), deep canopy shadow, fascia band, red curtain bays and the recessed
entrance, using the four concept pairs for value/mood targets.
- [ ] Re-run the map-budget, navigation, collider and day/night capture gates after the rebuild
(`godot --headless --path . --script res://src/test/test_runner.gd`,
`tools/check_screenshots.sh`), and refresh the Joke Shop three-up board and
`docs/joke-shop-map.md`.
- [ ] Update `docs/development-status.md`, `docs/asset-tooling.md` and `CHANGELOG.md` when the
rebuild lands; record any accepted deviations from the reference.
### L. Generated location imagery
*Skill route: `lookdev`, `lighting`, `environment-artist`, `texture-workflow`; tooling:
`tools/scene_concepts.py`, `tools/asset_pipeline.py`, `tools/screen_designs.py`.*
**Tool plan for reference-anchored generation (plan first, implement after this section's review):**
- [x] Add `scene_concepts.py generate --reference <photo.png>`: attach a licence-cleared real photo
as a source image to the OpenRouter image request (multimodal chat endpoint with a base64
data URL), with a prompt suffix that preserves the photographed facade geometry. Record the
reference file, its licence and page in the `.refgen.json` provenance sidecar next to the
generated frame.
- [x] Extend `generate_textures.generate_image()` with an optional `reference_path` argument
(base64 data URL of the photo); existing call signatures unchanged, and the path is gated by
`scene_concepts._reference_source` requiring a refs-board `SIDECAR.md` row (or an explicit
`--reference-unchecked`). Verified live on the El Capitan day concept anchored on the CC BY
2.0 2009 facade photo; tests in `ReferenceGateTests`.
- [x] Add a sidecar-driven variant pass: `scene_concepts.py anchor --reference <photo>
--treatments day,night,weathered` generates same-framing variants with treatment clauses,
one `.refgen.json` provenance sidecar per frame. Verified live on the facade photo (night +
overcast frames committed; the weathered treatment reads as mild overcast — noted on the
board). Tests in `AnchorTests`.
- [-] Generate facade, street and signage concept frames for the target block
(`scene_concepts.py generate --reference ...`), commit only the selected frames, and record
model, prompt, spend **and source photo** in the block sidecar. (First frame done:
`hollywood_boulevard_entrance_day-v2`, anchored on the facade photo; remaining framings
pending.)
- [ ] Derive palette, lighting and material targets from the real-photo board and the generated
concepts, and record the deltas the facade kit has to close.
- [ ] Generate signage, awning and poster texture candidates with `asset_pipeline.py`; run the
role audit and the `CREDITS.md` provenance check before anything is used in the kit.
- [ ] Compare generated concepts against the licensed photos: where they disagree, the photos win
for shape and the generated board only informs colour, mood and detail density. Human review
stays the acceptance gate, and AI output is never treated as licensed map data.
### M. Local map QA and exit
- [ ] Compare the data-backed block against the existing screenshots and map documentation; keep
the stylized fallback available.
- [ ] Run the venue triangle/mesh budget, navigation and collider checks, plus day/night capture
comparisons.
- [ ] Capture day/night gallery frames of the new block and add before/after rows to `README.md`
and the venue map documents.
- [ ] Re-run `tools/check_screenshots.sh` after the map swap so the 21-shot gallery reflects the
new geometry, and refresh the `docs/screens/refs/` three-up sheets.
- [ ] Update `docs/architecture.md`, the venue map documents, `docs/asset-tooling.md`,
`docs/development-status.md` and `CHANGELOG.md` when the pipeline ships or a source is
rejected.
- [ ] Exit: one local block is reconstructed from licensed data with reference-derived photoreal
facades, passes performance/navigation/visual QA and has complete provenance; or the
pipeline is rejected with the findings recorded.
## Character development
Goal: break the eight-character clone effect with four licence-cleared crowd-variety looks while
@@ -374,187 +553,6 @@ must inherit the reviewed face/hand/gear baseline instead of multiplying whateve
yes, prototype the local MPFB/MakeHuman pipeline outside the repo and commit only the final
CC0-derived assets with provenance.
## Local map development
Goal: build a local, data-backed map pipeline that can replace or supplement the stylized venue
geometry with licensed OpenStreetMap footprints, 3D building massing, reference-derived photoreal
facades and AI-assisted composition. This is an unversioned development track, not a release gate.
*Skill route: `environment-artist`, `archviz`, `hard-surface`, `geometry-nodes`,
`procedural-modeling`, `vegetation-artist`, `set-dressing`, `lighting`, `materials`,
`texture-workflow`, `lookdev`, `scene-assembly`, `qa-review`.*
### Data, licensing and scope
- [ ] Define the first target block and whether the result replaces, supplements or only informs
the current stylized venue specs (`docs/hollywood-boulevard-map.md`,
`docs/joke-shop-map.md`).
- [ ] Audit OpenStreetMap's ODbL attribution/share-alike obligations and decide whether derived
geometry ships, stays development-only, or needs a separate data layer.
- [ ] Choose an offline OSM extract workflow (Overpass/Geofabrik) and pin the extract date and
query so the map build is reproducible.
- [ ] Evaluate licence-compatible 3D building datasets (OSM Buildings, Overture, CityGML/LOD1–2
or local authority data); record coverage, accuracy, format and redistribution terms.
- [ ] Add a provenance sidecar for every map source and derived asset, including source URL,
licence, capture/extract date and attribution text.
### Reference imagery
**Recent-photo research (2026-11-03):** Commons geosearch around 34.10118/-118.34009 (500 m) plus
category/date sorting shows usable imagery from the last 12 months: Dolby Theatre billboards
(2026-09-30, CC0, 6 frames), Dolby street level and a fresh Walk of Fame star (2026-07-17, CC0),
a Michael Jackson impersonator at the El Capitan frontage (2026-02-25, CC BY-SA 4.0), the Celia
Cruz Square marker and a 2025-09-28 star series (CC0), and a Thunderbolts premiere (2025-04-28,
CC BY-SA 2.0). No recent frame shoots the El Capitan facade straight-on in daylight; the best
facade evidence is still the 2009 CC BY frame. The 8 downloaded candidates are in
`tmp/research/elcapitan-2026/` (gitignored) with `meta.json`; nothing was committed.
- [x] Wire `tools/refboard.py` (standalone, stdlib-only): `search --source search|geo|category`
lists candidates with ISO date, age-in-months and a commit/review/skip licence gate
(`--allow-ccbysa` after a recorded review); `fetch` downloads usable rows into `tmp/` with
spaced requests and writes `meta.json`; `rows` emits SIDECAR + README table rows from the
manifest. Six recent CC0 photos of the block were re-fetched into
`tmp/research/elcapitan-2026-tool/`. Tests in `tools/test_refboard.py` (licence gate, recent
filter, review-row exclusion, row emission).
- [ ] Add a `--max-age-months` filter (default 12) and a `--must-reuse` mode that matches the
folder's existing sidecar entries so a refresh only reports what changed.
- [ ] Research-diff step: keep the last-12-months board as the "current reality" evidence and the
older photos as the geometry evidence, labelled per photo; no sidecar date field needs to
change, only the purpose column.
- [ ] Write a reference shot list per block: facade materials, windows, signage, rooflines,
street furniture, curb cuts and lighting.
- [ ] Download and catalogue **committed** reference images from Wikimedia Commons, local/own
photography or other clearly licensed sources; record author, licence and attribution with
the §F sidecar template. Local-only research that ignores licence limits (DuckDuckGo,
street-view frames, neighbours, across-street buildings) is collected under §A into
`tmp/research/` and is never committed.
- [ ] Separate development-only references from shipped textures; commit only images with clear
redistribution rights and keep the rest under `tmp/` or the ignored reference folders.
- [ ] Build the per-block real-photo board under `docs/screens/refs/<block>/` using the sidecar
template from the 3D review §E, and link it from the venue map documents.
- [ ] Define the photoreal target and a material-derivation workflow (albedo/normal/roughness,
AO, weathering) that matches the existing Compatibility renderer (`texture-workflow`,
`materials`, `lookdev`), with the recent 2026 street frames as the current-reality reference
and the 2009 facade frame as the geometry reference.
### Geometry and AI-assisted composing
- [ ] Prototype OSM footprint import into Blender at game scale and orientation, then compare it
against the current venue footprint/collider layout.
- [ ] Import 3D building massing for the target block, clean the topology and assign LOD bands;
do not import unbounded city-scale meshes into the runtime (`scene-assembly`,
`asset-optimization`, `lod-pipeline`).
- [ ] Build a reusable photoreal facade kit (window bays, cornices, storefronts, awnings, signage)
with `environment-artist`/`hard-surface`/`geometry-nodes` so buildings share materials and
stay inside the venue triangle/material budgets.
- [ ] Run the assisted Blender pipeline end to end on the first block (OSM import → `inspect` →
retopo/UV assist → atlas → `audit`), and document the exact commands in
`docs/asset-tooling.md`.
- [x] Joke Shop building-appearance pass: `dark_stucco` tile (1024 px) promoted via the picks
pipeline and wired into `_build_comedy_store_building`, replacing the grey paver tile so the
hall reads as flat matte charcoal instead of masonry; photo-anchored day concept generated
from the hillside PD frame (the branded frontage photo trips the model's image-recitation
filter — recorded in the concept README); day capture promoted and the three-up board rebuilt.
Test asserts the hall wall carries `dark_stucco`.
- [x] Building-appearance realism pass, measured against the reference set: bring the masonic
facade's material response (limestone value/roughness, joint lines, weathering streaks),
the banner/canopy and marquee materials, and the night emissive balance to the level of the
2009 facade photo and the 2026 street frames; capture before/after and record each delta.
(Ashlar field: `limestone_ashlar` tile, reference-anchored on the facade photo, 768 px over
~4.6 m of wall = ~167 px/m, promoted via the picks pipeline, warm-shifted tint behind
`VENUE_SPECS`. Banner cloth: warm self-light registered with `_marquee_emissive` (0.14 base;
0.28 night / 0.028 day). Marquee sign face + bulbs: warm-incandescent already in the prop
PALETTE, now test-verified to brighten at night via `_marquee_emissive`. Day and night
captures promoted, both three-up boards rebuilt.)
- [ ] Upgrade the facade from flat material bands to photoreal detail: either texture-projected
detail (Path B below) or AI-generated material tiles derived from the facade photo (with
provenance), then verify texel density, tiling and the night look.
- [ ] Integrate the result behind `WorldBuilder.VENUE_SPECS` with colliders, navigation obstacles,
occlusion and the existing day/night materials.
### Comedy Store map recreation
*Plan (2026-11-03): rebuild the Joke Shop venue geometry from the new local-only reference set
(`tmp/research/comedy-store/`, gitignored) and the four photo-anchored scene pairs now in
`docs/screens/concepts/joke_shop/`. Evidence wins for shape; the concepts win for material/mood.
Nothing is committed until the licence gate on any promoted reference and the map-budget tests
pass. The current `_build_comedy_store_building()` stays as the fallback.*
- [ ] Extract the real proportions from the local frames (facade width/height, canopy depth and
slope, blade-sign diameter and pole height, red curtain bay count, entrance recess, kerb
setback, hillside rise) and reconcile them against the current 27 m / 8.4 m / 12.2 m spec
in `WorldBuilder.VENUE_SPECS["joke_shop"]` and `docs/joke-shop-map.md`.
- [ ] Rank the shape-language gaps between the current procedural building and the four scene
pairs: canopy fascia depth, blade-sign shape/position, curtain-bay rhythm, entrance recess,
hillside silhouette and the neighbouring hotel/parking mass. Write the top-five fix list
with measurements.
- [ ] Rebuild the canopy + blade sign as library props or procedural geometry through the assisted
pipeline (`blender_assets.py inspect` → scripted edits → `audit`/`fit`), keeping the 4,000
prop-triangle budget; verify against the street/strip concept pairs before committing.
- [ ] Add the neighbouring hotel/parking ramp as a low-detail blocker mass (no interior) so the
block silhouette matches the hotel reference frame, inside the venue mesh budget.
- [ ] Re-work the facade field from flat boxes to the reference's actual banding: black stucco
field (`dark_stucco`), deep canopy shadow, fascia band, red curtain bays and the recessed
entrance, using the four concept pairs for value/mood targets.
- [ ] Re-run the map-budget, navigation, collider and day/night capture gates after the rebuild
(`godot --headless --path . --script res://src/test/test_runner.gd`,
`tools/check_screenshots.sh`), and refresh the Joke Shop three-up board and
`docs/joke-shop-map.md`.
- [ ] Update `docs/development-status.md`, `docs/asset-tooling.md` and `CHANGELOG.md` when the
rebuild lands; record any accepted deviations from the reference.
### Generated location imagery
*Skill route: `lookdev`, `lighting`, `environment-artist`, `texture-workflow`; tooling:
`tools/scene_concepts.py`, `tools/asset_pipeline.py`, `tools/screen_designs.py`.*
**Tool plan for reference-anchored generation (plan first, implement after this section's review):**
- [x] Add `scene_concepts.py generate --reference <photo.png>`: attach a licence-cleared real photo
as a source image to the OpenRouter image request (multimodal chat endpoint with a base64
data URL), with a prompt suffix that preserves the photographed facade geometry. Record the
reference file, its licence and page in the `.refgen.json` provenance sidecar next to the
generated frame.
- [x] Extend `generate_textures.generate_image()` with an optional `reference_path` argument
(base64 data URL of the photo); existing call signatures unchanged, and the path is gated by
`scene_concepts._reference_source` requiring a refs-board `SIDECAR.md` row (or an explicit
`--reference-unchecked`). Verified live on the El Capitan day concept anchored on the CC BY
2.0 2009 facade photo; tests in `ReferenceGateTests`.
- [x] Add a sidecar-driven variant pass: `scene_concepts.py anchor --reference <photo>
--treatments day,night,weathered` generates same-framing variants with treatment clauses,
one `.refgen.json` provenance sidecar per frame. Verified live on the facade photo (night +
overcast frames committed; the weathered treatment reads as mild overcast — noted on the
board). Tests in `AnchorTests`.
- [-] Generate facade, street and signage concept frames for the target block
(`scene_concepts.py generate --reference ...`), commit only the selected frames, and record
model, prompt, spend **and source photo** in the block sidecar. (First frame done:
`hollywood_boulevard_entrance_day-v2`, anchored on the facade photo; remaining framings
pending.)
- [ ] Derive palette, lighting and material targets from the real-photo board and the generated
concepts, and record the deltas the facade kit has to close.
- [ ] Generate signage, awning and poster texture candidates with `asset_pipeline.py`; run the
role audit and the `CREDITS.md` provenance check before anything is used in the kit.
- [ ] Compare generated concepts against the licensed photos: where they disagree, the photos win
for shape and the generated board only informs colour, mood and detail density. Human review
stays the acceptance gate, and AI output is never treated as licensed map data.
### QA and exit
- [ ] Compare the data-backed block against the existing screenshots and map documentation; keep
the stylized fallback available.
- [ ] Run the venue triangle/mesh budget, navigation and collider checks, plus day/night capture
comparisons.
- [ ] Capture day/night gallery frames of the new block and add before/after rows to `README.md`
and the venue map documents.
- [ ] Re-run `tools/check_screenshots.sh` after the map swap so the 21-shot gallery reflects the
new geometry, and refresh the `docs/screens/refs/` three-up sheets.
- [ ] Update `docs/architecture.md`, the venue map documents, `docs/asset-tooling.md`,
`docs/development-status.md` and `CHANGELOG.md` when the pipeline ships or a source is
rejected.
- [ ] Exit: one local block is reconstructed from licensed data with reference-derived photoreal
facades, passes performance/navigation/visual QA and has complete provenance; or the
pipeline is rejected with the findings recorded.
## Maintenance and documentation hygiene
Unversioned housekeeping that keeps the planning sources trustworthy. Do these when they block a
@@ -640,9 +638,8 @@ baseline; 0.10.0-rc.1 is the current candidate source, with release approvals st
| Area | Current baseline | Remaining gap | Risk | Milestone |
| --- | --- | --- | --- | --- |
| 3D model re-evaluation | 8 characters, 18 gear, 20+6 props audited against budgets/proportions; no skill-guided scorecard yet | Scorecard, ranked P0/P1 fixes, texel/weight/collider measurements and accept decisions | Unmeasured drift stays in the shipped library | Unversioned |
| 3D model and local map re-evaluation | 8 characters, 18 gear, 20+6 props and stylized venues audited against budgets/proportions; no skill-guided scorecard yet | Asset scorecard/repairs plus OSM/3D data, photoreal references, AI-assisted composition and map QA | Unmeasured drift, licensing/provenance or performance failure | Unversioned |
| Character development | 8-variant library; source/licence review and Quaternius/MakeHuman evaluation complete | Four crowd variants, role pools, gear fit and runtime integration | Repetition remains or external assets break the contract | Unversioned |
| Local map development | Stylized venue geometry and reference maps | OSM/3D data, photoreal references, AI-assisted composition and splat evaluation | Licensing/provenance or performance failure | Unversioned |
| Content and balance | 3 venues with validated 12+ event matrices, recovery events and contextual dialogue | External playtest evidence, balance/fairness pass, event-weight tuning and final content lock | Repetition or unfair outcomes survive into the release candidate | 0.10.0 |
| Dialog/UI | Audited terminology, copy, button states, focus/navigation, modal close, long strings and all 21 screen captures | Keep the capture/compare/judge gate current as content changes | Low; the remaining risk is drift after new UI is added | Complete (0.9.3) |
| Animation/presentation | Procedural pose layers, portrait captures, reduced hem clipping, 8,000/8,000 NPC cap | Thorough NPC silhouette/face/gear/pose/LOD optimization before visual QA | Close-up jank reduces perceived quality | Complete (0.9.4) |
@@ -655,8 +652,8 @@ baseline; 0.10.0-rc.1 is the current candidate source, with release approvals st
| Documentation | Architecture/ADR/status/roadmap ownership established | Final README/changelog/status/TODO/smoke-checklist sign-off and known-limitations page | Docs drift at launch | 0.9.6 / 0.10.0 |
| Future 0.x | Stable 0.x feature set | Live replay, more venues, VO/music, image-to-mesh props and seasonal content | Scope creep before release | Unscheduled |
**Current priority:** the unversioned **3D model re-evaluation** runs first because its findings
gate the crowd-variant roster; **Character development** and **Local map development** follow.
**Current priority:** the unversioned **3D model and local map re-evaluation** runs first because its findings
gate the crowd-variant roster; **Character development** follows.
The **0.10.0 release candidate** is the next versioned release; content lock, external playtest,
balance, save migration and release/legal sign-off remain tracked there. The source version is
0.10.0-rc.1; the v0.9.6 release is published. Earlier map/NPC/UI/texture/integration passes are