diff --git a/docs/LANES/LANE_E_NOTES.md b/docs/LANES/LANE_E_NOTES.md index 981c407..6d368e5 100644 --- a/docs/LANES/LANE_E_NOTES.md +++ b/docs/LANES/LANE_E_NOTES.md @@ -1,5 +1,69 @@ # LANE E — cross-lane notes +## Round 36 wave 1 — the 2 a.m. commits, regularized ⟨v7.0⟩ + +**Scope: sweep `046668e` + `b339402` (July 20, landed outside the round system) into the pipeline — +provenance, licence table, structural checks, depot.** Everything below is measured off the committed +bytes, not the commit messages. + +**1. THE COUNT: the brief said 7 assets; there are NINE.** `046668e` = 4 dance clips. +**`b339402` = FIVE trellis DJ bodies, not 3** (`dj_phrtt_01 · dj_techno_01 · woman_dj_01/02/03` — the +commit's own diffstat says five, and all five are in `PED_NAMES`). All 9 swept; the table rows say 9. + +**2. THE ZONE CORRECTION — the dance clips are NOT Mixamo. They are ROKOKO.** The brief guessed the +Adobe Mixamo walk/idle/sit/look family; 90sDJsim's own clip baker (`tools/bake_clips.py`, the +`fbx_to_clip.py` port) names the true source: **Rokoko's free 263-asset motion-capture library**, +`Rokoko Studio (Mocap)/Dancing/{GentleSwayingDancing,NPC_DancingParty,DancingMedium,DancingwithDrink}_mixamo.fbx` +— the pack is on this box (`~/Documents/Rokoko_Free_Mocap_FBX_263`), the `_mixamo` suffix is **Rokoko's +own Mixamo-skeleton export** (which is why they bind like Mixamo clips without being Mixamo clips). +Licence verified at the source (rokoko.com, the pack's own download page): *"use them in any animation, +VFX, game, 3D art or other 3D project you want, **including for commercial use**"* — royalty-free, no +attribution demanded, motion only and mesh-free as shipped. **🟢 web-ok, but a NEW zone** — the licence +table gains a Rokoko row rather than quietly widening the Mixamo one. A licence spine that files a +Rokoko clip under Adobe's licence is the R25 spelling-fork one layer up: right answer, wrong authority. + +**3. Clip structure — the sit.glb checklist, run; the shape DEVIATES from sit/look and I'm recording +it, not normalizing it.** All 4: **mesh-free (0 meshes)**, 1 animation, **198 tracks**, dangling skin +**with inverseBindMatrices present**, **0 NaN / 0 Inf** across every sampler accessor (156k–268k floats +scanned per clip), durations 30.58 / 30.50 / 44.04 / 52.42 s (party/medium/drink/sway). But the Rokoko +export shape is **68 nodes, 52-joint skin** — not the Mixamo clips' 66 nodes / 195 tracks / 65-joint +skin. The bind census against a shipped ped skeleton (`man_casual_01`, 65 canonical bones): **65/66 +distinct canonicalised track targets bind; the sole unbound is `mixamorigReference`** (Rokoko's root +node — `_canon` can't map it, three.js drops the orphan track silently; matches 90sDJsim's in-game +64/65-tracks measurement). Not a defect: both repos verified the dancers animating in-scene. + +**4. Bodies — GLB law + ped law, PASS; one number F's gate must see.** Tris **4000 / 4000 / 3999 / +3999 / 3998** (≤5k ped law, the commit's "4k" claim is honest) · 1 material / 1 image / **tex 1024² +webp** (`EXT_texture_webp` — the whole existing roster carries the same extension, so no seam) · **no +Draco** · 65-joint mixamorig skin, IBM clean (0 NaN/1040). **⚠ → F (figure-scale gate, your wave 2): +the new bodies' bind-pose skeletons measure ~0.95–0.99 units tall; the pre-existing roster measures +~173–180** (the cm-scale convention). In-game this is absorbed by design — `rigs.js:163` scales every +rig to target height (`inner.scale.setScalar(height/span)`), and both repos eyeballed them animating — +but they joined the roster ungated and the R36 brief already routes them through your figure-scale +gate: this is the number it should expect. FLAG, not a fix; the files are untouched. + +**5. Provenance chain, proved not narrated.** All 9 procity GLBs are **sha1-identical to the 90sDJsim +originals** (`f8f0208` clips / `1906294` bodies, both July 20). Bodies' upstream: John's own DJ +characters (`grldj5/grldj2/djgrl3/techno_01/phrtt2`) — flux_local sheet → **TRELLIS.2 on-device mesh** +(the instrument-pipeline zone, CC0-equiv) → **Adobe Mixamo auto-rig** (full 65-bone) → MESHGOD +`scripts/fbx_to_ped.py` FBX→skinned-GLB + 4k decimate. Honest caveat: the source FBXs live in the +rigroom library (`~/meshgod-backups`, on **ultra** — not this box), so the mesh-generation step is +recorded from 90sDJsim's commit + both repos' `trellis'd DJ bodies` roster comments + MESHGOD's +rigroom autorig flow, while everything downstream of the FBX is verified from bytes here. + +**6. Depot — published per standing practice, verified by fetching the bytes back (R28 discipline).** +Staged to `_normalized/` (the sit/look pattern), pushed via the passwordless tailnet ingress under +**John's R22 standing authorization for Lane E assets**: `_published.json` **44 → 53**, drift check +`✓ all 53 recorded assets live`. Then all 9 fetched back from the **public** depot +(`https://digalot.fyi/3god/a/.glb`) — **HTTP 200, byte counts exact, sha1 identical to local, +9/9.** Gates re-run after the sweep: `validate_manifest` **OK — 0 errors, 0 warnings** (ped assets load +by convention, not the manifest — unchanged, same as walk/idle/sit/look) · `publish.py --verify` green. + +**→ F (wave 2), the full flag list from this sweep:** (a) the figure-scale number in §4; (b) the +clips' 68-node/52-joint Rokoko shape in §3 — if your gate pins the sit.glb structural template, +these four are legitimately different; gate on binds (65/66) and NaN (0), not node count; (c) nothing +else — no defective file found, nothing held back. + ## Round 28 — Spike 1: half of it shipped, half of it doesn't exist ⟨v5.1⟩ **1. `look.glb` — DONE, published, verified.** `Looking_Around.fbx` (675 KB, from the cached tailnet stash, @@ -809,6 +873,8 @@ loader wiring (`spawnRig`/fleet). Bench-sit loiter (Fable's stretch goal) reuses | Ped clip **⟨v3.1⟩** | `sit.glb` (E R16; + pre-existing `walk`/`idle` from D/90sDJsim) | Adobe **Mixamo** `Sitting_Idle.fbx` | `fbx_to_clip.py` (Blender, mesh-strip) | 🟢 Mixamo royalty-free (motion only, mesh stripped) | | Ped clip **⟨v5.1⟩** | `look.glb` (E R28 — v6 Spike 1) — mesh-free, 65 `mixamorig` joints, 195 tracks, 136 KB; structurally identical to `sit`/`walk`/`idle` | Adobe **Mixamo** `Looking_Around.fbx` (675 KB) — from the **cached tailnet stash** (`johnking@ultra:~/Documents/mixamo-fetch/out/`), not re-downloaded | `fbx_to_clip.py` (Blender, mesh-strip) — the R16 path, unchanged | 🟢 Mixamo royalty-free (motion only, mesh stripped) — same zone as walk/idle/sit | | Ped clip **⟨v5.1⟩ NOT BUILT** | `lean.glb` — **the source does not exist** (see R28 §1) | — | — | — | +| Ped dance clips **⟨v7.0⟩** | `dance_party` · `dance_medium` · `dance_drink` · `dance_sway` (4 — joined `046668e` outside the round system, swept R36 w1) — mesh-free, 68 nodes / 198 tracks / 52-joint dangling skin + IBM each, 0 NaN, 30.5–52.4 s | **Rokoko free motion-capture library** (263-asset pack, `~/Documents/Rokoko_Free_Mocap_FBX_263`, `Rokoko Studio (Mocap)/Dancing/*_mixamo.fbx` — Rokoko's own Mixamo-skeleton export). **NOT Mixamo** — R36 measured zone correction | 90sDJsim `tools/bake_clips.py` (the `fbx_to_clip.py` port, ACTIVE_ACTIONS fix) → sha1-identical copy into procity (`f8f0208` → `046668e`) | 🟢 **Rokoko royalty-free incl. commercial** ("use in any … 3D project … including for commercial use" — rokoko.com pack page); motion only, mesh-free | +| Ped bodies **⟨v7.0⟩** | `dj_phrtt_01` · `dj_techno_01` · `woman_dj_01/02/03` (**5, not the brief's 3** — joined `b339402` outside the round system, swept R36 w1) — 4000/4000/3999/3999/3998 tris, 1024² webp (`EXT_texture_webp`, roster-standard), no Draco, 65-joint mixamorig skin, IBM clean | John's own DJ characters (`grldj5/grldj2/djgrl3/techno_01/phrtt2`): `flux_local` sheet → **TRELLIS.2 on-device mesh** → Adobe **Mixamo auto-rig** (full 65-bone). Source FBXs in the rigroom library on ultra | MESHGOD `scripts/fbx_to_ped.py` (FBX→skinned GLB, 4k collapse-decimate, mixamorig + skin preserved) → sha1-identical copy (`1906294` → `b339402`) | 🟢 **CC0-equiv on-device mesh (the instrument-pipeline zone) + Mixamo auto-rig output (royalty-free)** · ⚠ figure-scale gate pending (R36 w2, F) | | Town pack **⟨v5.0-FINAL⟩** | **21 real AU towns, all 8 states/territories** — **1196 shops** (299 heroes) + real street geometry (`roads[]`) | **OpenStreetMap** via Overpass API — bounded per-town bbox; raw shops+roads snapshots committed in `_raw/` | `build_towns.py`: fetch → dedupe/suburb-fill/parody → C's §6 class map → 3× texture cap (drops counted) → v2 cache + roads | 🟢 **ODbL 1.0** (© OSM contributors; `web/assets/towns/SOURCES.md` + `license`/`attribution` on every cache) | | Godverse towns *(Lane G's, listed for completeness)* **⟨v5.0-FINAL⟩** | `newtown_godverse` (72 shops) · **`redhill_godverse` (37)** — the town whose record shop is THE shop. Both rostered in E's `index.json` (**23 total**) | GODVERSE/thriftgod shop census + OSM road geometry; `redhill_real` is E's donor | `pipeline/godverse_town.py` (**Lane G owns this provenance**) | 🟢 ODbL 1.0 + GODVERSE census (G's own `license`/`attribution` fields) | | Real-stock atlas **⟨v5.0-FINAL⟩** | **1 crate, 120 items**, 2×2048² webp — Monster Robot Party (`3962749`) | **the real POS** (`recordgod`) — crate 550 "DEEP HOUSE"; covers are **the shop's own product shots**, cached by dealgod | `pipeline/godverse_stock.py` (**Lane G owns**) — `snapshot`(DB-side, sha256-pinned) → `pack`(pure) | 🟡 **in-house-green — FLAG BEFORE ANY PUBLIC/COMMERCIAL RELEASE** · `sourcing:"real"` · ids `sku_` | diff --git a/pipeline/AUDIT.md b/pipeline/AUDIT.md index 6cc5012..47a85c3 100644 --- a/pipeline/AUDIT.md +++ b/pipeline/AUDIT.md @@ -481,3 +481,43 @@ helpers `organ()` + `grungechord()`). Audio pack **26 → 28 assets**. Old `pubr 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**. + +## Round 36 wave 1 — the 2 a.m. ped assets, swept (provenance + depot regularization) + +`046668e` (4 dance clips) + `b339402` (**5** trellis DJ bodies — the R36 brief said 3; the diffstat +says 5) landed July 20 outside the round system. R36 wave 1 swept all **9** into the pipeline; the +files themselves are untouched (byte-identical to both commits and to their 90sDJsim originals). + +**Dance clips — zone corrected by measurement: ROKOKO, not Mixamo.** Source = Rokoko's free 263-asset +mocap library (`~/Documents/Rokoko_Free_Mocap_FBX_263`, `Rokoko Studio (Mocap)/Dancing/*_mixamo.fbx`, +Rokoko's own Mixamo-skeleton export), baked mesh-free by 90sDJsim `tools/bake_clips.py` (the +`fbx_to_clip.py` port). Licence per the pack's rokoko.com page: royalty-free including commercial use. +Structure (all 4): 0 meshes · 68 nodes · 198 tracks · 52-joint dangling skin with IBM · 0 NaN/Inf · +binds 65/66 canonical targets on a shipped ped skeleton (only `mixamorigReference` unbound — dropped +silently by three.js; matches 90sDJsim's in-game 64/65). Durations 30.58/30.50/44.04/52.42 s. + +| clip | bytes | sha1 | +|---|---|---| +| dance_party.glb | 688 220 | 38587f7b0cf4aaf199f55677a139db087acdd80d | +| dance_medium.glb | 1 028 164 | 4a30fb62163b6e5137c8fb513dfc70d5f6f322b4 | +| dance_drink.glb | 962 464 | d818ddb0868e19c87a435b26c8b6ffab14832be4 | +| dance_sway.glb | 1 132 560 | 8af9112538e5219fc6a7b6cb36bf1e87e5ac24ff | + +**DJ bodies — on-device TRELLIS.2 mesh (CC0-equiv, the instrument zone) + Adobe Mixamo auto-rig, +converted/decimated by MESHGOD `scripts/fbx_to_ped.py`.** GLB law: no Draco, 1024² webp +(`EXT_texture_webp` — roster-standard), 1 mtl/1 img, 65-joint mixamorig skin, IBM 0 NaN. Ped law ≤5k: +PASS. ⚠ bind-pose skeleton spans ~0.95–0.99 units vs the existing roster's ~173–180 (cm convention) — +absorbed at spawn (`rigs.js:163` height/span normalize), flagged to F's R36-w2 figure-scale gate. + +| body | tris | bytes | sha1 | +|---|---|---|---| +| dj_phrtt_01.glb | 4 000 | 712 792 | 21cf0db5a291f88f7fd9b9cfdb0eac8413c7cf2e | +| dj_techno_01.glb | 4 000 | 702 760 | 4cb6bf44a752f921e14d1355f9944b7859c92386 | +| woman_dj_01.glb | 3 999 | 731 440 | 7d364dfc7e7659c0b15bead82a5d8bbd285e5286 | +| woman_dj_02.glb | 3 999 | 715 116 | 2413ededff1a7684999d6fd6fd58417b77f25c10 | +| woman_dj_03.glb | 3 998 | 718 128 | ec39692fa8019645bd200aab9eb6d1078535189c | + +**Depot:** staged to `_normalized/` (the sit/look practice) and published via the passwordless tailnet +ingress under John's R22 standing authorization — `_published.json` **44 → 53**, drift check green, and +all 9 fetched back from the public depot (`digalot.fyi/3god/a/`) sha1-identical to local. Gates after +the sweep: `validate_manifest` 0 errors / 0 warnings · `publish.py --verify` ✓ 53/53 live. diff --git a/pipeline/_published.json b/pipeline/_published.json index fd13935..b862d2d 100644 --- a/pipeline/_published.json +++ b/pipeline/_published.json @@ -1,4 +1,10 @@ [ + "dance_drink.glb", + "dance_medium.glb", + "dance_party.glb", + "dance_sway.glb", + "dj_phrtt_01.glb", + "dj_techno_01.glb", "look.glb", "procity_fit_arcade_cabinet_01.glb", "procity_fit_bass_guitar_01.glb", @@ -42,5 +48,8 @@ "procity_street_park_bench_01.glb", "procity_street_streetlight_01.glb", "sit.glb", - "vintage-cash-register.glb" + "vintage-cash-register.glb", + "woman_dj_01.glb", + "woman_dj_02.glb", + "woman_dj_03.glb" ] \ No newline at end of file