PROCITY/web/assets/credits.json
m3ultra 48033f48b1 Lane B R41 §41.5: the credits surface — and the game had never shown the OSM attribution it owes
THE CREDITS SURFACE. New web/assets/credits.json (schema procity-credits/1, the data file
every lane appends to — documented in LANE_B_NOTES §41 with a paste-ready row) + credits.js
(the panel, DOM only) + a HUD link. F2 or the link. Zero draws, zero boot fetches (0 before
open, exactly 1 after), zero fetches under ?noassets=1.

Seeding it found a LIVE OBLIGATION the game has never displayed: the 23 real-town caches are
OpenStreetMap data under ODbL 1.0, whose own source note says keep the credit visible. It now
rides the link and is context-aware — on an OSM boot the HUD reads '(c) OpenStreetMap
contributors · credits (F2)'; on the synthetic town, where no OSM data is on screen, it does
not claim it. three.js r175 MIT credited too. 14 entries seeded, all read off the repo.

Field law: licence 'unverified' is legal and a guess is not. Two gaps filed to E as amber
rather than invented: the 19-GLB base ped roster has NO per-asset licence record anywhere in
this repo (and CITY_SPEC's declared zone includes CC-BY and CGTrader RF — a credit may be
owed today), and the 18 house-library fittings still carry AUDIT.md's 38-round-old blanket
caveat despite shipping since R3.

A's D3 CLOSED. Re-measured over the shipped corpus at the golden seed: 27 towns, 1,838 shops,
81 venue lots, 81 of 81 taking the op-shop signage fallback — exactly 3 per town, in every
town. A's number reproduces to the digit. Bite drifted :344 -> :465 -> :483, hence a named
resolver: signStyleFor() tries B's nine palettes, then A's registry (gilt/stencil/club,
carried since R13), then op-shop as genuine last resort. Venue treatment is venue-gated by
construction. Deliberately NOT done: repainting the other nine types onto A's palettes
(record would go muted-teal -> hot-pink neon) — an art call for John, filed.

RULING 4 RESPECTED, NOTHING SPENT: frozen town, 136 station-yaw samples per arm, 544/544
identical on BOTH counters (draws and tris), 0 console errors. Pin method reproduces R40
exactly — default 282 noon / 291 NIGHT, classic 269 byte-exact. The nine-draw night margin
is intact. Classic purity: HUD DOM 2354:8 both arms, fetch surface identical, no
#pc-creditlink / overlay / F2 listener / PROCITY.credits.

Filed to F: three classic bookmarks are not byte-reproducible across boots even at HEAD
(2/5 HEAD-vs-HEAD) — a font race in the sign atlas. A screenshot golden on those cannot be
a byte-hash.

selfcheck ALL GREEN 157,647/157,647, fingerprint 0x5f76e76 unmoved.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-07 18:10:39 +10:00

209 lines
12 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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 © 20102025 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 base roster (17 normal + 2 comical)",
"kind": "mesh",
"licence": "unverified",
"attribution": null,
"required": false,
"source": "Copied byte-identical from the house game 90sDJsim (web/world/models/peds/); the canonical originals live outside this repo.",
"used_for": "Every walking citizen you meet on the street and every shopkeeper behind a counter.",
"count": 19,
"files": ["models/peds/man_*.glb", "models/peds/woman_*.glb", "models/peds/comical_*.glb"],
"evidence": "unverified",
"flag": "NO PER-ASSET LICENCE RECORD EXISTS IN THIS REPO. docs/CITY_SPEC.md ('NPC contract') declares the roster's zone as 'web-ok only (Mixamo, CC0/CC-BY, CGTrader RF)' — and CC-BY and CGTrader RF can both carry an attribution obligation, so if any one of these 19 is CC-BY the credit is owed and unrecorded. Lane E: resolve per asset against the 90sDJsim/character_kit sources before any public release.",
"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'",
"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"
}
]
}