ILLUSTRATIVE · NASA / SVS · NOT ADITYA-L1 DATA
Build · reproduce
The reproduction record
Per-table digests, the pinned environment, and the rebuild result.
What is this?
The reproduction record: per-table digests, the pinned environment, and the result of rebuilding the dataset from the source archive.
Why should I trust it?
The rebuild was executed and its output compared against the frozen tables. Where the check covers a sample rather than the whole archive, the reproducibility page says so.
Where can I verify it?
- The six reproducibility metricsTwo of them partial
- The lockfile case studyA digest mismatch, traced
- How the pipeline fits togetherArchive to rendered number
- The raw payloadsDigest-addressed JSON
Identity
What you are rebuilding, and what a correct rebuild must match.
Dataset digest
43fd0e228b28ae6bc7e468c3acf68722768bd62b73798eb6631e9e6233b71ed9
Provenance digest
7282b7c34fbd6c2eae7dfca6757f46cdc497b88a9b6312089715479e67be8498
- versionAdityaNet_v2_dataset_r1
- commitbe0b7e5114db41e24f592f6483fa643d98586d02
- specr6
- archive2024-02-01 .. 2026-06-17 (UTC)
- frozen2026-07-18T08:22:44.103343+00:00
- Dataset version
- AdityaNet_v2_dataset_r1
- Dataset digest
- 43fd0e228b28ae6bc7e468c3acf68722768bd62b73798eb6631e9e6233b71ed9
- Provenance digest
- 7282b7c34fbd6c2eae7dfca6757f46cdc497b88a9b6312089715479e67be8498
- Build commit
- be0b7e5114db41e24f592f6483fa643d98586d02
- Specification
- r6
- Archive span
- 2024-02-01 .. 2026-06-17 (UTC)
- Frozen at
- 2026-07-18T08:22:44.103343+00:00
Table inventory
Each digest covers that table's full file set — verify table by table, not only in aggregate.
| Table | Name | Files | Size | SHA-256 |
|---|---|---|---|---|
| T1 | solexs_lc_1min | 424 | 13.4 MiB | 5e6d95be2b43… |
| T2 | solexs_spec_1min | 424 | 83.1 MiB | 4124d5ee4f59… |
| T3 | hel1os_lc_1min | 373 | 58.2 MiB | d814d3ad4c2e… |
| T4 | hel1os_hk_1min | 389 | 18.3 MiB | fdb005c60811… |
| T5 | hel1os_spec_1min | 373 | 396.0 MiB | ff7f5a90a1a3… |
| T6 | gti_intervals | 1 | 93.2 KiB | 5930fe126f49… |
| T7 | provenance_manifest | 1 | 235.1 KiB | 12c2b6d073b9… |
7 tables · 569.3 MiB total
Environment
Pinned. The dependency set is frozen in a lockfile because an unpinned numeric library silently changed results in this project once already.
- python_version
- 3.12.12
- platform
- macOS-26.5.2-arm64-arm-64bit
- lockfile
- artifacts/v2/phase05/requirements.lock
- lockfile_sha256
- 6899e001b1c4d64a5aec01b3ee1d2cfce2a3ff38ab64f827a75ab9d55fd13d3f
artifacts/v2/phase05/requirements.lock
Reproducibility record
1. What was tested
Twelve days were selected by even spacing across the full archive span (2024-02-01 → 2026-06-15) — not cherry-picked — and rebuilt from the raw L1 FITS, through the frozen parsers and builders, then compared against the frozen dataset.
Two distinct claims were measured separately, because they are not the same thing:
- Content identity — the values are identical. This is the scientific claim: a rebuild must reproduce the same measurements.
- Byte identity — the parquet file bytes are identical. Stronger, but partly a property of the writer environment (parquet embeds library metadata), so it was measured rather than assumed.
2. Result
| Day | T1 content | T1 byte | T2 content | Rebuild |
|---|---|---|---|---|
| 2024-02-01 | ✅ | ✅ | ✅ | 0.6 s |
| 2024-03-10 | ✅ | ✅ | ✅ | 0.4 s |
| 2024-04-20 | ✅ | ✅ | ✅ | 0.4 s |
| 2024-05-31 | ✅ | ✅ | ✅ | 0.4 s |
| 2025-08-09 | ✅ | ✅ | ✅ | 0.4 s |
| 2025-09-30 | ✅ | ✅ | ✅ | 0.4 s |
| 2025-11-12 | ✅ | ✅ | ✅ | 0.4 s |
| 2025-12-23 | ✅ | ✅ | ✅ | 0.4 s |
| 2026-02-01 | ✅ | ✅ | ✅ | 0.4 s |
| 2026-03-15 | ✅ | ✅ | ✅ | 0.4 s |
| 2026-05-04 | ✅ | ✅ | ✅ | 0.4 s |
| 2026-06-15 | ✅ | ✅ | ✅ | 0.4 s |
Content identity: T1 12/12, T2 12/12. Byte identity: T1 12/12, T2 12/12.
Both the 340-channel spectral arrays (T2) and the scalar light-curve table (T1) reproduce exactly. Row counts match (1,440 rows/day) on every sample.
3. Determinism: why it holds
The pipeline contains no non-deterministic operation by construction:
| Property | Guarantee |
|---|---|
| No randomness | No RNG anywhere in parsers or builders (no sampling, no shuffling, no initialisation) |
| No imputation | NaN is preserved as the missing-data sentinel; never filled, never dropped (verified by AST scan + tests) |
| No reordering | The parser preserves archive order losslessly; HK sorting is an explicit out-of-parser utility |
| Order-independent resolution | The Version Resolution Engine builds a coverage map in two phases (collect → resolve); shuffled candidate order yields identical maps, proven on real data |
| Order-independent aggregation | All minute statistics are sum/mean/max/min over finite values |
| Fixed hashing | Provenance SHAs come from the frozen Phase 0.5.1 manifest, not recomputed at build time |
Version-resolution stability across three independent full builds: 1,065,572 owned (minute, detector) pairs, 48,604 conflicts, R1 47,328 / R2 1,276 / R3 0 / F-14 0 — byte-stable every time.
4. The one documented exception
T7 provenance_manifest contains parsed_at_utc, a build wall-clock timestamp. This column differs between builds by design — it records when a build ran. Every other T7 column is deterministic.
Consequently:
- The reproducible content hash of T7 excludes
parsed_at_utc(NON_REPRODUCIBLE_COLUMNSinfreeze_dataset.py). - The file SHA-256 of T7 in the manifest pins this frozen artifact exactly, as it does for every other file.
This is stated rather than engineered away: removing the timestamp would have modified the dataset after freezing, and the timestamp is legitimate provenance.
5. Environment
| Field | Value |
|---|---|
| Python | 3.12.12 |
| numpy / pandas | 1.26.4 / 2.2.2 |
| pyarrow / astropy | 16.1.0 / 6.1.7 |
| Platform | macOS-26.5.2-arm64 (Apple Silicon) |
| Lockfile SHA-256 | 6899e001b1c4d64a5aec01b3ee1d2cfce2a3ff38ab64f827a75ab9d55fd13d3f |
Scope of the byte-identity claim: demonstrated in this pinned environment. Byte identity depends on the parquet writer (pyarrow==16.1.0); a different pyarrow may produce different bytes for identical data. Content identity is the portable guarantee; byte identity is the observed, stronger result here. Both are reported so the distinction is not lost.
6. Timing
| Stage | Time |
|---|---|
| Per-day rebuild (T1 + T2, from raw FITS) | 0.4 s median |
| Full archive rebuild (424 SoLEXS days + 389 HEL1OS orbits) | 93.75 min |
| Archive extraction (827 ZIPs → 135 GB) | 6.8 min |
| Scientific validation | ~20 min |
| Sample verification (this report) | ~6 s |
7. How to reproduce
See DATASET_MANIFEST.md §5. In short: install from the lockfile, run extract_archive.py, run build_canonical.py, then freeze_dataset.py and compare dataset_hash against 43fd0e228b28ae6bc7e468c3acf68722768bd62b73798eb6631e9e6233b71ed9.
Verdict: the dataset is reproducible from the raw archive. Content-identical by construction and byte-identical in the pinned environment, with one documented, deliberate exception (parsed_at_utc).
artifacts/v2/phase05/REPRODUCIBILITY_REPORT.md