Skip to content

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.

Empty

Public software releases are being prepared.

OpenDeco will link code here only when the repository, licence, tests and documentation are ready for external use.

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-schemas

    opendeco-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-acquisition

    opendeco-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-ingestion

    opendeco-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-adjudication

    opendeco-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-lineage

    opendeco-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-adapters

    opendeco-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-models

    opendeco-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-verification

    opendeco-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-bundles

    opendeco-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-release

    opendeco-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.

Adapters in this repository, with the verification level each declares
AdapterPackageVerificationLicence
OpenDeco linear-tolerance dissolved gas compartment modelopendeco-reference-modelsV1 Sanity checkedApache-2.0
OpenDeco hazard-integral exposure risk modelopendeco-reference-modelsV1 Sanity checkedApache-2.0
OpenDeco reference exponential compartment fixtureopendeco-adaptersV1 Sanity checkedApache-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 readiness, field by field
Deposit fieldStateWhat that means
IdentifierAssigned at depositThe DOI field carries the named placeholder. The archival repository issues the value, and OpenDeco never writes one itself.
CreatorsFrom the citation documentEvery creator comes from the citation file. Nothing in the deposit record is invented.
Version relationshipsMapping requiredSupersedes 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 versionConfirmed by the depositorThe 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.
RightsReadyThe 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.

The four FAIR principles against what OpenDeco has built
PrincipleWhat carries itState today
F FindableEach 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 AccessibleA 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 InteroperableEvery 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 ReusableProvenance 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.

Machine-readable metadata a release carries
ArtifactFormatWhere it is writtenState
Citation metadataCitation File Format 1.2.0CITATION.cff at the repository root, and one in every release bundleValidated against the required and permitted fields of the format before it is written
Release manifestCanonical JSONrelease.json at the release root18 declared fields, none of them optional at write time
Digest indexCanonical JSONcontent_addresses.json in every run bundleOne document holding the SHA-256 of every addressed artifact
Checksum manifestsha256sum two-space formatchecksums.sha256 at the release root and in every run bundleVerifiable with coreutils and no OpenDeco software
Deposit recordDataCite compatible field setWritten by the release builder beside the readiness reportReady except for the identifier a repository issues and the relation type mapping
Licence metadataCanonical JSON with SPDX identifierslicenses.json at the release rootPer 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.