{
  "schema": "synthetic-nca-gallery-manifest-v1",
  "dataset": "trajectories.json",
  "compressed_dataset": "trajectories.json.gz",
  "source_path_base": "nca_pilot; dataset/output file paths are relative to gallery_export",
  "privacy": "Only procedural synthetic arrays and technical provenance. No personal identifiers or private raw data.",
  "scope": "Two checkpoints at exactly 1,000 optimizer updates, one training seed (0), evaluation case 0, damage case 4.",
  "files": {
    "trajectories.json": {
      "bytes": 695131,
      "sha256": "249eb693f2fb86f9c71f55b4315f4bae2af28eae1a8d21f4711ab9507608ce1d"
    },
    "trajectories.json.gz": {
      "bytes": 279069,
      "sha256": "99af196b4af9f51e41acd5106858a4323df9c9a036917a09d727f6132db695d9"
    },
    "verification.json": {
      "bytes": 30579,
      "sha256": "b8f8a850c856c894a204a8ff6c086586b01f8c555ee9fe115f6d9498bb708288"
    },
    "export_replays.py": {
      "bytes": 19367,
      "sha256": "77f7cc1bc4083aeac55ffa0b77d6d85ae5e3af306c7a6711fb455a066a621519"
    },
    "README.md": {
      "bytes": 6003,
      "sha256": "1c60c6fee0afbc87eba552850b160ebc0884810d2247d3c1d8f166af35da57c3"
    }
  },
  "code_sha256": {
    "numpy_bptt/model.py": "c39ae3df179b410b01ae73f982ce8b8e39b1c39e717d3c8f708f7b03116cc4de",
    "numpy_bptt/train.py": "0534ff88acc33214817ae5016e697d7e0e0fcb09de6f498e6d19f883ec717d58",
    "suite.py": "9a9d7b44c278e2e8bccab379fa680f370b65bb05b65d131b6368cb44a25b8eab",
    "gallery_export/export_replays.py": "77f7cc1bc4083aeac55ffa0b77d6d85ae5e3af306c7a6711fb455a066a621519"
  },
  "runtime": {
    "numpy": "2.3.5",
    "python": "3.12.14",
    "openblas_num_threads": "1",
    "dtype": "float64",
    "bit_generator": "PCG64"
  },
  "reproduction_command": "OPENBLAS_NUM_THREADS=1 PYTHONDONTWRITEBYTECODE=1 python nca_pilot/gallery_export/export_replays.py",
  "reproduction_working_directory": "Directory containing nca_pilot",
  "reproduction_dependencies": "Python, NumPy and the hashed local source/checkpoint/evaluation files referenced by trajectories.json. No training, installation, network, account access or upload.",
  "flattening": {
    "rgba_shape": [
      16,
      16,
      4
    ],
    "channels": [
      "red",
      "green",
      "blue",
      "alpha"
    ],
    "flattening": "C row-major: index = ((y * 16 + x) * 4 + channel); y increases downward, x rightward",
    "raw_dtype": "IEEE 754 binary64; little-endian source-array hash; full-precision JSON numbers"
  },
  "hashing": "SHA-256 over source numerical arrays BEFORE serialization: C-contiguous little-endian float64 RGBA/state, uint8 damage mask, boolean firing mask, and native little-endian float32 target. No shape prefix; shape and dtype are recorded separately.",
  "timepoints": {
    "growth_absolute_steps": [
      0,
      8,
      16,
      32,
      64,
      128
    ],
    "stability_absolute_steps": [
      192,
      256,
      512,
      1024
    ],
    "repair_steps_after_damage": [
      0,
      8,
      16,
      32,
      64,
      128
    ],
    "paired_control_steps_after_branch": [
      0,
      8,
      16,
      32,
      64,
      128
    ],
    "damage_and_control_branch_absolute_step": 128
  },
  "rendering": {
    "raw_values": "Use raw_rgba.values unchanged for analysis. No normalized or clipped arrays are stored.",
    "display_only": "Premultiplied-style convention, matching the reports: RGB_display = clip(raw_RGB + (1 - clip(raw_alpha,0,1)) * background_RGB,0,1). For each displayed RGB channel use byte = floor(255*RGB_display+0.5), then set output alpha byte to 255 in Canvas ImageData. Background_RGB is the chosen background/checkerboard color in [0,1]. The binary target has premultiplied RGB. This is a display convention, not a calibrated color-space or output-validity claim about the model.",
    "pixel_layout": "16 by 16; nearest-neighbor scaling; no spatial smoothing or interpolation between recorded states.",
    "warning": "Clamping conceals out-of-range magnitude. Always show raw min/max, values_outside_0_1 and MSE beside the animation, especially seed-only step 1024.",
    "time_display": "Each frame is a sampled state. Label its actual step; equal animation duration does not imply equal simulation-step intervals."
  },
  "metric_definitions": {
    "mse": "Mean squared raw RGBA error against the procedural target.",
    "iou": "Intersection over union of alpha > 0.5 against target alpha > 0.5.",
    "reference_eligible": "Growth step 128 MSE <= 0.01 and IoU >= 0.8.",
    "recovered": "Eligible reference, current MSE <= 1.1 * max(reference MSE,0.0001), and IoU >= 0.8.",
    "valid_repair_comparison": "Eligible reference AND paired undamaged control recovered by the same criterion."
  },
  "limitations": [
    "Selected illustrative evaluation case, one training seed per condition, one owned 16x16 target and one damage mask; not independent training replications or a generalization estimate.",
    "Pool shape retention is not evidence of robust regeneration. Inspect both repair and paired control; a failed control makes the repair comparison ineligible.",
    "No condition in the original 10-case pilot passed every sampled reference-relative stability check, even though pooled shape was largely retained.",
    "Only the listed frames are exported; intermediate states are not shown and should not be implied stable.",
    "State updates use 16 channels; the gallery exports only first-four-channel RGBA. Full-state hashes are provided, but the gallery data alone cannot re-run the neural dynamics without source and checkpoints.",
    "Stability noise restarts at step 128; repair/control noise is a separate branch and must not be substituted for the stability path.",
    "Unbounded model outputs are kept raw, including negative and greater-than-one values. Display clamping is lossy and must be visibly labeled.",
    "Bitwise replay is verified in the recorded runtime. Other NumPy/BLAS implementations may differ numerically; this exporter intentionally fails on any saved-state mismatch rather than silently relaxing tolerance."
  ],
  "verification": {
    "file": "verification.json",
    "saved_full_batch_arrays_checked": 50,
    "all_saved_states_bitwise_equal": true,
    "maximum_absolute_error": 0.0,
    "json_arrays_roundtrip_checked": 47,
    "all_json_arrays_bitwise_equal": true
  }
}
