- 01SourceOwner, URL, licence, access model
- 02RequestParameters, filters, retrieval time
- 03ArtifactImmutable raw file and response metadata
- 04FingerprintBytes, row count, SHA-256
- 05ValidationSchema, ranges, joins, known gaps
- 06ClaimPeriod, cohort, caveat, confidence
§1A download is not evidence
Research often jumps from a visible download button to analysis. That skips the part that becomes expensive later: which endpoint produced the file, which filters were active, whether the file changed, what licence applied, and whether an empty response meant “zero records” or “the request failed.”
I now treat acquisition as the first analytical step. The request, response, file, checksum, and limitation travel together. If any link is missing, the downstream claim inherits that uncertainty.
§2Separate raw files, derived data, and claims
These layers answer different questions and should never silently overwrite one another.
What arrived
Original bytes, untouched and content-addressed. Re-fetching creates a new observation, not a replacement.
What changed
Typed tables, normalized fields, profiles, joins, and exclusions produced by versioned scripts.
What it supports
A bounded statement with period, sample, method, caveat, and a path back to its inputs.
§3Preserve negative observations
An empty file, a timeout, a blocked catalogue, and a dataset with genuinely zero matching rows are four different states. Flattening them into “no data” turns an access problem into a factual claim.
In a recent public-data archive, empty responses stayed in the manifest and access failures stayed in the access matrix. That made the gaps inspectable without pretending the underlying records did not exist.
§4Make the manifest the spine
The manifest is not an inventory written after the work. It is the machine-readable receipt produced during acquisition. At minimum it should record:
- source owner, canonical URL, dataset name, and licence note;
- retrieval timestamp, request parameters, status, media type, and byte size;
- local path, immutable filename, and cryptographic hash;
- row count or page count where meaningful;
- validation result, access limitation, and refresh policy.
The analysis can then point to manifest identifiers instead of depending on someone remembering which file “looked right.”
§5Design the rerun before the first run
discover sources
→ classify licence and access
→ fetch once; cache unchanged artifacts
→ hash and register every response
→ profile before joining
→ separate observed gaps from access failures
→ publish claims with period, filters, sample and caveat
→ refresh only when the source or decision needs itA reproducible archive is deliberately boring to rerun. Large files are cached. Raw data is immutable. Transformations are scripted. The current snapshot has an explicit date. A future operator can update the evidence without reverse-engineering the original session.
§6Let the archive reject the idea
The most useful output is not always a product. Sometimes the evidence shows that the proposed dashboard already exists, the joins are too weak, the licence is unclear, or the data supports cohorts but not individual predictions. A provenance-first workflow makes that no-go decision defensible.
The compact rule
- Keep raw bytes immutable.
- Record access failure as access failure—not absence.
- Make every transformation reproducible.
- Attach period, filters, sample, and uncertainty to every claim.
- Allow the evidence to close the project.