# Arctic Tracker deposit package

<!-- GENERATED by ingest/build_deposit.py. Do not edit this file; the next
     `make deposit` overwrites it. Edit the generator. On 2026-08-15 a
     correction was made here and would have vanished at the next build. -->

Built 2026-09-01T17:13:15Z from schema `arctic_v2`.

**This package has NOT been uploaded to Zenodo and has no DOI.** It is the
artifact a DOI would point at. Minting the DOI is an author action.

## Contents

- `tables/` : 22 tables, 494256 rows, one CSV each
- `identifiers/` : record identifiers for the two tables withheld for licence reasons, so a reader can rebuild or check them at source
- `supplementary/` : the supplementary tables derivable from the corpus, regenerated on every build
- `verification/` : the scripts that reproduce this paper's numbers from the tables above
- `data_dictionary.json` : every table and column with type and provenance class
- `MANIFEST.sha256.json` : SHA-256 and byte size for every file in this package
- `results_traceability.csv` : Supplementary Table 5: claim to Methods to dataset to figure to definition
- `results_traceability.md` : the same table, readable
- `schema.sql` : the database schema these tables load into, generated from the database of record
- `source_data.zip` : Source Data, one labelled file per figure, in the zipped-folder form the journal accepts
- `README.md` : this file
- `pipeline.json` : the seven-step evaluation pipeline as a record: each step's stage, data source, tool, human gate and the audit questions it answers, carrying the SHA-256 of the Supplementary Table 4 it was derived from
- `figures/` : the two stage diagrams drawn from pipeline.json, SVG and PNG. verification/verify_pipeline_record.py re-renders them and compares byte for byte, so a stale diagram fails rather than misleads
- `build_pipeline_diagram.py` : draws the two figures above from pipeline.json; byte-deterministic, which is what makes that comparison possible
- `load_deposit.sh` : loads every table in tables/ into a database built from schema.sql, retrying until no further table loads, because foreign keys make alphabetical order fail
- `sources/` : under curated/, the ten source files the curated tables are built from. Each deposited table is compared against the file here it came from by verification/verify_source_truth.py

## Not redistributed, and why

- **iucn_assessments**: IUCN Red List terms do not permit redistribution. The assessment identifier, publication year and scope of every withheld row are provided under identifiers/, so any reader with a free Red List account can retrieve each assessment by its identifier and reconstruct or check the table at source. The extraction is not shipped as a one-command tool inside this deposit; it lives in the code repository, where core/iucn_client.py and core/rebuild_iucn_assessments.py query the Red List API directly. Note that ingest/iucn_load.py is a loader, not an extractor: it replays a snapshot we may not redistribute, and is of no use here.
- **catch_records**: NAMMCO publishes no licence or terms for the Catch Database, so no redistribution is granted. The catch_total column is the source's CATCH TOTAL for one row, in animals; the source lists national totals beside its area rows, so a sum over rows counts those animals twice. Record identifiers are provided under identifiers/. There is no extraction script: these catch figures were taken from the publicly browsable NAMMCO catch database by a scraper that was lost in an October 2025 repository cleanup. The values remain checkable at source using the identifiers and the access date; our route to them is not reproducible, and we state that rather than implying otherwise.

For both, the deposit provides record identifiers under `identifiers/`. For the
IUCN assessments those identifiers let any reader with a free Red List account
retrieve each assessment and reconstruct the table at source; the extraction
code lives in the code repository, not in this deposit. For the NAMMCO catch
records there is no extraction route at all, for the reason given above; the
identifiers and access date let a reader check every value against the public
NAMMCO database, which is the most we can honestly offer. No figure in the paper
depends on non-public data.

## Provenance classes

Every row carries one:

- **DERIVED**: computed from a hashed source file. Reproducible by replay.
- **CURATED**: entered by a named human, versioned in the repository.
- **GATED**: machine-proposed and not servable until a named expert signs it.

## Known limitations, stated rather than discovered

- `cites_trade_records.quantity` was `numeric(10,2)` until 2026-07-29, which
  silently altered **64,956** records; **7,091 of those** — a subset, not a
  further group — were rounded to exactly zero, and a further 3 exceeded the
  declared range and were dropped outright. This export is taken after the fix;
  any earlier export of this dataset carries the defect.
  `verification/verify_manuscript_claims.py` recomputes all three figures on demand.
- Source verification covers nine tables, re-derived by code paths that do not
  reuse the loaders. V-5 reads five curated CSVs and the IUCN retrieval
  snapshot. V-5b re-derives `cites_trade_records` on full content digest from
  the raw shards, `illegal_trade_seizures` by applying the documented
  decontamination rule from its written statement, and `catch_records` by
  applying the documented NAMMCO parsing rules. `cites_listings`,
  `timeline_events` and `cms_listings` are covered by the idempotency check
  alone, which proves the loader is deterministic and not that it is correct.
  The two are different guarantees and we do not merge them.
- 66 of 520 timeline events have no corroborating table in this database and
  are flagged `is_corroborated = false`.
- Narrative prose and reference bindings are GATED and unreviewed, so they are
  present in the tables but not served by the application.
- **The narrative citations have no bibliography behind them, and where they
  do resolve they are misattributed.** The 343 machine-drafted sections carry
  parenthetical author-year citations in their prose; `references` holds 4
  records and `narrative_review` holds none, so not one section has been
  reviewed. This is why the narrative layer is gated rather than merely
  unreviewed, and it is the true scope of the identical-references defect a
  reviewer reported against the deployed site.

  **Measured 31 August, so this is no longer only a statement about what was
  not checked.** Every claim in these sections naming a CITES appendix or an
  IUCN Red List category was compared with the corresponding value in this
  deposit: 70 claims are checkable that way and 35 of them, exactly half,
  contradict it — five give the wrong appendix, thirty the wrong Red List
  category, and eleven species contradict themselves between their own
  sections. A further 127 sections carry malformed citation syntax. The check
  is deterministic and uses no model. The sections are therefore being
  regenerated from the verified corpus rather than reviewed, and
  `species_narratives_no_citations.csv` is deposited as the record of what the
  generator produced, not as material to cite.

  How many citations there are depends on how one parses them, and this file
  previously gave a single number (412) that no rule we can reconstruct
  produces. A strict pattern over `(Author, YEAR)` gives 445 instances and
  219 distinct author-year pairs; a looser one that splits multi-citation
  parentheses on semicolons gives 697 and 344. The bibliography is 4 records
  either way, which is the fact that matters.

  **Resolution was sampled, not assumed.** Four pairs drawn at random from
  the distinct set failed in two distinct ways. Two resolve to no publication
  at all (Zimmerman & Williams 2000 for Siberian sturgeon distribution;
  Ansmann et al. 2014 for lynx paw morphology, an author who publishes on
  dolphins). Two resolve to real papers, by the right authors, in the right
  years, on the right species — and are attached to claims those papers do
  not make: Aulich et al. 2019 is an acoustic migration study cited for fin
  whale length and mass, and states 22 m with no mass at all, against the
  narrative's "20 to 27 meters and 40 to 80 metric tons"; van Beest et al.
  2018 is movement ecology and disturbance modelling cited for harbour
  porpoise body measurements it does not report.

  The second mode is the one to note. A citation that resolves to a real
  paper about the right species passes a reference-existence audit
  completely; only reading the source catches it. Treat every citation in
  this table as unverified regardless of whether its DOI resolves.
- `source_releases` records which upstream release each part of the corpus came
  from, and `obtained_on_basis` records how each date is known. The CITES date
  is inferred from the modification times of the downloaded shards; the IUCN
  date is carried in the artifact itself. Those are not claims of equal
  strength and the column exists so a reader can tell them apart.

## Licence

This deposit carries two sets of terms, matching the manuscript's Code
Availability statement rather than simplifying it. Our own derived aggregations,
the data dictionary and this documentation are released under CC-BY-4.0; the
code is released under MIT. Third-party source data are not relicensed here:
the CITES trade records remain (c) UNEP-WCMC and the CITES Secretariat and are
redistributed as derived tables under attribution, and the IUCN Red List
assessments and the NAMMCO catch records are not redistributed at all. Their
record identifiers are deposited under `identifiers/` so every value remains
checkable at source. The full text is in `LICENSE` beside this file.
