PETRI DISH GAMES

Crossing

The public breeding path, in which a visitor names two organisms already shown and the lab breeds a child from them with its free operators.

Crossing is the public breeding path: a visitor names two organisms the Rorschach Lab has already shown, and the lab breeds a child from them on the spot. The request carries two integer ids and no source code, so nothing a visitor writes can enter the population. The child is born unproven and stays off every public surface until a browser has drawn it.

The request

A cross is a POST to /api/pub/cross carrying a track name, two organism ids, and optionally a pool id. There is no field for code and no model call anywhere on the path; the public module imports the operators and the validator directly rather than importing the breeding daemon, so the model client is never pulled onto the public surface behind them. A visitor supplies the choice of parents, and the lab supplies every byte of the genome.

Only the shader track is published, so a cross is always a shader cross.

The arena page sends the two ids of the pair currently on screen, and adds the pool id whenever the pool selector is set to something other than the whole ecosystem. A cross casts no vote and does not advance to the next pair: the child opens in an overlay over the same two parents, which stays up until it is closed or Escape is pressed.

Free operators

A cross may use the three free operators, the ones that recombine or perturb existing source without a model call. What each does to a genome is set out under breeding; on this path they are tried in a fixed order and the first that returns a child wins.

OrderOperatorReturns nothing when
1spliceEither parent defines fewer than two functions, or no shared locus differs. main() is never a candidate, and loci identical apart from whitespace are skipped.
2graftThe second parent defines no function the first parent lacks.
3jitterNo literal was touched.

A public jitter is run at its own strength: the selection rate is drawn between 0.15 and 0.45 and the range between 25% and 60%.

The operator that succeeded is stored on the child and becomes its class in the taxonomy. The operators that call a model are reserved to the daemon; no path reachable without a credential can invoke one.

Cost and cap

A cross is the most expensive public request there is, costing 8 tokens against the per-client token bucket judging sets out, where a vote costs 1 and the bucket holds 60.

Beyond the bucket, visitor births are capped at 30 per UTC day. The cap is a single global counter, not a per-client allowance: one row in the key-value table keyed by the UTC date. It is read before the cross is attempted and raised only after a child has actually been inserted, so a refused cross costs the day nothing. The rate limiter bounds the rate at which one script reaches the pool; the cap is the ceiling on how much of the population’s turnover anonymous visitors can account for in a day.

Refusals

The checks run in order, and the first that fails ends the request:

  • the named track is not published
  • the two ids are the same organism
  • the day’s counter has reached the cap
  • either id is not a living, rendered, error-free organism of that track, which is the same visibility filter pairing applies, so a visitor can only cross what could have been shown
  • the request named a pool and either parent’s phylum is not that pool
  • none of the three operators applies to the two parents
  • the child fails the contract
  • the child is byte-identical to either parent
  • the child would join a clone family already at its cap

The last check counts living organisms within token distance of the child and refuses at the same radius and family size the daemon enforces. A visitor cross is most often a jitter, and a jitter child is token-identical to its parent, so without it the public surface would refill the clone families diversity work has just purged.

Refusals reach the page as their own text, shown beside the button and cleared after four seconds. The pair remains on screen.

The child’s record

FieldValue
opthe operator that produced the child
parentsboth parent ids, the first named id first
genone greater than the higher of the two parent generations
ratingthe mean of the two parents’ owner ratings
titlethe first parent’s title
prompt_idthe first parent’s prompt gene
originvisitor
render_ok0

Lineage is walked through the first entry in parents, so a visitor child joins the first named parent’s phylum. The origin value is what the gallery’s visitor-bred view filters on, and it is the only column that distinguishes a visitor child from a lab-bred one afterwards.

Proving and admission

An organism with render_ok at 0 is excluded from pairing, from the gallery and from being crossed again, so a visitor child reaches no public surface at birth.

The child is dealt to its own creator as a canary the moment it is inserted, which makes the creator’s browser its first prover. The overlay compiles and draws it, and the page reports the outcome on the canary terms the contract sets out. Neither report can kill it, which death reaches only through the owner’s own path.

Once proven, the child is an ordinary member of the population. It is dealt in pairs and judged, it ranks by the same blended fitness selection reads, it is eligible as a parent for the daemon and for further visitor crosses, it appears in the gallery, and it is culled on the same terms as everything else.

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
lab.config.json a095dd3b3dab
OPERATORS 2135902ed4dc
publicCross f14fffef049d
rorschach.astro b439b3c1f84b
server.js 2ee5143085a9

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.