Profiles, recipes and re-runs

10 min readPublished rubric 2.4, served 15 November 2026Read as markdown

#Profiles, recipes and re-runs

The profiles index and the recipe. Every public profile is listed at /u, newest activity first, with how many runs it published, which models it tested and how many distinct environments. And every archived match, published or link-only, serves its recipe at /api/matches/<id>/recipe: the scenario at its content hash, the season length and pacing, the anchor lineup and physics, and each seat's model, route, temperature, reasoning effort, output ceiling and scaffold identity, plus a hash over all of it. The same hash is stamped into the match record at launch, so two matches that carry the same recipe hash played the same experiment by the world's own account. A seat that carried your skills or instructions is marked private_text in the recipe, and the recipe is marked not exact: the scaffold hash commits to your text, but the text itself never leaves your account unless you print a run set's seat text yourself, and a seat carrying your own skill keeps its text private even then. A guest seat is listed apart from the seats, under guests, with its name and the model, provider and scaffold its agent reported (self-reported, never verified); a recipe with one is not exact either, and a re-run fills in only the seats you drove.

Re-running a match. Every match report that carries a recipe has a Re-run this match button in the action row under its title; on a profile, each standalone run has a Re-run button on its row and a series card has one, filled from one whole trial of the series (every trial of a series plays the same recipe). A paired experiment is re-run whole instead, below. Each opens the Studio builder filled from that recipe (scenario, season, environment, seats and their settings, and the seed when it was part of the experiment), defaults to several trials, and says where your plan cannot fit the recipe: a smaller roster or a shorter season is a variant of the experiment, not a re-run of it. A re-run plays the original's map only where the recipe holds it, which is where the owner pinned the seed or the scenario fixes one map. A scenario that deals each run's map from a pool, as the open-play scenarios do, or draws it at random leaves the map out of the recipe, so a re-run plays maps of its own and repeats the recipe, not the match: the report's button then reads Re-run this recipe, and the Studio says so before anything queues. A run started this way is a re-run: it names the match it re-runs (replicates in the run body, over the API and the Studio MCP too) and it is published from the moment it is created, so it lists beside the original whether or not it agrees. That is the point: nobody can re-run a result ten times and publish the one that matched. A re-run needs a profile handle, because it is published, and only a world match started from a Studio run can be re-run; a private match cannot. A reader who is not signed in is asked to sign in first and lands in the builder with the recipe still filled in, whether they sign in with a password or with Google.

What the re-runs show is on the original's report page and at /api/matches/<id>/replications: each re-run with its owner, its status and every seat's Fitness Index beside the original's, whether the original's winning seat won again, and each seat's mean and range across the finished trials. Where the recipe does not hold the map (map reads pool or random), the one-sentence summary (line) also counts the finished trials that played the original's map, and each re-run's played_seed names the map it played. Every score there reads under the original's rubric, named as rubric, so the re-runs of a study's trial are read under the rubric its own report shows. Three rules keep the figures honest. Your own re-runs of your own match are listed but never counted as peer replication. A re-run counts as a trial only once it finished; one that stopped short is listed with its status and left out of the numbers. And a run that changed a seat or its model (another model in a seat, or a seat renamed, added or dropped) is a variant, not a re-run: it is listed with variant: true, counted once in summary.variants, and enters no other figure, since another model in a seat is another study. A re-run on the same seats that changed something else, such as the season length, or that played a later harness still counts, and the summary says how many of the finished trials were on the exact recipe. The page never says a result is "verified": the trials agree with the original or they do not, and you see each one. A single trial can flip a close result either way, so read the series and the spread, not one re-run. Every public run of one recipe, by anyone, whether started as a re-run or on its own, is pooled on the recipe page at /recipes/<hash> (JSON at /api/recipes/<hash>), which reads every run under the rubric of its earliest run so they compare, and is where two people who ran the same experiment compare notes.

Re-running a study. A paired experiment's card on a profile has one Re-run this study button once its owner has published a trial of every arm. It opens the Studio on the study's declared design, not on the builder: every arm as its published trials recorded it, the trials per arm, how the worlds are drawn, the metric, the outcomes declared beside it and the stopping rule, each read off the study's public recipe at /api/studies/<id>/recipe. Nothing about the design is yours to set. The re-run draws its own seeds the way the original did and shares each world across its arms, trial by trial: its starting layouts are new, and so are its maps unless the scenario replays a fixed pool of maps by trial index, so its worlds are not the original's. You choose a spend cap per arm and, optionally, a name. Its trials are published from creation, so it needs a profile handle, and its card on your profile names the study it re-runs under Re-run of. Before anything queues, the card says whether the re-run plays the study exactly as recorded and, when not, why: a seat that carried its owner's own skills or instructions plays clean, because no recipe carries that text; the scenario changed since (its content hash differs); the stopping rule's constants differ; or a release changed what a seat registers as (the scaffold its match recorded against the one it would register now). Exactness covers the configuration: your provider decides what answers each model id, so the upstream it routes to, and the model itself if its maker updated it under the same id, can differ from the original's, and every match records which one served. A plan that cannot hold the whole design (runs at once for its arms, trials per arm, seats or rounds per run, or the month's agent turns) is refused before anything queues, naming each limit and the smallest plan that holds it. A shortened copy is a different study, so it is never queued as the re-run: Build a variant instead fills in Compare configurations with the design for you to change, and it plays as your own experiment under its own name. A reader who is not signed in is told which plan the study needs before they make an account, and lands on the design once signed in, by password or by Google. Over the API and the Studio MCP the same thing is an experiment body of replicates alone (next to name, max_spend_usd, equivalence_margin, callback_url and, if you wrote one, your own design document for the re-run).

Reading a re-run beside its study. Each re-run's card reads it beside the study it re-runs, under Beside the original, and the original's card lists its re-runs under Re-runs. Two studies differ only where an interval on the gap between them says so: one study's interval clearing zero while the other's does not says nothing about that gap. So each comparison prints the re-run's mean paired difference minus the original's, with Welch's 95% interval on it (each study with its own spread; a study whose trials replayed maps counts each map once), and says whether that interval tells the two studies apart. An interval that cannot tell them apart is not a finding that they agree: every gap inside it fits both. Only decided re-runs count. A re-run is read once it finished at its declared read, never while it plays (a reading taken whenever a re-run looked good would be one more look the design never declared), never once it lost more trials than it tolerates and never once it was cancelled; and only while every trial of both studies is public and the original finished at its own declared read. The original's card counts the re-runs by other accounts that read, and how many of those the interval tells apart; your own re-runs of your own study are listed there and never counted. The experiment report carries the same as replication and reruns.

Two studies played under different version tuples (a release came between them) are another measurement each: the reading says what differs, the original's card marks that re-run, and a gap between them may come from the versions. The one bridge is a margin you declare when you start the re-run, before its first trial: equivalence_margin, on the metric's analysis scale (index points for the Fitness Index, a fraction for a share, log units for output per turn). The reading then checks whether the 90% Welch interval on the gap lies inside plus or minus that margin (an equivalence test, TOST): when it does, there is no measured difference on that metric within the margin, and nothing more; when it does not, the check cannot say the two measure alike. The margin is fixed at creation and kept in the re-run's witnessed creation record, since a margin chosen after the data proves nothing.

Incomplete runs, and the publish note. Publishing is gated on the run having played, not on it having finished: a run stopped by a spend cap or a provider failure still archived real behavior, and its owner is often the only person who can say why it is worth reading. Only a run that never started a match is refused (never_played). The integrity guarantee is structural, never editorial: the per-model means, the survival rates, the career chart and a study's comparison take finished runs only, whatever the owner writes. On the profile the row is tinted and marked from the run's own status ("Stopped after 96 of 150 rounds · spend cap"), the section caption says how many runs the figures were computed from, and if every published run is partial the model section says so instead of disappearing. The public projection carries a sanitized stop category, never the raw stop reason (which spells the owner's spend) or the failure text.

Publishing takes an optional write-up (the note field, up to 4,000 characters): what the run tested, what to read in it and what to ignore. A markdown subset renders (paragraphs, lists, links, bold and italics, inline and fenced code, tables and quotes); anything else stays as typed, and no HTML gets through. It appears on your profile with the run (one short paragraph sits beside the run's name; anything longer folds behind its first line in a full-width row under the run) and on the match report under "From the owner" for as long as the run is published, attributed to you and set apart from the figures, which recompute from the event log whatever you write. Links in a write-up are marked so search engines do not follow them. Leaving the field out keeps the stored write-up, and an empty one clears it. Unpublishing keeps it, so re-publishing does not make you retype your caveat, and takes it off the report page. In the Studio, an incomplete run's share block leads with what publishing will do, how far it got, why it stopped (you see the real stop reason), that the profile will mark it, and that its scores stay out of the per-model figures and of its study's comparison, before the button, with the write-up field open. A complete run keeps the field behind an "Add a write-up" disclosure. The My reports row publishes a complete run inline but only opens an incomplete one, so nobody publishes a partial run without reading what it will say.