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: 1 addition & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.12", "3.14"]
python-version: ["3.10", "3.12", "3.14"]
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v7
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

All notable changes to DataLab-Capsule are documented in this file. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). The capsule format itself is versioned by its profile (<https://datalab-platform.com/capsule/0.1>).

## [Unreleased]

### Changed

- Python 3.10 or later is now required. Python 3.9 users must keep an earlier compatible release; the Pyodide runtime is unchanged.

## [0.1.0] - 2026-10-19

First public release, shared by DataLab Desktop and DataLab-Web.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Status: experimental. Version 0.1.0 is the first public release, on PyPI as `dat
- Light attachments: up to 8 files of at most 16 MiB each, chosen by the author (protocol, notes, small tables...), stored under `attachments/` and declared in the manifest (`dlc:attachment`) with their media type, size and SHA-256. They are part of the manifest fingerprint. The reader refuses undeclared, missing or altered attachments. They are returned as bytes, written to disk only on explicit request, and never opened or executed.
- Semantic diff (`diff_manifests`): changes between two capsules are sorted into scientific (activities, parameters, states, fingerprints, ROI), presentation (name, description, licence, date), storage (workspace file SHA-256 and size, included or referenced, locators: different bytes do not show a scientific change), environment (environments, packages, the environment of each activity) and attachments (added, removed or changed; their content is not interpreted, since a protocol or a calibration certificate may matter scientifically). `scientific_conclusion` says what can be concluded: `differences`, `none` (no scientific change, the same workspace file and the same attachment contents) or `none_detected` (nothing differs in the recorded activities and states, but the workspace files or the attachment contents differ, so equality is not established).
- Verification without computation (`verify_capsule`): the archive and manifest, the workspace integrity, the match between the manifest and the workspace ledger, the fingerprints and ROI of every stored state (with h5py), and supplied verification reports and reviews. Recomputing an activity is the replay of an edition, never this package's job.
- Pure Python for CPython 3.9+ and Pyodide (Python 3.12). The core only needs the standard library and `jsonschema`; HDF5 helpers use NumPy and h5py.
- Pure Python for CPython 3.10+ and Pyodide (Python 3.12). The core only needs the standard library and `jsonschema`; HDF5 helpers use NumPy and h5py.
- The package never imports DataLab, Sigima, SigimaX or Qt, and never executes code named in a file.

## Installation
Expand Down
2 changes: 1 addition & 1 deletion doc/api.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# API

DataLab-Capsule is a pure Python library (CPython 3.9+ and Pyodide). The core needs the standard library and `jsonschema`; functions marked **h5py** also need NumPy and h5py. Every error derives from `datalab_capsule.integrity.ProvenanceError`. Nothing in the library accesses the network or executes code named in a file.
DataLab-Capsule is a pure Python library (CPython 3.10+ and Pyodide). The core needs the standard library and `jsonschema`; functions marked **h5py** also need NumPy and h5py. Every error derives from `datalab_capsule.integrity.ProvenanceError`. Nothing in the library accesses the network or executes code named in a file.

## Read, verify and compare capsules

Expand Down
2 changes: 1 addition & 1 deletion doc/development.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ The other repositories use the checkout directly:
## Pins and CI

- DataLab-Web pins DataLab-Capsule, Sigima and guidata in `datalab-capsule-dependency.json`, `sigima-dependency.json` and `guidata-dependency.json`. `developmentRef` is a full commit hash used by development builds and CI (`scripts/*_dependency.py prepare-pyodide` builds the wheel from that commit); `publishedRequirement` is used by release builds only (`npm run build:release`, checked by `npm run release:guard`). A change to the library reaches the Web CI only after it is pushed and the pin is moved.
- DataLab-Capsule CI runs on push: CPython 3.9, 3.12 and 3.14 (with the `registry` extra), Pyodide 0.26.4 (Node), and the CLI in a clean environment without NumPy or h5py.
- DataLab-Capsule CI runs on push: CPython 3.10, 3.12 and 3.14 (with the `registry` extra), Pyodide 0.26.4 (Node), and the CLI in a clean environment without NumPy or h5py.
- DataLab-Web CI runs on demand on feature branches: `gh workflow run tests.yml -R DataLab-Platform/web --ref <branch>`. Its end-to-end job installs the registry from the pinned wheel and requires it (`DLW_REQUIRE_REGISTRY=1`), and requires provenance (`DLW_REQUIRE_PROVENANCE=1`): those tests fail rather than skip.
- DataLab CI: `gh workflow run test_pyqt5.yml` and `test_pyqt6.yml` with `-f job_to_run=build`.

Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ readme = "README.md"
license = "BSD-3-Clause"
license-files = ["LICENSE"]
authors = [{ name = "DataLab Platform Developers" }]
requires-python = ">=3.9, <4"
requires-python = ">=3.10, <4"
dependencies = ["jsonschema >= 4.17"]
classifiers = [
"Development Status :: 2 - Pre-Alpha",
Expand Down Expand Up @@ -51,7 +51,7 @@ addopts = "--import-mode=importlib"
exclude = [".git", ".vscode", "build", "dist", "venv*", ".venv*", "node_modules"]
line-length = 88
indent-width = 4
target-version = "py39"
target-version = "py310"

[tool.ruff.lint]
select = ["D202", "D403", "E", "F", "I", "NPY201", "RUF022", "W"]
Expand Down
Loading