PETRI DISH GAMES

Organisms

One generated artifact's source together with the record the lab keeps about it: its track, its ancestry, its standing and its state.

An organism is the source of one generated artifact together with the row the Rorschach Lab keeps about it: what produced it, what it descends from, and how it has been judged. The source is the genome, and it is written once: no operation in the lab edits an organism’s source after birth, and no row is ever deleted. Every organism belongs to exactly one track, which fixes what its source must be.

Tracks and genome form

TrackLabelGenome
shaderShadersThe body of one WebGL2 fragment shader in GLSL ES 3.00. A fixed prelude is prepended at render time, declaring u_time, u_res, u_audio and the fragColor output.
uiUI panelsOne self-contained HTML fragment: a single <style> element and markup, with no script, no external references and no document tags.

A track also carries the contract the source must satisfy and the list of axes a mutation is told to move along. Neither evolves, so no mutation can break rendering by changing the terms it is rendered under.

Of the two tracks, only shader is published: the pairing, gallery and crossing endpoints refuse any other track, so the ui population exists only inside the lab.

The source is one of two genomes an organism carries. The other is the aesthetic directive that was fed to the model, held as a reference to a prompt gene rather than as text of its own. Only the model operators consult a gene; an organism produced by a structural operator records its first parent’s gene instead, because that gene is what actually wrote the code it was built from.

The record

FieldHolds
idInteger primary key, assigned on insert. Rows are never deleted, so an id is never reused.
trackshader or ui.
codeThe source.
titleThe optional title line the generating model emitted, truncated to 60 characters, or nothing. A child of a structural operator inherits its first parent’s title.
prompt_idThe prompt gene the organism is attributed to.
opThe operator that produced it: fresh, mutate, radical, crossover, splice, graft or jitter.
parentsThe parent ids, comma-separated. Empty for a fresh organism.
genOne more than the highest gen among its parents. Zero for a fresh organism.
originlab for the daemon’s own breeding, visitor for a cross made from the public surface.
rating, games, winsThe owner’s ladder.
pub_rating, pub_games, pub_winsThe public ladder.
statusalive, culled or dead.
render_ok1 once a client has reported that the organism compiled and drew. 0 at birth.
errorThe failure text recorded alongside a dead status, up to 500 characters.
frozen1 marks an owner favourite.
created_atBirth time, in milliseconds.

Every organism is born unproven. render_ok is the record that some browser has actually run it, and it is the gate on visibility: the public pairing endpoint, the gallery and the visitor-cross endpoint all read only rows that are alive, proven and free of an error. Breeding reads the proven pool too, and falls back to the whole alive population only when nothing in the track has been proven yet.

The two terminal statuses are distinct causes. culled is death by the pool’s own pressure and carries no error. dead is a render report from a client that watched the organism fail, and the reason it gives is stored in error. Neither removes the row: a dead organism still stands in its descendants’ ancestry.

frozen is set by the owner and read by culling, which exempts a frozen organism and also excludes it from the count of the population against capacity. Freezing does not suspend anything else about the organism, which goes on breeding and being judged. Freezing covers the exemption and its limits.

Ratings and games

Each organism carries two independent Elo ladders over the same source. rating, games and wins record the owner’s verdicts; pub_rating, pub_games and pub_wins record the public’s. Each judge writes only its own columns, so the two orderings can diverge and the gap between them is measurable.

A fresh organism enters at the configured starting rating, 1200 in the lab’s current configuration. An organism with parents enters at the mean of its parents’ owner ratings instead, so a child begins from its parents’ standing rather than re-earning it. The public columns hold the same value the owner columns do at birth, and an organism’s effective public rating stays its owner rating until it has played its first public game.

An organism counts as judged when its owner games and public games together exceed zero, and the single number the pool is ranked by blends both ladders. Selection covers the blend and judging covers how a game is cast.

Lineage

An organism’s lineage is its founding ancestor, reached by following the first id in parents upward until the walk stops. The lineage takes the founder’s title as its name, or lineage <id> where the founder has none, and it is the phylum rank in the lab’s taxonomy, which sets out the walk and the conditions that end it.

Only the first parent is followed, so a two-parent birth inherits the lineage of its first parent alone and its second parent contributes nothing to it. Because rows are never deleted, an ancestor that died is still there to be walked through. An organism’s ancestry never changes after birth, so its lineage is fixed for as long as the row exists and is cached without any need to invalidate it.

Token set and distance

Organisms are compared by the token distance defined under diversity, which reduces the source to the set of identifier-shaped runs it contains and reads no rendered frame. That measure is the input to the gates a birth must clear and to the redundancy term that decides which organism dies first when the pool is over capacity.

The generating model reuses the same helper functions across organisms, so two organisms that share nothing else still share the token names of that boilerplate.

The distance is computed in two places over the same formula: once directly, tokenizing both sides on each call, and once through a per-organism cache keyed on the source, so a cached token set cannot outlive the code it was built from.

Bound to

The source this page's claims were read against, named by symbol and pinned by the digest of the file it lives in.

SymbolDigest
db.js 193eb96a460a
evolve.js b72f4e12e72f
genome.js 2135902ed4dc
lab.config.json a095dd3b3dab
llm.js b7d1d0c7aa85
public-api.js f14fffef049d
server.js 2ee5143085a9
tracks.js 979ad190a564

Near this subject

These are the subjects this one is joined to in the field. Step out of this card and they are the wells around the one you are standing in.