Validation: NEON HDF5 download¶
Recorded evidence: 5 variations; 5 passed, 0 failed, and 0 skipped (100.0% pass rate over all recorded variations).
Evidence boundary
The current checked-in campaign uses small synthetic or already-present inputs and does not contact NEON. It validates software contracts and diagnostics, not real-flightline scientific accuracy.
What this module test exercises¶
Exercise the restart-safe acquisition contract: a valid local HDF5 must be discovered at its canonical path and reused without a network request.
Implementation exercised: stage_download_h5 in spectralbridge.pipelines.pipeline
Inputs varied¶
| Field | Why it is recorded |
|---|---|
domain |
NEON domain encoded in the flightline identity. |
site_code |
Site code varied across representative NEON domains. |
year_month |
Acquisition month used by the download interface. |
Checks and how to interpret them¶
| Check | Question | PASS means | If it does not pass |
|---|---|---|---|
canonical_path_returned |
Did discovery return the exact expected HDF5 path? | The returned path equals the pre-created canonical artifact path. | Inspect flightline naming, base-folder selection, and path helpers. |
nonempty_h5_reused |
Was an existing non-empty source reused byte-for-byte? | Modification time and SHA-256 are unchanged and no network call occurs. | Treat a rewrite or attempted download as a restart-safety regression. |
Diagnostics recorded for every variation¶
| Field | Why it is recorded |
|---|---|
artifact_reused_unchanged |
Combined timestamp/hash reuse result. |
network_contacted |
Whether this offline case contacted NEON. |
output_bytes |
Persisted source size; zero bytes are invalid. |
sha256 |
Full-file digest used by the small offline fixture. |
Input variations and results¶
On narrow screens, scroll the table horizontally to see every diagnostic and check.
| Variation | Input variation | Result | Diagnostics | Explicit checks |
|---|---|---|---|---|
neon_download-001Reuse a non-empty HDF5 artifact for site HARV. |
domain=D01; site_code=HARV; year_month=2023-01 |
PASS | artifact_reused_unchanged=true; network_contacted=false; output_bytes=17; sha256=cd2fd60d74decf19f5dbe9c0a4d8b939b3673a3fb44d210dde3dd5… |
canonical_path_returned=✓; nonempty_h5_reused=✓ |
neon_download-002Reuse a non-empty HDF5 artifact for site OSBS. |
domain=D03; site_code=OSBS; year_month=2023-02 |
PASS | artifact_reused_unchanged=true; network_contacted=false; output_bytes=17; sha256=6fed15190444ff95af64dfad2a33a267b549e977f59123d7a52b8e… |
canonical_path_returned=✓; nonempty_h5_reused=✓ |
neon_download-003Reuse a non-empty HDF5 artifact for site NIWO. |
domain=D13; site_code=NIWO; year_month=2023-03 |
PASS | artifact_reused_unchanged=true; network_contacted=false; output_bytes=17; sha256=3213c75a5afd84c427256530bfc4740e7e8725c78680565b6c47ba… |
canonical_path_returned=✓; nonempty_h5_reused=✓ |
neon_download-004Reuse a non-empty HDF5 artifact for site JORN. |
domain=D14; site_code=JORN; year_month=2023-04 |
PASS | artifact_reused_unchanged=true; network_contacted=false; output_bytes=17; sha256=c3fe844c11a0342791c89d0077750be5c3acaf7801812d6c48cb94… |
canonical_path_returned=✓; nonempty_h5_reused=✓ |
neon_download-005Reuse a non-empty HDF5 artifact for site SJER. |
domain=D17; site_code=SJER; year_month=2023-05 |
PASS | artifact_reused_unchanged=true; network_contacted=false; output_bytes=17; sha256=40af97777b435041c55e4afeace8884a6b11fe49f0c188fcc11319… |
canonical_path_returned=✓; nonempty_h5_reused=✓ |
What a passing result establishes¶
Local discovery and reuse behavior across several site/date identities.
What it does not establish
NEON authentication, API availability, retry behavior, or transfer integrity over the network.
The matching real stage checks are explained in the stage QA test guide.
Example from the real R10C test run¶
The figure is evidence from one completed flightline, not a replacement for the variation table above. Open the real flightline walkthrough for exact values and limitations.
Expansion to 100 real variations¶
The repository includes a live 100-flightline campaign specification. It requires a pinned inventory of real flightline IDs plus an explicit compute, storage, and network allocation. Live results must be stored as a new campaign record; they must not overwrite this offline baseline.
Reproduce or expand this module¶
# Fast local evidence matrix (five variations per module)
python scripts/run_validation_campaign.py --iterations-per-module 5
# Exercise 100 deterministic small-data variations per module
python scripts/run_validation_campaign.py --iterations-per-module 100 \
--output validation/results/offline-contract-100.json
python scripts/generate_validation_docs.py
The 100-case offline command scales contract variation and randomized synthetic inputs. It does not substitute for 100 distinct NEON downloads.
Last updated: 2026-08-14