> Written before signup/agent UX work. Re-skim after each social surface lands —
> new constraints may change zone/place linking.
Status: phase-2 started (2026-07-16) — overlay depth, LOD hysteresis, zone manifest stub, places API. Full mesh/streaming still open.
Owner: Ryan · Implementer: continue eyeball fly-tests for hard visuals.
---
One society, two skins:
Humans and guests are the same public-user path. Social AIs are first-class; industrial AIs stay host-only.
---
kaiverse.js / native client).1. Inventory current distance math (camera far plane, planet radius, LODs) in browser kaiverse.js and any src/bin/kaiverse paths.
2. Define scale table: planet radius, building footprint, avatar height, draw distances.
3. LOD rungs: impostor / low / mid / high; hysteresis so LODs don’t thrash.
4. Verify FIRST-PERSON flight controls stay untouched (additive render-only layers only).
5. Eyeball loop with owner: fly → screenshot → tune (hard visual items — no blind bulk edits).
---
zones/<id>/manifest.json → meshes, textures, collision, spawn points.1. Design zone manifest schema (id, bounds AABB, assets[], streamPriority).
2. Loader: async fetch + cache; cancel in-flight when leaving zone.
3. Prefer many medium files over one giant bundle for progressive load.
4. Error surface: missing zone → placeholder prop + log, never hard crash shell.
---
1. Reproduce each bug with a minimal scene flag (?debugOverlay=1).
2. Fix depth: polygonOffset / render order / separate pass.
3. Parent–child transform: overlays must use same world matrix pipeline as host mesh.
4. Unload hooks: dispose geometry + materials on zone exit.
5. Regression checklist in SCRATCH with before/after notes (owner fly-test).
---
Place {
id, tenantId?, groupId?,
planetId, lat, lon | xyz,
kind: 'building' | 'land' | 'room',
label, createdBy, createdAt
}
1. Persist places in tenant or shared public store (not host secrets).
2. KAIVERSE API: list places near camera; resolve place by groupId.
3. Spawn placeholder building from place record (box/glTF later).
4. Click in-world → open 2D group/profile; click group → “Enter place” jumps camera.
---
1. Event bus: social.event { type, actorId, placeId?, ts, payload }.
2. Throttle updates (max N/sec per place).
3. 2D-only users never blocked if KAIVERSE offline.
---
Already in flight as social baseline; hard-part only needs:
---
1. P0 — Home Feed + Shorts vertical player (2D), guest-safe.
2. P1 — Place schema + “group has place” metadata.
3. P2 — Zone manifest + load/unload.
4. P3 — Overlay/depth bugfix pass with owner fly-tests.
5. P4 — Live social → world mirrors.
6. P5 — 3D-first default shell (optional).
---
oracle.html / kaiverse.js.---
/api/social-agents, DiceBear avatar). Place.createdBy can be userId or agentId. Guest public channels tightened (no kai-training in allowlist). |shared/kaiverse-hard-part.mjs (LOD hyst, zone validate, placeOnPlanet); kaiverse-graphics.js atmo/cloud polygonOffset; kaiverse.js overlay LOD + dispose + zones bootstrap; POST/GET /api/kaiverse/places; example zone manifest. |---
kaiverse.js, oracle.html (surgical)tools/oracle-discord/command-center-server.mjs (places API)src/bin/kaiverse/ only if owner switches focus to native clientkaiverse_assets/ or public/ (TBD)