Lane E R14 (v3.0 release): provenance freeze + doc-consistency fixes
Provenance close-out for the v3.0 tag. Verified via a 6-agent inventory+audit workflow (both adversarial audits PASS, 0 blockers) cross-checked against glb_stat/ffprobe/manifest. - LANE_E_NOTES: v3.0-FROZEN provenance table + full audio(28)/GLB(38)/skins(96)/packs(3) inventories; by-design notes + v3.1 deferrals (street_bin decimation). - AUDIT.md: add R13 gig-layer finalization section (14k decimation, _hi published, gigKey rename + 2 beds, depot publish done) — ledger was stale at R12. - manifest glb_law string: state the documented <=8k-hero / <=14k-instrument tiers so the frozen contract is self-consistent (regenerated; 1-line diff, Gate 3 still 0/0). - gen_audio: roomtone-video gain 0.3 -> 0.35 to match the shipped manifest. Gate 3 GREEN; publish.py --verify clean; 0 quarantine assets in manifest; goldens unmoved (synthetic 0x3fa36874, gig 0x1f636349). No new synthesis (genres final); no poster templates (no ask from B). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
f8ab837985
commit
55f6698fb2
@ -1,5 +1,87 @@
|
||||
# LANE E — cross-lane notes
|
||||
|
||||
## Round 14 — v3.0 PROVENANCE FREEZE ✅ (release round)
|
||||
|
||||
> **FROZEN for the v3.0 tag** (2026-07-16). Lane E R14 is a provenance close-out — **no new synthesis**
|
||||
> (genres final: pubrock / grunge / covers; John "fine for now"). Everything below is the durable
|
||||
> Lane-E release contract; the deep per-asset narrative lives in `pipeline/AUDIT.md` (current through
|
||||
> its R13 section). Counts tool-verified (glb_stat / ffprobe / manifest parse) and adversarially
|
||||
> re-audited by two independent passes — both PASS, **0 release blockers**.
|
||||
|
||||
**Release status**
|
||||
- **Gate 3 GREEN** — `validate_manifest.py --depot` → 0 errors, 0 warnings. Not blocking the tag.
|
||||
- **`publish.py --verify`** — depot matches `_published.json` (38 entries). The lone drift note
|
||||
(`vintage-cash-register.glb` absent from the *tailnet mirror*) is cosmetic: it's a depot-reuse asset
|
||||
and IS live on the public `digalot.fyi` depot (Gate 3 confirms), so the manifest's real target is fine.
|
||||
- **Licensing 🟢 clean** — 0 quarantined/branded assets in the manifest (grep of every AUDIT QUARANTINE
|
||||
token — vitra/eames/calligaris/ikea/technics/1210/tuborg/uploads_files/akai/mpc/turntable — → 0 hits).
|
||||
- **Poster templates (R13 debt #4): no ask from B** → no new templates (E builds only on B's ask).
|
||||
- R14 doc-consistency fixes applied: AUDIT.md R13 section added; `roomtone-video` gain 0.3→0.35 aligned
|
||||
to the manifest; manifest `glb_law` string amended to state the ≤8k-hero / ≤14k-instrument exceptions.
|
||||
|
||||
### Provenance & licensing — by source zone (all 🟢 web-ok)
|
||||
|
||||
| zone | assets | source | method | licence |
|
||||
|---|---|---|---|---|
|
||||
| House library GLBs | 18 | thriftgod / house depot, John-presorted **generic** props (benches, shelves, counter, crate, bin, streetlight, food_cart…) — no recognizable trademark | `normalize.py` (passthrough or COLLAPSE ≤5k) | 🟢 web-ok |
|
||||
| On-device synthetic GLBs | 11 (+5 `_hi`) | MODELBEAST `flux_local` (FLUX.2-klein-4B) concept → `trellis_mac` mesh | 6 hero via `bake_lowpoly.py` (≤8k) · 5 gig instruments via `normalize`→`decimate_props.py` (14k) | 🟢 CC0-equiv, 100% on-device |
|
||||
| fal-Hunyuan GLBs | 3 | `flux_local` concept → `fal-ai/hunyuan3d/v2` (glass_case, magazine_rack, bus_shelter) | `bake_lowpoly.py` (≤8k) | 🟢 original (~$0.64 total spend) |
|
||||
| Depot-reuse GLB | 1 | `cash_register` = John's own `thriftgod_hero` (already live) | reuse (not regenerated) | 🟢 cleared |
|
||||
| Skins (2D) | 96 | 90sDJsim ports (7 facade + 2 ground) + thriftgod R1 store-art + `flux_local` gap-fill fronts/posters | `gen_skins.py --local` (on-device) | 🟢 web-ok |
|
||||
| Audio pack | 28 | 100% procedural numpy synthesis (`gen_audio.py`) | oscillator/noise render → ffmpeg OGG+M4A | 🟢 CC0-equiv, parody-safe |
|
||||
| Stock packs | 3 (350/311/273) | GODVERSE `dealgod` Postgres — **real** cover art | `build_stock_pack.py`: parody-transform metadata + atlas | 🟢 real-art / parody-metadata |
|
||||
|
||||
**GLB fleet = 33 manifest (23 fit + 10 furniture) + 5 `_hi` = 38 published.** Only external spend ever:
|
||||
~$0.64 (fal-Hunyuan, R5). Everything else is $0 / on-device (electricity only).
|
||||
|
||||
### Audio inventory — 28 assets (`web/assets/audio/`, committed; contract = `manifest.audio`)
|
||||
|
||||
All procedural, seeded, $0, parody-safe; OGG/Opus + M4A/AAC; beds+music loudnorm −16 LUFS, SFX peak-norm.
|
||||
|
||||
| group | n | assets | gig? |
|
||||
|---|---|---|---|
|
||||
| ambience | 7 | street-day, street-night, rain, roomtone-{retail,milkbar,video}, **crowd-walla** | crowd-walla `gig:true` |
|
||||
| sfx | 8 + 6 steps | doorbell, door-open, till, riffle, toast, tram-bell, tram-rumble(loop), **applause**; footstep{pavement×3, timber×3} | applause `gig:true` |
|
||||
| music | 7 | record-shop, milkbar, video-synth, arcade, **gig-pubrock**, **gig-grunge**, **gig-covers** | 3 gig beds `gig:true` |
|
||||
|
||||
- **Gig beds (R13, the manifest key IS the gigKey `gig-<genreKey>`):** `gig-pubrock` (pub, 0.6, 13.4s),
|
||||
`gig-grunge` (band_room, 0.6, 17.2s), `gig-covers` (rsl, 0.5, 19.2s). Seamless loops, non-silent
|
||||
(verified −15.7…−17.6 dB mean). Old `pubrock-live` fully retired (files gone, no live refs).
|
||||
|
||||
### GLB inventory — 38 (tri counts glb_stat-verified; footprints/heights match manifest; no Draco, tex ≤1024)
|
||||
|
||||
**Fittings (23):** record_crate 5k · wire_shelf 330 · clothes_rack 3.2k · bookshelf 5k · cube_shelf_wide 5k ·
|
||||
counter 276 · coffee_table 495 · work_table 1.6k · box_crate 78 · crate_stack 3k · **listening_booth 8k ·
|
||||
drinks_fridge 8k · arcade_cabinet 8k · milkshake_mixer 8k · counter_till 8k** (bake_lowpoly hero) ·
|
||||
**glass_case 8k · magazine_rack 8k** (fal) · **electric_guitar / bass_guitar / drum_kit / guitar_amp /
|
||||
mic_stand = 14k each** (R13 decimate) · cash_register 6k (reuse).
|
||||
**Furniture (10):** bench 1.9k · bench_modern 640 · bench_wood 4k · longbench 1.2k · park_bench 5k ·
|
||||
streetlight 5k · food_cart 5k · **novelty_record 8k** (bake_lowpoly) · **bus_shelter 8k** (fal) · bin 3k.
|
||||
**Preserved `_hi` originals (5, on depot, NOT manifest-referenced — LOD/re-bake source):**
|
||||
electric_guitar 43.5k · bass_guitar 36k · mic_stand 34.1k · drum_kit 26.2k · guitar_amp 96.6k.
|
||||
|
||||
### Skins — 96 (`web/assets/gen/*.jpg`, local; all present, 0 missing/orphan)
|
||||
|
||||
facade 48 (43 blank + 5 baked-sign: djsim-video/milkbar/pub, market, grimy) · sky 10 · ground 10 ·
|
||||
wall 8 · interior floor 6 · interior surface 7 · awning 3 · **poster 4** (grunge/retro/screenprint/xerox,
|
||||
blank name-band). Per-shop-type facade coverage ≥2 for all types (validate_manifest asserts; min = 3).
|
||||
|
||||
### Stock packs — 3 (indexes committed in `pipeline/packs/`; atlases on depot; read directly by Lane C)
|
||||
|
||||
record 350 (6 atlases, 256²) · book 311 (4 atlases, 176×256) · toy 273 (5 atlases, 256²). Real cover art
|
||||
(GODVERSE), **parody-transformed metadata** (sha256-seeded word-banks; no real trademarks). All pass `validate_pack`.
|
||||
|
||||
### By-design notes (documented so a future reader doesn't re-flag them)
|
||||
- **5 `_hi` in `_published.json` but not the manifest** — intentional archival hi-poly originals (R13).
|
||||
- **Stock-pack indexes not in the manifest** — by design; Lane C reads `pipeline/packs/*` directly, atlases ship on the depot.
|
||||
- **`glb_law` tiers** — ≤5k library / ≤8k baked hero (TRELLIS shell-soup, texture-intact) / ≤14k gig instruments; now stated in the manifest convention string + AUDIT.
|
||||
- **`validate_manifest` prints "skins 85 groups"** — a shallow `sk.values()` count (the nested `interior` dict counts as 1); true leaf total is 96. Cosmetic label, flagged for v3.1.
|
||||
- **Minor stale ledger figures** (non-live): `food_cart` 4991 vs `_normalize_results` 5000 (9-tri); a superseded `cube_shelf_01` entry in `_normalize_results` (DROP-filtered from the manifest, rejected in AUDIT). Harmless.
|
||||
|
||||
### Deferred to v3.1 (documented, not started)
|
||||
- **`street_bin` decimation** — B's non-blocking, *conditional* ask ("if the combined-lane budget tightens"); the bin is ~3k tris (within house law), and B measured ~100k tri / ~150 draw margin at the busiest block, so no action for v3.0.
|
||||
- **Texture-bake-to-lowpoly / KTX2-Basis atlas pass** — if a future budget tightens; the `_hi` instrument originals + the hero props are the LOD source (R9 VRAM note + AUDIT).
|
||||
|
||||
## Round 13 — two genres, the gigKey rename (debt #1), lighter instruments
|
||||
|
||||
**v3.0-beta THE DISTRICT.** All local work landed + verified; the one gated step (depot publish)
|
||||
|
||||
@ -448,5 +448,36 @@ by D's band rigs; primitive fallback if a GLB is absent (house law).
|
||||
- Same TRELLIS tri-weight tradeoff as round-3 props (30–96k tris vs the ≤5k library law) — accepted
|
||||
for focal/optional/LOD-able stage props seen at mid-distance; texture-bake-to-lowpoly is the
|
||||
follow-up. Amp (96k) is the outlier — a candidate for that pass first. Eyeballed (contact sheet).
|
||||
- Staged to `web/assets/models/` for local validation (`?localdepot=1`). **Depot publish PENDING
|
||||
John's OK** (the classifier gates the outward-facing push; provenance recorded here first).
|
||||
- Staged to `web/assets/models/` for local validation (`?localdepot=1`). Depot publish was
|
||||
**PENDING John's OK** at R12 → **DONE in R13** (see the R13 section below; the 30–96k figures in
|
||||
the table above are the R12 originals, decimated to 14k each in R13).
|
||||
|
||||
## Round 13 — gig-layer finalization (v3.0-beta, `?gigs=1`)
|
||||
|
||||
Supersedes the R12 instrument table + pending-publish note above. Three closes, all 🟢 provenance
|
||||
unchanged (100% on-device synthetic / procedural — decimation and renaming don't touch the licence zone):
|
||||
|
||||
**1. Instrument decimation (`pipeline/decimate_props.py`, Blender collapse-decimate — NOT voxel-remesh,
|
||||
so thin features survive).** The R12 instruments were the TRELLIS shell-soup tri-weight outlier; a
|
||||
district means multiple concurrent stages, so all 5 were taken to a uniform **14 000 tris** (fleet
|
||||
**236k → 70k, −70%**). Collapse (keeps original UVs/textures, no re-bake) held the mic boom pole + cable,
|
||||
drum cymbals/stands and guitar necks — verified by re-rendered thumbs. The high-poly originals are kept
|
||||
as `_hi` variants (published to the depot as archival source, not manifest-referenced).
|
||||
|
||||
| instrument | R12 tris → R13 | `_hi` original | footprint (m) | h (m) |
|
||||
|---|---|---|---|---|
|
||||
| electric_guitar | 43 451 → **14 000** | 43 451 (`_hi`) | 0.38 × 0.08 | 1.00 |
|
||||
| bass_guitar | 36 031 → **14 000** | 36 031 (`_hi`) | 0.34 × 0.12 | 1.15 |
|
||||
| mic_stand | 34 079 → **14 000** | 34 079 (`_hi`) | 0.57 × 0.57 | 1.70 |
|
||||
| drum_kit | 26 238 → **14 000** | 26 238 (`_hi`) | 1.50 × 1.24 | 1.30 |
|
||||
| guitar_amp | 96 583 → **14 000** | 96 583 (`_hi`) | 0.51 × 0.29 | 0.61 |
|
||||
|
||||
**2. gigKey rename + two new beds (debt #1).** The manifest music key IS the gigKey, always
|
||||
`gig-<genreKey>`. `music-pubrock-live` → **`gig-pubrock`**; added **`gig-grunge`** (band_room) and
|
||||
**`gig-covers`** (rsl, organ-led) — all procedural numpy synth, $0, seamless, parody-safe (new synth
|
||||
helpers `organ()` + `grungechord()`). Audio pack **26 → 28 assets**. Old `pubrock-live` files deleted.
|
||||
|
||||
**3. Depot publish — DONE (John OK'd direct publish, R13).** Pushed via the passwordless tailnet
|
||||
ingress (this box is allowlisted): the 5 base names now serve **14k bytes** + the 5 `_hi` originals are
|
||||
live. Verified on the public `digalot.fyi` depot (amp base **5.9 MB → 1.31 MB**, `_hi` 5.9 MB live).
|
||||
`_published.json` **33 → 38**. `validate_manifest --depot` GREEN; Gate-3 provenance flag **cleared**.
|
||||
|
||||
@ -269,7 +269,10 @@ def build():
|
||||
"version": 1,
|
||||
"depot": DEPOT,
|
||||
"conventions": {
|
||||
"glb_law": "metres, +Y up, origin at base (minY=0, centred X/Z), <=5k tris, WebP <=1024, no Draco",
|
||||
"glb_law": "metres, +Y up, origin at base (minY=0, centred X/Z), WebP <=1024, no Draco; "
|
||||
"tris <=5k for library props, with documented exceptions for focal/LOD-able assets: "
|
||||
"baked hero props <=8k (TRELLIS shell-soup, texture-intact) and gig instruments <=14k "
|
||||
"(v3.0; hi-poly _hi originals on the depot) — see AUDIT.md + LANE_E_NOTES",
|
||||
"facing": "symmetric props are orientation-agnostic; normalize.py applies no automatic "
|
||||
"facing-correction (per-asset yaw is available in batch.json) — Lane B/C rotate "
|
||||
"directional props (counter, food_cart) to taste when placing",
|
||||
|
||||
@ -692,7 +692,7 @@ PACK = {
|
||||
"ambience-rain": ("ambience", amb_rain, dict(loop=True, gain=0.45, note="layer over street beds")),
|
||||
"roomtone-retail": ("ambience", amb_roomtone_retail, dict(loop=True, gain=0.35)),
|
||||
"roomtone-milkbar": ("ambience", amb_roomtone_milkbar, dict(loop=True, gain=0.35)),
|
||||
"roomtone-video": ("ambience", amb_roomtone_video, dict(loop=True, gain=0.3)),
|
||||
"roomtone-video": ("ambience", amb_roomtone_video, dict(loop=True, gain=0.35)),
|
||||
# sfx
|
||||
"sfx-doorbell": ("sfx", sfx_doorbell, dict(loop=False, gain=0.7)),
|
||||
"sfx-door-open": ("sfx", sfx_door_open, dict(loop=False, gain=0.6)),
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
"version": 1,
|
||||
"depot": "https://digalot.fyi/3god",
|
||||
"conventions": {
|
||||
"glb_law": "metres, +Y up, origin at base (minY=0, centred X/Z), <=5k tris, WebP <=1024, no Draco",
|
||||
"glb_law": "metres, +Y up, origin at base (minY=0, centred X/Z), WebP <=1024, no Draco; tris <=5k for library props, with documented exceptions for focal/LOD-able assets: baked hero props <=8k (TRELLIS shell-soup, texture-intact) and gig instruments <=14k (v3.0; hi-poly _hi originals on the depot) \u2014 see AUDIT.md + LANE_E_NOTES",
|
||||
"facing": "symmetric props are orientation-agnostic; normalize.py applies no automatic facing-correction (per-asset yaw is available in batch.json) \u2014 Lane B/C rotate directional props (counter, food_cart) to taste when placing",
|
||||
"facade_blank_signboard": "facades tagged signboard:'blank' ship a blank sign panel \u2014 Lane B overlays the shop name there. signboard:'baked' facades (some djsim-* Flux skins) already have sign text: use as-is, don't overlay",
|
||||
"facade_face": "facade entries without a 'face' key are front elevations (shop or house fronts); face:'side' entries are windowless corner-lot side walls with empty types \u2014 never select one as a shop front",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user