Repository navigation
Releases
v0.3.0b5 — bounded metadata reads and safer distribution
v0.3.0b5 — bounded HDF5 reads and safer distribution
I tightened the metadata-read boundaries and the checks used to distribute the
beta. The workflow is unchanged: scan an authorised local dataset, keep the
reports private, and review findings and coverage before sharing anything.
- Selected HDF5 text reads now share byte, element and node limits. Variable-length
strings, object-bearing compound values and unbounded class attributes are
refused before value reads. Unknown EEGLAB roots, signal groups, soft links and
reference-bearing signal layouts remain manual review. Known signal aliases
cannot be read indirectly as text; bounded text-pool references still work. - Office metadata rejects XML document type declarations before constructing
the text tree, including UTF-16 declarations that bypassed the old byte check.
Safe bounded UTF-16 text remains supported; unsupported encodings are manual review. - Markdown values use the same escaping in audit and curator reports, so an
archive member name cannot become an active Markdown image. - Coverage labels match one-to-one, including overlapping partial labels.
Historical suites retain their declared subset scope; exact-policy cases also
reject unlabelled coverage rows. Locked case files were not relabelled. - Kit checks compare the original ZIP without rewriting it. Normal builds refuse
different bytes at an existing versioned filename. Exact-wheel checks bind the
tested installation to the named artifact, its RECORD and source module bytes. - Website fixes check archive digests and release transitions, serialize download
and confirmation, discard stale sessions after untracked downloads, limit
public stats reads, and keep optional statistics from blocking successful actions.
Regression checks cover the refusal paths and positive controls. Local source
and exact installed-wheel checks run on Python 3.10 and 3.13; synthetic benchmark
replays, saved-report masking/schema/integrity checks and local Worker/D1 tests
are separate evidence. The website kit is updated only after the exact scanner
wheel is published, so its CI never needs an unpublished asset.
The 50-dataset calibration remains historical scanner 0.2.0.dev0 evidence, not a
new real-data calibration. Tests and checksums do not certify anonymity, complete
metadata coverage or the safety of native parser internals. Review unsupported
layouts manually. This is still a beta and does not approve a dataset release.
v0.3.0b4 — metadata boundary and robustness fixes
v0.3.0b4 — metadata boundary and robustness fixes
I fixed six masking, provenance and robustness issues found while auditing
the previous beta. The workflow is unchanged: audit a local dataset and review
the report before sharing it. Dataset files and reports are not uploaded.
- Arbitrary identifying prefixes in phone-field names no longer appear in
finding locations. Phone detection still works; the location uses a safe
placeholder when the key is not a recognised public field name. - Selected MATLAB and EEGLAB HDF5 readers refuse virtual datasets, external
storage and unsafe soft links. Unreadable EEGLAB text metadata does not
trigger an MNE fallback. Unsupported content is left for manual review. - Email matching no longer retries inside long percent-containing local-part
runs. Valid percent-containing addresses remain supported. - Office ZIP member and directory-size budgets are checked before loading the
member table. The check counts actual directory headers instead of trusting
a potentially forged member count, and accepts valid bounded ZIP64 files. - Failed or refused JSON, table and XML parsing leaves an explicit coverage
gap even when the raw text pass completed. - The website's pinned development/build dependencies are updated, and CI
checks npm advisories. This is a dated dependency check, not a guarantee
against unknown vulnerabilities.
The audit adds eight regression tests covering these failure paths and their
positive controls. The local checks include source and exact installed-wheel
tests on Python 3.10 and 3.13, paired synthetic benchmark runs, saved-report
masking and integrity checks, and the website's Worker/D1 tests. GitHub CI also
checks clean installs on Linux, macOS and Windows.
This remains a public beta, not privacy certification or proof of complete
de-identification. Unsupported layouts and coverage gaps still need manual
review. Keep reports private until their paths and metadata have been reviewed.
Use this version instead of the earlier wheel for the corrected boundaries.
v0.3.0b3 — archive, metadata and Windows fixes
v0.3.0b3 — archive, metadata and Windows fixes
I have tightened bounded metadata inspection and fixed report generation on
Windows. Researchers can continue auditing their own datasets locally using
the command-line tool or local browser interface.
- ZIP member counts and directory sizes are checked before loading the member
table. Over-budget archives receive an explicit manual-review coverage item.
TAR inspection retains bounded header summaries; overlong member names make
collision coverage explicitly partial. - Nested DICOM sequence items are traversed within the element and depth
budgets. XLSX inline-string cells are included in the bounded text pass;
numeric cells and formula results remain outside that pass. - Windows report writing skips unsupported directory fsync while retaining
file fsync, atomic no-clobber publication and rollback. - The report label now says “Masked evidence seen once” to describe the actual
grouping and avoid implying that the original unmasked values are unique. - The researcher beta server fails closed if rate limiting is unavailable,
uses separate per-client download and confirmation buckets, and rejects
symlinks when building the installation kit. Its development dependencies
include the patched sharp and undici versions.
CI checks source tests, exact installed wheels, and report generation on Linux,
macOS and Windows. These are engineering regression checks. This beta does not
establish anonymity, infer consent, inspect every payload or approve a dataset
for publication. Review findings and coverage gaps before sharing data.
The public site distributes the installation kit. Dataset files and reports
stay on the researcher's own computer.
v0.3.0b2 — bounded MATLAB/EEGLAB metadata audit
I have updated the local neurodata release audit with bounded classic MATLAB/EEGLAB text inspection and stronger evidence checks.
Changes
- Inspect selected text in MAT5 structs/cells without constructing numeric signal arrays; keep unsupported and budget-limited content explicitly partial.
- Prevent empty matrices with enormous zero-product dimensions from creating unbounded empty output records.
- Preserve flat sibling findings when nested reading is limited.
- Treat exact name placeholders as review items, not proof of anonymity. Preserve birth-date uncertainty and flag non-placeholder prefixes.
- Recognize three exact identity-field aliases and deduplicate overlapping secret-pattern spans.
- Check seeded masking separately in decoded JSON, Markdown and HTML; preserve historical benchmark and pilot limitations.
Verification
- 292 source tests and 292 tests against the installed wheel pass with optional readers.
- Base installation passes with 28 expected optional-reader skips.
- Two controlled wheel builds, and the rebuild from the merged tree, are byte-identical.
- Paired synthetic suites match their labels: development 103/103, locked 21/21, challenge 25/25 and adversarial 32/32, with no duplicate or seeded masking failures. These suites overlap and are not independent validation samples.
- All 16 PR CI jobs and all 16 merged-main CI jobs pass, including Python 3.10/3.13 tests, Python 3.12 installed-wheel smoke, and installation checks on Linux, macOS and Windows.
This is a beta, not privacy certification. Numeric metadata, signal-based identification and unsupported payloads can remain outside coverage. Compressed blocks may require bounded byte decompression; traversal limits are not a whole-process resource sandbox. Review every finding and coverage gap before sharing a dataset.
Download the wheel for installation or the source ZIP for development. Verify the files against SHA256SUMS. This release is built from merge commit dea6a51 and does not replace v0.3.0b1 assets.
v0.3.0b1 — Local browser beta
Local browser beta
This prerelease adds the simplest way to run a NeuroData audit on a local dataset:
neurodata-security-audit uiThe command opens a temporary interface on 127.0.0.1. The researcher enters a dataset folder and a separate report folder, runs the audit, and opens the resulting HTML report. Dataset files and report contents are not uploaded.
Included in this release
- loopback-only local browser interface with a random session token;
- same-origin scan requests and one scan at a time;
- read-only dataset handling and reports written outside the dataset;
- no-overwrite behavior for existing report files;
- clearer quick-start README, supported-format table, result states and limitations;
- exact-wheel UI tests in CI across the supported Python matrix.
The existing command-line scan, checklist and compare workflows remain available.
Verification
- source suite: 249/249 passed with all optional readers;
- exact installed wheel: 195/195 passed on Python 3.10 and 195/195 on Python 3.13;
- GitHub CI passed on Linux, macOS and Windows, including Python 3.12 smoke;
- deterministic wheel and source-archive rebuilds were byte-identical;
- a real public OpenNeuro
ds004752slice was processed twice with byte-identical reports: 7 files inspected, 0 skipped, 0 high-priority findings, 3 review findings, and both integrity rechecks passed.
Important boundary
This is beta decision-support software. It does not prove anonymity, certify GDPR/HIPAA or ethics compliance, approve a dataset release, or replace manual format-aware review. Findings are masked, and every result still requires a curator decision.
Verify downloaded assets with SHA256SUMS before installation.
NeuroData Release Security Audit 0.2.1 beta 1
NeuroData Release Security Audit 0.2.1 beta 1
Prerelease. This beta is for researchers and data curators evaluating a
local, read-only final check before sharing EEG or neuroimaging datasets. It is
distributed through GitHub Releases, not PyPI.
What changed since v0.2.0b1
- added bounded metadata checks for classic MATLAB and MATLAB 7.3 files without
loading numeric arrays; - added bounded XLSX and DOCX checks for text, comments, core metadata, macros
and external relationships; - made unsupported nested MATLAB content and other coverage limits visible in
the report; - hardened path handling, report publication and no-overwrite behaviour;
- simplified the runtime while keeping benchmark and usability administration
outside the installable scanner wheel; - clarified the first-run workflow, release state and next actions in terminal
and HTML reports; - added exact-wheel, deterministic-build and installed-package CI gates, and
updated GitHub Actions to the Node 24 runtime; - recorded a fixed public GIN calibration for the MATLAB and Office paths.
Install
Download the wheel and SHA256SUMS, verify the wheel hash, and install it in a
fresh environment:
shasum -a 256 neurodata_release_security_audit-0.2.1b1-py3-none-any.whl
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install ./neurodata_release_security_audit-0.2.1b1-py3-none-any.whl
neurodata-security-audit --versionUse [formats,imaging] when FIF, EEGLAB, KIT, MFF, MATLAB, NIfTI or
DICOM metadata should be inspected.
Verification
- 244 source tests passed with the optional readers installed;
- the exact installed wheel passed 190 copied functional tests on Python 3.10
and Python 3.13 outside the source checkout; - two controlled wheel builds were byte-identical;
- two source archives were byte-identical and contain the exact 117-file Git
tree; - the fixed public GIN calibration inspected 25/25 files with 0 skipped,
0 high findings, 20 explicit review findings and both integrity rechecks
passing; - two calibration runs produced byte-identical JSON, Markdown and HTML reports.
Important limits
This beta checks metadata and release structure. It does not prove that a
dataset is anonymous, compliant, ethically shareable, malware-free, clinically
safe or scientifically valid. It does not inspect signal samples, image voxels,
DICOM pixels, encrypted archive contents, archive member payloads or Office
embedded objects. Unsupported content remains visible for curator review.
Use only synthetic or fully redacted examples in public issues. Do not attach a
participant file, an unredacted audit report or a detected value.
NeuroData Release Security Audit 0.2.0 beta 1
NeuroData Release Security Audit 0.2.0 beta 1
This is the first public beta of a local, read-only check for common privacy and metadata risks in EEG and neuroimaging release folders.
Included
- complete file, folder and symlink accounting;
- deterministic SHA-256 manifest and release-tree integrity rechecks;
- BIDS, BrainVision, EDF/BDF, FIF, KIT, EEGLAB, MFF, NIfTI and DICOM metadata checks within the documented reader boundaries;
- archive and cross-file reference checks;
- masked JSON, Markdown and offline HTML reports;
- a curator checklist and comparison of baseline and corrected reports.
The package was rebuilt twice with identical wheel bytes. Its exact installed wheel passed 213 tests on Python 3.10 and Python 3.13 outside the source checkout.
Important limits
This beta does not prove that a dataset is anonymous, legally compliant or safe to release. It does not inspect signal samples, image voxels, DICOM pixels or encrypted archive contents. Unsupported files remain visible for manual review.
Use synthetic or fully redacted examples in public issues. Never attach a real participant file, audit report or detected value.