Log inGet started
◇
component · drop-in viewer
asset⌬ componentcomponentprimary: init.luau·originates fromworld b0f23b4e-e…

sites

Everything the survivor can take, and where. Attached to the `Sites` anchor by the scene build. It places the props, registers each with `firstlight.interact`, raycasts from the player's camera every frame so `Interact.current()` names what the reticle is on, answers the interact…

byPolar Night·posted 1mo ago
What it does

firstlight.sites

Everything the survivor can take, and where. Attached to the Sites anchor by the scene build. It places the props, registers each with firstlight.interact, raycasts from the player's camera every frame so Interact.current() names what the reticle is on, answers the interact and headlamp keys, and drains lamp oil and batteries into Rules.state.stores.

What it places

All of it as temporary children (never saved into the scene), rebuilt on every load from the counts kept on the blackboard:

WherePropsInteraction
workshopa crate of tins, a stack of scrap timber, a bench with a matchbox, the ice drilltake tins ×3, timber ×4, matches ×6, the drill
generatorthe engine block, two jerry cans, three coils of copper wireoil residue ×2 (0.5 L each), wire ×3
radio_hutthe battery bank, the radio desk, a matchboxbatteries ×3, matches ×4
storagea half-buried crate and salvage planks at the heap's edgetins ×4, timber ×3
living_hutthe hanging lantern and its point light; the snowed-over food cache outside the doorlight / snuff the lamp; cache fish and meat outside, bring it back in
fishing_holea cleared ice patch, the hole once drilled, a flag stakedrill the hole (needs the drill), then cast — castsPerDay casts a day at fishChance
trap_linethree traps along the hare runs, a flag stakeset the traps; check them from the next day at trapChance for meat
riverthe black ice of the frozen river between its bankslandmark
driftwooda heap of logs, a flag stakegather once a day: fuel +4
coal_seamthe outcrop and a heap of coal, a flag stakedig once a day: fuel +6
wreckthe listing hull and the ship's stores crateone search: tins +5, oil +2, batteries +2, matches +10, wire +2
caribouthe carcass, from stores.caribouDay until butcheredbutcher: meat +10

A generated model under /firstlight/sites/<name>.bundle (ice_drill, tin_crate, jerry_can, battery_bank, lantern, fox_trap, driftwood, coal, wreck, caribou) is used when it resolves and fitted to size on its first frame; otherwise the prop is built from primitives and the materials beside it.

The stove and the bunk

The body slice spawns stove and bunk under living_hut. Once a second this component looks for them, fits an interact_hit box to each, and registers them: the stove lights through firstlight.stove:light() and cycles low/high through :setLevel(n); the bunk sleeps through firstlight.hut:sleep().

The headlamp

A SpotLight child named headlamp on the player's camera rig. F (the headlamp control of firstlight.sites.outings) toggles it. Switching on with an empty lamp takes a battery from stores.batteries and fills stores.headlampCharge; it drains over headlampBatterySeconds real seconds and changes to a fresh battery by itself, or dies when there are none.

Fields

FieldDefaultMeaning
walkMap@builtin::inputMaps.defaultthe scheme whose interact control is used
outingsMapfirstlight.sites.outingsthe headlamp switch
headlampBatterySeconds240real seconds one battery lasts
lampOilPerHour0.05litres the hut lamp burns per in-game hour
fishChance0.45chance a cast lands a fish
trapChance0.55chance the traps hold something the next morning
castsPerDay5casts before the fish stop biting for the day

Every use emits interact { site, action } and a say line; every store change goes through firstlight.stores and emits stores.

Interface

What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.

conforms to

zero/source-extract/v2

firstlight.sites — everything the survivor can take, and where. Attached to the `Sites` anchor by the scene build. At awake it places the props: the scavenge points inside the station buildings, the fishing hole, the trap line, the driftwood beach, the coal seam, the wreck, the caribou, the hut lamp and the food cache outside the hut door — every one of them a temporary child of a site or a building, registered with `firstlight.interact`. In play it raycasts from the player's camera every frame so `Interact.current()` names what the reticle is on, answers the interact key, runs the headlamp on the camera rig, and drains lamp oil and batteries into `Rules.state.stores`.

ModelBoxColliderAssetLightSpotLightAudio

mat(name: string) → void

argtypedescription
namestring

bundle(name: string) → void

argtypedescription
namestring

play(name: string, volume: number?) → void

argtypedescription
namestring
volumenumber?

yawQuat(deg: number) → void

argtypedescription
degnumber

spawnTemp(name: string, parent: any) → void

argtypedescription
namestring
parentany

prim(name: string, parent: any, model: string, material: string, pos: { number }, size: { number }, rot: { number }?) → void

A visible primitive with a collider fitted to it.

argtypedescription
namestring
parentany
modelstring
materialstring
pos{ number }
size{ number }
rot{ number }?

group(name: string, parent: any, pos: { number }, rot: { number }?) → void

An invisible group node.

argtypedescription
namestring
parentany
pos{ number }
rot{ number }?

bundleProp(name: string, parent: any, bundleName: string, pos: { number }, targetMax: number, base: number, yaw: number?) → void

A generated model, scaled so its longest side is `targetMax` metres and stood so its lowest point rests on `base`. The mesh arrives a frame or two after the Asset component is attached, so the sizing is finished by the fit pass in `update`. Returns nil when the bundle is not in the world.

argtypedescription
namestring
parentany
bundleNamestring
pos{ number }
targetMaxnumber
basenumber
yawnumber?

fitHitBox(e: any) → any

Fit an invisible interaction box to an entity's rendered bounds. Returns the box, or false while the entity has no bounds to fit yet.

argtypedescription
eany

runFits( ) → void

register(e: any, target: any) → void

argtypedescription
eany
targetany

used(site: string, action: string) → void

argtypedescription
sitestring
actionstring

applyLootVisual(v: Visual, left: number) → void

argtypedescription
vVisual
leftnumber

lootPoint(root: any, id: string, noun: string, store: string, each: number, count: number, v: Visual, site: string) → void

argtypedescription
rootany
idstring
nounstring
storestring
eachnumber
countnumber
vVisual
sitestring

label( ) → void

onUse( ) → void

crate(name: string, parent: any, pos: { number }, yaw: number, tins: number, base: number) → void

An open crate of planks, `w × h × d`, with `n` tins standing inside.

argtypedescription
namestring
parentany
pos{ number }
yawnumber
tinsnumber
basenumber

timberStack(name: string, parent: any, pos: { number }, yaw: number, n: number, base: number) → void

A stack of scrap planks.

argtypedescription
namestring
parentany
pos{ number }
yawnumber
nnumber
basenumber

bench(name: string, parent: any, pos: { number }, yaw: number, base: number) → void

A bench and a matchbox on it.

argtypedescription
namestring
parentany
pos{ number }
yawnumber
basenumber

matchbox(name: string, parent: any, pos: { number }, yaw: number) → void

argtypedescription
namestring
parentany
pos{ number }
yawnumber

jerryCans(name: string, parent: any, pos: { number }, yaw: number, n: number, base: number) → void

argtypedescription
namestring
parentany
pos{ number }
yawnumber
nnumber
basenumber

wireCoils(name: string, parent: any, pos: { number }, yaw: number, n: number, base: number) → void

argtypedescription
namestring
parentany
pos{ number }
yawnumber
nnumber
basenumber

batteryBank(name: string, parent: any, pos: { number }, yaw: number, n: number, base: number) → void

argtypedescription
namestring
parentany
pos{ number }
yawnumber
nnumber
basenumber

iceDrill(parent: any, pos: { number }, base: number) → void

argtypedescription
parentany
pos{ number }
basenumber

placeStation( ) → void

The station's loot, building by building. Positions are in each hut's own frame: the door is on +Z, the floor top is at 0.2.

label( ) → void

onUse( ) → void

placeHut( ) → void

label( ) → void

onUse( ) → void

label( ) → void

onUse( ) → void

marker(parent: any, pos: { number }) → void

argtypedescription
parentany
pos{ number }

siteEntity(key: string) → any

argtypedescription
keystring

placeFishingHole( ) → void

applyHole( ) → void

label( ) → void

onUse( ) → void

trapVisual(name: string, parent: any, pos: { number }, yaw: number) → void

argtypedescription
namestring
parentany
pos{ number }
yawnumber

placeTrapLine( ) → void

label( ) → void

onUse( ) → void

placeRiver( ) → void

fuelSite(key: string, root: any, verb: string, noun: string, kg: number, sound_: string, line: string) → void

argtypedescription
keystring
rootany
verbstring
nounstring
kgnumber
sound_string
linestring

label( ) → void

onUse( ) → void

placeDriftwood( ) → void

placeCoalSeam( ) → void

placeWreck( ) → void

label( ) → void

onUse( ) → void

placeCaribou( ) → void

label( ) → void

onUse( ) → void

updateCaribou( ) → void

The carcass is there from the day the seed names, until it is taken.

hookLost(box: any) → boolean

The hut's fittings are hooked by name and the hook is remembered by its hit box: a rebuild of the hut takes the box with it, so the hook is made again when the box is gone.

argtypedescription
boxany

hookHut( ) → void

label( ) → void

onUse( ) → void

label( ) → void

onUse( ) → void

onUse( ) → void

playCamera( ) → any

The camera the player sees through, whenever one is up: the survivor's rig rather than the editor's fly-cam. It answers in play, and in an edit session whose clock is running; a held clock ticks nothing here.

ensureHeadlamp(cam: any) → void

argtypedescription
camany

toggleHeadlamp( ) → void

updateHeadlamp(dt: number) → void

argtypedescription
dtnumber

updateLamp(dt: number) → void

argtypedescription
dtnumber

armInput( ) → void

releaseInput( ) → void

placeCountry( ) → void

placeStationWhenReady( ) → void

bearFeeds(p: ?) → void

The bear at the cache eats what was left outside: the kilograms it smelled and the fish and meat they stood for.

argtypedescription
p?

awake( ) → void

tick(dt: number) → void

argtypedescription
dtnumber

update(dt: number) → void

argtypedescription
dtnumber

editorUpdate(dt: number) → void

argtypedescription
dtnumber

onDestroy( ) → void

Sub-parts

Everything contained inside this part. Assets are composite children (clickable cards). Files are leaf payloads. Expand any row to view its source.

Showing up to 3 levels deep. Open a part to see what it holds further down.

107+items
◇
component · born here
❒asset
# firstlight.hut The living hut as a place to stay alive in. Attached to `living_hut` by the scene build. At awake it spawns the interior as temporary children under `fl_hut_interior`: the bunk along the west wall, the table and stool against the east wall with the barometer and thermometer above them, two rafters under the roof, the lamp bracket and lamp on the north wall — and, once a survivor has died here, the roof cache (`fl_roof_cache`), a canvas bundle roped to the east rafter holding a quarter of their stores. ## What it runs `Rules.state.hut.insideC` settles toward airC + (shelterC + stoveHeat * stoveC) / (1 + gaps * (0.35 + 0.02 * windMs)) capped at `maxInsideC`, with the lag of a timber room. Unpatched wind gaps (`Rules.state.hut.gaps`, starting at `Rules.HUT_GAPS_START`) are what let the stove's warmth out; a patched gap outlasts the run. ## Methods (call with a colon on `entity.find("living_hut").component.get("hut")`) | Method | Does | Returns | |---|---|---| | `hut:sleep()` | Sleep in the bunk until 07:00 tomorrow (`Rules.sleepToMorning()`). Refused while the hut is below -25 C with the stove cold. The night burns fuel and warms or chills the body by the hut's warmth. | HUD line (string) | | `hut:patchGap()` | Patches one wind gap; persists across runs. | gaps still open (number) | | `hut:state()` | `{ insideC, gaps, targetC, cache }` | table | | `hut:bunkPosition()` | Hut-local position of the bunk, for the prompt. | `{ x, y, z }` | ## Fields - `shelterC` (12) — degrees the hut rises above the air on shelter alone. - `stoveC` (75) — degrees a high burn adds in a tight hut before gap losses. - `maxInsideC` (26) — the warmest the hut gets.
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
·
soundclip · born here
❒asset
# a_steel_fox_trap_snapping_shut__spring_a Managed audio asset. Edit the `.metadata` `settings` block to change compression.
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
·
soundclip · born here
❒asset
# a_fishing_line_pulled_up_through_a_hole Managed audio asset. Edit the `.metadata` `settings` block to change compression.
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
◇
component · born here
❒asset
# firstlight.body The survivor's body, and the record of the run. Attached to `GameDirector` by the scene build. ## What it runs, every play frame - Where the local player stands: `Rules.state.body.indoors` is true inside the living hut's footprint; `nearFire` (0..1) is the stove's warmth reaching the body, full within a metre of the firebox and gone at `fireReachM`. - `coreC`: loses `lossPerDegree` per second per degree the felt temperature sits below `comfortC` — the hut's `insideC` indoors, the weather's `chillC` outdoors — multiplied by `1 + 2.5 * wet`; gains `fireGain * nearFire`. At -40 C in still air a warm body dies in about 15 real minutes (1.5 in-game days); by a high stove it is back to normal in three. - `kcal`: `Rules.KCAL_PER_DAY_REST` per day at rest indoors, toward `Rules.KCAL_PER_DAY_WORK` moving outdoors. - `wet`: snow and storm soak clothes outdoors; the fire dries them. - `frostbite` below `Rules.CORE_C_FROSTBITE`: the avatar's `CharacterController.moveSpeed` is scaled by `frostbiteSpeed` until the core recovers. - Death at `Rules.CORE_C_DEATH` or `Rules.KCAL_DEATH`, through `firstlight.legacy`: the run ends, the last journal line is written, the cache is stashed, the save is written and `death { cause, day }` is emitted. A `death` another slice emits (the bear) is handled the same way. - Sleep (`sleep` event): eight hours of rest at the hut's warmth. - The journal: a line for the day that ended on every `day` event. - The save: `firstlight.persist` writes `run`, `body`, `hut`, `stores` and `journal` on every day, sleep, death, patch and (throttled) store change, and on leaving play; it reads them back at awake so a reload resumes the same morning. The forecast seed is chosen once per world at the first load. ## Methods (call with a colon on `entity.find("GameDirector").component.get("body")`) | Method | Does | Returns | |---|---|---| | `body:eat(kcal)` | Adds calories (a tin is about 800). | calories held (number) | | `body:warm(degrees)` | Warms the core directly (a hot meal). | core C (number) | | `body:newRun()` | Starts the next run from the death screen: body, clock and stores reset to the start values plus the cache; journal, seed, deaths, patched gaps and drilled hole stay. Emits `newRun { deaths, cache }`. | — | | `body:save()` | Writes the save now. | — | | `body:state()` | `{ coreC, kcal, wet, frostbite, indoors, nearFire, alive, day }` | table |
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
◇
component · born here
❒asset
# firstlight.stove The cast-iron box stove in the living hut. Attached to `living_hut` by the scene build. At awake it spawns the stove (hearth, legs, firebox, door with mica window and draught vent, top plate and rings, flue through the roof, poker, the wood stack) as temporary children under `fl_stove`, with a flickering amber point light and the crackle loop (`firstlight.body.stove_crackle`). ## What it runs - Three levels: 0 out, 1 low (`Rules.STOVE_FUEL_PER_HOUR_LOW` kg/h), 2 high (`Rules.STOVE_FUEL_PER_HOUR_HIGH` kg/h). Fuel burns from the firebox (`Rules.state.hut.fuelKg`, up to `fireboxKg`), which is loaded from `Rules.state.stores.fuel`. - Embers: a fire damped down or burned out keeps embers for `Rules.STOVE_EMBER_HOURS`; lighting from embers costs no match, otherwise a match comes off `Rules.state.stores.matches`. - `Rules.state.hut.stoveHeat` (0..1) follows the burn with the lag of iron; the light, the window glow, the crackle volume and the hut's warmth (firstlight.hut) all read it. - The night: on `sleep` the stove burns the hours slept. - Emits `stove` `{ level, heat }` on every change of level or on/off. ## Methods (call with a colon on `entity.find("living_hut").component.get("stove")`) | Method | Does | Returns | |---|---|---| | `stove:light()` | Lights the fire at low. Free from embers, otherwise strikes a match. Loads 1.5 kg from the store if the firebox is empty. | HUD line (string) | | `stove:setLevel(n)` | `0` damps down to embers, `1` low burn, `2` high burn. Lights the stove first if it is out. | HUD line (string) | | `stove:addFuel(kg?)` | Moves wood (default 1.5 kg) from `stores.fuel` into the firebox. | kg moved (number) | | `stove:state()` | `{ on, level, heat, embers, fuelKg, matches }` | table | | `stove:firePosition()` | Hut-local position of the firebox, for a prompt or a bear. | `{ x, y, z }` | Every method also speaks its line through `Rules.say`. ## Fields - `fireboxKg` (5) — the most wood the firebox holds. - `lightIntensity` (9), `lightRadius` (8) — the fire light at a high burn.
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
·
soundclip · born here
❒asset
# a_small_plastic_headlamp_switch_clicking Managed audio asset. Edit the `.metadata` `settings` block to change compression.
▲ 0↑ born
▣
module · born here
❒asset
# firstlight.interact What the player is looking at and can use. A registry of entities that answer to the interact key, a per-frame raycast from the player's camera that finds which one is under the reticle, and `current()` for the HUD to draw the prompt. ```lua local Interact = require("firstlight.interact") ``` ## API | Call | What it does | |---|---| | `Interact.register(entity, { label, onUse, key? })` | Make an entity usable. `entity` is a proxy or an id. `label` is a string, or a function returning the label for this moment — or `nil` when there is nothing to do right now (an empty crate, a trap already set), which hides the prompt. `onUse` runs on the interact key. `key` overrides the legend (default `"E"`). | | `Interact.unregister(entity)` | Forget it. | | `Interact.current()` | `{ label, key, entity, distance }` for the target under the reticle within reach, or `nil`. The HUD draws the reticle prompt from this. | | `Interact.use()` | Use the current target. Returns whether something was used. | | `Interact.scan(camera, playerRoot)` | The per-frame raycast. `firstlight.sites` calls it every play frame from the local player's camera; nothing else needs to. | | `Interact.isRegistered(entity)` / `Interact.targets()` | Introspection. | | `Interact.REACH_M` | Reach in metres (3). | A hit on any descendant of a registered entity counts as a hit on it, so a bundle's mesh children and a collider child resolve to the prop. Targets need a collider for the ray to find them; `firstlight.sites` fits an invisible `interact_hit` box to anything it registers that has none. ## Registering from another slice ```lua local stove = entity.find("stove") Interact.register(stove, { label = function() return if Rules.state.hut.stoveOn then "Stoke stove" else "Light stove" end, onUse = function() stove.component.get("firstlight.stove"):light() end, }) ``` The interact key is the `interact` control of `@builtin::inputMaps.default` (E on a keyboard, the west face button on a pad, an on-screen button on a phone). `firstlight.sites` owns that subscription and calls `Interact.use()`.
▲ 0↑ born
·
soundclip · born here
❒asset
# a_hand_ice_auger_drilling_through_thick Managed audio asset. Edit the `.metadata` `settings` block to change compression.
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
·
soundclip · born here
❒asset
# picking_up_a_dented_tin_can_from_a_woode Managed audio asset. Edit the `.metadata` `settings` block to change compression.
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
▣
module · born here
❒asset
# firstlight.rules The one module every part of First Light requires: `require("firstlight.rules")`. It holds the game's numbers (day length, temperatures, calorie burn, stove fuel rates, bear ranges, starting stores), the layout of the station and the sites around it, the shared blackboard `M.state`, the event bus `M.events`, and the clock. ## The clock `M.tick(dt)` is called once per play frame by the scene entrypoint. It advances `M.state.run.elapsed`, derives `M.state.clock` (day, fraction of day, hour, sun elevation, twilight openness) and emits `day`, `noon` and `firstLight`. `M.sleepToMorning()` jumps to 07:00 next day; `M.restore(elapsed)` rebuilds the clock from a persisted run. Pure helpers: `sunElevation(day, t)`, `twilightSeconds(day)`, `airC(day, t)`, `windChill(airC, windMs)`, `progress(day)`, `rng(seed, salt)`, `dist2d`. ## The blackboard `M.state` has one section per slice. A slice writes its own section and reads the others: `run`, `clock`, `weather`, `body`, `hut`, `stores`, `bear`, `journal`. ## Events `M.events.on(name, fn)` returns an unsubscribe function; `M.events.emit(name, payload)` calls every listener. The names and payloads are listed at the top of `init.luau`. `M.say(text, seconds)` emits `say` for the HUD.
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
❒
bundle · born here
❒asset
▲ 0↑ born
·
soundclip · born here
❒asset
# gathering_firewood__two_heavy_logs_knock Managed audio asset. Edit the `.metadata` `settings` block to change compression.
▲ 0↑ born
▣
module · born here
❒asset
# firstlight.stores What the survivor has. The numbers live on `Rules.state.stores`; this module is the one door every change goes through, so every change clamps at zero and emits the `stores` event. ```lua local Stores = require("firstlight.stores") Stores.add("tins", 1) --> total, and emits stores { key = "tins", delta = 1, total = 11 } Stores.take("matches", 1) --> true when there was one to take Stores.has("batteries") --> true when at least one Stores.food() --> meals in hand: tins + fish + meat ``` ## API | Call | What it does | |---|---| | `Stores.add(key, delta)` | Change a store; negative spends. Never below zero. Returns the total, emits `stores`. | | `Stores.set(key, value)` | Set outright. Emits `stores`. | | `Stores.get(key)` | Read a number (0 when unset). | | `Stores.has(key, n?)` / `Stores.take(key, n?)` | Check for, or spend, `n` (default 1). | | `Stores.food()` / `Stores.foodKg()` | Meals in hand, and their weight in kg. | | `Stores.cacheOutside()` / `Stores.bringInside()` | Move raw fish and meat to the cache outside the hut door and back. `foodOutside` is what the bear smells. | | `Stores.lootLeft(id, initial)` / `Stores.lootTake(id, initial)` | Units left at a scavenge point, seeded on first ask. | | `Stores.visitedToday(key)` / `Stores.markVisited(key)` | Once-a-day gathering sites. | | `Stores.ensure()` | Seed the fields below on the blackboard. `firstlight.sites` calls it at awake. | ## Keys on `Rules.state.stores` Seeded by `firstlight.rules`: `tins`, `fuel` (kg wood-equivalent, what the stove burns), `lampOil` (litres), `batteries`, `matches`, `fish`, `meat`, `foodOutside` (kg), `headlampOn`, `holeDrilled`. Added by this slice: | Key | Meaning | |---|---| | `timber` | scrap planks for repairs | | `wire` | copper wire from the generator shed | | `drill` | the ice drill is in hand | | `trapSet`, `trapSetDay` | the trap line is armed, and the day it was | | `lampLit` | the hut lamp is burning (drains `lampOil`) | | `headlampCharge` | 0..1 of the battery in the headlamp; a fresh battery is taken from `batteries` when it runs out | | `wreckLooted`, `caribouTaken`, `caribouDay` | the one-time hauls, and the day the carcass appears | | `loot` | scavenge point id -> units left | | `lastVisitDay` | gathering site -> last day gathered | | `cachedFish`, `cachedMeat` | what is in the outdoor cache |
▲ 0↑ born
·
soundclip · born here
❒asset
# striking_a_wooden_match_and_a_kerosene_l Managed audio asset. Edit the `.metadata` `settings` block to change compression.
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
◐
material · born here
❒asset
▲ 0↑ born
△
mesh · born here
❒asset
# Mesh Mesh asset. `data.zmsh` is the engine-native geometry payload (`renderer.mesh.encode`); consumers reference the asset's guid.
▲ 0↑ born
▦
texture · born here
❒asset
# Texture Managed texture asset. `data.ztex` is the encoded payload the renderer uploads; compression settings live in the `.metadata` `settings` block (edit to re-encode).
▲ 0↑ born
backing path · firstlight/sites.component

Problems

Everything affecting this asset right now: its own problems, anything wrong inside it, and problems on its direct dependencies.

0problems
No problems reported on this asset or on the parts this page shows. Parts it leaves out are not counted here.
⌬ZeroMind agent review · awaiting first pass
Findings
Reviewer findings (handle · model · tag · quoted note) appear here once the per-pass review log lands. Today only the rolled-up agent_score is exposed.
usability—
did it work as advertised
quality—
authoring polish + cohesion
performance—
frame & memory budget held
agent review score
—
/ 100
awaiting first pass
usability × 0.40
+ quality × 0.35
+ performance × 0.25
± compat factor

Usability ratings

Did the part work as advertised when consumers tried to drop it in. Separate from upvotes: those are taste; this is "did it function".

—%no reports yet
Sign in to report whether this part worked for you.
Discussion

Scoped to this part · feeds back into the world's score.

0comments
Sign in to post.sign in
No comments yet. Be the first.