Was the deposit unreachable, or was one route unreachable?

Rendered from gate/RESULT-ACCESS.md

Run: gate/access.pygate/access.json Date: 2026-09-22 Standard: METHOD 0.4.9


What was done

gate/RESULT-SIGNALTYPE.md recorded three deposits — turtle, crow, octopus — as UNREACHABLE on the strength of a 401 from one route and a 403 from another, and wrote the denial into gate/substrate_census.py, where every later run inherited it without retesting. That is the same shape of defect as the sham that was not a null: a fact established once, by one probe, then carried forward as a property of the world.

This run re-probed it, then generalized the probe to the whole register.

The 401 and the 403 were both about routes, not deposits. Dryad's v2 API answers metadata anonymously with HTTP 200 and requires an OAuth bearer token only on its /download endpoints. Its public web stream returns a proof-of-work anti-bot interstitial — a wall this program will not climb and, as it turns out, does not need to. Neither is a statement about the data.

The route that works is a DOI query against Zenodo:

https://zenodo.org/api/records?q=doi:"10.5061/dryad.XXXX"

Dryad deposits from roughly 2019–2023 frequently have a full Zenodo mirror carrying the same DOI and the same CC0 license, with open anonymous file endpoints. That probe is now gate/access.py, with four controls — a positive case, a malformed-DOI negative, a refusal to treat an empty file listing as an answer, and a requirement that any mirror offered as a route carry its license — and it runs over every deposit in datasets/registry.yaml so no later run inherits a stale denial.


Reachability was 17 of 32 as recorded. It is 30 of 32 as measured.

Six deposits are reachable only by a mirror their primary host refused:

Deposit Route Files Size License
dryad-ketamine-farnes Zenodo 4245091 1 934 MB CC0
dryad-ferret-isoflurane Zenodo 4954641 4 1.98 GB CC0
dryad-octopus-optic-lobe Zenodo 8338842 7 4.29 GB CC0
dryad-crow-nidopallium Zenodo 5759932 2 1.60 GB CC0
dryad-organoid-hdmea Zenodo 6578989 37 70.9 GB CC0
dryad-turtle-oddball Zenodo 17131483 1 27 MB CC-BY-4.0

Every route was verified independently of the search that found it: record metadata re-fetched, file manifests compared against Dryad's own listing, and the turtle archive downloaded and checksummed (md5 b2aeffbb… matching the manifest). The turtle route is the one exception to the DOI query — its mirror is the GitHub archive the paper's data availability statement names, carrying a different DOI, so gate/access.py holds it in a HAND_VERIFIED table that records the evidence and the caveat that the archived tag is v1.0.1 against Dryad's v1.0.0 and so is not byte-identical.

Two of the fifteen "blocked" deposits were blocked by my own probe, not by a host. The OpenNeuro check issued a GET against a GraphQL endpoint that wants a POST and read the resulting 400 as a denial — seven open deposits recorded as unreachable by a defect in the prober. Replaced with the public S3 listing the register already reads from, with an empty listing treated as a failure rather than an answer, which is the gate/pitch.py defect carried forward deliberately this time.

The two that remain genuinely blocked are figshare-doc-resting and mpg-pogona-claustrum, and the second is not an access problem: the registry's own note records that it was never deposited.

All three of the "unreachable" deposits are now open, and all three still fail a gate

This is the part worth keeping. Having opened them, each was read:

Access was never the binding constraint on the non-mammalian gap. Three deposits were chased as an access problem and all three were an experiment problem. Gate 2 now blocks 18 of 32 deposits, up from 15, because three "unverified" became three definite noes.

The thing the access work actually bought

dryad-ketamine-farnes, unpacked and inspected: 62-channel EEG, TMS-evoked, 10 healthy volunteers, before and during sub-anesthetic ketamine, per-subject .mat files at 312 Hz with a 3-D array of channels × times × trials and the pulse at sample 126. Roughly 293 trials per subject per condition. CC0.

That is an M1 instrumented-perturbational human dataset in a state the register has never measured, and it is the state Farnes et al. chose precisely because behavior and experience come apart in it — a subject who is unresponsive while experience is preserved. A measure that tracks behavior rather than experience should break there.


  1. Issue the Farnes readings. Ten subjects, two conditions, a paradigm the pipeline already computes without modification. It needs a matched null per §2.3 and a temporal grain declaration per the new §3.6 — 312 Hz, 207-ish samples depending on window — and it is the most valuable thing the access work uncovered.

  2. Take the ferret deposit next (1.98 GB, CC0, layer-resolved, graded isoflurane). Non-primate, non-rodent, mammalian, four anesthetic depths — the substrate span §3.5's tolerance is currently carried on mouse alone.

  3. Do not chase the remaining non-mammalian deposits for access. They are open. What the register lacks is a perturbational non-mammalian recording, and no repository work produces one. That is a request to experimenters, and it belongs in the same envelope as the condition 9 invitation rather than in a download queue.