Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ not make them agree. What does is the conformance suite and

## `smart-data-engine-sdk` 0.1.1

Published on 28 September 2026, on the first run of `python-v0.1.1`, with attestations.

A patch release of the Python library alone. `@smart-data-engines/sde` has no 0.1.1. Of what it
ships, only the version field has changed since 0.1.0, to a development version. One tag per
language keeps an otherwise identical package from going out under a new number (§5.1 of
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ artifacts under mixed traffic and checks scheduled latency, native recovery and
ownership for concurrent applications.
The [Weather starter](docs/weather-starter.md) provides a local setup, restricted runtime clients in
Python/TypeScript, measured telemetry, operator handoffs and an ownership-checked reset. It ships in the
first release, `smart-data-engine-sdk` 0.1.0 and `@smart-data-engines/sde` 0.1.0, and the runbook
current releases, `smart-data-engine-sdk` 0.1.1 and `@smart-data-engines/sde` 0.1.0, and the runbook
distinguishes this demo from production qualification.


Expand Down
8 changes: 5 additions & 3 deletions docs/implementations.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,11 @@ The tier in the table above is checked against the library's own `TIER` constant
list that says one thing while the code says another is the failure requirement 17.6 exists to
prevent, and prose does not fail.

**`pip install smart-data-engine-sdk` installs `0.1.0`**, the first release, published by the release
workflow on 27 September 2026 with attestations. The name was claimed on PyPI on 12 September with a
development release, and the release candidate `0.1.0rc1` came through the same workflow earlier on
**`pip install smart-data-engine-sdk` installs `0.1.1`**, a patch release of 28 September 2026 that
fixes recovery of an interrupted PostgreSQL index build ([`CHANGELOG.md`](../CHANGELOG.md)).
`0.1.0`, the first release, was published by the release workflow on 27 September with
attestations, and so was `0.1.1`. The name was claimed on PyPI on 12 September with a development
release, and the release candidate `0.1.0rc1` came through the same workflow earlier on
27 September. **`npm install @smart-data-engines/sde` installs `0.1.0`**, published by the same
workflow the same day, with provenance, after the candidate `0.1.0-rc.1`. The one version before
those, `0.1.0-dev.0`, was published by hand. That publish was forced: npm configures trusted
Expand Down
20 changes: 16 additions & 4 deletions docs/publishing.md
Original file line number Diff line number Diff line change
Expand Up @@ -569,7 +569,9 @@ and `0.1.1-dev.0` followed `0.1.0`. Otherwise every later commit builds an artef
released number, and pip treats a local install of one as the release: `pip install
smart-data-engine-sdk==0.1.0` answers "Requirement already satisfied" and fetches nothing. Measured
on 27 September with a wheel of `f4d57c4` plus one comment: the comment stayed installed. The next
release bumps from there to whatever number it takes.
release bumps from there to whatever number it takes. A release of one language moves only that
language on: after `python-v0.1.1`, Python went to `0.1.2.dev0` and TypeScript, not released,
stayed on `0.1.1-dev.0`.

**The tags are per-language, and the reason is not tidiness.** One shared tag would publish an
artefact byte-identical to its predecessor, with an empty changelog, every time the *other* language
Expand Down Expand Up @@ -763,6 +765,16 @@ one needs the one before it.
- the simple index lagged the upload. The wheel was uploaded at 20:49:10Z, and the JSON API
listed its files at 20:51:58Z. An unpinned `pip install --no-cache-dir` in a fresh
environment, started at 20:52:49Z, still resolved `0.1.0rc1`. At 20:53:29Z the simple index
listed `0.1.0`, and the same install resolved it. Verification right after a publish pins the
version. An unpinned install is a separate check, made once the simple index lists the
version.
listed `0.1.0`, and the same install resolved it.
8. **The first patch release**, `python-v0.1.1` on `99c1ed7` (#101), was Python alone. Nothing the
npm package ships had changed, so npm kept `0.1.0` (§5.1). It published on its first run. One
more observation about the simple index:
- A *pinned* install waits for the index as well. The wheel was uploaded at 05:15:13Z. A
`pip install 'smart-data-engine-sdk==0.1.1' --no-cache-dir` started at 05:15:54Z answered "No
matching distribution found" and listed only `0.1.0rc1` and `0.1.0`. The simple index listed
`0.1.1` at 05:16:23Z.
- pip resolves a pinned version from that same index, so pinning is not the fix. Right after a
publish, the files are verified against the gate's artefacts through the JSON API, which
answered first both times. Installs, pinned or not, wait until the simple index lists the
version: `Accept: application/vnd.pypi.simple.v1+json`, which is served with
`cache-control: max-age=600`.
12 changes: 6 additions & 6 deletions docs/weather-starter.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This is a local, synthetic demonstration for PostgreSQL and ClickHouse. Python p
setup and runs the existing SDK operator. Python and TypeScript applications use independent
runtime connections. They read `state/active-map.json`; a running controller is not required.

The starter ships in the first release, `smart-data-engine-sdk` 0.1.0 on PyPI and
The starter ships in the current releases, `smart-data-engine-sdk` 0.1.1 on PyPI and
`@smart-data-engines/sde` 0.1.0 on npm. Do not publish a release merely to try the demo.
[Publishing](publishing.md) describes the separate release procedure.

Expand All @@ -15,15 +15,15 @@ from the registries, pinned:

```sh
python3 -m venv .venv
.venv/bin/python -m pip install 'smart-data-engine-sdk[signed,postgres,clickhouse]==0.1.0'
.venv/bin/python -m pip install 'smart-data-engine-sdk[signed,postgres,clickhouse]==0.1.1'
npm init -y
npm install @smart-data-engines/sde@0.1.0 pg
```

Or from reviewed build artifacts, which an operator supplies for a commit after the release:

```sh
.venv/bin/python -m pip install './smart_data_engine_sdk-0.1.1.dev0-py3-none-any.whl[signed,postgres,clickhouse]'
.venv/bin/python -m pip install './smart_data_engine_sdk-0.1.2.dev0-py3-none-any.whl[signed,postgres,clickhouse]'
npm install ./smart-data-engines-sde-0.1.1-dev.0.tgz pg
```

Expand All @@ -32,9 +32,9 @@ naming what to install (`[postgres]` or `[clickhouse]` in Python, `pg` in Node).
why the bootstrap's map does not load - for example that verifying its signature needs the `signed`
extra - instead of reporting an incomplete operation.

A development version names a build, not a feature set: every commit after the release builds
`0.1.1.dev0`, whatever it contains. Retain the artifacts' SHA-256 checksums and the supplying source
commit.
A development version names a build, not a feature set: every commit after these releases builds
`0.1.2.dev0` in Python and `0.1.1-dev.0` in TypeScript, whatever it contains. Retain the artifacts'
SHA-256 checksums and the supplying source commit.
The project owner can build a wheel with `python -m build --wheel --outdir ARTIFACT_DIRECTORY python`
and a tarball with `npm pack --pack-destination ARTIFACT_DIRECTORY` in `typescript/` after CI passes.

Expand Down
4 changes: 2 additions & 2 deletions examples/weather/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ The starter is shipped in the Python wheel (`sde-weather`) and npm tarball (`sde
It writes and reads synthetic weather observations through the logical SDK API. The controller
supplies signed metadata; it never runs this data application or receives its credentials.

The starter is in the first release: `smart-data-engine-sdk` 0.1.0 on PyPI and
`@smart-data-engines/sde` 0.1.0 on npm. Pin that version, or use reviewed artifacts built from a later
The starter is in the current releases: `smart-data-engine-sdk` 0.1.1 on PyPI and
`@smart-data-engines/sde` 0.1.0 on npm. Pin those versions, or use reviewed artifacts built from a later
commit.
The [runbook](../../docs/weather-starter.md) covers setup, both clients, telemetry, local operator
handoffs, recovery and reset. [model.json](model.json) is the model to declare in the controller;
Expand Down
2 changes: 1 addition & 1 deletion python/src/sde/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ class Meta:
from .write_fence import EPOCH_COLUMN as WRITE_EPOCH_COLUMN
from .write_fence import FenceState, WriteFence

__version__ = "0.1.1"
__version__ = "0.1.2.dev0"

__all__ = [
"ALSO_WRITE_SINCE",
Expand Down
Loading