Releases: zahidaramai/sdip
Release list
SDIP v1.1.4
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
LICENSEorNOTICE.pyproject.toml
declareslicense-files = ["LICENSE", "NOTICE"], but the Dockerfile never copied those
files into the build context — souvbuilt adist-infowith nolicenses/
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
LICENSEandNOTICE, 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.4SDIP v1.1.3
Container users: superseded by v1.1.4. The image published here does not carry SDIP's own
LICENSEorNOTICE. 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
-
NOTICErecorded seisio as "LGPL", which spans 2.1 and 3.0 — licences that are not
interchangeable. NowLGPL-3.0-or-later, taken from seisio's own packaging metadata.
(CITATION.cffalready 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.mdcontradicted 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.mdleftLOCAL-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.3SDIP v1.1.2
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.pythe 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.2SDIP v1.1.1
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 Registry —
ghcr.io/zahidaramai/sdip, multi-arch
(linux/amd64,linux/arm64), non-root. The image carries the pinned decoder, and
sdip doctorverifies 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
verifyreturning
G1PASS, all five planesPASS, G4PASS. -
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.1SDIP v1.1.0
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_CONTROLSand
WALL_CEILING_PER_CONTROL_Scarrying their provenance.ceiling(n) = 1350 + 44.92 × (n − 16)It is deliberately NOT a default.
sdip certifystill 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.cffshipped v1.0.0 declaringversion: 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. Now1.1.0, withdate-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/sdipas
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_RUNremains. - 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
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 verifyrefuses 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 certifyNON-EQUIVALENTwith a named
cause rather than silently. - D36 — for an
ibm32source 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 saysci-deferredrather 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