When a dataset lands on your machine, the questions come fast. What is in it? Which files are duplicates? Where did each part come from? Did somebody leave an .env or key file in the tree? Most teams answer ad hoc: a directory listing, a one-off hash command, a grep for a familiar token prefix, and a feeling that something was probably missed.
A stronger approach is to build a reviewable record of observable facts before the directory leaves your machine. The workflow below maps to YY Dataset Preflight, but the checklist is useful regardless of which tool creates the artifacts.
Why preflight belongs before upload
Once a dataset is inside a pipeline, unintended duplication, incomplete attribution, and risky files are harder to isolate. Model metrics do not answer those questions. They are input-preparation problems, in the same sense that a type check is a build-preparation problem.
The goal is not to certify a dataset. It is to produce a compact record that a person can inspect and CI can gate on.
1. Build a deterministic inventory
Start from a stable list. For each file, record its normalized relative path, local type, byte size, and content hash. Stable ordering matters: if identical scans list files differently, reviewers cannot cleanly diff runs and thresholds become noisy.
Dataset Preflight writes sorted-key JSON with NFC-normalized relative paths ordered by Unicode code point. For the same tool version and relative tree content, its report bytes remain stable. The packet also includes a standalone HTML view and a SHA-256 manifest.
2. Separate exact and narrowly normalized duplicates
Files with the same raw SHA-256 are byte-exact duplicates. Text can also differ only through line endings, trailing spaces, Unicode normalization, or outer blank lines. Those differences should not be silently treated as semantic equivalence, but they are useful to surface separately from exact matches.
Dataset Preflight names and versions its narrow normalization: text-nfc-newline-rstrip-v1. It applies NFC Unicode, LF newlines, strips trailing spaces and tabs per line, and removes outer blank lines. Matching occurs only after that documented canonicalization; this is not fuzzy, semantic, or embedding-based duplicate detection.
The public sample reportshows both cases: one exact duplicate group and one normalized group. The entire synthetic fixture is six files and 149 bytes, so the evidence can be read end to end.
3. Measure provenance coverage without overclaiming it
If a dataset includes declarations about where subsets came from, ask narrow questions: which present files are covered, do multiple declarations conflict over a file, and do the named evidence files exist? Those checks do not establish that a declaration is truthful or legally sufficient.
Dataset Preflight accepts optional customer-authored declarations with a scope, identifier, and evidence-file list. In the sample, two of six files are covered by one declaration and four files are intentionally uncovered and listed by path. That is concrete output a reviewer can investigate.
4. Surface secret-risk signals without copying values
A report that reproduces matched values, offsets, or line numbers can become a new leak vector. A conservative alternative emits signal codes only. Dataset Preflight uses filename signals such as sensitive-config-filename and key-material-filename, plus a small set of eligible-text pattern signals. It does not copy the matched text or secret value into the report.
The sample flags one .env path with a filename-only signal. A reviewer learns that the file needs manual attention without the packet repeating its contents. The packet still contains paths and hashes, so treat it as an operational artifact rather than a public-data guarantee.
Close the loop with explicit CI thresholds
Stable observations become useful gates. Dataset Preflight exposes thresholds for exact duplicate excess, normalized duplicate excess, uncovered files, secret-risk files, and scan issues. A changed-mid- read file is recorded as a scan issue; use the scan-issue threshold if your policy should fail on it.
Exit code 0 means all configured thresholds passed,1 means at least one failed, 2 covers an input, configuration, or filesystem error, and 3 covers an unexpected internal error. Keep those meanings distinct from the findings themselves.
What this evidence packet does not prove
- It is not a security scanner, audit, or certification.
- It does not prove that a dataset is safe.
- It is not legal advice or license clearance.
- It does not determine that data is lawful to use.
- It is not a training-readiness or model-quality verdict.
- Its conservative secret-risk heuristics can miss or overflag.
The packet supports a human decision; it does not replace one.
Inspect the contract on a tiny example
You can evaluate the artifact contract without buying the tool. Open the standalone HTML report, the canonical JSON, and the SHA-256 manifest. The sample is synthetic, not customer data or a performance benchmark.
If the workflow fits your review process, the v0.1.0 founding license is $39 once for one organization and includes all 0.x updates. The tool runs locally on Python 3.12 with no runtime network requests.