m1/org/openalice-worldci failure

openalice-world

[Atlas card](https://atlas.blal.pro/repos/openalice-world) · Live at **[world.blal.pro](https://world.blal.pro)**

Features
52
Status
·unknown
Last activity
11d ago
Branch
mvp

Architecture rating

F10d ago
docsD

Manifest present+valid with 52 features and roadmap score 100; AGENTS.md and README with Atlas card exist; however 393 missing docstrings across codebase and only 1 TODO/FIXME suggest no in-code architecture notes explaining the complex 3D/multiplayer wiring.

data layerD

No owned tables (frontend/multiplayer service) so schema/migration/RLS not applicable; however no evidence of input validation or sanitization on the multiplayer/voice data paths; 39 'any' type usages weaken type-level data safety.

consistencyF

Drift score 0/100 in Atlas; 9 undeclared env vars vs 1 declared-unused; 147 format issues, 41 god modules, 61 complexity flags, 39 'any' usages, 10 missing React key props; 1 circular dependency; avg complexity 9.11 with max 166 outlier shows wildly uneven module discipline.

securityF

RT_JWT_SECRET in env but 9 env vars undeclared in manifest (drift risk); 33 bare/broad excepts can swallow auth failures; no evidence of rate-limiting, CSP headers, or SSRF guards; CI failing and service returning 404 with 0% uptime.

reliabilityF

0% uptime, health probe 404, CI conclusion=failure; max cyclomatic complexity 166 with 7 deep-nesting sites; 33 bare/broad excepts swallow errors; 1 circular dep (IslandScene↔RemotePlayer); no evidence of graceful shutdown, retries, or idempotency on the WS/agent-runner path.

observabilityF

16 raw console.log statements instead of structured logging; health endpoint exists but returns 404; no evidence of metrics export, distributed tracing, or alerting; probe latency 24ms is meaningless when service is down.

testingF

Only 2 vitest configs (engine, multiplayer) across 7 packages; no test count or coverage data surfaced; 52 features with minimal test infrastructure means critical paths (terrain, voice, agent NPC, weather) are almost certainly untested.

source · auto-grader-2026-07-08

Ecosystem manifest

.atlas-deps.yml

3D multiplayer open world (Three.js + R3F) with terrain, flora, weather, voice, and agent NPCs.

Runtime deps
  • via NEXT_PUBLIC_AUTH_URL
    Session auth for world users; X-Internal-Secret for internal GDPR export endpoint
  • via NEXT_PUBLIC_PERSONA_URL
    Fetch and update persona profiles (avatar, emotion) displayed in-world
  • via NEXT_PUBLIC_RT_URL
    Server-authoritative real-time state (presence, persona, room entities) via WS delta stream
  • via NEXT_PUBLIC_VOICE_URL
    WebRTC SFU for spatial voice chat in 3D world rooms via @openalicelabs/voice-client
  • openalice-cdnhttpoptional
    via CDN_URL
    Static assets — VRM models, textures, world scene files served from CDN
Consumed env
  • NEXT_PUBLIC_RT_URL
  • NEXT_PUBLIC_VOICE_URL
  • NEXT_PUBLIC_PERSONA_URL
  • NEXT_PUBLIC_AUTH_URL
  • INTERNAL_SECRET
  • INTERNAL_BROADCAST_SECRET
Exposes
  • docker_image: openalice-world-web
  • http_endpoint: https://world.blal.pro
Env drift · manifest ⇄ code

Atlas grepped the repo's source for env reads (rust env::var · ts process.env · py os.environ · shell $VAR) and diffed against the manifest's consumes_env. Two lists below: stale declarations and undeclared reads.

Code reads, manifest omits
  • AGENT_AVATAR_URL
  • AGENT_ID
  • AGENT_NAME
  • IDLE_HEARTBEAT_MS
  • NEXT_PUBLIC_WORLD_AOI_RADIUS
  • RT_JWT_SECRET
  • RT_WS_URL
  • TICK_MS
  • WORLD_ROOM_ID
Manifest declares, code unused
  • NEXT_PUBLIC_AUTH_URL
Observed reads: 14 · declared: 6

Roadmap · what's planned next

30% avg5 goals

Code composition

tokei · loc
20.9kloc
  • TSX54.5%
  • TypeScript38.2%
  • Rust4.6%
  • JSON1.6%
  • CSS0.5%
  • Other0.6%
  • TSX54.5%· 11,364
  • TypeScript38.2%· 7,956
  • Rust4.6%· 967
  • JSON1.6%· 330
  • CSS0.5%· 109
  • YAML0.3%· 72
  • TOML0.1%· 29
  • Dockerfile0.1%· 17
  • +1 more0.0%· 6 · 1 files
Language% codecodecommentsblanksfiles
TSX54.5%11,3642,0251,16638
TypeScript38.2%7,9561,9611,36153
Rust4.6%9674910411
JSON1.6%3300016
CSS0.5%10921161
YAML0.3%724233
TOML0.1%29031
Dockerfile0.1%173181
JavaScript0.0%6111
Markdown0.0%0246654

Telemetry ribbon · last 90 days

21 events
MAYJUNJUL2026-05-21 · commit · new commit 162ce63 → 035a00c2026-05-21 · commit · new commit 035a00c → 6d1908c2026-05-21 · commit · new commit 6d1908c → 1bc73562026-05-22 · commit · new commit 1bc7356 → 1c6d7e32026-05-22 · commit · new commit 1c6d7e3 → f903e4e2026-05-23 · commit · new commit f903e4e → a1ea4912026-05-25 · commit · new commit a1ea491 → a7bae4f2026-06-02 · commit · new commit a7bae4f → ec04d9e2026-06-02 · commit · new commit ec04d9e → 252578a2026-06-02 · commit · new commit 252578a → 45226602026-06-03 · commit · new commit 4522660 → ec7d7dd2026-06-03 · commit · new commit ec7d7dd → 45226602026-06-03 · commit · new commit 4522660 → 74a30aa2026-06-03 · commit · new commit 74a30aa → 3757bb02026-06-03 · commit · new commit 3757bb0 → e8e71e32026-06-03 · commit · new commit e8e71e3 → ee8954d2026-06-03 · commit · new commit ee8954d → 6687aa12026-06-17 · commit · new commit 6687aa1 → f71241b2026-06-17 · commit · new commit f71241b → 54372bf2026-07-06 · commit · new commit 54372bf → 77cfbaf2026-07-06 · commit · new commit 77cfbaf → 99a45a6NOW
commitmanifestlifecyclekind

world-agent-runner/actor

1 feature
  • world-agent-runner.actor
    world-agent-runner/src/actor.rs:5
    Applies movement/mood ToolCalls (`move_to` / `teleport_to` / `set_mood` / `respond`) from the AgentCore to embodied state, integrates an animated walk each tick (`walking`→`idle` on arrival, facing the travel direction), decays the speaking/lipsync flag, and snapshots to a `WorldPresence`.

world-agent-runner/auth

1 feature
  • world-agent-runner.auth.mint
    world-agent-runner/src/auth.rs:8
    Mint a short-lived HS256 rt token for a server-side `agent` identity with can_write + can_subscribe, scoped to one room.

world-agent-runner/config

1 feature
  • world-agent-runner.config
    world-agent-runner/src/config.rs:3
    Env-driven config: which rt server + room to join, the agent's presence identity, and the avatar/cadence. `WORLD_ROOM_ID` MUST equal the UUID the World browser uses for the same room (it derives one via uuid v5 from the room name) — co-location is by shared room UUID.

world-agent-runner/crate

1 feature
  • world-agent-runner.crate
    world-agent-runner/src/lib.rs:17
    Embodies any AgentCore in an openalice-rt World room as a presence entity (move_to/teleport_to → walk, set_mood → emotion, respond → lipsync), publishing presence the World VRM client renders. Reuses agent-protocol-rs + agent-basic; mirrors the rt wire types (no rt dep).

world-agent-runner/presence

1 feature
  • world-agent-runner.presence.schema
    world-agent-runner/src/presence.rs:5
    Flat `x/y/z` (what the World client reads) PLUS a `position` array (what openalice-rt's spatial AOI grid reads) — so the agent renders today and is AOI-filterable when server-side AOI lands, at zero cost. Camel-cased keys (`rotY`, `avatarUrl`, `isSpeaking`, `lookAt`) match the browser's `PresenceData`. Optional puppetry fields (`emote`, `lookAt`) are omitted from the wire when absent (`skip_serializing_if`) so an idle agent's presence stays byte-stable for the dirty-check publisher.

world-agent-runner/protocol

1 feature
  • world-agent-runner.protocol.wire
    world-agent-runner/src/protocol.rs:9
    Client subset of the rt WS contract: `ClientMessage` (subscribe / mutate / ping), `ServerMessage` (subscribed / delta / …), and the presence-relevant `SubQuery` / `EntityType` / `Action` / `DeltaEntry`.

world-agent-runner/rt-client

1 feature
  • world-agent-runner.rt-client
    world-agent-runner/src/rt_client.rs:6
    tokio-tungstenite client speaking the rt wire protocol: a write task drains an outbound queue to the socket; a read task parses `ServerMessage` and forwards presence `DeltaEntry`s to the runtime.

world-agent-runner/runtime

1 feature
  • world-agent-runner.runtime.loop
    world-agent-runner/src/runtime.rs:8
    Drives one agent in one room: spatial perception in, presence out, every `tick_ms`. Any `AgentCore` plugs in (the demo `WandererAgent`, or the agent-lite ReAct core once extracted) with no change to the loop.

world-agent-runner/wanderer

1 feature
  • world-agent-runner.wanderer
    world-agent-runner/src/wanderer.rs:6
    Minimal AgentCore impl: emits a `move_to` to a random in-bounds point every few ticks, so the agent visibly walks the World room without any model wired up — a smoke harness for the runner.

world/agent

3 features
  • world.agent.multi-scene
    apps/web/src/components/MultiAgentScene.tsx:3
    no description
  • world.agent.runner
    packages/multiplayer/src/worldAgent.ts:13
    World-side adapter that wires room presence + spatial chat + voice utterances into the OpenAlice agent contract. Same AgentRuntime works in Live, Social, Persona, World — World just adds proximity filtering and exposes change_scene tool calls back to the host renderer.
    since 0.5.0
  • world.web.protocol_agent_hook
    apps/web/src/hooks/useWorldAgent.ts:67
    React hook wiring WorldAgent + RestAgentRuntime + agent_config fetching for 3D rooms. Drop-in for legacy chat — once a contract-native runtime ships, only this hook's runtime ctor changes.
    hook:useWorldAgent
    since 0.5.0

world/app

2 features
  • world.app.forge-demo
    apps/web/src/app/forge-demo/page.tsx:12
    Standalone Forge SceneSpec preview page — wind-swayed instanced foliage, Rapier physics collisions, FPS-style WASD/sprint/jump pointer-lock controls, per-biome petal shedding (sakura/maple/dry-husk tints).
  • world.app.room-page
    apps/web/src/app/[room]/page.tsx:10
    Per-room entry point for the 3D world — wires RT presence client, WebRTC voice chat, spatial audio, mobile controls, adaptive quality detection, dynamic-imported WorldScene Canvas, and the in-world HUD/chat panel.

world/app/hooks

1 feature
  • world.app.rt-client-hook
    apps/web/src/hooks/useRtClient.ts:4
    React hook bridging the world page to openalice-rt — deterministic UUID v5 from room name, presence connection lifecycle, avatar/emotion store sync, reconnect with backoff.

world/audio

3 features
  • world.audio.procedural
    packages/engine/src/audio/proceduralAudio.ts:1
    no description
  • world.audio.sound-manager
    packages/engine/src/audio/soundManager.ts:1
    no description
  • world.audio.spatial
    packages/multiplayer/src/spatialAudio.ts:1
    no description

world/avatar

2 features
  • world.avatar.remote-player
    packages/world/src/RemotePlayer.tsx:3
    no description
  • world.avatar.vrm
    packages/avatar/src/VRMAvatar.tsx:3
    no description

world/flora

1 feature
  • world.flora.biome-layer
    packages/forge/src/ForgeBiomeLayer.tsx:414
    Biome-aware Forge flora — Poisson-spaced canopy/detail/ground meshes per biome with wind-reactive shader.
    component:ForgeBiomeLayer
    since 0.4.0

world/forge

7 features
  • world.forge.biome-layer
    packages/forge/src/ForgeBiomeLayer.tsx:1
    no description
  • world.forge.flora-layer
    packages/forge/src/ForgeFloraLayer.tsx:15
    Drop-in R3F flora layer — fetches a Forge SceneSpec, renders every InstanceGroup as a wind-aware InstancedMesh with per-placement HSV tint, drives the foliage shader from a shared FoliageState, overlays biome-specific wind shedding + wildlife.
  • world.forge.foliage-shader
    packages/forge/src/foliageShader.ts:1
    no description
  • world.forge.instanced-mesh
    packages/forge/src/ForgeMesh.tsx:16
    GLB → Three.js InstancedMesh loader — one draw call per primitive group regardless of placement count, per-instance matrices, wind shader auto-patched on load via patchFoliageScene; module-level scratch objects keep per-frame allocations flat.
  • world.forge.scene
    packages/forge/src/ForgeScene.tsx:1
    no description
  • world.forge.wildlife
    packages/forge/src/Wildlife.tsx:1
    no description
  • world.forge.wind-shedding
    packages/forge/src/WindShedding.tsx:1
    no description

world/input

2 features
  • world.input.avatar-movement
    packages/world/src/hooks/useAvatarMovement.ts:3
    no description
  • world.input.vr-controls
    packages/world/src/VRControls.tsx:3
    no description

world/network

3 features
  • world.network.interpolation
    packages/multiplayer/src/useInterpolation.ts:3
    no description
  • world.network.prediction
    packages/multiplayer/src/usePrediction.ts:3
    no description
  • world.network.sync
    packages/multiplayer/src/useWorldSync.ts:3
    no description

world/render

7 features
  • world.render.adaptive-quality
    packages/engine/src/quality/adaptive.ts:1
    no description
  • world.render.grass-shader
    packages/engine/src/shaders/grass.ts:1
    no description
  • world.render.particles
    packages/engine/src/particles/engine.ts:1
    no description
  • world.render.post-processing
    packages/world/src/AnimePostProcessing.tsx:3
    no description
  • world.render.procedural-geometry
    packages/engine/src/geometry/procedural.ts:1
    no description
  • world.render.sky
    packages/world/src/DynamicSky.tsx:3
    no description
  • world.scene.island
    packages/world/src/IslandScene.tsx:2644
    Full island scene — terrain, ocean, sky, weather, flora, portals, multiplayer avatars, post-processing.
    component:IslandScene
    since 0.1.0

world/scene

1 feature
  • world.scene.root
    apps/web/src/components/WorldScene.tsx:3
    no description

world/social

3 features
  • world.social.emote-bar
    packages/world/src/EmoteBar.tsx:37
    On-screen emote menu (wave/dance/sit/thumbs-up) for desktop + mobile — a 56px toggle button opens a radial-ish stack of 48px emote buttons wired to triggerEmote (same 1-4 keys as the keyboard shortcuts); auto-closes after a pick.
  • world.social.emotes
    packages/world/src/hooks/useEmotes.ts:3
    no description
  • world.social.screen-share
    packages/world/src/ScreenShareBillboard.tsx:3
    no description

world/terrain

2 features
  • world.terrain.generate
    packages/engine/src/terrain/generator.ts:179
    Procedural island terrain via FBM simplex noise — heightmap, biome map, vertex colours, normals, indices.
    fn:generateTerrain
    since 0.1.0
  • world.terrain.vegetation-scatter
    packages/engine/src/terrain/generator.ts:471
    Poisson-disc vegetation placement on a terrain biome — deterministic, min-spaced, optional underwater.
    fn:getVegetationPositions
    since 0.1.0

world/ui

1 feature
  • world.ui.hud
    packages/world/src/WorldHUD.tsx:3
    no description

world/viewer

2 features
  • world.viewer.mobile-controls
    packages/world/src/MobileControls.tsx:19
    Touch-first virtual joystick + action buttons overlay for the 3D world — 80px outer joystick, 64px Jump/Sprint/Chat buttons (44px touch target floor), auto-hides when desktop pointer-lock active.
  • world.viewer.particles
    packages/world/src/WorldParticles.tsx:35
    Aggregate particle host for the 3D world — weather (rain/snow), portal glows, underwater bubbles, water splash, footprints, wildlife (butterflies, fireflies); auto-skips wildlife when Forge flora layer ships its own GPU-instanced version.

world/voice

2 features
  • world.voice.chat
    packages/voice/src/voiceChat.ts:19
    WebRTC voice chat in 3D world rooms via openalice-voice SFU. Now powered by @openalicelabs/voice-client.
    hook:useVoiceChat
    since 0.4.0
  • world.voice.input
    packages/voice/src/voiceInput.ts:1
    no description

world/weather

1 feature
  • world.weather.engine
    packages/engine/src/weather/system.ts:442
    24h day/night cycle with 8 phases, 6 weather types, lightning, rainbow, wind, server-authoritative sync.
    class:WeatherEngine
    since 0.1.0