Software
Open tools for decompression research.
Libraries, parsers, model adapters and reproducibility tools used by OpenDeco research. Each public component states what it does, what it does not do and which released results depend on it.
Public software releases are being prepared.
Research software used by OpenDeco
Public software is listed here when its repository, licence, tests and documentation are ready for external use. Internal prototypes are not presented as supported tools simply to make the catalogue look larger.
The 11 components below are the code that produces, checks or describes the research record. Each one lives in this repository and none has been released, so each row carries the same three answers. Latest release is none, status is unreleased, and no released result depends on any of them, because OpenDeco has published none.
Contracts
opendeco-schemasopendeco-schemas defines the scientific objects OpenDeco stores and the canonical bytes they serialise to.
- Language
- Python
- Latest release
- None
- Licence
- Apache-2.0
- Status
- In the repository, unreleased
- Dependent releases
- None
- Path
- science/schemas
Data pipeline
opendeco-acquisitionopendeco-acquisition records where a dataset came from and seals the bytes it arrived as.
- Language
- Python
- Latest release
- None
- Licence
- Apache-2.0
- Status
- In the repository, unreleased
- Dependent releases
- None
- Path
- science/acquisition
Data pipeline
opendeco-ingestionopendeco-ingestion turns preserved source bytes into a normalized dataset version with an identity and a quality report.
- Language
- Python
- Latest release
- None
- Licence
- Apache-2.0
- Status
- In the repository, unreleased
- Dependent releases
- None
- Path
- science/ingestion
Data pipeline
opendeco-adjudicationopendeco-adjudication records human judgement about a source record without editing the source record.
- Language
- Python
- Latest release
- None
- Licence
- Apache-2.0
- Status
- In the repository, unreleased
- Dependent releases
- None
- Path
- science/adjudication
Scientific record
opendeco-lineageopendeco-lineage records what a model has already seen, so a benchmark number can be read as fit or as independent validation.
- Language
- Python
- Latest release
- None
- Licence
- Apache-2.0
- Status
- In the repository, unreleased
- Dependent releases
- None
- Path
- science/lineage
Model adapters
opendeco-adaptersopendeco-adapters is the model adapter SDK: the interface a decompression model implements to be evaluated by the benchmark.
- Language
- Python
- Latest release
- None
- Licence
- Apache-2.0
- Status
- In the repository, unreleased
- Dependent releases
- None
- Path
- science/adapters
Model adapters
opendeco-reference-modelsopendeco-reference-models holds two reference model implementations that run entirely on declared parameter set files.
- Language
- Python
- Latest release
- None
- Licence
- Apache-2.0
- Status
- In the repository, unreleased
- Dependent releases
- None
- Path
- science/reference-models
Model adapters
opendeco-adapter-verificationopendeco-adapter-verification reports the verification level an adapter's evidence actually supports.
- Language
- Python
- Latest release
- None
- Licence
- Apache-2.0
- Status
- In the repository, unreleased
- Dependent releases
- None
- Path
- science/adapter-verification
Release machinery
opendeco-bundlesopendeco-bundles turns a completed run into the content-addressed bundle a reader verifies and reads.
- Language
- Python
- Latest release
- None
- Licence
- Apache-2.0
- Status
- In the repository, unreleased
- Dependent releases
- None
- Path
- science/bundles
Release machinery
opendeco-releaseopendeco-release decides whether a frozen run may be published, under what identifier, and what the public record says afterwards.
- Language
- Python
- Latest release
- None
- Licence
- Apache-2.0
- Status
- In the repository, unreleased
- Dependent releases
- None
- Path
- tools/release
Contracts
@opendeco/api-contracts@opendeco/api-contracts is the typed contract the public site and the console read, and the TypeScript half of the identity rules.
- Language
- TypeScript
- Latest release
- None
- Licence
- Apache-2.0
- Status
- In the repository, unreleased
- Dependent releases
- None
- Path
- packages/api-contracts
Dive-log parsers and interoperability
OpenDeco parsers preserve source provenance while converting supported dive logs into a canonical profile representation. Import code must treat vendor files as untrusted input and must not silently invent missing profile resolution or events.
No dive-log parser is published, and none is written. The list of supported formats is empty. Naming a format before a parser has been tested against real files from it would be a claim a reader cannot check.
The boundary a parser plugs into does exist. opendeco-ingestion accepts a source table in whatever vocabulary and units it was written in. It converts that table into a staging model speaking only canonical units, then runs every quality gate of specification 113 over the result. Each gate is individually runnable, and each one is seen failing in the suite. A gate that could only be seen passing would not be evidence that it can fail.
Decompression model implementations
Model adapters expose exact version and configuration identity to the benchmark. An adapter is not accepted as scientifically equivalent to a named model merely because its output looks plausible on a few example dives.
Three adapters are implemented, and each declares verification level V1. Basic known profiles and invariants pass. None of them reaches V2, which would require output matching an authoritative implementation or a verified device over a defined test suite. No such comparison has been run, so no such level is claimed.
| Adapter | Package | Verification | Licence |
|---|---|---|---|
| OpenDeco linear-tolerance dissolved gas compartment model | opendeco-reference-models | V1 Sanity checked | Apache-2.0 |
| OpenDeco hazard-integral exposure risk model | opendeco-reference-models | V1 Sanity checked | Apache-2.0 |
| OpenDeco reference exponential compartment fixture | opendeco-adapters | V1 Sanity checked | Apache-2.0 |
Verification level is part of the record and never a badge derived from how finished the code looks. The assessment command in the pipeline fails the build when an adapter claims a level its recorded evidence does not support.
Releases, licences and reproducibility
Every public component links its source, release history, licence, tests and citation metadata. Software used in a frozen research release is pinned by version or commit so later code changes do not silently alter the published result.
What a release bundle contains
No bundle is downloadable, because no run has been released.
A download link here would name a file that does not exist. The layout below is the contract a bundle is built to, and the builder refuses to write a bundle that is missing any entry in it.
Specification 133 names 12 entries and the builder writes 13. This list is not written out on this page. It is the list the bundle builder and the shared TypeScript contract are both pinned to by a fixture, so the page cannot drift from what a bundle actually holds.
- checksums.sha256
- One line per file, in the two-space format sha256sum reads, covering every file in the bundle except itself. Paths are bundle relative and sorted by their UTF-8 bytes.
- configurations.json
- The exact parameter set each model ran with, identified by configuration identifier and parameter digest.
- content_addresses.json
- The digest index of specification 134 in one document, so a release gate or a reader takes every artifact digest from one place.
- datasets.json
- Every dataset version the run read, with its identifier, its version, its recorded checksums and its licence. Where a licence withholds the records, this document carries the reconstruction steps for a reader who holds the source data.
- environment.json
- The compute environment the run executed in, including the image digest and the dependency lock digest a reader checks their own environment against.
- logs/
- The execution logs of the run, kept because a number without its execution record cannot be inspected.
- manifest.json
- The run manifest. It names the code commit, the worker image digest, the dependency lock digest, the dataset versions, the model configurations, the evaluation mode and the seed policy the run executed under.
- metrics.json
- The metric definitions the run computed, bound to the statistical protocol version they were computed under.
- models.json
- Every model implementation the run called, with its adapter identity, its source identity, its declared capabilities and its verification level.
- predictions/
- The per-exposure model output tables. A run that produced none of these did not complete, and the builder refuses to write its bundle.
- README.md
- The reader's entry point: what the run was, what the bundle contains and how to check it without OpenDeco software.
- summary/
- The aggregated metric tables a reader compares their own reproduction against, within the tolerance the bundle states.
- validation/
- The validation output that had to pass before the run could be frozen.
Four of those directories must each carry at least one file. A run that produced no prediction, no summary, no validation output or no log did not complete, and the builder refuses to write its bundle.
Checking a bundle with sha256sum alone
The integrity check belongs to the reader, so it cannot depend on software the publisher wrote. Each line of the manifest is a 64 character lowercase hexadecimal SHA-256 digest, two spaces, then the bundle relative path.
Two commands, no OpenDeco software
sha256sum -c checksums.sha256- Run at the bundle root. Every line must report OK. A changed byte, a removed file and an added file each fail, and the failing path is named.
sha256sum checksums.sha256- The digest of that one file is the digest of the bundle as a whole, and it is the value a release records for this run. A bundle therefore never contains its own digest.
The check needs coreutils and nothing else. OpenDeco writes the manifest in the plain sha256sum format for that reason, and a test in the bundle builder runs the real program against a clean bundle, a one byte change and a removed file.
Reproducing a release
opendeco reproduce <release-id>
Specification 137 fixes this verb and says it does not need to exist on day one. It does not exist. What exists is the plan it would read: the release builder writes the code commit, the image digest, the dependency lock digest and the dataset versions for each run, acquisition steps for every dataset whose records a licence withholds, and seven verification steps that begin with the checksum check above.
The publication gate refuses a release whose reproduction plan cannot be written. A missing acquisition step for a withheld dataset blocks publication, in place of surfacing to a reader afterwards.
Citing OpenDeco
Cite the commit, because no release exists yet.
The repository ships a Citation File Format 1.2.0 document at the path above. Its message asks a reader who cites OpenDeco before the first release to cite the exact commit they used, because the code on a branch keeps moving and a citation has to keep resolving to what it said.
CITATION.cff, Citation File Format 1.2.0
- PLACEHOLDER-DOI-NOT-YET-MINTED
- Field doi. A repository issues the DOI at deposit. Until a versioned archive has been deposited, the field carries this token and no invented value.
- PLACEHOLDER-ORCID-NOT-YET-REGISTERED
- Field orcid. The token is replaced by an orcid field on the author entry once an ORCID has been registered and verified.
A placeholder is a recorded gap. The release builder scans the citation document for every value that starts with the prefix PLACEHOLDER, and lists each one in the readiness report, so an unreplaced token blocks a deposit instead of travelling into one.
A released benchmark carries its own citation metadata in the release manifest. These four fields are the citation half of the eighteen that manifest declares.
- Citation text
- How an external author is asked to cite this release.
- Related publications
- Papers and preprints that report on this release.
- Supersedes
- The release or releases this one replaces.
- Superseded by
- The later release that replaced this one, once one exists.
Release identifiers
odr-XXXXXXXXXXXXC
The prefix names the object class. 12 payload symbols carry sixty bits from a cryptographic source, and the final symbol is the check symbol, the payload value modulo 37. A mistyped identifier fails that check before any lookup happens, which is why a malformed address and an unknown one answer differently.
- Opaque
- The allocator takes an entropy source and nothing else. It is never given the title, the version, the date or the operator, so the identifier cannot encode one. An identifier that encoded its content would stop being stable the first time the content was corrected.
- Never reused
- The ledger holds every identifier it has ever issued in any state. Revoking a release keeps its identifier out of the pool, and a failed gate burns the identifier allocated for it, so an old citation can never land on different work.
- Stable
- One string becomes the release identifier in the manifest, the last segment of the public address and the argument to the reproduction command.
Version relationships and corrections
A published artifact is immutable and a relationship discovered later is not. The release keeps its bytes, and the ledger records what happened to it afterwards.
- A correction goes forwards
- A correction is a new release with a new identifier that names the older release in its own supersedes field. The older release keeps its bytes, its digest, its page and its identifier, and a reader following an old citation lands on what was cited.
- The reverse direction lives in the ledger
- The release that will supersede this one does not exist when this one is written, so the superseded-by field cannot be written into an immutable manifest. The ledger is append-only and records that direction against the older release.
- A revoked release stays readable
- The record and its reason stay published under the same identifier. Deleting a release would break every citation of it and explain nothing.
Archival readiness
Specification 138 asks for release metadata a repository could accept, and warns against depending on DOI infrastructure to operate. The release builder writes a DataCite compatible record from the release manifest and the citation document, and a readiness report beside it that states, field by field, what is ready and what is outstanding.
| Deposit field | State | What that means |
|---|---|---|
| Identifier | Assigned at deposit | The DOI field carries the named placeholder. The archival repository issues the value, and OpenDeco never writes one itself. |
| Creators | From the citation document | Every creator comes from the citation file. Nothing in the deposit record is invented. |
| Version relationships | Mapping required | Supersedes and superseded-by become IsNewVersionOf and IsPreviousVersionOf, each naming an OpenDeco identifier and its public address. Mapping that pair onto the identifier type a repository accepts is the one outstanding step, and the readiness report says so. |
| Schema version | Confirmed by the depositor | The record declares itself DataCite compatible and asks the depositor to confirm the schema version the chosen repository accepts. Guessing a version number would be the same failure as guessing a DOI. |
| Rights | Ready | The SPDX identifier the release software is licensed under, carried from the licence metadata in the manifest. |
FAIR compatibility
Specification 115 asks that release metadata map cleanly onto the FAIR principles, DataCite metadata, research package formats and common citation formats, and that the first public release be exportable as a complete machine-readable bundle. The mapping below states what carries each principle and what state it is in today.
| Principle | What carries it | State today |
|---|---|---|
| F Findable | Each release carries one opaque public identifier, allocated once and never reused. The identifier is the manifest field, the last segment of the public address and the argument to the reproduction command. | The allocator, the check symbol and the address resolver are implemented and tested. No identifier has been allocated, because no release has been published. |
| A Accessible | A release bundle is a directory of plain files with a checksum manifest in the format coreutils reads. Metadata stays readable even where a licence withholds the records themselves. | Nothing is downloadable. Where a licence withholds records, the bundle carries identifiers, checksums and reconstruction steps, and the builder refuses to write records a licence withholds. |
| I Interoperable | Every document in a bundle is JSON written under one canonical rule, and every quantity is in the canonical units of ADR-0007. The deposit record is written to a DataCite compatible profile. | The canonical serialiser has two implementations, one in Python and one in TypeScript, checked against a shared vector file so they produce identical bytes. |
| R Reusable | Provenance travels with the artifact: dataset versions, model identities, verification levels, licence metadata per dataset, the code commit, the image digest and the caveats a reader has to hold in mind. | The 18 release manifest fields are declared in the shared contract, and the builder refuses to write a manifest missing one of them. |
Machine-readable metadata is written by the release builder from the run record, so a reader parses the same values a person reads on a page.
| Artifact | Format | Where it is written | State |
|---|---|---|---|
| Citation metadata | Citation File Format 1.2.0 | CITATION.cff at the repository root, and one in every release bundle | Validated against the required and permitted fields of the format before it is written |
| Release manifest | Canonical JSON | release.json at the release root | 18 declared fields, none of them optional at write time |
| Digest index | Canonical JSON | content_addresses.json in every run bundle | One document holding the SHA-256 of every addressed artifact |
| Checksum manifest | sha256sum two-space format | checksums.sha256 at the release root and in every run bundle | Verifiable with coreutils and no OpenDeco software |
| Deposit record | DataCite compatible field set | Written by the release builder beside the readiness report | Ready except for the identifier a repository issues and the relation type mapping |
| Licence metadata | Canonical JSON with SPDX identifiers | licenses.json at the release root | Per dataset version, recording redistribution and record-level publication separately |
Each artifact above is produced by the release builder from the run record. None of them is served over the network today, because publishing one would mean claiming a release exists.