# Felisyn execution record 003

Recorded 8 October 2026 (Europe/Vienna). Server timestamps use UTC and the successful run began on 7 October at 23:52 UTC.

The original Mozaik v0.4.0 small LSV1M step-current test passed all ten upstream exact-equality checks. This is a software regression result for one configuration and seed pair. It does not establish full-paper reproduction, independent biological validation, a complete cat brain, or controller readiness.

## Evidence map

- `result-summary.json`: derived summary with case outcomes, measurement scope and recording counts.
- `evidence/attempts/20261007T235207Z-8aa25b84/`: passing run, JUnit XML, full pytest log, input SHA-256 inventory, environment, resource report, diagnostics and figure arrays.
- `evidence/attempts/20261007T234512Z-09d11299/`: first attempt, ten setup errors from a missing Sphinx import.
- `evidence/attempts/20261007T234758Z-c6cf1bff/`: second attempt, ten setup errors after a recording failure (`KeyError: source_id`).
- `evidence/raw-output/`: unmodified output datastore, stimulus/configuration records and model log from the passing attempt. Pickle files require the matching Python/model environment; JSON and logs can be inspected without loading them.
- `evidence/runtime/`: observed package versions, source identities, compiler, OS, installation reports and recovery history.
- `evidence/logs/`: installation failures, corrected build and execution logs.
- `figures/regression-comparison.png` and `.svg`: actual simulation and upstream-reference data, generated by `plot_regression.py` from the retained `figure-data.json`.
- `MOZAIK-LICENSE.txt`: original repository license, retained verbatim.
- `manifest.json`: SHA-256 and byte size for every packaged file other than the manifest itself and the archive.

`source-commits.tsv` and `evidence/runtime/source-commits.tsv` record the INITIAL fetch, including the rejected PyNN candidate. Use `sources-resolved.json` and the successful attempt's `environment.json` for the passing run. Package metadata reports Mozaik 0.1.0; the actual checked-out release is v0.4.0 at the recorded Git commit. Two installed NEST metadata records report the same version, 3.4; the import smoke test confirms NEST 3.4.

## What passed

The unchanged upstream target is:

```text
tests/full_model/test_models_stepcurrentmodule.py::TestLSV1MTinyStepCurrentModule
```

It checks spike-time vectors for X_ON, X_OFF, V1_Exc_L4, V1_Inh_L4, V1_Exc_L2/3 and V1_Inh_L2/3, plus membrane-voltage vectors for the four cortical populations. Its criterion remains `numpy.testing.assert_equal`; no tolerances or model parameters were changed to obtain a pass.

Supplemental diagnostics match segment identifiers, stimulus annotations, recorded neuron IDs, signal start/stop times and values. Three non-terminal-blank stimulus segments per population contain 53,797 spike times and 15,750 cortical voltage samples. These counts are stored samples, not independent biological observations. Recorded neurons are a subset of the simulated network. The final `EndOfSimulationBlank` segments are outside the upstream comparison.

The example figure follows a fixed selection rule: first segment in the upstream loader's ordering for V1_Exc_L4, then its lowest recorded voltage-neuron ID. That ordering is lexicographic, not chronological. It selects Segment14, a 210 ms grating presentation at orientation 0, voltage neuron 88, and 107 recorded spike trains containing 6,744 spikes. Signal time resets within each stimulus. This tiny configuration has high firing rates; it is not a validated reduced biological model.

GNU time reports 135.83 seconds wall time and maximum resident set size 462,724 KiB (451.9 MiB) for the pytest command and its child execution. This includes setup, simulation, saving and comparisons; it is not pure simulator time or whole-VM peak memory, and excludes installation. There is one successful run, so these measurements have no repeat-run uncertainty estimate.

## Reconstructed environment

Ubuntu 24.04.5 LTS x86_64, four allocated vCPUs, 8,131,776 KiB reported memory, GCC 11.5.0, Python 3.9.20, NEST 3.4 and custom PyNN package version 0.11.0. Exact source commits and all installed Python versions are retained.

The recovered PyNN commit is `981853dd567cefb3e337accc5c13e1c8c99385ad`, found on the maintainers' before-rebase backup branch. Filtering the current branch by commit date had selected a different history and produced an incompatible recording implementation. The initial `a60d9ab…` candidate remains documented as rejected. The passing environment is an observed compatible reconstruction, not proof of the original authors' environment lock.

The installation also required quantities 0.14.1 for Neo 0.12.0, pinned build tooling for mpi4py 3.1.6, a Git-free NEST source export to give its package a valid 3.4 version, and Sphinx 7.4.7 for a runtime import. Full logs retain warnings and failures.

## Re-run on the existing research host

Run as the unprivileged `felisyn` user:

```bash
export PATH=/opt/felisyn/venv/bin:$PATH
export MPLBACKEND=Agg
source /opt/felisyn/venv/bin/nest_vars.sh
python /opt/felisyn/run_regression.py \
  --checkout /opt/felisyn/sources/mozaik --output /opt/felisyn/runs
```

The harness creates a new run directory each time. Substitute that newly printed directory for `RUN_DIRECTORY` below:

```bash
python /opt/felisyn/inspect_regression.py --run RUN_DIRECTORY
python /opt/felisyn/plot_regression.py --run RUN_DIRECTORY
```

The harness's legacy `model_simulation_started` field conservatively asks the reader to inspect logs even on a pass. The completed simulation is separately evidenced here by the model log, saved recordings and ten passing comparisons; that original field is preserved unchanged.

## Fresh-host recipe

The supplied bootstrap/build scripts consolidate the successful installation steps and use the corrected source pins. `requirements-transitive.lock.txt` constrains package versions to those observed in the passing run. This consolidated fresh-host recipe has not itself been rerun end to end on a second clean host; the evidence records the actual repaired installation. System-package versions are recorded, but Ubuntu repository contents are not snapshotted, so this is not a byte-identical system image.

On a fresh Ubuntu 24.04 x86_64 host, copy this package to `/tmp/felisyn-reproduction`. As root:

```bash
cd /tmp/felisyn-reproduction
bash bootstrap-host.sh
cp requirements-resolved-candidate.txt requirements-transitive.lock.txt /tmp/
runuser -u felisyn -- bash /tmp/felisyn-reproduction/build-python.sh
runuser -u felisyn -- bash /tmp/felisyn-reproduction/fetch-runtime-sources.sh
runuser -u felisyn -- bash /tmp/felisyn-reproduction/build-runtime.sh
install -o felisyn -g felisyn -m 644 run_regression.py inspect_regression.py \
  plot_regression.py capture_environment.py /opt/felisyn/
```

Then execute the existing-host commands as `felisyn` and capture a new environment. `recover-pynn-and-run.sh` is the historical repair procedure, not a required fresh-install step; it assumes that the initial checkout and fetched recovery commit already exist.

## Attribution and scope

Model context: Antolík et al. (2024), *A comprehensive data-driven model of cat primary visual cortex*, [PLOS Computational Biology](https://doi.org/10.1371/journal.pcbi.1012342).

Tests, reference data and small configuration: [CSNG-MFF Mozaik v0.4.0](https://github.com/CSNG-MFF/mozaik/tree/f5c09a0eccc5786daf78881d883bbce586a00e6d), distributed with the CeCILL license. Reference-derived arrays in the diagnostics/figure data are credited to those sources and retain those terms. The figure is a new rendering of saved reference and newly simulated data, not a reproduced paper figure. No animal recordings were collected in this work. Full upstream source is obtained from the pinned public repositories; this evidence package does not redistribute the complete framework or installed binaries.

The next scientific target remains the published full-model spontaneous-activity statistics in Figure 4. Reference values, metrics, tolerances and compute needs must be fixed before attempting that comparison. The tiny test's recording counts and resource use must not be extrapolated to the full model.
