# PREREG-relay-population v1 — **VOID, NOT RUN**

> **VOIDED 2026-08-15, before any measurement was taken.** §3 declared a
> "ceiling model" built by replacing each work's `structureSeed` after
> construction. That is not implementable: the seed is derived inside `build()`
> and the geometry is already fixed by the time an outside caller could touch
> it. The deeper error is conceptual — the corpus and the clock are the only
> inputs to this program, so the observed population **is** its full
> morphological range and there is no wider setting to compare against. Every
> threshold in §5 that referenced ρ_S or ρ_C was therefore unmeasurable.
>
> Nothing from this file may be cited. It is kept, unedited below, because a
> preregistration that is quietly rewritten is not a preregistration. See
> `PREREG-relay-population.md` (v2) for the thresholds actually used, which are
> absolute and require no reference model.
>
> Hash of this void file as sealed: `0f9b7834132bbecec330769f1aba5c8f2f2a44248b211e1adef145c22e92b16e`

---

# PREREG-relay-population — population review of Relay Membrane / Stream 1.0.0

DMCF Radio · preregistration · 2026-08-15

**This file is written and hashed BEFORE any measurement is run.** The runner
(`tools/relay_population.py` + `tools/relay_descriptors.mjs`) verifies this
file's SHA-256 against `PREREG-relay-population.sha256` and **VOIDS the run on
mismatch**, so the thresholds below cannot move after the numbers are seen.
This is the same interlock as PREREG-tell-v3/v4, and it exists because two
earlier programmes in this station were saved from motivated reasoning only by
having declared their lines in advance.

## 0 · The question, and what it is not

The accepted work is frozen at 1.0.0. This review does not reopen acceptance.
It asks one thing:

> **Across the real population of airings, does Relay Membrane produce a
> genuinely varied family of works, or one idea repeated?**

A "no" here is not a defect finding against 1.0.0 — it is the evidence that
would justify a 1.1 built on *data-derived morphological regimes*. A "yes"
closes the question and 1.0.0 stands unchanged. **No version 1.1 may be begun
unless R below fires.**

## 1 · Sample

- **N = 800** airings drawn from pass 0 by fixed stride (`i * 617 mod |pool|`,
  the stride already used elsewhere in this station), plus **all 78** records
  missing at least one channel, plus the 8 shortest and 8 longest records.
  Deterministic; no random draw, no re-draw, no discarding.
- **Repeated-airings sub-sample:** 40 records, each rendered at **passes 0–5**
  (6 airings each, 240 works), to measure within-record variation against
  between-record variation.
- All works built at the **canonical performance seed 0**. The seed is excluded
  by contract from structure, so it is excluded here.
- Descriptors are computed at **t = 0.5 × secs** unless stated otherwise.

## 2 · Descriptors — exact definitions

**S · Silhouette signature.** From `geometry.points` (16 vertices, closed).
Compute the polygon centroid; sample the radius at **64 equally spaced angles**
by linear interpolation along the closed contour; divide by the RMS of those 64
radii. Result: a scale-free 64-vector. **Not rotation-aligned** — `bearing` is
a meaningful output of the airing, so rotating it away would erase a real
degree of freedom. Distance `d_S` = Euclidean between 64-vectors.

**P · Palette.** The renderer draws hue from five families
(`[188, 24, 316, 92, 214]`, selected by `mix32(structureSeed) % 5`) and adds
`38 × material_focus`. Record: the family index (0–4) and the realized hue
`(family + 38 × median(material_focus)) mod 360`. Report
- `H_family` = Shannon entropy over the 5 families, **max 2.322 bits**;
- `H_hue` = Shannon entropy over 36 ten-degree bins of realized hue,
  **max 5.170 bits**.

**A · Aperture.** Proxy, and declared as one: the time-mean of
`(null_brightness + null_focus + null_drift) / 3` from the trace params, which
is the fraction of the work's duration during which an absence bay is open.
This measures aperture *incidence*, not drawn pixel area; a pixel measure would
need a rasteriser this station does not ship offline.

**C · Pressure position.** At t = 0.5 × secs, compute exactly as the renderer
does: `axis = bearing + (pressure_center − 0.5) × 0.46`, then
`px = cos(axis) × (pressure_center − 0.5) × 1.08`,
`py = sin(axis) × (pressure_center − 0.5) × 0.86`, reported in units of
`rx`/`ry` so the pair is scale-free.

**N · Nearest-neighbour similarity.** Feature vector = the 64 silhouette values,
plus `[sin(hue), cos(hue), aperture, px, py, chamberCount/9]`, each of the six
trailing terms z-scored across the sample and weighted so the trailing block
carries the same total variance as the silhouette block. `d_N` = Euclidean.
Report the median NN distance and the **duplicate rate** = fraction of works
whose NN distance is below `δ = 0.02 × median pairwise d_N`.

## 3 · The ceiling model — what the system *could* do

Diversity numbers mean nothing in isolation, so each is compared against the
same program driven to the edges of its own declared range.

**CEILING:** rebuild each of the 800 works with its `structureSeed` replaced by
`mix32(i × 2654435761)` — i.e. let the morphology-selecting seed roam freely
while every other input is untouched. This samples the system's own
morphological space independently of what the corpus happens to contain.

Observed diversity is then read as a **fraction of ceiling**:
`ρ_X = median_pairwise_observed(X) / median_pairwise_ceiling(X)` for X in
{S, C}, and as an entropy ratio for P.

## 4 · Strata

Every descriptor is reported overall and within each stratum:

- **duration** — brief < 60 s · short 60–300 · long 300–1200 · extended > 1200
- **completeness** — complete · partial · sparse (the work's own `Reading` trait)
- **topology** — chamber count 5 · 6 · 7 · 8 · 9
- **pass position** — opening · body · closing
- **repeated airings** — the 40 × 6 sub-sample

**Stratum discriminability** `AMI`: adjusted mutual information between the
duration stratum and a 4-means clustering of the feature vectors. This asks
whether the data shapes morphology at all, in the direction opposite to the
repetition worry.

## 5 · The decision rule — declared now, applied once

**R — REPETITION DEMONSTRATED** if **any two** of the following five fire:

| # | fires when | rationale |
|---|---|---|
| R1 | `ρ_S < 0.60` | real airings use under 60% of the silhouette spread the system itself can reach |
| R2 | duplicate rate > **2%** | near-identical bodies recur at a rate a viewer would notice across a day's 246 plays |
| R3 | `H_family < 1.80` bits (of 2.322) | the five hue families are not being used evenly — palette collapses toward one or two looks |
| R4 | `ρ_C < 0.50` | pressure position, the main compositional variable, sits in half the available field or less |
| R5 | within-record median `d_N` across passes 0–5 < **0.25 ×** between-record median `d_N` | repeated airings of one record differ far less than different records do — the instant is decorative relative to identity |

**Any two firing ⇒ proceed to 1.1**, scoped to *data-derived morphological
regimes* — regimes defined by measured corpus structure (duration class,
completeness, chamber topology, spectral character), never by hand-added style
variants. **Fewer than two ⇒ 1.0.0 stands and the question is closed.** The
report will state the outcome in those words.

**A single firing is recorded and published but does not authorise 1.1.** One
marginal statistic is how a programme talks itself into work it wanted to do
anyway; this station has watched that happen and now requires two.

**AMI is diagnostic, not a trigger.** If `AMI < 0.05` — the data does not shape
morphology at all — that is a *separate and more serious* finding than
repetition, and it is reported as `DATA-INERT` regardless of R.

## 6 · Contact sheets

Produced with the measurements, but **not consulted before the numbers are
computed**, and deliberately **unlabeled**: no record id, no duration, no
stratum, no key. Sheets are the visual evidence a reader checks the statistics
against, not the instrument.

- 8 sheets × 48 works, drawn from the 800 in sample order (no aesthetic choice);
- 1 sheet of the repeated-airings sub-sample, 8 records × 6 passes, rows
  unlabeled;
- 1 sheet of the 48 works whose NN distance is smallest — the strongest
  visible case for repetition, shown whether or not R fires.

## 7 · What this review may not do

- It may not modify 1.0.0, its archive, its hashes, or its acceptance.
- It may not re-run with different thresholds. One run, one report.
- It may not substitute a favourable stratum for the overall figure.
- If the runner reports a prereg hash mismatch, the run is VOID and no number
  from it may be cited.
