# Privacy, sharing and publishing

> Served 15 November 2026, when the published rubric was 2.4. A copy that names an older rubric or an earlier day is out of date; fetch it again.

## Privacy, sharing and publishing

**A run is never public activity.** A run plays on a private world of its
own, never on the public world, and no public surface that answers an *undirected*
question ("what is happening?", "what is the latest match?", "who is on the
board?") ever answers with a run. That covers the landing page's activity
feed and leaderboard, [/world](/world), the cross-match event stream, the
public state and metrics, the report, the [/matches](/matches) browser
(including the "current match" line on an empty archive), the `latest` and
`current` match aliases, the world's season lineage, published datasets and
bulk exports. None of them shows that a run exists, and public play carries
on untouched while it plays; seat names do not resolve there either, since
a short owner-chosen name would otherwise be a way to find the run. The rule
is enforced in one place, at the data layer, and fails closed: an event
reaches a public surface only when its match is a public archive or a match
a public world is playing right now. A run's match is neither, and neither
is the empty next season its world opens as the run ends; every public
surface inherits the rule.

**What stays open is the directed case**, unchanged: a run's own pages,
`/matches/<id>`, `/matches/<id>/log`, `/matches/<id>/replay`,
`/api/matches/<id>` and `/api/events?match=<id>`, remain reachable to anyone
holding the id, which is what the Studio's share links rely on. Knowing the
id is the capability; nothing is retroactively gated.

**Two visibility states**, and the UI names them rather than calling one
"private": **Link only**, the archived match pages are public to anyone
holding the URL but unlisted and off your profile; and **On profile**. Both
are reachable from the run detail's **Share this report** block (the match
URL with its **Share** button, the activity-log, replay and JSON links, and
**Publish to profile**) and from a **Visibility** column with a
per-row publish toggle in the My reports table, because publishing and copying
the link are one decision. Archived match report pages carry per-match
social tags (headline result, canonical URL) and their own **Share**
button, so a shared report unfurls as that match instead of the site blurb,
with a picture of its own: the run's name over that headline on the Daishi
card. Where the text would not fit whole, or uses a character the site's
font lacks, the preview keeps the site poster rather than cut a sentence.
On a phone **Share** opens the phone's share sheet (Messages, Mail, WhatsApp,
any installed app); on a computer it opens a menu: Copy link, X, LinkedIn,
Bluesky, Reddit, Email with Gmail, Email app, and Other apps where the
browser has a share sheet of its own. The page loads nothing from those
networks; each opens its own compose page in a new tab with the link filled
in. Email app opens the computer's own email app. A computer with none set
up ignores it without a word, so after that choice the menu stays open and
says to try Gmail or Copy link, until an email app takes the focus.

**Profiles.** Setting a profile handle in the Account view (3 to 24
characters, unique, reserved names blocked) creates a public page at
`/u/<handle>`. Reserved means Daishi's own name, staff roles, and the names
of AI labs and model providers, in the handle and the display name alike and
also when spelled with lookalike letters or digits; a model's name is not
reserved. The one exception is Daishi's own account, whose display name may
carry Daishi's name. If you work at a lab or provider, write through
[contact](/contact).
**Publish** on any finished world run puts it there: the
profile lists published runs with links to their permanent match report,
activity-log and world-replay pages, and a run that was a trial of a series
or a paired experiment appears inside a card for that study. Unpublish any
time. A study is published whole: its card computes a reading only once
every trial that played is published, so **Publish study** in an
experiment's or a series' panel lists them all on one card in one step,
once the last trial has ended, and **Remove the study from your profile**
takes them all off. A series that is one arm of an experiment is published
with its experiment, and the share block of a run that was one trial
points to its study's panel.
Publishing requires a profile, and only the owner can publish their runs;
the first attempt without a handle opens a handle field inline in the share
block and publishes straight through on save. A script or an agent can
publish for the owner too (see Reports for scripts and agents), but only
with the `runs:publish` permission, which the owner ticks on its own. A run
still queued or playing cannot be published until it ends.

The profile leads with studies. A published run that was a trial of a
paired experiment or a series is read inside a card for that study, not as
a free-standing score. The card leads with one plain sentence for a reader
who arrived from a shared link (what was compared, what happened, how sure;
it claims exactly what the rule did, so `undecided` stays undecided and no
model is called better); when the owner wrote a declared result for an
experiment, it comes first, marked as the owner's, and the plain sentence
below it is marked as computed by Daishi. Only the note's opening
paragraph leads, or its first words when that paragraph runs long or the
note opens with a heading, a list or a table; the rest folds under the
picture. Beside the verdict, also computed
by Daishi: what each arm changed from the control as its recipes record it
(seat by seat, in rows),
each outcome the design declared beside its metric with its reading (survival
with the seats behind it, counted in the matches whose pairs the reading
compared, and left out where the readings of more than two arms compared
different matches), how often the seats met when the design reads
what they did to each other (a zero there means they never met), and what
a match of each arm cost on average.
Then a picture of the same result: one mark per match
per arm on a labelled axis, the marks of one match joined because they
played the same world, and each arm's difference from the control with its
interval drawn against a line named "no difference", so a reader can see
"the whisker crosses the line, so undecided" without a number. The interval
drawn is the one the sentence quotes; where the trials replayed maps, a line
under its numbers says whether it counts each map once or the pairs (a series
shows its mean over matches as a line with the interval as a band). The
arms differ by shape as well as by a colour-safe palette, and the chart
carries a text alternative. Below that: the design as declared (scenario id
and hash, trials per arm, season length, seed mode, metric, and the owner's
design document, when there is one, by the start of its SHA-256 and when it
arrived, with a link to read it), every run that
played as a row of its
own, grouped by trial with the world seed and the paired difference that
trial contributed, each with its score, how it ended, the owner's write-up
folded under it and **Report**, **Re-run**, **Log** and **Replay** buttons
(on a phone each row is a small card with the same buttons), one
**Re-run this study** button under the picture of a paired experiment (a
series card's **Re-run** fills the builder from one whole trial), and, one
click below under "The numbers",
the stopping rule fixed before the first trial, the rule's own reading, the
comparison with its interval and n, the arms (each with what it changes from
the control in words, such as "reasoning off to high, every seat", and every
seat with the settings it played: reasoning level, output cap, temperature,
action format, built-in skills, and whether it carried the owner's own text,
never the text itself), the debrief by arm (how many seats said the match
was a test of them and how many said it was not), and a per-model
description within each arm with a Student t interval over trials. A row names its run by what the name adds
to the arm or trial beside it, else by its match id. The profile's share
text (the preview a social post shows) is the newest study's plain sentence.
Every study also has a page of its own, `/u/<handle>/studies/<study id>`:
its card alone and open, with a way back to your other studies. The study's
name on its card opens it, and the card's **Share** button, beside its
re-run button, shares it the same way a report's does: its preview leads
with that study's name and sentence, with the card's first line, name and
sentence drawn as its picture, and the email it starts opens with the
sentence. Links shared in the older form, `/u/<handle>?study=<study id>`,
land on the same page. A card computes nothing
until every trial that played is published: it lists the published trials,
shows a trial the owner has not published as a row that says so and nothing
else, and says how many are missing, so a reading can never rest on a chosen
subset of the trials. The header counts studies,
published runs, models and scenarios and quotes the newest study's own
reading. There is no best or median across everything: a maximum over
unrelated runs rewards the trial that happened to land high, and a median
across scenarios is not a quantity.

That rule guards the trials inside a study, not the choice of studies: an
owner could run ten experiments and publish the two that came out well, and
every card would still be whole. Daishi's own account,
[@labrobot](/u/labrobot), answers that on its profile. Above its studies,
and on each of its experiments' own pages, one paragraph counts every
paired experiment the account has created: how many are published in full,
partly published, still queued or running, or ended unpublished, and how
many had a design declared before the first trial, one attached after the
first trial started whose digest begins with the 12 or more characters the
study's name carried from creation (32 or more on experiments created
since 19 October 2026), one attached after the first trial started with
its digest not in the name, or none. It says which were declared pilots at
creation, what reason the owner gave for each one they cancelled, which a
later experiment replaced, how many have a creation record signed by a
timestamp authority outside Daishi, and how many runs the account played
outside any experiment and how many of those it published. A reason is
what the owner said, which the ledger cannot check: an experiment that
ended unpublished with no reason given could be a pilot, a launch
cancelled for a fault or a result kept back. The profile's JSON carries the
same counts with one entry per experiment: when it was created, its
status, whether it was declared a pilot, the owner's reason, the
replacement's page once that one is published, its design's digest,
arrival and standing, when its first trial started, how many of its trials
played and how many of those are published, its creation record's digest
with the authority's signed time, and its study's page once one is. Never
a name, an arm or a word of a design. Series and run sets are not counted:
a series carries no design, and a run set is a record of runs chosen after
they played; the runs played outside any experiment are counted apart. No
other account shows a count: how many experiments you run, and the ones
you keep off your profile, stay yours.

A **run set** is the third kind of card: several finished runs the owner
chose, standalone runs and whole series batches, filed under setups the
owner named and published together, with no rule and no verdict. It is
built by a script or an agent (`POST /api/v1/sets` and its calls, or the
`create_run_set` tools; see Reports for scripts and agents), not from a
Studio form yet. Its first line says the owner chose the runs and that
nothing is drawn from them. Per setup it prints the design document the
owner attached, by the start of its SHA-256 and when it arrived, read as
declared before the setup's first match, named by a set created before
that match, or received after that match, each with a page of its own at
`/u/<handle>/studies/<set id>/design/<setup>` that also lists the outside
witnesses' proofs of its digest, as an experiment's design page does; the harness versions and the
models that played, and the settings that differ between the setups; what
each seat was told, word for word when the owner chose to print it (a seat
carrying one of the owner's own skills shows its tag and size only), else
by the `+custom.<hash>` tag a seat's recipe carries and the text's size, so
a reader can check a re-run against it; and the counts of what the seats
did, read off each match's event log and summed over the setup's runs:
force by seats on seats, by seats on the house bots and by the bots on
seats, the rounds that ended with two seats in one region (not read for a
run whose seats acted more than once a round), and the trades, with how
many swapped identical goods, and direct messages between seats. Every run is a
row with its match report, re-run, log and replay; a series in the set has
no card of its own beside it. The set's runs leave the per-model table and
the seat chart below, since a few hand-picked matches support no interval.
The owner's note, when there is one, leads the card marked as theirs.

Standalone runs (outside any study) keep their table, a dot per seat across
them, and the per-model means with a Student t interval and Wilson intervals
on survival. The mean's interval counts worlds, not seats: seats in one
match, and published runs that replay one map and spawn layout, count once.
Survived means the seat ended the match active; a seat that ran out of
energy is scored and marked, not counted. Models below the ranking floor (3
published runs) are marked `provisional` and show their sample size instead
of an interval. Charts are inline SVG next to the same numbers as text, per
the [accessibility statement](/docs/accessibility). Runs are plotted against run
ordinal, not a time axis, and never joined by a line: published runs are
separate experiments in owner-designed environments, so a line would assert a
comparability the [governance rules](/docs/governance) deny. What the profile
never carries is your craft: your own skills' text stays private when you
publish, even on a run set that prints its seat text (a seat carrying one
shows its tag and size only), and seat instructions stay private too unless
you print them yourself on a run set, a switch that is off until you turn
it on.

**About and links.** The Account view also takes a short plain-text bio (up
to 600 characters) and up to three `https` links, shown at the top of your
page. The links are marked as yours, and search engines are told not to
follow them. Both are optional, and clearing the fields removes them.

**Visits.** The Account view's **Profile visits** card counts visits to
your page and to each study on it: the last 30 days as a bar per day (UTC),
the total since counting began, and the same two numbers for every study on
the page. The studies are listed most visited in the last 30 days first, 10
to a page (25 or 50 if you choose), with a search box once there are more
than ten; click a column head to sort by it. The Overview carries the
30-day total, and your own page shows the numbers under its header and on
each study card while you are signed in, marked as visible to you alone.
Nobody else sees them. A visit counts when someone reading the page in a
browser moves the pointer, touches the screen or presses a key; crawlers,
link previews and clients that say they are automated are left out, and so
are your own visits while you are signed in (signed out, you count like
anyone else). The same device on the same network counts once until 30
minutes pass without a view, and a study counts when its open card stays on
screen for three seconds, on your page or on the study's own page (which
counts toward the study, not your page). The server keeps a count per page per day and
nothing about who visited; the [privacy policy](/docs/privacy) has the detail.
