# Retinotopic Vision and Tonotopic Hearing in BrainCore: A Reproducible Spiking Neural Systems Report

Technical report. The measurements were obtained on 2026-09-11 before the working tree was committed. The measured
implementation and fixtures were then preserved without modification as commit `b0e46be4e71b` on branch
`fix/grounding-and-spontaneous-wiring`. Between measurement and commit only the acceptance tests were refactored, to
add seed sweeps; a clean copy of the committed tree reproduces all 16 digests of the original runs (§10.0). Every number below is copied from a report file under
`eval/artifacts/2026-09-11/` or from a fixture under `eval/fixtures/regions/`; the file is named next to the number.
Where the report computes a statistic that the acceptance did not grade, the section says so.

## Abstract

We report two sensory paths of BrainCore, a spiking-network simulator in which every brain region is a separate
service that exchanges only spikes. A model retina (Wohrer & Kornprobst 2009) drives nine Potjans–Diesmann columns of
Brodmann area 17 through a 3 × 3 retinotopic tiling; a Meddis cochlea and bushy cells drive four columns of area 41
through four tonotopic bands. The network receives only luminance and sound pressure, a nearest-centroid decoder
outside it reads spike counts, and no plasticity is enabled. In the single-seed acceptance runs, four glyphs are
discriminated in 15 of 16 test presentations, the evoked response under each column follows the ink in its tile
(Spearman 0.866), and a 1 kHz versus 2 kHz decoder is correct in 20 of 20 leave-one-out trials with ordered tonotopy.
Shuffling the afferent order changes total spike production by at most 0.4 % while removing the retinotopic and
tonotopic organization; blank and silent inputs remove the stimulus information. Runs are bit-for-bit reproducible
across processes. Under a rule committed before 20 new seeds were run, glyph discrimination passes (median accuracy
94 %, retinotopy on 20 of 20 seeds), tonotopy and the decoder hold on 20 of 20 seeds, and the hearing repeat
criterion fails (13 of 20 seeds against the required 18). A geniculate relay built from published parameters
fails its transfer-ratio criterion (0.124 against 0.30–0.62) and is left out of the visual path. The results establish
separately validated visual and auditory representations; they show neither learning nor reading.

Status vocabulary, used throughout the fixtures and here: `M` a measurement from a cited experiment, `P` a published
model parameter, `C` a declared convention of this project, `D` a number derived from cited numbers by a formula
written in the source document.

Terminology. The visual task is **glyph discrimination**: four 7 × 9 bitmaps of one font, shown one at a time at the
centre of the frame, decoded by a nearest-centroid classifier that lives in the test, outside the network. It is not
reading, and this report does not claim reading. Code, fixtures and environment variables keep their historical
prefix `reading` (`reading_test.go`, `reading-acceptance.json`, `BRAINCORE_READING_*`); in the text the task is called
glyph discrimination.

## Summary of results

| Path | Criteria | Result | Controls | Report file |
|---|---|---|---|---|
| Vision, eye → area 17 (9 columns) | 7 graded + 5 required control breaks | 12 of 12 | shuffled retinotopy, blank frame | `reading-acceptance.json` |
| Hearing, cochlea → cochlear nucleus → area 41 (4 columns) | 7 graded + 2 controls | 7 of 7, both controls break | shuffled tonotopy, silence | `hearing-acceptance.json` |
| Geniculate relay, retina → LGN → 1 column | 7 graded + 2 controls + transport | 6 of 7, **transfer ratio red** | no TRN, shuffled wiring | `lgn-acceptance.json` |

Seed sweeps, 20 seeds each, graded per seed by the unchanged acceptance criteria (§8.4):

| Path | Sweep | Seeds | Seeds passing every per-run criterion | Main numbers | Rule over seeds |
|---|---|---|---|---|---|
| Glyph discrimination | exploratory | 20260906–20260925 | 20 of 20 | median accuracy 94 %, retinotopy median 0.867 | not applied |
| Glyph discrimination | preregistered | 20261001–20261020 | 20 of 20 | median accuracy 94 %, retinotopy median 0.860 | pass |
| Hearing | exploratory | 20260911–20260930 | 12 of 20 | tonotopy 20 of 20, 1k/2k 20 of 20, repeat 12 of 20 | not applied |
| Hearing | preregistered | 20261001–20261020 | 13 of 20 | tonotopy 20 of 20, 1k/2k median 100 %, repeat 13 of 20 | **fail** (repeat) |

The vision and hearing paths pass their declared acceptances with the fixture's seed. Under the rule over 20 new seeds,
committed before those seeds were run (§8.4), glyph discrimination passes (letters decodable on 20 of 20 seeds,
median accuracy 94 %, retinotopy on 20 of 20), and hearing fails on one of its three parts: tonotopy and the
1 kHz / 2 kHz decoder hold on 20 of 20 seeds, the repeat criterion on 13 of 20 against the required 18. The LGN relay does not: its transfer
ratio is 0.124 against a measured window of 0.30–0.62, and the vision path therefore bypasses the geniculate stage
(retinal tiles project directly into L4 and L6). No parameter was tuned after a run in any of the three paths; every
threshold was written into the fixture before the run and left there.

In both paths, destroying the afferent order leaves total spike production nearly unchanged while removing the
measured organization: shuffling the tonotopic afferents changes the spike count by 0.4 % (1 442 002 against
1 448 145) and moves every tone off its column; shuffling the retinotopic afferents changes it by less than 0.01 %
(8 976 028 against 8 975 700) and drops the retinotopic correlation from 0.866 to 0.184. Activity and the
information-bearing organization of that activity are measured separately, and only the second depends on the wiring.

---

## 1. Architecture

### 1.1 Regions, the contract, and the clock

The brain is a set of *regions*. A region owns its neurons and every synapse that ends on them, advances itself by
whole exchange intervals, and exchanges only spike batches with the rest of the brain (`backend/internal/region`).
A spike is `(neuron id, absolute step)`; a batch is one region's spikes of one interval, sorted by `(step, neuron)`.

The scheduler (`backend/internal/sched`) runs every region for one interval in parallel, waits at a barrier, then
routes each batch to the regions that have projections from the emitter. Every inter-region delay is at least one
interval, so nothing emitted in interval *k* can be needed before interval *k+1* and the parallel phase is exact.
The scheduler keeps a running SHA-256 over every batch; the last 16 hex digits of that hash are the "digest"
reported everywhere below. Two runs are considered identical when their digests are identical.

A region may live in the same process or behind gRPC in a child process (`regionlab -spawn N`, `-serve`,
`-remote`). The digest is transport-independent by construction and each acceptance verifies this (criterion
`transport`).

### 1.2 The neuron and synapse kernel (`lifpop`)

Cortical and thalamic populations are leaky integrate-and-fire neurons with exponential post-synaptic currents,
integrated on a fixed grid with the exact propagator of Rotter & Diesmann 1999 (one step is a matrix product, not an
Euler step). Spikes are detected at step boundaries; a spike with delay *d* steps is added to the target's current at
step `emission + d`. Synapses are static compressed-sparse-row arrays with a per-synapse delay. Neurons are
integrated in fixed chunks of 2048 with a random stream per chunk, and deliveries are integer femtoampere atomic
adds, so a tick is bit-for-bit identical with 1 or 12 workers. Nothing physiological is in the code; every constant
comes from the connectome JSON.

Optional kernel mechanisms exist (STDP after Morrison 2008, short-term plasticity, conductance channels, NMDA,
dopamine and cholinergic modulation, structural birth) but **none of them is enabled on the sensory paths of this
report**. Both cortical fields are static.

### 1.3 Persistence

Persistence is a property of the platform, not a mechanism behind any result in this report: every run starts from a
freshly built network, no state is carried from one run to the next, and no plasticity is enabled. Two persistence
properties of the substrate are tested elsewhere:

- **Freeze/Restore and Snapshot/Load** of every region type in the paths. The retina, cochlea, glyph eye and scene
  regions each have a package test that freezes state, restores it and replays the following intervals spike for
  spike (`retina_test.go`, `cochlea_test.go`, `glyph_test.go`, `scene_test.go`). The cochlea acceptance of
  2026-09-10 replays 500 intervals after a Restore identically (criterion 5c in `docs/COCHLEA_SOURCES.md`).
- **Tissue files**: a region can keep its synapses and neuron state in one file of fixed size instead of the heap;
  the file is allocated at build time and never grows (`backend/internal/region/tissue.go`,
  `backend/internal/tissue`). The tissue acceptance of 2026-09-11 (`tissue-acceptance.json`, 50 of 51 criteria)
  shows that heap, wide and packed layouts give one digest and that a packed PD14 column at scale 0.1 takes 40.5 MB
  against 84.5 MB wide.

The three sensory acceptances of this report ran their cortical columns **on the heap**; `reading_test.go` and
`hearing_test.go` do not pass a tissue block. The statement "the same brain could be kept in a file" rests on the
tissue acceptance, not on these runs.

### 1.4 The cortical column and the field

Every cortical field is a sheet of Potjans & Diesmann 2014 (PD14) columns, one column per mm² of cortical surface
(77 169 neurons per mm² at full scale, 8 LIF populations L2/3E, L2/3I, L4E, L4I, L5E, L5I, L6E, L6I). Lateral
connections between columns follow an exponential profile `exp(−r/β)` with β from Reimann 2017 (E→E 0.232, I→E
0.161, E→I 0.125, I→I 0.120 mm), mask 5β, delay 0.5 ms + r / 0.3 mm/ms, with in-degree conserved (the column's PD14
in-degree is divided between own and neighbouring columns by profile mass). Fields are down-scaled to N = K = 0.1
with the compensation of PD14 appendix A3 (van Albada 2015). Known consequence, measured on 2026-09-10
(`docs/BRODMANN_FIELDS_SOURCES.md` §5): at 0.1 the column's rates are 3–7× below the NEST reference and L2/3E of the
SvA2018 variant is silent; the acceptances therefore compare a column *inside* a field only with the *same* column
alone at the same scale, never with NEST.

The field of area 17 in this report uses the SvA2018 column variant and 9 columns (3 × 3) of the 4767 the atlas
cites for the area (Andrews, Halpern & Purves 1997). The strip of area 41 uses 4 PD14 columns (1 × 4); the atlas has
no cited surface for area 41, the field generator refuses to invent one, and the strip is built by the test with the
same rule. Both caps are conventions forced by memory (64 GB shared by several parallel agents), not claims about
the anatomy.

### 1.5 Sensory organs as regions

| Organ | Package | Model | Output populations |
|---|---|---|---|
| Retina | `internal/regions/retina` | Wohrer & Kornprobst 2009 (Virtual Retina): OPL centre–surround cascades, contrast gain control, ganglion rectification, LIF spiking with Ornstein–Uhlenbeck noise and N(3, 1) ms refractoriness | ON and OFF ganglion mosaics |
| Glyph eye | `internal/regions/glyph` | rasteriser + schedule around a parvo retina (`retina-parvo.json`, 100 px/deg) | ON/OFF mosaics cut into 3 × 3 retinotopic tiles of 64 cells |
| Scene | `internal/regions/scene` | frame schedule (uniform, grating, spot, bar) around a retina (`retina-catx.json`, 2 px/deg) | ON/OFF mosaics 7 × 7 |
| Cochlea | `internal/regions/cochlea` | 32 gammatone channels (Glasberg & Moore 1990 ERB, Slaney 1993), Meddis 1986/1988 synapse with Meddis, Hewitt & Shackleton 1990 constants, three spontaneous-rate classes 60:25:15 (Liberman 1978), Sumner 2002 refractoriness | `an_hsr` (optionally split into tonotopic bands), `an_msr`, `an_lsr` |
| Cochlear nucleus | `lifpop` from `cochlear-nuclei.json` | spherical bushy cells of Kuenzel 2011 (69.2 MΩ, 20.1 pF, −65.1 mV), one endbulb per high-spontaneous fibre | `bushy_b` |
| LGN | `lifpop` from `lgn-relay.json` | relay cells with the parameters of `pd14-thalamus.json`, TRN, L6E feedback | `TC_ON`, `TC_OFF`, `TRN` |

The organs receive physical input only (luminance in [0, 1], sound pressure in Pa). No symbol, label or decoder is
inside any region. The decoder that turns cortical spike counts into "which letter" or "which tone" is part of the
test binary and trains on spikes.

### 1.6 The three wirings measured

```
Vision (reading-field-9.json):
  glyph eye (48×48 px frame, 24×24 ON + 24×24 OFF ganglia, 3×3 tiles)
    → ba17_r_c: L4E, L4I, L6E, L6I of the column under tile (r,c), in place of the PD14 thalamic generators
    9 SvA2018 columns at N = K = 0.1, lateral rule of the field; 179 298 neurons; dt 0.1 ms; min delay 0.1 ms

Hearing (hearing-field41.json + hearing-cochlea.json):
  cochlea (32 channels 125 Hz–8 kHz; an_hsr split into 4 bands of 8 channels: 125–548, 548–1477, 1477–3517, 3517–8000 Hz)
    → cn: bushy_b, 4 × 96 cells, one_to_one endbulbs of 2000 pA, 1 ms
    → ba41_0_b: L4E, L4I, L6E, L6I of column b with the PD14 thalamic in-degrees; background K_ext reduced by ΔK = 72/45/37/14
    4 PD14 columns at N = K = 0.1; 31 896 neurons; dt 0.05 ms (the cochlea's sample period); min delay 1 ms

Geniculate relay (lgn-relay.json + lgn-scene.json):
  scene retina (16×16 px, ON/OFF 7×7) → TC_ON/TC_OFF one_to_one, 794 pA (0.77 of the rest-to-threshold gap, Carandini 2007)
    ↔ TRN (54 cells, 75 inputs of 5.28 nS per relay cell) ↔ L6E feedback
    → one PD14 column at N 0.1, K 1 (in-degrees kept); 7 968 neurons; dt 0.1 ms
```

The thalamic in-degree is conserved in both cortical paths: for every PD14 thalamic projection the synapse count of
PD14 eq. 1 is computed for the scaled sizes, then re-drawn from the new source population with the probability that
returns the same count. Weight (87.81 pA × √10 at K = 0.1) and delay (1.5 ± 0.75 ms) are the thalamic ones. Tests
`TestReadingConnectomeIsTheFieldWithAnEye` and `TestHearingFixturesAreDerivedFromTheParts` regenerate the
connectomes from their parts and compare byte for byte.

---

## 2. Methodology

### 2.1 Acceptance protocol

Every path has a fixture pair: a connectome (`*-field*.json`, `*-relay.json`) in which every number carries a
`sources` entry with a status letter and a quote, and an acceptance (`*-acceptance.json`) that declares the
criteria, their thresholds, the controls and which criteria each control **must break**. A test in
`backend/cmd/regionlab` reads both, runs the model and the controls, computes the criteria, writes a JSON report and
fails if any graded criterion fails or any control fails to break what it must. Thresholds are written before the run
and are not changed after it; where a run revealed a defect in a control or a measurement, the defect is described in
the source document, both reports are kept, and the rerun is labelled (hearing run 1 vs run 2, §5.2).

Two structural tests accompany every path and run in seconds: `Test*FixturesAreCompleteAndSourced` (every numeric
field has a status letter) and a derivation test that rebuilds the generated fixtures from the base column, the
lateral rule and the organ config and requires byte equality.

### 2.2 Readout

- **Vision**: spike counts of all 72 LIF populations (9 columns × 8) in the show window [onset, onset + 200 ms),
  minus the same counts in the 200 ms before onset for the evoked measures. Decoder: nearest centroid on
  standardised features, trained on the first 4 rounds (4 presentations per letter) and tested on the last 4
  (16 presentations). No free parameter.
- **Hearing**: for each tone, the spikes of all populations of each column in [onset + 2.5 ms, onset + 102.5 ms)
  minus the 100 ms before onset (2.5 ms = 1.0 cochlea→bushy + 1.5 bushy→column). Four numbers per presentation.
  Decoder: leave-one-out nearest centroid between the two tones of the f1/f2 pair.
- **LGN**: rates of relay, TRN and retina in the grey window and under the grating; efficacy of a retinal spike as a
  function of the preceding inter-spike interval; relayed fraction (relay spikes with a spike of their own ganglion
  cell in the preceding 33 ms); retinotopic maps from eight spots.

### 2.3 Determinism and transport criteria

Each acceptance repeats a short run (1500 ms vision, 500 ms hearing, 1000 ms LGN) twice and requires one digest, then
runs the organ (eye; cochlea plus cochlear nucleus; relay) in a child process over gRPC and requires the same digest.
Because the digest hashes every spike of every interval, a 500 ms comparison is as strict as a longer one.

### 2.4 Hardware and toolchain

Apple M2 Max, 12 cores, 64 GB. `go1.25.6 darwin/arm64` installed, `go.mod` declares `go 1.26.3` (toolchain
auto-selection). All three acceptances ran on the same machine on the same morning while other agents were
simulating on it; wall-clock numbers are therefore upper bounds.

| Run | Neurons | Biological time | Wall | Spikes | Spikes per wall second |
|---|---|---|---|---|---|
| Vision, letters | 179 298 | 16.5 s | 126.8 s | 8 975 700 | 7.1 × 10⁴ |
| Hearing, model | 31 896 | 10.5 s | 16.6 s | 1 448 145 | 8.7 × 10⁴ |
| LGN, relay | 7 968 | 9.5 s | 34 s | 354 612 | 1.0 × 10⁴ |

Whole test durations: vision 536 s (three 16.5 s schedules plus digest and transport runs), hearing 137 s, LGN 195 s.

---

## 3. Vision: retinotopic glyph discrimination, eye → area 17

### 3.1 Stimulus

Four bitmaps of 7 × 9 dots (`A`, `O`, `T`, `I`; `I` is the Cyrillic И), rasterised at 4 px per dot and centred on a
48 × 48 frame. At the parvo retina's 100 px/deg (P, Wohrer & Kornprobst Fig. 10) a glyph is 0.36°, inside the
0.3–2° band in which Legge et al. 1985 measured maximal reading rates (D). Ink 0, background 0.5 (Michelson contrast
1; polarity is irrelevant per Legge). Schedule: 500 ms grey, then the four letters in cyclic order, each 200 ms on and
300 ms grey, for 8 rounds: 16.5 s. Show 200 ms covers the parvo transient (τ_G 20 ms) and undershoot (τ_U 100 ms);
blank 300 ms lets the undershoot decay to exp(−3).

### 3.2 Results (`reading-acceptance.json`, fixture `glyph-letters.json`)

| Criterion | Declared threshold | Measured | Verdict |
|---|---|---|---|
| retina_contrast | OFF cells over ink rise, ON cells over ink fall (P) | OFF 100.2/s shown vs 38.5/s baseline; ON 11.9/s vs 54.6/s | pass |
| cortex_evoked | L4E spikes in show window above baseline, summed over 9 columns, > 0 (C) | +3017 per presentation | pass |
| retinotopy | Spearman(evoked L4E, ink cells of the column's tile) over 36 pairs ≥ 0.386 (D, see §8) | 0.866 | pass |
| repeat_consistency | mean r of count vectors within a letter > between letters (C, ordinal) | 0.999 (112 pairs) vs 0.998 (384 pairs) | pass, weak, see §8.3 |
| letters_decodable | nearest centroid ≥ 75 % of 16 test presentations (C/D) | 15 of 16 = 94 % | pass |
| digest_repeat | one digest for two 1500 ms runs | `064a1dd7951d4367` twice | pass |
| transport | eye in a child process gives the local digest | `064a1dd7951d4367` local and remote | pass |

Confusion matrix on the 16 test presentations (rows true, columns predicted, order A, O, T, И):

```
A  4 0 0 0
O  1 3 0 0
T  0 0 4 0
И  0 0 0 4
```

Evoked L4E response per letter and column (spikes above baseline, mean over 8 presentations; row-major columns
(0,0)…(2,2)) against the number of ink cells in the column's tile:

| Letter | Evoked L4E per column | Ink cells per tile |
|---|---|---|
| A | 158, 492, −140, 671, 437, 672, 242, 102, 385 | 4, 16, 4, 18, 16, 18, 10, 0, 10 |
| O | 150, 625, 141, 529, 413, 571, 218, 681, 218 | 4, 16, 4, 16, 0, 16, 4, 16, 4 |
| T | 270, 832, 136, 74, 530, −19, 10, 365, −37 | 6, 22, 6, 0, 16, 0, 0, 10, 0 |
| И | 484, −15, 424, 639, 71, 657, 435, 113, 531 | 10, 1, 11, 17, 14, 17, 11, 1, 10 |

Tiles without ink show negative excursions (T, tiles (1,2) and (2,2): −19, −37), consistent with lateral inhibition
from driven neighbours through the field's I→E projections; this was reported, not graded.

### 3.3 Reported, not graded

Grey-frame rates of the nine columns (baseline window of the warm-up), min–max over columns, against the isolated
field of 2026-09-10:

| Population | Under the eye, grey frame | Field alone (`field-acceptance.json`) |
|---|---|---|
| L2/3E | 0.02–0.03 Hz | 0.00 |
| L2/3I | 0.32–0.41 | 0.14 |
| L4E | 4.09–4.36 | 0.38 |
| L4I | 3.07–3.27 | 0.34 |
| L5E | 3.60–4.21 | 1.15 |
| L5I | 2.34–2.57 | 1.25 |
| L6E | 2.71–3.05 | 1.16 |
| L6I | 2.75–2.93 | 1.42 |

The parvo retina at uniform grey fires ~45 Hz per ganglion cell (44.2 Hz derived, 44.9 measured on 2026-09-06),
whereas the PD14 thalamus is silent in the field fixture. Through 128 ganglion cells per column at the thalamic
in-degree this lifts L4 about ten times above the isolated field. No cited rate exists for a 0.1-scale SvA column under
a grey field, so this is not graded; the missing geniculate relay (transfer ratio 0.3–0.6) is the stage that would
reduce this drive, and §5 shows it is not yet available.

---

## 4. Hearing: cochlea → cochlear nucleus → area 41

### 4.1 Stimulus

Tones of 300, 1000, 2000 and 5000 Hz, one per band, each at least half an octave from its band's edges so the
fourth-order gammatone skirts do not reach the neighbouring band (one octave from a 1 kHz channel a tone is 70 dB
down). Level 70 dB on the model's scale, 22 dB above the high-spontaneous class threshold (48 dB measured in the
cochlea acceptance), inside the saturated part of the rate-level function (97.0/s at +30 dB vs 98.3/s at +50 dB).
100 ms tones with 2.5 ms ramps every 250 ms, 10 presentations each interleaved in cycles, 500 ms transient: 40 tones
over 10.5 s. The 150 ms gap is of the order of the fibre's short-term adaptation (Westerman & Smith 1984, ~60 ms).

### 4.2 Background trade

In PD14 the thalamus is silent during spontaneous activity; the bushy cells are not (one endbulb fires the cell on
every input, so the bushy rate in silence is the high-spontaneous fibre's resting rate: 64.8/s reduced by the 0.75 ms
dead time to 61.8/s, D; measured 60.2–60.4/s per band). The background K_ext of every thalamic target is therefore
reduced by ΔK = round(K_th · 61.8 / 8): 72, 45, 37, 14 synapses of the scaled 210, 190, 290, 210. The removed background
carried K_th · 61.8 spikes/s at the same weight, so mean and variance of the external shot noise are unchanged (both
∝ K·ν·w²). This is the only derived quantity in the path that was not in PD14 and it was checked by criterion 4.

### 4.3 Results (`hearing-acceptance.json`, run 2)

| # | Criterion | Declared threshold | Measured | Verdict |
|---|---|---|---|---|
| 1 | repeat matches | loudest column per tone the same in ≥ 90 % of 10 presentations (C) | 300 Hz → col 0 in 90 %; 1000 → col 1, 2000 → col 2, 5000 → col 3 in 100 % | pass, 300 Hz at the bar |
| 2 | f1/f2 discrimination | 1000 vs 2000 Hz, leave-one-out nearest centroid ≥ 90 % with ≥ 8 presentations (C) | 20 of 20 | pass |
| 3 | tonotopy | every tone's loudest column is its band's; columns rise with frequency (M: Merzenich 1975, Morel 1993, Formisano 2003, Da Costa 2011) | columns 0, 1, 2, 3 | pass |
| 4 | background rates | every LIF population of every column within 25 % of the column alone at 0.1, in silence (P) | 32 of 32 | pass |
| 5 | inhibitory exceeds excitatory | every layer of every column (M: PD14) | 16 of 16 | pass |
| 6 | digest repeats | same seed twice, cochlea built from its file, 500 ms | `1ebfb4a73ed3457a` both | pass |
| 7 | transport | cochlea + cn in a child process | same digest, 2 processes, 5 bytes per spike | pass |

Mean response per tone and column (spikes above baseline per 100 ms, mean ± SD over 10 presentations; SD computed for
this report from the per-presentation responses in the artifact, not graded):

| Tone | Column 0 | Column 1 | Column 2 | Column 3 |
|---|---|---|---|---|
| 300 Hz | **349 ± 92** | 11 ± 220 | 10 ± 143 | 79 ± 195 |
| 1000 Hz | 50 ± 250 | **563 ± 89** | 81 ± 137 | 23 ± 179 |
| 2000 Hz | −14 ± 163 | 13 ± 156 | **461 ± 103** | 84 ± 166 |
| 5000 Hz | −8 ± 173 | −39 ± 111 | 69 ± 111 | **565 ± 188** |

Background rates in silence (0.5–10.5 s) against the PD14 column alone at the same scale:

| Population | Column alone | ba41_0_0 | ba41_0_1 | ba41_0_2 | ba41_0_3 |
|---|---|---|---|---|---|
| L2/3E | 0.47 | 0.48 | 0.45 | 0.46 | 0.50 |
| L2/3I | 2.07 | 2.06 | 2.10 | 2.10 | 2.20 |
| L4E | 4.00 | 4.11 | 4.16 | 4.16 | 4.28 |
| L4I | 5.03 | 5.17 | 5.15 | 5.18 | 5.21 |
| L5E | 6.45 | 6.43 | 6.74 | 6.96 | 6.92 |
| L5I | 7.88 | 7.92 | 7.80 | 7.77 | 7.96 |
| L6E | 0.89 | 0.93 | 0.90 | 0.95 | 0.93 |
| L6I | 6.95 | 7.03 | 7.02 | 7.08 | 7.10 |

Where the response comes from, by the fixture's numbers: at 70 dB a tone drives the 96 bushy cells of its band from
62/s to about 100/s; with 9.3 endbulb synapses per L4E neuron that is +350 input spikes/s on a background of about
1700/s, a 20 % step of the external drive for 100 ms. Neighbouring columns pick up tens of spikes through lateral E→E
synapses (81 in column 2 for the 1 kHz tone). The 300 Hz tone gives the weakest response because the ERB is narrow at
low frequencies (~55 Hz at 300 Hz) and a tone excites fewer channels; it is the one tone whose loudest column was not
unanimous (9 of 10).

---

## 5. Geniculate relay: retina → LGN → column (red)

This path is reported because its failure is the reason the vision path bypasses the thalamus.

### 5.1 Results (`lgn-acceptance.json`)

| Criterion | Declared threshold (source) | Measured | Verdict |
|---|---|---|---|
| relay spontaneous rate on grey | 3–15 Hz (M, Alitto 2011, alert macaque parvo/magno) | 4.49 Hz (retina 44.8 Hz) | pass |
| transfer ratio under the grating | 0.30–0.62 (M, Sincich 2007 46 ± 16 %) | **0.124** (relay 6.55 Hz over retina 52.7 Hz; 0.100 on grey) | **fail** |
| paired-spike enhancement | efficacy after an interval ≤ 30 ms > after a longer one (M, Usrey 1998) | 0.137 (13 686 spikes) vs 0.019 (1 806) | pass |
| relayed fraction | ≥ 0.95 of relay spikes preceded by their ganglion cell within 33 ms (M, Sincich 2007) | 1.000 of 1 925 | pass |
| retinotopy peak | relay map peak within one cell of the spot's ganglion cell, 8 spots (M, Usrey 1999) | 6 spots at distance 0, 2 at distance 1 | pass |
| retinotopy map | mean ganglion–relay map correlation ≥ 0.438 (D, 3/√47) | 0.784 | pass |
| digest | two runs one digest | `4e4933db406905d3` twice | pass |
| transport | relay in a child process, 1000 ms | `f021eb82625c83ea` local and remote | pass |

### 5.2 Diagnosis (not graded, `lgn-diagnostics.json`, `docs/LGN_SOURCES.md` §5)

Relay rate under the grating with one sourced number moved inside its own stated uncertainty:

| Variant | Relay Hz (ON / OFF) | Transfer ratio |
|---|---|---|
| fixture | 6.55 / 6.55 | 0.124 |
| TRN→relay peak conductance 1.86 nS instead of 5.28 nS (the steady-state form of the same 1.33 mV IPSP) | 12.3 / 13.3 | 0.243 |
| retinal EPSP at the top of Carandini's range, 0.97 of the gap | 8.5 / 9.1 | 0.166 |
| no L6E feedback to relay and TRN | 2.7 / 3.0 | 0.054 |

Mechanism, as a model-internal explanation (it describes this model, not the physiology of the real relay): the TRN fires at 27–32 Hz (its measured awake rate); 75 depressing GABA_A inputs of 5.28 nS at that rate
add ≈ 24 nS to the relay's 23.8 nS leak, pull the effective rest towards −68 mV and halve the membrane time constant,
so an EPSP of 0.77 of the rest-to-threshold gap no longer sums to threshold. Without the reticular loop the same
relay fires 2.3 spikes per retinal spike (the L6E feedback alone depolarises it above threshold). Within the model,
the loop sets the ratio and its sourced strength sets it too low; whether the same holds in the animal is not tested
here. The result that stands without the explanation: this composition of published parameters is incompatible with
the measured transfer ratio. No variant within the stated uncertainties reaches the window; the
fixture was left as sourced. The next number to change must be a measurement: the reticular-to-relay conductance at a
known holding potential, a counted reticular convergence on cat relay cells (75 is a mouse model prediction), or the
retinal PSC decay as a per-projection channel (in vivo time to peak 8.5 ms; the relay has one excitatory channel of
2.59 ms and its retinal EPSP peaks at 4.7 ms).

---

## 6. Negative controls

A control keeps everything of the model except one declared thing, is run with the same seed and the same examiner,
and **must** break the criteria listed for it in the acceptance fixture. A control that breaks none of them fails
the acceptance as a whole. Whether a control also breaks criteria that are *not* listed is reported, never claimed.

### 6.1 Vision

| Control | What changes | Must break | Broke | Reported, not declared |
|---|---|---|---|---|
| `shuffled_retinotopy` | every ganglion cell sent to a tile by a fixed permutation; retina, frames, schedule, in-degrees unchanged | retinotopy | retinotopy: Spearman 0.184 (< 0.386) | letters_decodable fell to 56 % (9 of 16; confusion `[[2 1 0 1] [0 3 0 1] [0 0 4 0] [1 3 0 0]]`); evoked L4E +2836 (unchanged in kind); repeat_consistency still passes |
| `blank_frames` | ink = background, everything else unchanged | retina_contrast, cortex_evoked, retinotopy, letters_decodable | all four: no ink cells; evoked −246; Spearman 0; accuracy 3 of 16 = 19 % | repeat_consistency still passes (0.9993 vs 0.9993) |

The shuffled control was declared to break only retinotopy on purpose: a fixed permutation is a random projection of
the image onto nine columns, and random projections can preserve distances, so decodability under it cannot be
promised. It fell to 56 %; the lightest letter T was still read 4 of 4, the others were confused.

### 6.2 Hearing

| Control | What changes | Must break | Broke |
|---|---|---|---|
| `shuffled-tonotopy` | every column draws K_total/4 afferents from each of the four bushy bands; in-degree, weight, delay, background as the model | tonotopy | tonotopy (loudest columns 3, 1, 2, 0 for 300, 1000, 2000, 5000 Hz), repeat matches (50 / 50 / 40 / 30 %), f1/f2 12 of 20 = 60 % |
| `silence` | the model's cochlea with no tone; examiner reads the same windows | f1/f2 discrimination, tonotopy | both, and repeat matches (loudest column at chance: 50 / 30 / 50 / 50 %); mean responses within ±95 spikes of zero |

Under the shuffled control every column answers every tone with about a third of the model's in-band response
(mean responses 61–206 spikes across all columns), as the wiring predicts: each column receives a quarter of every
band. Spike counts of model and shuffled control differ by 0.4 % (1 448 145 vs 1 442 002): the same brain, a
different afferent order.

**Run 1 of the hearing acceptance is defective and kept.** The fixture generator shared a population slice between
model and control; the control's background was reduced twice (L4E K_ext 66 instead of 138) and its columns ran at a
fraction of the PD14 rates (L4E 0.69 Hz vs 3.99 Hz in silence). The model's 7 of 7 and digest were identical in both
runs; the control broke tonotopy in run 1 for the wrong reason. The generator now copies the slice,
`TestHearingFixturesAreCompleteAndSourced` requires model and control to have identical regions, and run 2 is the
report. The run-1 file named in the section report (`hearing-acceptance-run1-control-double-dk.json`) is **not
present** in `eval/artifacts/2026-09-11/` at the time of writing; the description above is from
`docs/HEARING_SOURCES.md` §4 and `sections/hearing.md`.

### 6.3 LGN

| Control | What changes | Must break | Broke |
|---|---|---|---|
| `notrn` | TRN → relay projection removed | (none declared; ≥ 1 required) | relay 95.4 Hz on grey (window 3–15), transfer ratio 2.31, efficacy 0.85 short vs 0.87 long (enhancement gone), relayed fraction 0.78: 4 criteria |
| `shuffled` | retina → relay wiring drawn by a fixed permutation at the same degree | retinotopy peak, retinotopy map | both (peaks 1–4 cells off, map r 0.029), plus transfer ratio 0.184 and relayed fraction 0.78: 4 criteria |

---

## 7. Ablations

The project did not run a systematic layer-by-layer ablation of the cortical columns. The ablations that exist are
structural removals used as controls or diagnostics, listed here with what they showed. Each was run with the same
seed as its model.

| Path | Ablation | Effect |
|---|---|---|
| Field (2026-09-10, `field-acceptance.json`) | lateral connections removed (β → 0, `ba17-field-9-isolated*.json`) | column rates unchanged (16 of 16 within 25 %); the thalamic pulse no longer reaches the neighbour or the diagonal (model: source 6.5 → neighbour 10.5 → diagonal 12.5 ms) |
| LGN | TRN → relay removed | transfer ratio 0.124 → 2.31; relay spontaneous 4.5 → 95 Hz; paired-spike enhancement disappears |
| LGN (diagnostic) | L6E → relay and L6E → TRN removed | transfer ratio 0.124 → 0.054; relay 2.7–3.0 Hz |
| LGN (diagnostic) | TRN → relay conductance 5.28 → 1.86 nS | 0.124 → 0.243 |
| LGN (diagnostic) | retinal EPSP 0.77 → 0.97 of the gap | 0.124 → 0.166 |
| Vision | geniculate stage absent by design (tiles project into L4/L6 directly) | grey-frame L4E 4.1 Hz vs 0.38 Hz for the field alone (§3.3); no latency criterion possible (cortical latency = retina's 8–22 ms + 1.5 ms, below the 30–50 ms of Maunsell & Gibson 1992) |
| Cochlea (2026-09-10, `docs/COCHLEA_SOURCES.md`) | synaptic adaptation removed | adaptation criterion broken (rate stays at 651/s; no positive short-term component) and saturation broken (606/s at +30 dB, still rising) |
| Cochlea (2026-09-10) | refractoriness removed | smallest ISI 0.050 ms (one step) |
| Hearing | tonotopic order of afferents destroyed (§6.2) | in-band response ~560 → ~100–200 spikes in every column |

Not ablated: individual cortical layers, the lateral rule within the sensory fields (only in the field acceptance),
the ON or OFF pathway alone, the medium and low spontaneous-rate fibre classes (they are simulated but unconnected to
the bushy cells by Ryugo & Sento 1991, so their removal would change nothing downstream).

---

## 8. Seeds and statistics

### 8.1 Seeds

| Path | Connectome seed | Origin | Region seeds |
|---|---|---|---|
| Vision | 20260906 | inherited from `ba17-field-9.json` so every column and lateral synapse is drawn as in the field acceptance (C) | derived from the connectome seed and the region name |
| Hearing | 20260911 | the date (C) | same rule |
| LGN | 20260906 | inherited from the thalamus and column fixtures (C) | same rule |

Within a region, neurons are integrated in chunks of 2048 with one random stream per chunk; the chunk size is part
of the result, not a knob. The organ regions (retina, cochlea, glyph, scene) draw their noise from their own streams
seeded the same way. The retina scheduler test and the cochlea package test each check that a different seed gives a different digest or different spikes.

**Each acceptance run uses one seed.** The accuracies of §3–§5 (94 %, 100 %, 6 of 7) are point estimates from one draw
of the connectome and one draw of the noise. Their spread across seeds is measured separately by the seed sweeps of
§8.4: 20 exploratory and 20 preregistered seeds for each of the vision and hearing model schedules. The controls, the
silence run, the transport runs and the LGN relay have no seed sweep. What *was* replicated is the run itself: the vision and hearing
acceptances were each executed twice on 2026-09-11 (`reading-demo.json` at 07:14 and `reading-acceptance.json` at
07:58; `hearing-demo.json` at 07:06 and `hearing-acceptance.json` at 08:01) and gave identical digests
(`e8afcbda8a61a397`, `0f2818ce8abc18e1`), identical criteria and identical accuracies. That is a check of
determinism, not of statistical robustness.

### 8.2 Statistics that were graded

The binomial p-values below treat presentations as independent draws. They are not: every presentation of one run
shares one fixed connectome and one noise stream, and consecutive presentations share the network's state. The values
are conditional on this single configuration; they say the decoder did not succeed by chance *in this run*, not that
the result is robust. The unit of replication for robustness is the seed (§8.4).

- **Vision decodability.** Chance is 0.25. The declared bar of 12 of 16 has P(X ≥ 12 | n = 16, p = 0.25) = 3.8 × 10⁻⁵
  under the binomial (D, written in the fixture). The measured 15 of 16 has P = 1.1 × 10⁻⁸ (computed here). Training
  and test presentations are disjoint rounds; the decoder has no free parameter.
- **Retinotopy.** Spearman correlation over 36 (letter, column) pairs; threshold 0.386 is the one-sided critical r
  at p = 0.01 for n = 36 (t(0.99, 34) = 2.441, r = t/√(n − 2 + t²)), derived before the run and stated as a
  statistical convention because no paper gives a number for this quantity.
- **Hearing f1/f2.** Chance 0.5; 20 of 20 leave-one-out has P = 9.5 × 10⁻⁷ (computed here); the declared bar 18 of 20
  has P = 2.0 × 10⁻⁴.
- **Hearing repeat.** Chance for the loudest of four columns is 0.25; 9 of 10 has P = 3.0 × 10⁻⁵, 10 of 10 has
  9.5 × 10⁻⁷ (computed here).
- **Background rates.** Tolerance 25 % of the column alone with denominator max(rate, 1 Hz), the tolerance of the
  field acceptance; rates from 10 s in silence, 3 ms synchrony bins, 1000 sampled units per population as in PD14.

### 8.3 Statistics computed for this report, not graded

- **Per-tone separation** between the in-band column and the strongest other column, d′ = (μ_in − μ_other) /
  √((σ_in² + σ_other²)/2) over 10 presentations: 300 Hz 1.77, 1000 Hz 4.16, 2000 Hz 2.73, 5000 Hz 3.21. The smallest
  single-presentation in-band response was 235 spikes (300 Hz). The off-band SDs (110–250 spikes per 100 ms) are of
  the same order as the in-band means for the 300 Hz tone, which is why that tone sits at the repeat bar.
- **Vision repeat_consistency is nearly uninformative.** Raw count vectors are dominated by population sizes (L4E
  7039 cells, L6I 406 per column), so every pair of presentations correlates at 0.998–0.999 and the ordinal margin is
  0.001; the blank control passes it too (0.9993 vs 0.9993). The criterion was declared, passed and left as declared;
  the decoder on standardised features is the actual evidence of repetition (94 % vs 19 % blank). A future acceptance
  should compare standardised evoked vectors (response minus baseline, divided by baseline SD per population).
- **Hearing per-presentation SD** was not in the acceptance; it is given in §4.3 from the artifact's raw responses.


### 8.4 Seed sweeps

A seed sweep reruns the model schedule of an acceptance under many connectome seeds. The seed of every region derives
from the connectome seed and the region's name, so a new seed redraws every synapse, every delay and every noise
stream. Each seed is graded by the unchanged per-run criteria and thresholds of the acceptance fixture; the controls and
the transport runs are not repeated per seed. Code: `backend/cmd/regionlab/seedsweep_test.go`.

Two kinds of sweep are kept apart:

- **Exploratory** sweeps start at the fixture's seed and apply no rule across seeds. They describe distributions. The
  exploratory hearing sweep was run and read before the rule over seeds was written, so it cannot confirm anything.
- **Preregistered** sweeps take their seeds and their rule over seeds from `eval/fixtures/regions/seed-sweep-acceptance.json`,
  committed before any of those seeds was run (§10.0). Seeds 20261001–20261020 for both paths. Hearing: tonotopy on at
  least 18 of 20 seeds, median 1 kHz / 2 kHz accuracy at least 0.90, repeat criterion on at least 18 of 20 seeds. Glyph
  discrimination: median accuracy at least 0.75, letters_decodable on at least 18 of 20 seeds, retinotopy on at least 18
  of 20 seeds. The thresholds are the project owner's. They were proposed after the owner had been told that the
  exploratory hearing sweep failed the repeat criterion on about a third of its first 16 seeds, and were adopted as
  written.

#### Exploratory hearing sweep, seeds 20260911–20260930

Hearing, 20 seeds (`sweeps/hearing-seeds-20.json`):

| Seed | 300 Hz repeat | 1000 Hz repeat | 2000 Hz repeat | 5000 Hz repeat | 1k/2k LOO | Tonotopy | All criteria |
|---|---|---|---|---|---|---|---|
| 20260911 | 90 % | 100 % | 100 % | 100 % | 20/20 | pass | pass |
| 20260912 | 90 % | 90 % | 100 % | 100 % | 20/20 | pass | pass |
| 20260913 | 100 % | 90 % | 90 % | 100 % | 20/20 | pass | pass |
| 20260914 | 70 % | 100 % | 100 % | 100 % | 20/20 | pass | fail |
| 20260915 | 100 % | 100 % | 100 % | 100 % | 20/20 | pass | pass |
| 20260916 | 100 % | 90 % | 80 % | 100 % | 18/20 | pass | fail |
| 20260917 | 100 % | 90 % | 100 % | 80 % | 20/20 | pass | fail |
| 20260918 | 100 % | 100 % | 100 % | 100 % | 20/20 | pass | pass |
| 20260919 | 90 % | 90 % | 90 % | 100 % | 19/20 | pass | pass |
| 20260920 | 100 % | 100 % | 100 % | 100 % | 20/20 | pass | pass |
| 20260921 | 100 % | 100 % | 100 % | 80 % | 20/20 | pass | fail |
| 20260922 | 90 % | 100 % | 90 % | 100 % | 20/20 | pass | pass |
| 20260923 | 100 % | 100 % | 80 % | 90 % | 19/20 | pass | fail |
| 20260924 | 90 % | 90 % | 100 % | 100 % | 20/20 | pass | pass |
| 20260925 | 100 % | 90 % | 100 % | 100 % | 19/20 | pass | pass |
| 20260926 | 90 % | 90 % | 80 % | 100 % | 19/20 | pass | fail |
| 20260927 | 100 % | 100 % | 100 % | 100 % | 20/20 | pass | pass |
| 20260928 | 100 % | 100 % | 90 % | 100 % | 20/20 | pass | pass |
| 20260929 | 90 % | 100 % | 100 % | 80 % | 19/20 | pass | fail |
| 20260930 | 90 % | 100 % | 100 % | 80 % | 20/20 | pass | fail |

| Quantity over seeds | Median | IQR | Min | Max |
|---|---|---|---|---|
| 1k/2k leave-one-out accuracy | 100 % | 95 %–100 % | 90 % | 100 % |
| 300 Hz repeat share | 100 % | 90 %–100 % | 70 % | 100 % |
| 1000 Hz repeat share | 100 % | 90 %–100 % | 90 % | 100 % |
| 2000 Hz repeat share | 100 % | 90 %–100 % | 80 % | 100 % |
| 5000 Hz repeat share | 100 % | 98 %–100 % | 80 % | 100 % |
| 300 Hz in-band response, spikes | 397 | 359–457 | 308 | 526 |
| 1000 Hz in-band response, spikes | 508 | 477–533 | 410 | 580 |
| 2000 Hz in-band response, spikes | 457 | 436–535 | 354 | 575 |
| 5000 Hz in-band response, spikes | 514 | 474–542 | 425 | 580 |

| Criterion | Seeds passing |
|---|---|
| f1/f2 discrimination | 20 of 20 |
| repeat matches | 12 of 20 |
| tonotopy | 20 of 20 |
| every criterion | 12 of 20 |

Pooled 1k/2k: 393 of 400. Distinct digests: 20 of 20.

Tonotopy and the 1 kHz / 2 kHz decoder hold on every seed. The repeat criterion fails on 8 of 20 seeds, each time
because the loudest column of one tone agreed in 70–80 % of its 10 presentations instead of at least 90 %. With 10
presentations per tone one extra disagreement moves a tone from 90 % to 80 %, so this criterion sits at the resolution
limit of the schedule. The fixture's own seed, 20260911, is the first row and reproduces the acceptance digest
`0f2818ce8abc18e1`.


#### Exploratory glyph-discrimination sweep, seeds 20260906–20260925

Glyph discrimination, 20 seeds (`sweeps/glyph-seeds-20.json`):

| Seed | Accuracy (16 test) | Retinotopy Spearman | Evoked L4E | All criteria |
|---|---|---|---|---|
| 20260906 | 15/16 | 0.866 | 3017 | pass |
| 20260907 | 13/16 | 0.844 | 2853 | pass |
| 20260908 | 16/16 | 0.905 | 2887 | pass |
| 20260909 | 14/16 | 0.776 | 2893 | pass |
| 20260910 | 13/16 | 0.867 | 2918 | pass |
| 20260911 | 15/16 | 0.878 | 3139 | pass |
| 20260912 | 15/16 | 0.824 | 3082 | pass |
| 20260913 | 14/16 | 0.868 | 2821 | pass |
| 20260914 | 14/16 | 0.857 | 2774 | pass |
| 20260915 | 16/16 | 0.833 | 2822 | pass |
| 20260916 | 16/16 | 0.860 | 2875 | pass |
| 20260917 | 12/16 | 0.859 | 3015 | pass |
| 20260918 | 13/16 | 0.882 | 3023 | pass |
| 20260919 | 15/16 | 0.857 | 2814 | pass |
| 20260920 | 15/16 | 0.915 | 2745 | pass |
| 20260921 | 15/16 | 0.877 | 2781 | pass |
| 20260922 | 14/16 | 0.875 | 2963 | pass |
| 20260923 | 13/16 | 0.876 | 2696 | pass |
| 20260924 | 15/16 | 0.884 | 2677 | pass |
| 20260925 | 15/16 | 0.798 | 2964 | pass |

| Quantity over seeds | Median | IQR | Min | Max |
|---|---|---|---|---|
| accuracy | 94 % | 86 %–94 % | 75 % | 100 % |
| retinotopy Spearman | 0.867 | 0.854–0.877 | 0.776 | 0.915 |
| evoked L4E per presentation | 2881 | 2806–2977 | 2677 | 3139 |

| Criterion | Seeds passing |
|---|---|
| cortex_evoked | 20 of 20 |
| letters_decodable | 20 of 20 |
| repeat_consistency | 20 of 20 |
| retina_contrast | 20 of 20 |
| retinotopy | 20 of 20 |
| every criterion | 20 of 20 |

Pooled test presentations: 288 of 320. Distinct digests: 20 of 20.

Every seed passes every per-run criterion of the acceptance. Accuracy ranges from 12 to 16 of 16; the lowest seed sits
exactly at the per-run bar of 12 of 16. The fixture's own seed, 20260906, is the first row and reproduces the acceptance
digest `e8afcbda8a61a397`. This sweep was running while the rule over seeds was written and was read only after the rule
was committed.


#### Preregistered hearing sweep, seeds 20261001–20261020, run on commit `b0e46be`

The sweep ran on an extraction of commit `b0e46be` (`git archive`), from 10:02 to 10:13 on 2026-09-11.

Hearing, 20 seeds (`sweeps/prereg-hearing-b0e46be.json`, key `sweep`):

| Seed | 300 Hz repeat | 1000 Hz repeat | 2000 Hz repeat | 5000 Hz repeat | 1k/2k LOO | Tonotopy | All criteria |
|---|---|---|---|---|---|---|---|
| 20261001 | 80 % | 90 % | 100 % | 100 % | 18/20 | pass | fail |
| 20261002 | 90 % | 90 % | 100 % | 100 % | 19/20 | pass | pass |
| 20261003 | 100 % | 100 % | 100 % | 100 % | 20/20 | pass | pass |
| 20261004 | 90 % | 100 % | 100 % | 100 % | 20/20 | pass | pass |
| 20261005 | 90 % | 100 % | 90 % | 100 % | 20/20 | pass | pass |
| 20261006 | 100 % | 90 % | 90 % | 90 % | 19/20 | pass | pass |
| 20261007 | 80 % | 100 % | 90 % | 100 % | 19/20 | pass | fail |
| 20261008 | 100 % | 100 % | 100 % | 100 % | 20/20 | pass | pass |
| 20261009 | 90 % | 100 % | 100 % | 80 % | 20/20 | pass | fail |
| 20261010 | 100 % | 100 % | 90 % | 90 % | 20/20 | pass | pass |
| 20261011 | 90 % | 100 % | 90 % | 100 % | 19/20 | pass | pass |
| 20261012 | 100 % | 100 % | 100 % | 100 % | 20/20 | pass | pass |
| 20261013 | 90 % | 100 % | 80 % | 80 % | 20/20 | pass | fail |
| 20261014 | 90 % | 100 % | 100 % | 100 % | 20/20 | pass | pass |
| 20261015 | 80 % | 80 % | 100 % | 100 % | 19/20 | pass | fail |
| 20261016 | 90 % | 100 % | 100 % | 100 % | 19/20 | pass | pass |
| 20261017 | 80 % | 100 % | 100 % | 100 % | 20/20 | pass | fail |
| 20261018 | 100 % | 80 % | 100 % | 100 % | 20/20 | pass | fail |
| 20261019 | 100 % | 100 % | 90 % | 100 % | 20/20 | pass | pass |
| 20261020 | 90 % | 90 % | 100 % | 100 % | 20/20 | pass | pass |

| Quantity over seeds | Median | IQR | Min | Max |
|---|---|---|---|---|
| 1k/2k leave-one-out accuracy | 100 % | 95 %–100 % | 90 % | 100 % |
| 300 Hz repeat share | 90 % | 90 %–100 % | 80 % | 100 % |
| 1000 Hz repeat share | 100 % | 90 %–100 % | 80 % | 100 % |
| 2000 Hz repeat share | 100 % | 90 %–100 % | 80 % | 100 % |
| 5000 Hz repeat share | 100 % | 100 %–100 % | 80 % | 100 % |
| 300 Hz in-band response, spikes | 422 | 362–458 | 299 | 511 |
| 1000 Hz in-band response, spikes | 477 | 461–524 | 380 | 589 |
| 2000 Hz in-band response, spikes | 501 | 456–518 | 405 | 558 |
| 5000 Hz in-band response, spikes | 503 | 471–514 | 441 | 587 |

| Criterion | Seeds passing |
|---|---|
| f1/f2 discrimination | 20 of 20 |
| repeat matches | 13 of 20 |
| tonotopy | 20 of 20 |
| every criterion | 13 of 20 |

Pooled 1k/2k: 392 of 400. Distinct digests: 20 of 20.

Verdict by the rule of `seed-sweep-acceptance.json`:

| Rule | Required | Measured | Verdict |
|---|---|---|---|
| tonotopy across seeds | at least 18 of 20 | 20 of 20 | pass |
| median 1 kHz / 2 kHz accuracy | at least 0.90 | 1.000 (IQR 0.950–1.000, min 0.900) | pass |
| repeat criterion across seeds | at least 18 of 20 | 13 of 20 | **fail** |

**The preregistered hearing sweep fails its rule.** The failing part is the repeat criterion: on 7 of 20 seeds one or
two tones had their loudest column agree in 8 of 10 presentations instead of at least 9. On every seed the modal column of
every tone is the tone's own band column, in order 0, 1, 2, 3, and tonotopy and the decoder pass on all 20 seeds. The
outcome matches the exploratory sweep (repeat on 12 of 20 seeds). The rule was not changed after the run. What the two
sweeps together show: the frequency organization and the pairwise discrimination hold across independent seeds;
single-presentation consistency at a 90 % bar with 10 presentations per tone does not.


#### Preregistered glyph-discrimination sweep, seeds 20261001–20261020, run on commit `b0e46be`

The first attempt was stopped by the host's memory guard during seed 20261018, while the Docker virtual machine held
about 24 GB of the host's 64 GB; its log is kept as `sweeps/prereg-glyph-b0e46be-attempt1-killed-at-seed-18.log`. The
sweep was rerun in full on the same extraction of commit `b0e46be`. Its first 17 seeds reproduce the digests of the
stopped attempt, so the rerun repeats the same computation rather than drawing again.

Glyph discrimination, 20 seeds (`sweeps/prereg-glyph-b0e46be.json`, key `sweep`):

| Seed | Accuracy (16 test) | Retinotopy Spearman | Evoked L4E | All criteria |
|---|---|---|---|---|
| 20261001 | 16/16 | 0.871 | 2963 | pass |
| 20261002 | 13/16 | 0.886 | 3081 | pass |
| 20261003 | 16/16 | 0.828 | 2767 | pass |
| 20261004 | 15/16 | 0.861 | 2769 | pass |
| 20261005 | 16/16 | 0.883 | 2854 | pass |
| 20261006 | 15/16 | 0.861 | 3036 | pass |
| 20261007 | 16/16 | 0.812 | 2965 | pass |
| 20261008 | 14/16 | 0.907 | 2948 | pass |
| 20261009 | 16/16 | 0.849 | 2709 | pass |
| 20261010 | 16/16 | 0.853 | 2833 | pass |
| 20261011 | 15/16 | 0.891 | 2747 | pass |
| 20261012 | 16/16 | 0.857 | 2767 | pass |
| 20261013 | 14/16 | 0.845 | 2993 | pass |
| 20261014 | 15/16 | 0.869 | 3004 | pass |
| 20261015 | 15/16 | 0.837 | 3048 | pass |
| 20261016 | 14/16 | 0.848 | 2653 | pass |
| 20261017 | 14/16 | 0.872 | 2781 | pass |
| 20261018 | 16/16 | 0.923 | 2996 | pass |
| 20261019 | 15/16 | 0.860 | 2731 | pass |
| 20261020 | 15/16 | 0.846 | 3105 | pass |

| Quantity over seeds | Median | IQR | Min | Max |
|---|---|---|---|---|
| accuracy | 94 % | 92 %–100 % | 81 % | 100 % |
| retinotopy Spearman | 0.860 | 0.848–0.874 | 0.812 | 0.923 |
| evoked L4E per presentation | 2901 | 2767–2998 | 2653 | 3105 |

| Criterion | Seeds passing |
|---|---|
| cortex_evoked | 20 of 20 |
| letters_decodable | 20 of 20 |
| repeat_consistency | 20 of 20 |
| retina_contrast | 20 of 20 |
| retinotopy | 20 of 20 |
| every criterion | 20 of 20 |

Pooled test presentations: 302 of 320. Distinct digests: 20 of 20.

Verdict by the rule of `seed-sweep-acceptance.json`:

| Rule | Required | Measured | Verdict |
|---|---|---|---|
| median accuracy | at least 75 % | 94 % (IQR 92 %–100 %, min 81 %) | pass |
| letters_decodable across seeds | at least 18 of 20 | 20 of 20 | pass |
| retinotopy across seeds | at least 18 of 20 | 20 of 20 (Spearman median 0.860, min 0.812) | pass |

**The preregistered glyph-discrimination sweep passes its rule.** Accuracy ranges from 13 to 16 of 16 over the 20 seeds, and the retinotopic correlation from
0.812 to 0.923. The exploratory sweep on other seeds gave a median accuracy of 94 % and a
median correlation of 0.867.

---

## 9. Limitations

Architectural:

1. **No geniculate stage in the vision path.** The LGN relay is red (transfer ratio 0.124 vs 0.30–0.62) and is not
   in the glyph wiring; retinal tiles drive L4/L6 directly. Consequences measured: L4 background ten times the
   isolated field under a grey frame; cortical latency below the physiological 30–50 ms; no contrast-dependent
   transmission.
2. **The ascending auditory pathway is one relay.** Superior olive, inferior colliculus and medial geniculate body
   are absent; bushy cells project into cortex. One ear; no mirror field R; no belt.
3. **Field extents are caps.** 9 of 4767 columns for area 17; 4 columns for area 41 with no cited surface. Six
   octaves over 4 mm is denser than any measured tonotopic map (~10 mm in cat); a consequence of the cap.
4. **Scale 0.1.** Rates of the down-scaled columns are 3–7× below NEST at full scale and L2/3E of the SvA column is
   silent. Every rate criterion compares a column in a field with the same column alone at the same scale.
5. **Retinotopic tiling is 3 × 3 equal patches**: no magnification factor, no log-polar sampling, no eye movements.
   Cross-region projections have no spatial rule, so a convergence of 2–3 ganglion cells per relay cell cannot be
   expressed (the LGN uses 1, the lower end of the measured range).
6. **No plasticity on either path.** Columns are static PD14; nothing is learned. The decoder lives in the test.
7. **One synaptic time constant per population**, not per projection: the retinal EPSP in the relay peaks at 4.7 ms
   against 8.5 ms in vivo.
8. **Cochlea reds carried over**: Q10 at 1 kHz is 4.19 against the [1, 4] window of Evans 1972 (the ERB scale of the
   human is 5 % sharper than the guinea pig's); no cochlear amplifier, no middle ear, no IHC membrane filter.

Statistical:

9. **Seed sweeps cover the model schedules only.** The controls, the silence run and the transport runs were made with the
   fixture's seed alone, so the claim that a control breaks what it must rests on one draw. The LGN relay has no seed
   sweep.
10. **Four letters of one font, four tones**; the vision test set has 16 presentations and the hearing pair 20.
11. **Two criteria are weak by construction**: `repeat_consistency` (§8.3) and `cortex_evoked` (> 0). They were
    kept as declared.
12. The hearing repeat criterion fails the preregistered rule: 13 of 20 seeds pass it against the required
    18. With 10 presentations per tone the criterion moves in steps of 10 %, and every failure was one or two tones
    at 80 %. A longer schedule or a criterion on the mean response would measure the same property with less
    granularity noise; neither was tried, because either would be a change after the result.

Provenance:

13. Several full texts behind the thresholds were not read (Kaplan 1987, Cleland 1971, Levine & Troy 1986: scanned
    J Physiol on PMC behind a browser challenge); only abstracts are cited and the source documents say so. The
    reticular convergence of 75 per relay cell is a mouse model prediction (Iavarone 2023), not a cat count.
14. A "sourced" number means the fixture carries a status letter and a quote next to it; the structural tests verify
    the presence of the label, not the truth of the number.
15. The run-1 hearing artifact described in the section report is missing from the artifacts directory (§6.2).
16. The measurements predate the snapshot commit by 1.5 to 3.5 hours. Their equivalence to the commit rests on the digest
    comparison in `eval/artifacts/2026-09-11/clean-copy/digests.json` (16 of 16 runs equal), not on the commit time.
    The rest of the working tree, the earlier monolith, is not part of the snapshot.

---

## 10. Reproduction

All commands run from `backend/`, one line each. Environment variables are passed directly (`VAR=1 go test …`); in
zsh, `env $VAR` does not word-split and silently drops flags. The `BRAINCORE_*_REPORT` path must be absolute.

Toolchain: Go as in `go.mod`; no external services. Memory: the vision run peaks at about 1.1 GB RSS (section report); the hearing run's RSS was not recorded. Do not run the three acceptances concurrently on a 12-core machine if wall times are to be compared.

### 10.0 Source snapshot

| Item | Value |
|---|---|
| Measured implementation, fixtures and acceptance reports | commit `b0e46be4e71b9f2af02b1492274c70ced4d0eab6`, 2026-09-11 09:57 +0200, 501 files |
| When the original runs were made | LGN 06:26, glyph discrimination 07:58, hearing 08:01 (+0200, report file times) |
| Rule over seeds and preregistered seed range | `eval/fixtures/regions/seed-sweep-acceptance.json`, in the same commit, before any preregistered seed was run |
| Equivalence of measurement and snapshot | `eval/artifacts/2026-09-11/clean-copy/digests.json`: 16 digests of the original runs against a clean copy of the snapshot, all equal; the three acceptances rerun there are in the same folder |
| This report, the preregistered sweeps and the checksums | the commit tagged `sensory-report-2026-09-11` |

To reproduce from the tag: clone the repository, check out `sensory-report-2026-09-11`, and run the commands below from
`backend/`. The snapshot builds and tests the packages listed in §10.6; the rest of the repository at that tag is the
earlier monolith and is outside the scope of this report.

### 10.1 Fast structural tests (seconds)

```
go test ./internal/regions/glyph/ ./internal/regions/retina/ ./internal/regions/cochlea/ ./internal/regions/scene/
go test ./cmd/regionlab -run 'TestReadingFixturesAreCompleteAndSourced$|TestReadingConnectomeIsTheFieldWithAnEye$|TestHearingFixturesAreDerivedFromTheParts$|TestHearingFixturesAreCompleteAndSourced$|TestLGNFixturesAreCompleteAndSourced$|TestLGNColumnKeepsThePD14InDegrees$' -count=1
```

### 10.2 Vision acceptance (about 9 minutes)

```
BRAINCORE_READING_ACCEPTANCE=1 BRAINCORE_READING_REPORT=$(pwd)/../eval/artifacts/<date>/reading-acceptance.json go test ./cmd/regionlab -run 'TestReadingAcceptance$' -count=1 -v -timeout 3600s
```

Expected: `passed: true`, 12 criteria, digest `064a1dd7951d4367…` for repeat and transport, letters digest
`e8afcbda8a61a397…`, accuracy 0.9375, Spearman 0.866.

### 10.3 Hearing acceptance (about 2.5 minutes)

```
BRAINCORE_HEARING_ACCEPTANCE=1 BRAINCORE_HEARING_REPORT=$(pwd)/../eval/artifacts/<date>/hearing-acceptance.json go test ./cmd/regionlab -run 'TestHearingAcceptance$' -count=1 -v -timeout 3600s
```

Expected: `passed: true`, 7 criteria, model digest `0f2818ce8abc18e1…`, repeat and spawn digest
`1ebfb4a73ed3457a…`, f1/f2 20 of 20. To regenerate the derived fixtures (and fail if they differ from the checked-in
ones on the next run): `BRAINCORE_HEARING_WRITE_FIXTURES=1 go test ./cmd/regionlab -run 'TestHearingFixturesAreDerivedFromTheParts$' -count=1`.

### 10.4 LGN acceptance (about 3.5 minutes, expected to fail)

```
BRAINCORE_LGN_ACCEPTANCE=1 BRAINCORE_LGN_REPORT=$(pwd)/../eval/artifacts/<date>/lgn-acceptance.json go test ./cmd/regionlab -run 'TestLGNAcceptance$' -count=1 -v -timeout 3600s
```

Expected: `passed: false` with exactly one red criterion, `transfer ratio` 0.124; digest `4e4933db406905d3`.

### 10.4a Seed sweeps

Preregistered sweeps, rule and seeds from `seed-sweep-acceptance.json` (hearing about 11 minutes, glyph discrimination
about 45 minutes on an otherwise idle machine):

```
BRAINCORE_HEARING_PREREG=1 BRAINCORE_HEARING_PREREG_REPORT=$(pwd)/../eval/artifacts/<date>/prereg-hearing.json go test ./cmd/regionlab -run 'TestHearingPreregisteredSweep$' -count=1 -v -timeout 7200s
BRAINCORE_GLYPH_PREREG=1 BRAINCORE_GLYPH_PREREG_REPORT=$(pwd)/../eval/artifacts/<date>/prereg-glyph.json go test ./cmd/regionlab -run 'TestGlyphPreregisteredSweep$' -count=1 -v -timeout 14400s
```

Expected: the hearing sweep fails with the repeat criterion on 13 of 20 seeds; the glyph sweep passes with a median accuracy
of 94 %. Exploratory sweeps from the fixture's seed:

```
BRAINCORE_HEARING_SEEDS=20 BRAINCORE_HEARING_SEED_REPORT=$(pwd)/../eval/artifacts/<date>/hearing-seeds-20.json go test ./cmd/regionlab -run 'TestHearingSeedSweep$' -count=1 -v -timeout 7200s
BRAINCORE_READING_SEEDS=20 BRAINCORE_READING_SEED_REPORT=$(pwd)/../eval/artifacts/<date>/glyph-seeds-20.json go test ./cmd/regionlab -run 'TestReadingSeedSweep$' -count=1 -v -timeout 10800s
```

Every seed's digest is in the sweep reports; a rerun must reproduce them one for one.

### 10.5 Running a wiring by hand

```
go run ./cmd/regionlab -connectome ../eval/fixtures/regions/reading-field-9.json -glyph eye=../eval/fixtures/regions/glyph-letters.json -ms 1500 -stats -stats-start-ms 500
go run ./cmd/regionlab -connectome ../eval/fixtures/regions/hearing-field41.json -cochlea cochlea=../eval/fixtures/regions/hearing-cochlea.json -ms 500 -stats
go run ./cmd/regionlab -connectome ../eval/fixtures/regions/lgn-relay.json -scene retina=../eval/fixtures/regions/lgn-scene.json -ms 1000 -stats
```

Add `-spawn 1 -spawn-local <regions kept in the parent>` to move the other regions into a child process; the digest
printed at the end must not change. `-seed N` overrides the connectome seed and must change it.

### 10.6 Files

| Purpose | Path |
|---|---|
| Acceptance reports | `eval/artifacts/2026-09-11/{reading,hearing,lgn}-acceptance.json`, `lgn-diagnostics.json`, `sections/{reading,hearing,lgn}.md` |
| Seed sweeps, clean-copy check, checksums | `eval/artifacts/2026-09-11/sweeps/`, `eval/artifacts/2026-09-11/clean-copy/`, rule `eval/fixtures/regions/seed-sweep-acceptance.json`, `eval/artifacts/2026-09-11/MANIFEST.sha256` |
| Vision fixtures | `eval/fixtures/regions/glyph-letters{,-shuffled,-blank}.json`, `reading-field-9.json`, `reading-acceptance.json`, `ba17-field-9.json`, `retina-parvo.json`; generator `eval/fixtures/gen_reading.py` |
| Hearing fixtures | `hearing-wiring.json`, `hearing-acceptance.json`, `ba41-field-4.json`, `hearing-field41.json`, `hearing-shuffled-tonotopy.json`, `hearing-cochlea.json`, `hearing-silence.json`, `cochlea-meddis.json`, `cochlear-nuclei.json` |
| LGN fixtures | `lgn-relay{,-notrn,-shuffled}.json`, `lgn-scene.json`, `lgn-acceptance.json`, `retina-catx.json`, `pd14-thalamus.json`; generator `eval/fixtures/gen_lgn.py` |
| Source audits | `docs/READING_SOURCES.md`, `docs/HEARING_SOURCES.md`, `docs/LGN_SOURCES.md`, `docs/RETINA_SOURCES.md`, `docs/COCHLEA_SOURCES.md`, `docs/BRODMANN_FIELDS_SOURCES.md`, `docs/THALAMUS_SOURCES.md` |
| Tests | `backend/cmd/regionlab/{reading,hearing,lgn}_test.go`, `backend/internal/regions/{glyph,retina,cochlea,scene}/*_test.go` |
| Core | `backend/internal/region`, `backend/internal/sched`, `backend/internal/regions/lifpop`, `backend/internal/tissue` |
