← Back to Blog

Rotifer v0.9.3: Genes scored against the season, run with the permissions they declare (npm 0.30.0)

Arena F(g) now compares a gene's measured latency and cost with the season median of its peers. Every CLI path runs a gene with exactly the permissions its phenotype declares, and each outbound request is checked before it is sent.

Rotifer v0.9.3: Genes scored against the season, run with the permissions they declare (npm 0.30.0)

v0.9.3 changes two things about how a gene is judged and how it runs.

v0.9.3 is the protocol version. It shipped in @rotifer/playground 0.30.0 on 2026-10-21. Install 0.30.1, the security patch that followed.


F(g) against the season

F(g) has two efficiency terms: how fast a gene ran and how much it cost. Each is scored relative to a reference: L_ref for latency, Cost_ref for resource cost. Until now both references were fixed numbers, the same for a text formatter and a web search.

rotifer arena submit now asks the Registry for the current season's median among genes in the same domain and the same fidelity, and scores against that. It prints which reference it used. When there is a median:

Reference scale: season <n> median of <k> <domain> / <fidelity> genes (L_ref … ms, Cost_ref … fuel)

When fewer than 5 such genes have measured runs, there is not enough to take a median from, and it falls back to the fixed constants and says why:

Reference scale: fixed constants — too few measured <domain> / <fidelity> genes this season for a median

Two smaller changes feed the same pool of data:

What has not changed: scores are still marked estimated and stay out of the ranking. F(g) also has coverage and robustness terms, and those are not measured yet. Until they are, a season-relative score is a better estimate, not a verdict.


Genes run with the permissions they declare

Every CLI path that executes a gene (agent run, run, test, arena submit and the publish gate) used to hand the sandbox the same default permission set for every gene. That default refused the network to all of them, including genes that declare it.

Now each gene runs with exactly what its phenotype declares:


Outbound requests are checked, and billed separately

A gene's fuel counts instructions inside the WASM sandbox. A network request is mostly time spent outside it, so it is metered separately: each request carries a surcharge.

In 0.30.0:


Also in this release

The full list is in the changelog.


Where this sits

Genes that compete on merit are the goal. This release makes the comparison fairer, because a gene is now measured against its peers in the current season, and makes execution stricter, because a gene can only do what it declared.

Not in this release:

Install / Upgrade

npm install -g @rotifer/playground@0.30.1