Log inGet started
Package

README.md

Versions

Every version of this package its world published, newest first by when it first appeared. A version published again later keeps its place.

  • plan: Fruit Fly, the instrument pass --- FoodPatch: re-stage the composite so its manifest row is a composite --- vcs: re-stage every composite root so its manifest row is a composite and the world publishes again --- plan: Fruit Fly, the instrument pass: the first-experiment card watches MN9 by name --- fly: an arena the fly cannot leave, per-eye looming, a turn, no floating, and the fly's own sound The fly meets the arena wall through its own circuits: each compound eye reads the wall off its own optical axis, so the wall is a looming stimulus on the side it is on, and the body is clamped at arenaRadius as well. Looming is split into independent LPLC2 and LC4 drives per side, so silencing one leaves the other driven and the guide's ablation has an answer. The fly turns. MaleCNS v1.0 labels a side on the leg motor neurons (189 left, 185 right) and on DNa01/DNa02, so the turn is the descending pair's difference plus the legs on one side carrying the body further than the other's. It labels the tarsal and labellar taste neurons side unknown, so taste stays one unsided drive and the per-foot sugar readings are reported as what they are: a fact about the body, not about the connectome. Beating wings lift the fly only once it is off the ground, so a loom no longer floats it with its legs frozen. onFeed fires once per meal. Every drive the fly sets is filed under the source fly and quantised, so it stops rewriting the network every frame. Each sense is resolved to its neurons once. The body reads as a fly: banded abdomen with the bands on the surface, laid-back translucent wings on a new wing material, eyes on a smooth eye material, antennae reaching forward and down. Body:destroy takes down only what it built. Sound: a seamless 220 Hz wingbeat bed following the wing motor neurons, a wet tick for a mouthful, a dry thump for a hop, all synthesised as pcm. FoodPatch drops the inert bitter field. MaleCNS labels no bitter gustatory neuron, so there was no honest cell type behind it. --- lab: a floor that takes a shadow, the specimen on a plinth, a 12 m arena ring, haze and a vignette The world becomes a place. The ground carries fruitFly.labFloor, a matte mid grey at roughness 0.6, and is 400 across so its far edge sits within a degree of the horizon. The sun is warm at 2.6 and about 44 degrees of elevation, the ambient fill is sky blue at 0.22, and the directional shadows run at softness 0.55 with a 60 unit range, so every body in the arena is grounded by its own shadow for the first time. Brain moves to (0, 4.2, 16.3): in front of the spawn camera, high enough that the lowest neuron of the ventral nerve cord sits at y 1.27 and the optic lobes clear the horizon. Plinth is a 4.8 by 1.8 drum under it in the floor's own material, clear of the ring. BrainLabel captions it with the dataset, the counts and the scale the cloud is drawn at. ArenaRing is a new flat annulus mesh at radius 12, the arenaRadius the fly keeps to, lying on the floor. Look carries the new FruitFlyLook component: the lighting intent, the shadow config, a depth haze registered as fruitFlyHaze and a vignette as fruitFlyVignette, both on the scene layer, all as Fields. The two passes cost 0.020 and 0.016 ms of GPU. Bitter becomes Food3 at sweetness 0.25. Experiments and FirstRun are added per slice D's handoff. The scene README says what the scene holds and which entity is which, build.luau states the room without the scaffold's lamps and crate, entrypoint.luau keeps no commented scaffold, and the no-op Brain override is gone. Science unchanged: gain 0.6, minSynapses 5, every Shiu constant, dropped 0. Taste oracle after the move: claw_tpGRN at 100 Hz gives MN9 125.0 Hz and Kenyon cells 0.054 Hz; the JO- control gives MN9 0.0 and Kenyon cells 34.1 Hz. --- lab: render the labFloor material preview The material type requires a preview.png and assets.generatePreviews reports three enqueued, then zero pending, zero done and zero failed, and writes no file. This one is a 256 px isolated capture of a sphere carrying the material, saved to the asset folder. --- lab bench: laid out from the live screen, readable, reachable from every input family The bench reads its size from ui.screenSize() and caps its body, so eleven groups leave it 639 px tall instead of 930. Group colours come from a hash of the group's own name, so adding one never recolours the rest. Every readout draws to its own full scale with that scale printed, the trace carries a zero line, gridlines named in Hz and a time axis on a square root scale so a group at 4 Hz stays visible beside one at 130, a group of 32 neurons or fewer gets a raster, every row carries an x that stops watching it, and groups at zero collapse into one line. New blocks: the ten hottest cell classes, the drives that are live and who set them, a neuron panel for whatever the pointer picks in the cloud, eight chips for the cell types this bench is used on most, and a legend for the cloud's superclass colours. The state line says when activity is recurrence with nothing driven. The selection grammar moves to selection.module, where repeated keys merge and class, super and side take comma lists the way type already did, so 'type:MN9 type:DNa01' names four neurons and 'class:Kenyon_Cell,MBON' names the union. lab.inputMap carries the bench's own controls on keyboard, gamepad and touch: toggle, focus next and previous, activate, nudge a slider, identify a neuron. The focused control draws a 2 px outline, so the whole bench is reachable with a pad alone or a keyboard alone, and a Lab button sits bottom left for a finger. --- fly: a component that survives its neighbour's reload, wing veins, material previews The readouts and the sense index cache are keyed on the network's own identity, so a brain that reloads is re-armed rather than talked at through a dead handle, and the brain component is looked up again every half second instead of held for the session. Drives are re-asserted five times a second, so a clear from the bench or a protocol no longer leaves a fly standing on sugar tasting nothing. Each wing gets its costal vein. A membrane that clear has no silhouette against a bright sky, and the vein is what the eye reads a wing by. Rendered previews for the wing and eye materials, which the publish gate requires. A body and a sound rig each reclaim their own parts by name when they are built, so a script reload stops leaving a second thorax and a fourth wing standing, and each teardown checks an entity still exists before destroying it. --- brain: the cloud is registered only while it can be seen, and it is cheap The neuron cloud is split into buildCloud and setCloudDrawn, so the draw can be dropped and put back without touching the buffers, and FruitFlyBrain tests the cloud's bounding sphere against the on-screen camera every three frames with thirty frames of hysteresis. Measured on this world: mesh_transform_compose 4.74 ms a frame registered, 0.67 ms with the draw down, and the frame average goes 20.99 to 16.73 ms. Only the 139,741 neurons that have a soma get a slot now, down from 164,587, which needs the new cloud_gather kernel to copy each slot's activity out of the neuron it draws. The fill is spread over frames from a task, so building the cloud costs about a millisecond a frame for a second rather than one frame of 318 ms, and the cloud re-origins from the records when the entity moves instead of rebuilding. A selection is answered from index buckets built once at load and memoized: the six timed terms go from 6.0 to 8.8 ms down to 0.42 ms cold and 0.007 ms warm, with the same counts (50 / 595 / 4064 / 1314 / 185 / 126). Drives carry the name of whoever set them and a neuron sees the largest rate any source asked for, so the fly cannot clobber the bench. A watch that would need a fourth readout group on any neuron is refused with a message naming the groups it holds, instead of silently evicting one; unwatch frees the slots and the group id. New: drives(), classRates(), groupActivity(), neuronAt(), setCloudOrigin(), keepCloudDrawn(), setMaxStepsPerFrame(). timeScale and maxStepsPerFrame join Params, load rejects an unknown key the way setParams does, and the component's Field defaults are the calibrated regime (gain 0.6, minSynapses 5, timeScale 1, maxStepsPerFrame 32). The component registers the builtin bloom while the cloud is drawn, the neuron material lifts rest to 0.12 and a spike to 9.0 with the rim term now a property, and a crackle synthesised with audio.encodePcm plays from the Brain entity at a level following the network rate, 0 at rest and 0.32 at 4.5 Hz. Science unchanged: claw_tpGRN at 100 Hz puts MN9 at 125.0 Hz with Kenyon cells at 0.06 Hz, prefix JO- leaves MN9 at 0 with Kenyon cells at 32.6 Hz, dropped 0 throughout. --- fly: the arena wall reads at full rate in whichever eye faces it A wall the fly is right up against fills the eye that faces it, whatever angle that eye's axis makes with the radius, so the stronger eye reads the full rate and the weaker one reads its share of that. The asymmetry between the eyes is what steers, and keeping it while the magnitude reaches the circuits that act on it is what turns the fly away instead of leaving it walking the boundary. Measured from a reset with the fly placed at radius 11.6: it sees the wall (wall 0.63, 94 Hz in the left eye, DNp01 at 194 Hz), turns, and walks back in, radius 11.63 to 10.90 to 10.17 to 9.48 to 8.90 to 8.40 to 8.00 to 7.73 over seventy seconds, with a maximum of 11.67 and never reaching the clamp. --- fly: each clip says what it is and how it was made The three soundClips carried the scaffold README and empty metadata. Each now names its own waveform, its length, why it loops or does not, and which moment of the fly plays it. --- experiments: no local shadows the color namespace, and the screen name says what it is The readout-colour helpers held their swatch in a local named color, which shadows the engine's color namespace for the rest of the scope. Renamed, and the screen constant carries a line saying what it registers. Diagnostics on the file: 0 errors, 0 warnings, 0 hints. --- firstRun: the card's completion names who finished it, so a published scene cannot ship it pre-ticked The completion was stored on the FirstRun entity as the bare string 'done'. An entity attribute is authored state: it serializes into scene.json and is published with the world, and the entity is shared by everyone in it. So the scene this run committed carried 'done' and every visitor would have arrived to a card with all four steps already ticked, which is the opposite of what the card is for. The value now names who finished, from multiplayer.getPeerId(), and a value naming anybody else leaves the card standing. Verified by planting the bare 'done' on the entity and reloading the component: progress() reads all four steps false and the card draws fresh, while finishing it stores 'done:peer2' and puts it away. --- fix: the bench you can reach, a fly that stays an animal, and a world that arrives with its brain in it The bench's scroll body is virtual, so every control below the fold keeps a real position instead of stacking on the last row the engine could place: the whole Selection block, the neuron panel, the fly block and the legend were painting on top of each other and could not be pressed. Selection now leads the body, because it is the only block a person acts through. The hot-class column is wide enough to tell four names beginning "mechanosensory" apart. The trace draws at the resolution the plot can show and the window redraws six times a second, which takes the bench's cost back to where it cannot be measured against a closed one. The scene shipped with the neuron cloud switched off, so the world opened on an empty plinth. It is on. The experiments panel opens shut, so the first thing a visitor meets is the brain rather than two panels over the whole screen, and the stale completion attribute that would have handed everyone a finished first-run card is gone. The brain's caption is legible. The fly reads its giant fibre as a burst over the rate it has been holding. The network's own recurrence holds DNp01 at a standing rate with nothing looming, and a threshold on the level read that as a permanent emergency: the fly hopped for ever and never came down. The arena wall is a stimulus only while the fly is carrying itself into it, and the detectors adapt to it, so a fly resting at the edge stops driving 165 neurons at full rate into the network every reading in this world is taken from. A slow heading drift, reported apart from the turn the connectome asks for, leaves a fly that explores its arena instead of walking one straight line to the edge. Looming finds a walker whether or not the player registry has readied. The guide says which detector class the ablation actually answers. --- docs: say why the bench's identify press checks the pointer before it picks --- fix: the bench's reference blocks are asked for, and the card's closing line holds still The five blocks under the trace are reference rather than instrument, and the whole tree is rebuilt on every redraw, so they sit behind a 'more' toggle and the bench builds 123 widget nodes instead of 242 until someone asks for them. The first-run card reported the rate MN9 was firing at as the line was drawn, so a person who read it after clearing the drive was told 'MN9 is firing at 0 Hz and the proboscis is out'. It reports the rate MN9 reached when the fourth step ticked. --- Refresh the world's shots: the specimen, the bench, a protocol running, the fly, naming a neuron, the arena

    claude-code @ auraAgent · Published Sep 20, 2026On main
    01M2ZXRFNYYDPV3NVRZ2GBGFNSb7758702b4Browse filesCompare with previousCompare from here
  • Fruit Fly: the MaleCNS connectome as a GPU spiking network, an embodied fly, and the lab bench, all in the fruitFly package --- Fruit Fly: the MaleCNS connectome as a GPU spiking network, an embodied fly, and the lab bench, all in the fruitFly package --- connectome: the edge table travels as two parts under the blob upload cap

    claude-code @ auraAgent · Published Sep 13, 2026On main
    01M2DSA3K7ZZ175SN750R4F6A2a2a6602ba8Browse filesCompare from here