Skip to content

Releases: zahidaramai/sdip

SDIP v1.1.4

Choose a tag to compare

@zahidaramai zahidaramai released this 27 Aug 05:47

Container only. Supersedes 1.1.3 for image users; the wheel and sdist are unchanged in
substance.

Fixed

  • The container image did not carry SDIP's own LICENSE or NOTICE. pyproject.toml
    declares license-files = ["LICENSE", "NOTICE"], but the Dockerfile never copied those
    files into the build context — so uv built a dist-info with no licenses/
    directory at all
    , and said nothing about it.

    The image is a redistribution of an Apache-2.0 work that has a NOTICE, so both files
    must travel with it. They now do.

    Why it went unnoticed through a release whose entire purpose was attribution: every
    dependency still shipped its own licence — 115 of them. Any spot check finds licence
    files throughout the image and concludes it is fine. The one package missing its licence
    was SDIP itself, and it was missing because it is the only package built from the
    local context rather than installed from an index.

Added

  • A publish-time gate asserting the pushed image carries LICENSE and NOTICE, and
    that the NOTICE inside is the version carrying the current attribution — not merely that
    a file with the right name exists.

Install

docker pull ghcr.io/zahidaramai/sdip:1.1.4
pip install git+https://github.com/zahidaramai/sdip@v1.1.4

SDIP v1.1.3

Choose a tag to compare

@zahidaramai zahidaramai released this 27 Aug 05:27

Container users: superseded by v1.1.4. The image published here does not carry SDIP's own LICENSE or NOTICE. The wheel and sdist attached here do, and are unaffected.

Licence and attribution only. No engine change; the guarantee and the supported surface
are identical to 1.1.2.

Added

  • NOTICE §6 — measurement-source attribution. SDIP's at-scale certificate was
    measured against the Sleipner CO₂ Reference Dataset, owned by The Sleipner Group
    — Equinor Energy AS (operator), ExxonMobil Exploration and Production Norway AS, LOTOS
    Exploration and Production Norge AS, KUFPEC Norway AS — distributed by CO2DataShare
    under the Sleipner CO2 Reference Dataset License.

    No dataset content is redistributed by this project, in any form, at any size. It is
    not in the repository, its history, the wheel, the sdist or the image, and no test
    fetches it. What is published is measurements about it — and a digest is not data.

    The section also records the licence's no-endorsement clause: those names must not
    be used to promote SDIP, and are used here only as the factual provenance of a
    measurement.

  • NOTICE §7 — trademarks. MDIO and segy are product names of TGS; SDIP is
    independent and not affiliated with, sponsored by, or endorsed by TGS. Apache-2.0 §6
    grants no trademark rights and none are claimed — nominative use only, badges included.

Fixed

  • NOTICE recorded seisio as "LGPL", which spans 2.1 and 3.0 — licences that are not
    interchangeable. Now LGPL-3.0-or-later, taken from seisio's own packaging metadata.
    (CITATION.cff already carried the precise identifier; NOTICE was the imprecise half.)

  • The round-trip driver carried no attribution in its own docstring. NOTICE §3 was
    and remains the authoritative record, but the obligation now also sits where the code is
    read.

  • tests/fixtures/PROVENANCE.md contradicted itself once attribution was added: it
    stated the register of locally held datasets is kept outside the repository. Resolved by
    separating two facts that had been treated as one — the path stays private; the
    identity, owner and licence become public.
    A dataset stops being purely local the
    moment measurements from it are published.

  • EQUIVALENCE_LEDGER.md left LOCAL-ONLY (D-0025) ambiguous. It withholds a
    filesystem path naming a machine and a user; it never withheld the dataset. The ledger
    now says which.

Note

test_notice_carries_every_mandatory_attribution gained eight strings, so each new
obligation is enforced by the same mechanism as the existing ones rather than by memory.

Neither TGS repository ships a NOTICE file, so Apache-2.0 §4(d) attaches no NOTICE
obligation to this project. Everything in §§1–3 is voluntary and stays.

Install

docker pull ghcr.io/zahidaramai/sdip:1.1.3
pip install git+https://github.com/zahidaramai/sdip@v1.1.3

SDIP v1.1.2

Choose a tag to compare

@zahidaramai zahidaramai released this 26 Aug 13:06

Supersedes 1.1.1. Use this instead. No engine change; the guarantee and the supported
surface are identical.

Fixed

  • The 1.1.1 wheel shipped two source comments citing a document the public cannot open.
    Found by downloading the published wheel and unzipping it — not by reading the source,
    which showed nothing wrong under the rules that existed.

    The publication firewall has four layers and all four were working correctly. None
    could have caught it.
    Every layer asks "is this path published?", and for
    src/sdip/cli/main.py the answer is yes, that is the point of it. The firewall
    blocks files; this was inside a file that is supposed to ship.

    Independent of that, it is a documentation defect: a citation to a document the reader
    cannot open resolves to nothing for the entire audience that receives the file. Nine
    such citations now cite the operating contract or the public specification by section.

Added

  • A fifth firewall layer, scanning every published-suffix file for references to
    documents that do not ship, with its negative control in the same commit. Exemptions are
    by path and enumerated, never by pattern — the block-list files must be able to name
    what they block. The guard immediately caught two files that reasoning-by-hand had
    missed, which is the argument for the guard over the grep.

Install

docker pull ghcr.io/zahidaramai/sdip:1.1.2
pip install git+https://github.com/zahidaramai/sdip@v1.1.2

SDIP v1.1.1

Choose a tag to compare

@zahidaramai zahidaramai released this 26 Aug 12:21

Superseded by v1.1.2. The wheel published here contains two source comments citing a document that is not part of the distribution. No functional difference; use v1.1.2.

Distribution only. No engine change, and the guarantee is unchanged.

Added

  • Container image on GitHub Container Registryghcr.io/zahidaramai/sdip, multi-arch
    (linux/amd64, linux/arm64), non-root. The image carries the pinned decoder, and
    sdip doctor verifies those pins inside it: all 2 binding pins match; 145 installed
    files verified against RECORD.
    That is the property that matters — a certificate issued
    under one decoder version says nothing about another.

    Verified end to end in the container before shipping: ingest, then verify returning
    G1 PASS, all five planes PASS, G4 PASS.

  • Wheel and sdist attached to every release, so installing needs no registry. The
    workflow refuses to upload either if it carries an unpublishable path — the
    publication firewall applies to distribution channels, not only to commits.

Not added, deliberately

npm and NuGet. GitHub Packages has no Python registry, and a package in either would
be a shim that still requires a Python 3.12 interpreter and the whole native stack — it
would install cleanly and fail at first use, in an ecosystem that cannot run the
library. That is the exact shape of failure this project exists to prevent.

Fixed

  • The publish workflow shipped an artifact check that was never the script that was
    tested
    — the verified version had a suffix guard, the shipped one did not, and it
    died opening a non-archive as a tarball.
  • Building a container from a tag cut before the Dockerfile existed failed with a
    message that read like a path bug. The workflow now checks first and says what actually
    happened.

Install

docker pull ghcr.io/zahidaramai/sdip:1.1.1
pip install git+https://github.com/zahidaramai/sdip@v1.1.1

SDIP v1.1.0

Choose a tag to compare

@zahidaramai zahidaramai released this 26 Aug 10:29

Additive only. No behaviour of v1.0.0 changed, and the guarantee is unchanged: a
certificate still means what it meant.

Added

  • sdip.equivalence.scale.parametric_wall_ceiling(n_controls) — the G5 wall-clock
    ceiling as a function of the work rather than a constant, with
    WALL_CEILING_BASE_S, WALL_CEILING_REFERENCE_CONTROLS and
    WALL_CEILING_PER_CONTROL_S carrying their provenance.

    ceiling(n) = 1350 + 44.92 × (n − 16)
    

    It is deliberately NOT a default. sdip certify still requires
    --wall-ceiling-s, because a ceiling this tool applies on its own behalf is not one
    anybody declared (SP9). A test asserts the CLI does not reference it, so adopting
    it as a default becomes a deliberate act.

    Measured over three amendments, two of them discarded (prereg/P10): the first had
    no floor check and would have shipped 1,150 s; the second's floor caught 1,100 s. Both
    sit below a run that actually happened (1,168.55 s) and would have failed the next
    legitimate chain. Closes D43.

  • A dedicated G6 determinism test (tests/integration/test_determinism_g6.py) — two
    positive legs and four controls, including a control for the controls: identical
    stores must be reported identical, without which the other three would pass against a
    comparator that called everything different. Closes D44.

Fixed

  • CITATION.cff shipped v1.0.0 declaring version: 0.1.0.dev0. The field existed
    with a stale value, so the release bump skipped it — a citation for the released
    software named a version that was never released. Now 1.1.0, with date-released
    corrected too.
  • sdip doctor's environment test assumed hooks were installed. It passed on every
    developer machine and failed on a fresh checkout. The check was right; the test was
    wrong.
  • A refusal/ingest memory comparison had no declared margin and failed on a 0.7 %
    difference — allocator noise. Margin declared at 1.25×, far from the value that
    failed.
  • A CI guard that failed on the correct value. It grepped for zahidaramai/sdip as
    an unresolved placeholder — which it was when written, before the repository existed
    at that name.
  • Two CI gates that could never arm. G4's subject matched no file while G4 was
    covered by 21 tests under other names; G6's matched no file because no such test
    existed, which is what D44 wrote.

Infrastructure

  • CI executes. Workflows moved into .github/workflows/, and the first fully green
    run in this repository's history is 15/15. Every gate job now arms — no
    NOT_RUN remains.
  • The pin-bump rule was corrected at 1.0.0 and holds here: an upstream pin bump is a
    major release, because it invalidates every certificate issued under the previous
    pin.

Unchanged, and deliberately

The supported/refused table is identical to v1.0.0. No format, geometry, endianness or
backend was added, because none was demanded. A minor release that widens the supported
surface without a real file asking for it is how a narrow guarantee quietly becomes a
broad claim nobody measured.

Install

pip install git+https://github.com/zahidaramai/sdip@v1.1.0
sdip doctor

Not published to PyPI. PyPI is a support commitment, not a checkbox.


CHANGELOG.md · DECISIONS.md ·
OPEN_DEBTS.md · EQUIVALENCE_LEDGER.md

SDIP v1.0.0

Choose a tag to compare

@zahidaramai zahidaramai released this 26 Aug 10:29

The first release, and the first Equivalence Certificate this project has issued.

release_ready: true, blocking: [], at commit 2f33f3e on a clean tree, against a real
survey: 494,565,408 bytes, 116,532 traces, SEG-Y rev 1, big-endian, poststack 3-D,
ibm32.
All seven gates PASS. Recorded as EQUIVALENCE_LEDGER.md row 1.

G5 1,115.3 s of a declared 1,500 s · 3.64 GiB of a declared 8.0 GiB
G7 15 corruptions, each failing exactly the gates it declares and no others
Round-trip closure PASS, and its own control caught by the file-headers leg and no other
Pre-registration prereg/P10-scale-recalibration.md@2f33f3e, committed before the run

What 1.0 means here, and what it does not

It means the guarantee is stable, not that the coverage is complete. The version
number is about the promise: a certificate from this engine means what it says, and the
engine has been shown capable of failing on 15 distinct corruptions.

The supported surface is deliberately narrow and every refusal carries a stable reason
code
— see the supported/refused table in README.md. SEG-Y rev 2/2.1,
little-endian, five of the six lossy sample formats, prestack beyond CDP-offset,
files above the 1.0 GiB verification envelope and every cloud backend are refused, not
attempted
. That list is the release, as much as the supported one is.

One certificate on one file is one measurement. It is the measurement this project
was built to be able to make. It is not a claim about seismic data in general.

Known, recorded, and not fixed

OPEN_DEBTS.md carries every one. The ones a reader should know before depending on this:

  • D38 — the verification path fully materialises; peak RSS is linear in file size
    (R² = 0.99997). sdip verify refuses above 1.0 GiB rather than being OOM-killed.
  • D43 — the wall-clock ceiling is a bare constant and went stale once already.
  • D41 — the lossy-decode generalisation is half done: five formats are detected and
    declared but get no raw parallel view, so they certify NON-EQUIVALENT with a named
    cause
    rather than silently.
  • D36 — for an ibm32 source the store is larger than the source, because the
    undecoded parallel view is the only recoverable copy of the bits.
  • D14 — CI workflows are parked in ci/ and no workflow runs on GitHub. The badge says ci-deferred rather than claiming a green build, but nothing automated enforces the gates: the evidence in this release is the certificate, not a pipeline.

Pins

multidimio==1.2.1 · segy==0.6.0. An upstream pin bump is a major release: it
invalidates every certificate issued under the previous pin.

Install

pip install git+https://github.com/zahidaramai/sdip@v1.0.0
sdip doctor        # environment sanity; runs first in every runbook

Not published to PyPI. PyPI is a support commitment, not a checkbox.


Full changelog, records and open debts: CHANGELOG.md ·
DECISIONS.md · OPEN_DEBTS.md ·
EQUIVALENCE_LEDGER.md