John looked at R41's proof shots and named three faults. All three are fixed, at zero draw cost, and every lane corrected somebody's numbers on the way — including its own. E-LOOK (§42.1+§42.2a) — THE PREMISE WAS WRONG. "The pub props have no texture" (my brief, quoting E's own R41 note) is false: all 37 carry COLOR_0 and three.js renders it. The colour was BLEACHED — jukebox at saturation 0.02, 15 assets under 0.05; what the source library called colour was baked AO. So the fix was a palette imposed on colour already present, in place: 46 assets, draw delta +0 and tri delta +0 on every one, proved the honest way — the concatenated POSITION/NORMAL/TEXCOORD/index bytes are sha1-identical to R41, so footprints and origins provably did not move. (A first-pass bbox check ignored node rotations and "found" 3 phantom violations; thrown out for the byte comparison.) The banquette was 1990s office teal and went burgundy; the beer umbrella was white and went brewery green. THE DECK, diagnosed before being touched: 7 greys, chassis 0.05 luminance on a 0.033 bench = 1.21:1, and the one high-contrast feature was INSIDE-OUT (white ring around a dark disc; a turntable is a dark record on a light platter). Now Technics silver at 6.74:1, black vinyl, red start/stop. Node contract re-read from the shipped GLB: 4/4 + 1/1 PASS. Filed to R43, not fixed: deck_1200_rigged has NO PLINTH (bottom 43mm of 119mm lost to R41 join damage). E-CAST (§42.3) — 19 of 24 ship. Rejected: comical_luchador_01 (Mixamo Ch43, purple mask reading EL CHUPACABRA, identified from the file's own material name), a 3-heads-tall cartoon child, a robed wuxia elder, a WW2 infantryman — and dj_phrtt_01, AN UNCLOTHED BODY whose only texture is a bare-skin atlas, which was in the DEFAULT crowd and live on the depot. It is the R41 deny-list's failure class through a different door: an innocent name from another pipeline. Only rendering all 24 and LOOKING found it. Ruling 2 (prefer CC0) was REFUSED ON MEASUREMENT: Quaternius is 25 nodes / 23 joints and ZERO of 64 canonical tracks bind — it would have loaded silently and never animated. Replacements came from Mixamo's Ch## pool, filtered to the contract-clean 65-bone family (candidates ran 65..99 bones; named characters carry facial/hair bones). THE LICENCE GAP WAS UNREAD, NOT MISSING: every source FBX carries ApplicationVendor "Mixamo, Inc." internally. Adobe royalty-free, no attribution owed. B's amber rows are now real. B (§42.5) — MY ASSIGNED FIX WAS USELESS AND B PROVED IT. document.fonts.ready shipped, then measured: the atlas canvases are already byte-identical across boots, the game ships NO webfonts (document.fonts.size === 0), and ready fires 50ms BEFORE the first fillText. The real cause of unreproducible bookmarks is the wall-clock CROWD — 983 changed px of 921,600, ALL in the pedestrian band; 0 px with the crowd out. New DBG.freeze() takes stable bookmarks 2/5 -> 5/5. Also found: ?pop=0 boots 140 citizens (0 is falsy against the default). THE BENCH: D's filing correct on both counts. Front-vs-road 90.0deg -> 0.0deg, min=med=max over 60/60 instances; the streetlight arm now reaches 1.05m over the road where it reached 0.00. Both used a base yaw that pointed +Z down the street while their own comments claimed otherwise — the side term was already right, which is why it survived 41 rounds of reading. Also: on any box with CDN access 9 of 60 benches are the depot GLB, 90deg out from the house law — normalised at the geometry, once, at load. benchStops(plan) exported as one truth. C (§42.2b) — 122 vs 123 WAS THE CAMERA ASPECT, and nobody was wrong. Draw counts are post-frustum-cull and the sweep camera inherits the window aspect: 1.25->116, 1.60->122 (C's harness), 1.778->123 (F's), 2.37->124. Pinned MEASURE_ASPECT=16/9 with a 1.25 control. E's "keep the bench dark" advice was measured and declined with reason (deck-vs-bench was already 4.73:1, over threshold). "Reads as a black box" is a claim about pixels, so C measured pixels: near-black in the booth crop 57.5% -> 26.7%, distinct colours 228 -> 389. Bench rebuilt 3->7 boxes with an open record bay; headphones on the mixer; faceDoor aims booths at the player's entry — alignment within 45deg went 49% -> 92%. Two bugs found by looking: a fitting could be planted INSIDE A WALL (0.77m of a 0.86m half-depth in plaster), and every booth part sat 25mm sunk into its own worktop. D (§42.4) — five swaps IN PLACE at the same index (pickRig indexes these arrays and pedIndex is in the identity signature and the impostor atlas; removal would renumber the town). Identity signature pre- vs post-swap: 0 differing lines of 150 — who each citizen is did not move, only which body they wear. dj_phrtt_01 verified gone AT THE WIRE, not from source: a fresh default boot fetches 32 ped GLBs, none retired. THE CONTROL ARM FOUND A 41-ROUND-OLD BUG: the ped being RETIRED, comical_boy_01, binds only 3,132 of 3,460 tracks — six thumb bones lack the mixamorig prefix. It had been silently dropping six tracks per clip since it shipped. Testing the thing being thrown away found it. Imported B's benchStops mid-round: sitters now 0.0deg to the road, signatures byte-identical across the rewire. Corrected F's filing: the browse smoke was flaky-by-construction (a 16-25s race against a live sim), not deterministically red. F (§42.6) — qa.sh --strict 24 passed / 0 failed / 0 warn / 0 skipped. New Gate 11: period law (0/5 banned; CONTROL: R41's roster trips all five) and roster licence (24/24, 0 unverified; CONTROL: an amber row turns 20 red). r41_shots.py promoted warn -> strict. R41'S BYTE-HASH BAN IS REVERSED AND ITS STATED REASON WITHDRAWN AS WRONG. A gate may pin a hash under five in-run assertions (classic+flags boot, freeze().stillLive all-false, a second freeze removing 0 draws, settle until DBG.info() stops changing, hash with the dbg panel hidden): 5/5 bookmarks now pin to one sha256 over 3 fresh boots. Two findings got it there — the chunk streamer (a fixed settle is a bet on load) and the fps readout, which with everything else frozen was the last thing moving at 53-62 px. ?pop=0 fixed (Number.isFinite) — a no-op for 35 rounds. Three red flags_check gates fixed. Street: noon 282 · NIGHT 291/300 — the nine-draw margin INTACT, every R41 row reproducing to the digit. Interior at pinned 16:9: 123 @ dept/auto, margin 227. selfcheck 157,647/157,647, 0x5f76e76 unmoved. No tag — John's playtest rules the epoch. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
224 lines
14 KiB
JSON
224 lines
14 KiB
JSON
{
|
||
"schema": "procity-credits/1",
|
||
"updated": "2026-08-07",
|
||
"round": 41,
|
||
"owner": "Lane B builds the surface; EVERY lane owns its own entries. Schema + how to append: docs/LANES/LANE_B_NOTES.md §41.",
|
||
"notice": "PROCITY is built from third-party libraries, open data and generated art. Everything below ships in this build. Entries marked REQUIRED carry an attribution the licence obliges us to show; the rest are recorded so the obligation can never arrive unnoticed. Where a source could not be established from this repo it says \"unverified\" — never a guess.",
|
||
"entries": [
|
||
{
|
||
"id": "openstreetmap",
|
||
"name": "OpenStreetMap",
|
||
"kind": "data",
|
||
"licence": "ODbL 1.0",
|
||
"attribution": "© OpenStreetMap contributors — data available under the Open Database License (ODbL) 1.0",
|
||
"required": true,
|
||
"source": "https://www.openstreetmap.org/copyright · fetched via the Overpass API (overpass-api.de), bounded per-town bbox",
|
||
"used_for": "Every real Australian town: 21 town caches (1,196 shops) plus their real street geometry, and the two GODVERSE towns built on the same road data. When you walk Fitzroy, those are Fitzroy's streets.",
|
||
"count": 23,
|
||
"files": ["assets/towns/*.json", "assets/towns/_raw/*.json"],
|
||
"evidence": "web/assets/towns/SOURCES.md · pipeline/build_towns.py · license/attribution fields on every cache",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "three-js",
|
||
"name": "three.js r175",
|
||
"kind": "engine",
|
||
"licence": "MIT",
|
||
"attribution": "Copyright © 2010–2025 three.js authors — MIT License",
|
||
"required": true,
|
||
"source": "https://threejs.org/ · vendored into web/vendor/ (no CDN at runtime)",
|
||
"used_for": "The renderer, the scene graph, the animation system, and the addons the shell uses: EffectComposer/RenderPass/UnrealBloomPass/OutputPass, GLTFLoader, PointerLockControls, BufferGeometryUtils, SkeletonUtils.",
|
||
"count": 1,
|
||
"files": ["vendor/three.module.js", "vendor/three.core.js", "vendor/addons/**"],
|
||
"evidence": "SPDX-License-Identifier: MIT in the vendored file headers · REVISION '175' in vendor/three.core.js",
|
||
"lane": "B"
|
||
},
|
||
{
|
||
"id": "mixamo-clips",
|
||
"name": "Adobe Mixamo — animation clips",
|
||
"kind": "motion",
|
||
"licence": "Adobe Mixamo royalty-free licence (use inside a game is permitted; redistributing the clips as clips is not)",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "Adobe Mixamo (Sitting_Idle, Looking_Around and the walk/idle family), converted mesh-free by pipeline fbx_to_clip.py",
|
||
"used_for": "Four of the eight motion clips every citizen in the town plays: idle, walk, sit (the seated drummer), look (the street glance). Motion only — the skeleton animation is retargeted onto PROCITY's own characters; no Mixamo geometry ships.",
|
||
"count": 4,
|
||
"files": ["models/peds/idle.glb", "models/peds/walk.glb", "models/peds/sit.glb", "models/peds/look.glb"],
|
||
"evidence": "docs/LANES/LANE_E_NOTES.md — provenance table, rows ⟨v3.1⟩ and ⟨v5.1⟩",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "rokoko-mocap",
|
||
"name": "Rokoko — free motion-capture library",
|
||
"kind": "motion",
|
||
"licence": "Rokoko free-pack licence — royalty-free including commercial use",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "rokoko.com free 263-asset mocap pack (Rokoko Studio Mocap / Dancing), baked mesh-free",
|
||
"used_for": "The four dance clips the pub crowd and the DJs play: dance_party, dance_medium, dance_drink, dance_sway.",
|
||
"count": 4,
|
||
"files": ["models/peds/dance_*.glb"],
|
||
"evidence": "pipeline/AUDIT.md — 'Round 36 wave 1', the measured zone correction (these are Rokoko, not Mixamo, despite the _mixamo skeleton suffix)",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "ped-bodies-base",
|
||
"name": "Citizen bodies — the character roster",
|
||
"kind": "mesh",
|
||
"licence": "Adobe Mixamo royalty-free licence (use inside a game is permitted; redistributing the characters as assets is not)",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "Adobe Mixamo numbered character pack (Ch01–Ch49), downloaded as FBX to John's sorted library and converted by pipeline/ped_from_fbx.py → gltf-transform weld/simplify → pipeline/merge_ped.py. Resolved per asset in R42 §42.3: every source FBX carries Original|ApplicationVendor = 'Mixamo, Inc.' and Original|ApplicationName = 'mixamo.com' in its own FBX header, and each ped's material names carry its Mixamo character id (man_casual_01 = Ch01_Shirt, comical_luchador_01 = Ch43_Body, and so on for all 24).",
|
||
"used_for": "Every walking citizen you meet on the street and every shopkeeper behind a counter.",
|
||
"count": 24,
|
||
"files": ["models/peds/man_*.glb", "models/peds/woman_*.glb", "models/peds/person_*.glb", "models/peds/comical_*.glb"],
|
||
"evidence": "E-progress.md §42.3 — the per-asset audit table (file → Mixamo Ch id → in-file vendor string) · docs/LANES/LANE_E_NOTES.md §42.3",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "ped-bodies-dj",
|
||
"name": "Citizen bodies — the DJ five",
|
||
"kind": "mesh",
|
||
"licence": "Original work (CC0-equivalent mesh) + Adobe Mixamo auto-rig output (royalty-free)",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "John's own DJ characters: an on-device FLUX.2-klein-4B concept sheet → TRELLIS.2 mesh on this box → Mixamo auto-rig → MESHGOD fbx_to_ped.py",
|
||
"used_for": "The dance-scene bodies in the venues (not in the ?classic=1 crowd).",
|
||
"count": 5,
|
||
"files": ["models/peds/dj_*.glb", "models/peds/woman_dj_*.glb"],
|
||
"evidence": "docs/LANES/LANE_E_NOTES.md — provenance table, row 'Ped bodies ⟨v7.0⟩' · pipeline/AUDIT.md 'Round 36 wave 1'",
|
||
"flag": "LICENCE IS FINE; ONE ASSET IS NOT SHIPPABLE. R42 §42.3 rendered all five and found dj_phrtt_01.glb is an unclothed body — its single 1024² texture is a bare-skin atlas, there is no garment on the asset at all. It is admitted to the crowd on every non-?classic boot (loadPedFleet opts.djs defaults to `dance`) and it is live on the shared depot. Lane E has staged its replacement (man_smart_01.glb, Mixamo Ch23, same contract); Lane D removes it from PED_NAMES.djs in §42.4. Withdraw the depot copy at the same time.",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "ped-bodies-withdrawn",
|
||
"name": "Citizen bodies withdrawn from the roster (R42 period audit)",
|
||
"kind": "mesh",
|
||
"licence": "Adobe Mixamo royalty-free licence (same as the roster they came from)",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "Adobe Mixamo Ch39 / Ch49 / Ch09 / Ch43. Recorded here rather than deleted quietly, because 'why is that gone' is a question a credits panel should be able to answer.",
|
||
"used_for": "Nothing, by ruling. They failed R42's period law (PROCITY is 1990s Australia): a robed fantasy elder, a WW2 infantryman, a cartoon child at three-heads-tall, and a masked luchador. Their replacements are in the roster row above.",
|
||
"count": 4,
|
||
"files": ["models/peds/man_elder_01.glb", "models/peds/man_soldier_ww2_01.glb", "models/peds/comical_boy_01.glb", "models/peds/comical_luchador_01.glb"],
|
||
"evidence": "E-progress.md §42.3 audit table · docs/shots/laneE/r42_roster_rejects.jpg",
|
||
"flag": "STILL PRESENT IN THE TREE AND STILL IN PED_NAMES. Lane E deliberately did not delete them: rigs.js references them by literal name, and removing the files mid-round would shorten the fleet, renumber pickRig and move Lane F's crowd goldens while §42.4 (the wiring wave) has not run. Lane D removes them from PED_NAMES in §42.4; the files and their depot copies go with that change.",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "gen-skins",
|
||
"name": "Texture skins — facades, skies, grounds, wallpapers, interiors, posters",
|
||
"kind": "texture",
|
||
"licence": "Original work (CC0-equivalent)",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "Generated on this machine by pipeline/gen_skins.py driving MODELBEAST flux_local (FLUX.2-klein-4B), plus ports of the house games 90sDJsim and thriftgod. Prompted with 'no text, no brands, no people'.",
|
||
"used_for": "Every shopfront in the town, every sky, every footpath and road, every interior wall and floor, and the gig posters.",
|
||
"count": 103,
|
||
"files": ["assets/gen/*.jpg"],
|
||
"evidence": "pipeline/AUDIT.md (§ skins, R38 §3, R39 §5) · docs/LANES/LANE_E_NOTES.md provenance table",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "audio-pack",
|
||
"name": "Sound and music",
|
||
"kind": "audio",
|
||
"licence": "Original work (CC0-equivalent)",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "100% procedural synthesis — pipeline/gen_audio.py, numpy oscillators and noise renders through ffmpeg. No sample library, no recording, no neural model.",
|
||
"used_for": "Street and room ambience, the shop bells and till and door and footsteps, the tram, the magpie and the mower, and every music bed including the three gig genres.",
|
||
"count": 29,
|
||
"files": ["assets/audio/*.ogg", "assets/audio/*.m4a"],
|
||
"evidence": "pipeline/AUDIT.md — 'Round 11 audio pack provenance', R12, R13, R38 §2",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "props-house-library",
|
||
"name": "Shop fittings and street furniture — the house library set",
|
||
"kind": "mesh",
|
||
"licence": "unverified",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "Generic props pre-sorted into John's house 3D library (benches, shelving, counter, crate, bin, streetlight, food cart …), normalized to the house GLB law by pipeline/normalize.py.",
|
||
"used_for": "The benches, bins, streetlights and bus stops on the footpath, and the shelving, racks, counters and crates inside the shops.",
|
||
"count": 18,
|
||
"files": ["manifest.json → fittings / furniture (served from the 3GOD depot)"],
|
||
"evidence": "pipeline/AUDIT.md — 'Normalized set' + the blanket caveat under QUARANTINE",
|
||
"flag": "No explicit per-asset licence record. All 18 source filenames were checked against known trademarks (0 hits) and branded/designer pieces were quarantined out of the manifest, but 'unclear ⇒ quarantine' is the house rule: record a one-line source per asset before any public release.",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "props-on-device",
|
||
"name": "Shop fittings, hero props and gig instruments — generated here",
|
||
"kind": "mesh",
|
||
"licence": "Original work (CC0-equivalent)",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "MODELBEAST flux_local (FLUX.2-klein-4B) concept → RMBG-2.0 cutout → TRELLIS.2 reconstruction → pipeline/normalize.py + bake_lowpoly.py / decimate_props.py. All on this box, no cloud key, $0.",
|
||
"used_for": "The listening booth, drinks fridge, arcade cabinet, milkshake mixer and novelty record; the five band instruments on every stage; the magpie, the paling fence and the water tank in the backyards.",
|
||
"count": 14,
|
||
"files": ["manifest.json → fittings / furniture (served from the 3GOD depot)"],
|
||
"evidence": "pipeline/AUDIT.md — 'Provenance — round-3 hero props', R12/R13 gig instruments, R38 §4, R39 §6",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "props-fal-hunyuan",
|
||
"name": "Three props generated through fal.ai",
|
||
"kind": "mesh",
|
||
"licence": "Original work",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "An on-device flux_local concept image reconstructed by fal-ai/hunyuan3d/v2 — the only outside spend in the project, about $0.64 in total.",
|
||
"used_for": "The glass display case, the magazine rack and the bus shelter (TRELLIS could not hold their thin or transparent geometry).",
|
||
"count": 3,
|
||
"files": ["manifest.json → fittings / furniture (served from the 3GOD depot)"],
|
||
"evidence": "pipeline/AUDIT.md — 'Round 5 — E3: fal.ai fallback props'",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "godverse-stock",
|
||
"name": "Record, book and toy cover art in the crates",
|
||
"kind": "stock",
|
||
"licence": "In-house only — cleared for this build, NOT cleared for public release",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "Product photographs from the real shop (Monster Robot Party) via the recordgod point-of-sale, and from real dealgod seller listings — the sellers' own product shots, baked into atlases by pipeline/godverse_stock.py.",
|
||
"used_for": "The sleeves you flip past in a record bin and the spines and boxes on the shelves, when the stock layer is on.",
|
||
"count": 15,
|
||
"files": ["assets/stock_godverse/*/"],
|
||
"evidence": "docs/LANES/LANE_E_NOTES.md — provenance table, rows 'Real-stock atlas' and 'Mint atlases' (both amber)",
|
||
"flag": "FLAG BEFORE ANY PUBLIC OR COMMERCIAL RELEASE. These are real photographs taken by real sellers; minting changes whose stock the game claims it is, never whose photograph it is. Clearing them is a human decision, not a gate's.",
|
||
"lane": "G"
|
||
},
|
||
{
|
||
"id": "gen-models",
|
||
"name": "The on-device generation stack",
|
||
"kind": "tool",
|
||
"licence": "FLUX.2-klein-4B — Apache-2.0 · TRELLIS.2 and RMBG-2.0 — used as reconstruction/segmentation tools, no model weights ship",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "MODELBEAST, running locally on an Apple M3 Ultra. Nothing was downloaded from an asset pool and no cloud key was used except the one noted above.",
|
||
"used_for": "Not shipped in the game — recorded because it is what produced the skins, meshes and props credited above, and a generator's licence is where an obligation would hide.",
|
||
"count": 3,
|
||
"files": [],
|
||
"evidence": "pipeline/AUDIT.md — R38 §6, R39 §5 (licence tables) · pipeline/README.md",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "fonts",
|
||
"name": "Typefaces",
|
||
"kind": "font",
|
||
"licence": "n/a — no font files ship",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "House law: canvas text only, no font files. Every sign, poster and menu is drawn with the operating system's own font stack (Arial / -apple-system / Segoe UI / Roboto), so nothing is embedded or redistributed.",
|
||
"used_for": "Every shop sign in the town, the band names on the posters, and this panel.",
|
||
"count": 0,
|
||
"files": [],
|
||
"evidence": "README.md — 'House laws' (canvas text, no font files)",
|
||
"lane": "B"
|
||
}
|
||
]
|
||
}
|