EXPORT HUB. An 8-agent pass read every consumer's ACTUAL loader code (not its docs) and
adversarially re-verified each contract, because writing a wrong filename into a live game
directory corrupts shipping assets silently. The result reframed the whole feature: of six
targets, only TWO ingest by file drop.
· 3GOD depot is wireable today, but NOT the way the plan assumed. Its auth trusts the raw socket
peer against a tailnet allow-list, so through the digalot.fyi Cloudflare front the peer is CF
and every write 403s. Measured live: /api/list reports authed=false via CF, authed=true direct
on http://100.94.195.115:8788. (thriftgod's shipped prop_campaign.py --publish defaults to the
CF URL and is broken for exactly this reason.) This is the high-value target — thriftgod AND
procity both read their props from it.
· The depot's clean_name DELETES illegal characters instead of substituting, so 'shop!-cat.glb'
becomes 'shop-cat.glb' — an existing, different mesh — and is then served silently. Reproduced
the rule exactly and added a pre-flight collision check that refuses unless overwrite is set.
· The other four are NOT file drops and the hub says so instead of showing a green tick over a
no-op: djsim peds and procity peds load from hardcoded name arrays, thriftgod's props come from
literal HERO_FLOOR/HERO_COUNTER strings, and not-tonight has no garment/doll/character art path
at all (find public -type d returns only public and public/props). Each returns 409 naming the
exact file and line to edit.
· thriftgod, the "most important 3D consumer", has NO paper-doll, atlas or reskin consumer —
zero grep hits across web/ and tools/. Worth knowing before generating art for it.
· nsfw-tagged assets are refused on every target, including the ready ones.
UNIFIED WARDROBE. The 392 doll layers lived in a separate catalogue search couldn't reach, so
"find the coogi jumper" only ever looked at the 9 3D garments. Both tiers now share one manifest
and one grid: 401 items, tier filter, slot counts spanning both. Doll slots map to canonical ones
(top->torso, bottom->legs, shoes->feet, hat->head) and are NOT marked as guesses, because the
filename prefix is what djsim itself resolves art by.
THUMBS. /api/thumbs/warm pre-renders everything, deliberately SERIAL — each 3D thumb launches its
own Blender and a grid's worth at once buries the machine. 346 rendered, 0 failed. 2D layers are
cropped to their alpha bbox first: a doll layer is a garment-sized patch on a 704x1408 canvas, so
a plain downscale gives a mostly-empty tile.
BODY-TYPE HEIGHTS. small 1.58 / medium 1.72 / large 1.88 / tall 1.95 / child 1.30 / obese 1.74 /
stocky 1.68, stored per body and applied at export. This is the other half of unitfix only
repairing impossible scales: the library keeps real proportions, the game gets a sane height.
Verified in-browser, no JS errors: 401-item grid, cross-tier search, tier filter, export hub
returning the registry line for each unready target, nsfw refused on a ready target.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>