From 081ad644aba85d6e6c744d40f93384aa99056616 Mon Sep 17 00:00:00 2001 From: Alexander Chernov Date: Sun, 27 Sep 2026 23:35:28 -0400 Subject: [PATCH 1/2] Resolve each docs link against the file it is in, and refuse a dead one The book's generator read every relative link from the repository root and stripped leading dots, so `runs/` in docs/RESULTS.md became a root runs/ that does not exist. Hand-authored pages link to chapters by their own names, which the generator did not recognize, and an absolute GitHub link rewritten to a chapter was rewritten a second time into a GitHub link to that chapter name. Eight links on the live site went to GitHub 404s. Links are now resolved against their source's directory, pages may link only to pages of the book, and a link out of the book to a path that is not in the repository stops the build. --- docs-site/build.py | 61 +++++++++++++++------------- docs-site/src/citation.md | 2 +- docs-site/src/conformance-package.md | 6 +-- docs-site/src/index.md | 6 +-- docs-site/src/portability.md | 2 +- docs-site/src/results.md | 2 +- 6 files changed, 41 insertions(+), 38 deletions(-) diff --git a/docs-site/build.py b/docs-site/build.py index 90cd378..06902de 100644 --- a/docs-site/build.py +++ b/docs-site/build.py @@ -12,6 +12,7 @@ from __future__ import annotations +import posixpath import re import shutil from pathlib import Path @@ -39,25 +40,10 @@ GH = "https://github.com/agentic-datasets/reference/blob/main/" GH_TREE = "https://github.com/agentic-datasets/reference/tree/main/" -# Links that resolve to a chapter of this book. -INTERNAL = { - "CONFORMANCE.md": "specification.md", - "docs/PORTABILITY.md": "portability.md", - "PORTABILITY.md": "portability.md", - "docs/RESULTS.md": "results.md", - "RESULTS.md": "results.md", - "docs/FINDINGS.md": "findings.md", - "FINDINGS.md": "findings.md", - "docs/CLAIMS.md": "claims.md", - "CLAIMS.md": "claims.md", - "CONTRIBUTING.md": "contributing.md", - "LICENSE.md": "licensing.md", - "../LICENSE.md": "licensing.md", - "PLAN.md": "plan.md", - "brand/README.md": "brand.md", - "../packages/authorized-recall/README.md": "authorized-recall.md", - "packages/authorized-recall/README.md": "authorized-recall.md", -} +# Links that resolve to a chapter of this book, by repository path. A relative +# link is resolved against the file it appears in before it is looked up here: +# `runs/` in docs/RESULTS.md is docs/runs/, not a runs/ at the root. +INTERNAL = {source: chapter for chapter, source in CHAPTERS.items()} LINK = re.compile(r"\]\((?!https?://|#)([^)]+)\)") @@ -70,19 +56,34 @@ ) -def rewrite(text: str) -> str: +def rewrite(text: str, base: str | None) -> str: + """Rewrite the links of a file in directory `base`, relative to the + repository root; `None` for a hand-authored page, which links to the + book's chapters by their own names.""" + pages = set(CHAPTERS) | {p.name for p in PAGES.glob("*.md")} + def sub(m: re.Match) -> str: target = m.group(1) anchor = "" if "#" in target: target, anchor = target.split("#", 1) anchor = "#" + anchor - target = target.lstrip("./") - if target in INTERNAL: - return f"]({INTERNAL[target]}{anchor})" - # Everything else points at the repository, so the link still works. - base = GH_TREE if target.endswith("/") else GH - return f"]({base}{target}{anchor})" + if base is None: + if target in pages: + return m.group(0) + raise SystemExit(f"a page links to {target!r}, which is not a " + f"page of this book") + slash = "/" if target.endswith("/") else "" + path = posixpath.normpath(posixpath.join(base, target)) + if path in INTERNAL: + return f"]({INTERNAL[path]}{anchor})" + # Everything else points at the repository, so the link still works -- + # provided the file is there. A link out of the book to a path that + # does not exist is a 404 on GitHub, so it stops the build instead. + if path.startswith("..") or not (ROOT / path).exists(): + raise SystemExit(f"{base or '.'}: link to {target!r} resolves to " + f"{path!r}, which is not in the repository") + return f"]({GH_TREE if slash else GH}{path}{slash}{anchor})" def absolute(m: re.Match) -> str: target, anchor = m.group(1), m.group(2) or "" @@ -90,7 +91,9 @@ def absolute(m: re.Match) -> str: return f"]({INTERNAL[target]}{anchor})" return m.group(0) - return LINK.sub(sub, ABSOLUTE.sub(absolute, text)) + # Relative links first: the absolute pass produces chapter names, which + # the relative pass would otherwise try to resolve a second time. + return ABSOLUTE.sub(absolute, LINK.sub(sub, text)) def main() -> None: @@ -108,7 +111,7 @@ def main() -> None: mark = mark.replace('width="64" height="64"', 'width="96" height="96"') for page in sorted(PAGES.glob("*.md")): body = page.read_text().replace("", mark) - (SRC / page.name).write_text(rewrite(body)) + (SRC / page.name).write_text(rewrite(body, None)) print(f" {'pages/' + page.name:<52} -> src/{page.name}") for chapter, source in CHAPTERS.items(): @@ -116,7 +119,7 @@ def main() -> None: # The mark is referenced relatively from README-style files. body = body.replace('src="agentic-dataset-mark-128.png"', 'src="mark.png"') - (SRC / chapter).write_text(rewrite(body)) + (SRC / chapter).write_text(rewrite(body, posixpath.dirname(source))) print(f" {source:<52} -> src/{chapter}") shutil.copy(ROOT / "brand/agentic-dataset-mark-256.png", SRC / "mark.png") print(f"\n{len(CHAPTERS)} chapters generated, " diff --git a/docs-site/src/citation.md b/docs-site/src/citation.md index 1035fcc..0439455 100644 --- a/docs-site/src/citation.md +++ b/docs-site/src/citation.md @@ -34,7 +34,7 @@ Cite the assertion, not a line number: ## Citing the metric Authorized Recall@K is defined in -[its own package](https://github.com/agentic-datasets/reference/blob/main/authorized-recall.md), which has no dependency on this +[its own package](authorized-recall.md), which has no dependency on this architecture. If you use the metric without adopting the control plane, cite the package rather than the reference implementation. diff --git a/docs-site/src/conformance-package.md b/docs-site/src/conformance-package.md index 4b1bd7c..83d0240 100644 --- a/docs-site/src/conformance-package.md +++ b/docs-site/src/conformance-package.md @@ -87,6 +87,6 @@ audit**, and no interface of this shape could be one. ## Links -- [The specification](https://github.com/agentic-datasets/reference/blob/main/specification.md) -- [What the portable contract can and cannot reach](https://github.com/agentic-datasets/reference/blob/main/portability.md) -- [Results, with the caveats attached to each number](https://github.com/agentic-datasets/reference/blob/main/results.md) +- [The specification](specification.md) +- [What the portable contract can and cannot reach](portability.md) +- [Results, with the caveats attached to each number](results.md) diff --git a/docs-site/src/index.md b/docs-site/src/index.md index 25af366..fdfc30b 100644 --- a/docs-site/src/index.md +++ b/docs-site/src/index.md @@ -34,7 +34,7 @@ An **agentic dataset** describes itself, advertises bounded capabilities, accepts a semantic intent, decides whether an action is admissible, executes only what was admitted, refuses the rest, and leaves evidence. -The [**specification**](https://github.com/agentic-datasets/reference/blob/main/specification.md) is fifteen assertions, each naming a +The [**specification**](specification.md) is fifteen assertions, each naming a failure it rules out. Everything else exists to check them. ``` @@ -69,7 +69,7 @@ report of itself, so a subject that under-reports passes AD-002 while hiding a tool. Conformance is a claim an implementation makes about itself, made checkable — not an adversarial audit. -[`Claims`](https://github.com/agentic-datasets/reference/blob/main/claims.md) is frozen and lists everything asserted, and the one thing +[`Claims`](claims.md) is frozen and lists everything asserted, and the one thing explicitly not. ## Status @@ -81,7 +81,7 @@ person who wrote the specification: that establishes independence from the reference *code*, not from its author's reading of the contract. **Interpretive independence is the next threshold, and it needs somebody else.** -[How to do it](https://github.com/agentic-datasets/reference/blob/main/contributing.md). +[How to do it](contributing.md). ## Where this is published diff --git a/docs-site/src/portability.md b/docs-site/src/portability.md index f41e629..589b071 100644 --- a/docs-site/src/portability.md +++ b/docs-site/src/portability.md @@ -125,7 +125,7 @@ than "the design was correct from the start" and a more useful one. Nineteen deliberately broken variants, each removing exactly one guarantee. The matrix is what `agentic-dataset-conformance run --subject conformance.subjects:subjects --matrix` prints; the -committed run is in [`runs/mutation-matrix.txt`](https://github.com/agentic-datasets/reference/blob/main/runs/mutation-matrix.txt). +committed run is in [`runs/mutation-matrix.txt`](https://github.com/agentic-datasets/reference/blob/main/docs/runs/mutation-matrix.txt). ``` target detection : 19/19 mutants caught by their intended assertion diff --git a/docs-site/src/results.md b/docs-site/src/results.md index 8a1c059..657ef01 100644 --- a/docs-site/src/results.md +++ b/docs-site/src/results.md @@ -24,7 +24,7 @@ configurations, 24 is the adversarial set in the evaluation. Reporting 0/600 would merge two populations that were never sampled together. Everything below was produced by running the code in this repository. Raw -output is in [`runs/`](https://github.com/agentic-datasets/reference/tree/main/runs/); the commands that produce it are in the README. +output is in [`runs/`](https://github.com/agentic-datasets/reference/tree/main/docs/runs/); the commands that produce it are in the README. Measured 2026-09-01 on Python 3.12.13, Linux, with: From 0180d3a2e2d6c4038475420d581dd6c7c4f52bb9 Mon Sep 17 00:00:00 2001 From: Alexander Chernov Date: Sun, 27 Sep 2026 23:40:15 -0400 Subject: [PATCH 2/2] Release 0.2.0: seventeen vectors, and a DOI reserved before the tag The two vectors merged in #1 reach checks no vector reached before, so an implementation that passed 0.1.0 can fail 0.2.0: a minor bump. Both distributions move together, and the root distribution's lower bounds follow. The version DOI 10.5281/zenodo.23005806 was reserved on the new-version draft before this commit, so the archive of this tag can cite itself, which v0.1.0 could not. The README's release-candidate status block, stale since v0.1.0, is replaced; the MCP server reports the library's version instead of a literal. --- CITATION.cff | 6 +++++- README.md | 15 +++++---------- RELEASE.md | 8 ++++++++ docs-site/pages/citation.md | 9 +++++---- docs-site/pages/index.md | 4 +--- docs-site/src/citation.md | 9 +++++---- docs-site/src/index.md | 4 +--- .../agentic-dataset-conformance/pyproject.toml | 2 +- .../src/agentic_dataset_conformance/__init__.py | 2 +- packages/authorized-recall/pyproject.toml | 2 +- .../src/authorized_recall/__init__.py | 2 +- pyproject.toml | 6 +++--- src/agentic_dataset/__init__.py | 2 +- src/agentic_dataset/mcp_boundary.py | 3 ++- zenodo/README.md | 6 ++++-- zenodo/metadata.json | 4 ++-- 16 files changed, 46 insertions(+), 38 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index ccb3c82..a1bcf99 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -15,6 +15,9 @@ identifiers: - type: doi value: "10.5281/zenodo.22536342" description: "Concept DOI — always resolves to the newest version" + - type: doi + value: "10.5281/zenodo.23005806" + description: "Version DOI — v0.2.0" - type: doi value: "10.5281/zenodo.22536343" description: "Version DOI — v0.1.0" @@ -22,7 +25,8 @@ authors: - family-names: Chernov given-names: Alexander orcid: "https://orcid.org/0009-0007-3198-2712" -version: 0.1.0 +version: 0.2.0 +date-released: 2026-09-27 license-url: "https://github.com/agentic-datasets/reference/blob/main/LICENSE.md" repository-code: "https://github.com/agentic-datasets/reference" keywords: diff --git a/README.md b/README.md index 4f2d4e8..3b11b61 100644 --- a/README.md +++ b/README.md @@ -35,14 +35,9 @@ Reproduce with `agentic-dataset-conformance run --subject conformance.subjects:s Raw output is in [`docs/runs/`](docs/runs/); every number's caveats are in [`docs/RESULTS.md`](docs/RESULTS.md). -> ## Status: release candidate +> ## Status: released > -> Public **before** `v0.1.0` is tagged, deliberately. Nothing is archived or -> minted yet, so a finding can still change the artifact rather than becoming -> errata against a DOI. If you find something, -> [open an issue](https://github.com/agentic-datasets/reference/issues) -> — a finding that an assertion is ambiguous is more useful here than a passing -> run. +> **`v0.2.0`** is the current release, on PyPI and archived on Zenodo; `v0.1.0` was the first. Each version is immutable and has its own DOI, so a finding changes the next version rather than an old one. If you find something, [open an issue](https://github.com/agentic-datasets/reference/issues) — a finding that an assertion is ambiguous is more useful here than a passing run. > > **What this is not.** No deployment, no real data, no model in the loop by > default, no latency or cost claim, and no security guarantee — see @@ -162,7 +157,7 @@ Two pieces are published distributions, independently installable and permissively licensed: ```bash -# Both are on PyPI at 0.1.0. +# Both are on PyPI at 0.2.0. pip install agentic-dataset-conformance # contract + vectors + runner pip install authorized-recall # the metric, no dependencies @@ -272,8 +267,8 @@ Browsable at no content of its own; CI fails if it drifts from the repository. **DOI:** [10.5281/zenodo.22536342](https://doi.org/10.5281/zenodo.22536342) -(concept — cite this; it resolves to the newest version). `v0.1.0` specifically -is [10.5281/zenodo.22536343](https://doi.org/10.5281/zenodo.22536343). +(concept — cite this; it resolves to the newest version). `v0.2.0` specifically +is [10.5281/zenodo.23005806](https://doi.org/10.5281/zenodo.23005806), and `v0.1.0` is [10.5281/zenodo.22536343](https://doi.org/10.5281/zenodo.22536343). The documentation is served from **two addresses, both maintained**: diff --git a/RELEASE.md b/RELEASE.md index 6f4c916..5518327 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -418,3 +418,11 @@ history — not as a consequence of this release. **Package metadata is frozen per version**, so repointing a URL costs a release. Worth knowing before the next one — the URL set is not something that can be tidied later in place. + +- [ ] **`v0.2.0` — prepared 2026-09-27.** Two vectors for checks no vector reached before: `ad-003-stale-grant-executes-nothing` and `ad-004-clearance-refusal-has-no-grant` (F-012), with the mutants `StaleGrantsAccepted` and `ClearanceIgnored` that only they catch. The suite goes from 15 to 17 vectors and from 84 to 90 steps; the matrix is 19/19. **A minor bump, not a patch:** an implementation that passed `0.1.0` can fail `0.2.0`, which is the point of the two vectors. Both distributions move to `0.2.0` together, as a pair, though `authorized-recall` has no code change; the root distribution's lower bounds follow. + + **The DOI was reserved before the tag, as the `v0.1.0` entry above asked.** New-version draft 23005806 under concept 22536342; version DOI `10.5281/zenodo.23005806`, written into `CITATION.cff`, the README and the citation page before tagging, so this archive can cite itself. + + Also in this release: the README's *release candidate* status block, stale since `v0.1.0` was tagged on 2026-09-06, is replaced; the docs generator no longer emits links to GitHub paths that do not exist (eight on the live site did); the MCP server reports the library's version instead of a literal `0.1.0`. EMBC 2026 re-checked against Crossref: still not in proceedings. + + Remaining, in order: build and `twine check`; read the rendered description; clean-room install of both wheels; push; tag `v0.2.0`; upload to PyPI; archive the tag's `git archive` on the draft; verify Rights and version on the rendered draft; publish. diff --git a/docs-site/pages/citation.md b/docs-site/pages/citation.md index 0439455..923acad 100644 --- a/docs-site/pages/citation.md +++ b/docs-site/pages/citation.md @@ -3,18 +3,19 @@ The software carries a `CITATION.cff`, which GitHub renders as *Cite this repository*. -**`v0.1.0` is released and archived.** Cite the DOI: +**`v0.2.0` is the current release, archived with its own DOI.** Cite the concept DOI: ``` Chernov, A. (2026). Agentic Dataset Reference Implementation and -Conformance Suite (v0.1.0) [Computer software]. Zenodo. +Conformance Suite (v0.2.0) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.22536342 ``` | | DOI | |---|---| | **Concept** — always resolves to the newest version. **Cite this.** | [10.5281/zenodo.22536342](https://doi.org/10.5281/zenodo.22536342) | -| Version — `v0.1.0` specifically, for reproducibility | [10.5281/zenodo.22536343](https://doi.org/10.5281/zenodo.22536343) | +| Version — `v0.2.0` specifically, for reproducibility | [10.5281/zenodo.23005806](https://doi.org/10.5281/zenodo.23005806) | +| Version — `v0.1.0` | [10.5281/zenodo.22536343](https://doi.org/10.5281/zenodo.22536343) | ORCID: [0009-0007-3198-2712](https://orcid.org/0009-0007-3198-2712) @@ -50,7 +51,7 @@ the argument.** The third is accepted and awaiting its proceedings. | IEEE BigDataService 2026 | *Agentic Data Services: A Control-Plane Architecture for Adaptive Data Workflows* | [10.1109/BigDataService70481.2026.00025](https://doi.org/10.1109/BigDataService70481.2026.00025) · pp. 125–129 | | IEEE EMBC 2026 | *Dataset Descriptors for Autonomous and Observable Biomedical Data Pipelines* | accepted; not yet in proceedings | -*Verified against Crossref on 2026-09-06. The EMBC entry is the one that will +*Verified against Crossref on 2026-09-27. The EMBC entry is the one that will go stale next, and it will do so silently — nothing here fails when a paper appears.* diff --git a/docs-site/pages/index.md b/docs-site/pages/index.md index 426c0b7..fcfa50c 100644 --- a/docs-site/pages/index.md +++ b/docs-site/pages/index.md @@ -74,9 +74,7 @@ explicitly not. ## Status -**Release candidate.** Public before `v0.1.0` is tagged, deliberately, so a -finding can still change the artifact rather than becoming errata against a -DOI. The independent implementation is a 250-line toy written by the same +**Released.** `v0.2.0` is the current version, on PyPI and archived with its own DOI ([citation](citation.md)); `v0.1.0` was the first. A finding changes the next version rather than an old one. The independent implementation is a 250-line toy written by the same person who wrote the specification: that establishes independence from the reference *code*, not from its author's reading of the contract. diff --git a/docs-site/src/citation.md b/docs-site/src/citation.md index 0439455..923acad 100644 --- a/docs-site/src/citation.md +++ b/docs-site/src/citation.md @@ -3,18 +3,19 @@ The software carries a `CITATION.cff`, which GitHub renders as *Cite this repository*. -**`v0.1.0` is released and archived.** Cite the DOI: +**`v0.2.0` is the current release, archived with its own DOI.** Cite the concept DOI: ``` Chernov, A. (2026). Agentic Dataset Reference Implementation and -Conformance Suite (v0.1.0) [Computer software]. Zenodo. +Conformance Suite (v0.2.0) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.22536342 ``` | | DOI | |---|---| | **Concept** — always resolves to the newest version. **Cite this.** | [10.5281/zenodo.22536342](https://doi.org/10.5281/zenodo.22536342) | -| Version — `v0.1.0` specifically, for reproducibility | [10.5281/zenodo.22536343](https://doi.org/10.5281/zenodo.22536343) | +| Version — `v0.2.0` specifically, for reproducibility | [10.5281/zenodo.23005806](https://doi.org/10.5281/zenodo.23005806) | +| Version — `v0.1.0` | [10.5281/zenodo.22536343](https://doi.org/10.5281/zenodo.22536343) | ORCID: [0009-0007-3198-2712](https://orcid.org/0009-0007-3198-2712) @@ -50,7 +51,7 @@ the argument.** The third is accepted and awaiting its proceedings. | IEEE BigDataService 2026 | *Agentic Data Services: A Control-Plane Architecture for Adaptive Data Workflows* | [10.1109/BigDataService70481.2026.00025](https://doi.org/10.1109/BigDataService70481.2026.00025) · pp. 125–129 | | IEEE EMBC 2026 | *Dataset Descriptors for Autonomous and Observable Biomedical Data Pipelines* | accepted; not yet in proceedings | -*Verified against Crossref on 2026-09-06. The EMBC entry is the one that will +*Verified against Crossref on 2026-09-27. The EMBC entry is the one that will go stale next, and it will do so silently — nothing here fails when a paper appears.* diff --git a/docs-site/src/index.md b/docs-site/src/index.md index fdfc30b..cca1127 100644 --- a/docs-site/src/index.md +++ b/docs-site/src/index.md @@ -74,9 +74,7 @@ explicitly not. ## Status -**Release candidate.** Public before `v0.1.0` is tagged, deliberately, so a -finding can still change the artifact rather than becoming errata against a -DOI. The independent implementation is a 250-line toy written by the same +**Released.** `v0.2.0` is the current version, on PyPI and archived with its own DOI ([citation](citation.md)); `v0.1.0` was the first. A finding changes the next version rather than an old one. The independent implementation is a 250-line toy written by the same person who wrote the specification: that establishes independence from the reference *code*, not from its author's reading of the contract. diff --git a/packages/agentic-dataset-conformance/pyproject.toml b/packages/agentic-dataset-conformance/pyproject.toml index 6471789..b3b0ef4 100644 --- a/packages/agentic-dataset-conformance/pyproject.toml +++ b/packages/agentic-dataset-conformance/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "agentic-dataset-conformance" -version = "0.1.0.post1" +version = "0.2.0" description = "AD-001..AD-015: the agentic-dataset governance contract as language-neutral executable conformance vectors, plus a runner that needs no access to an implementation's internals" readme = "README.md" requires-python = ">=3.11" diff --git a/packages/agentic-dataset-conformance/src/agentic_dataset_conformance/__init__.py b/packages/agentic-dataset-conformance/src/agentic_dataset_conformance/__init__.py index 8d2a14b..062f378 100644 --- a/packages/agentic-dataset-conformance/src/agentic_dataset_conformance/__init__.py +++ b/packages/agentic-dataset-conformance/src/agentic_dataset_conformance/__init__.py @@ -36,7 +36,7 @@ ) from .toy import ToyImplementation -__version__ = "0.1.0.post1" +__version__ = "0.2.0" #: The fifteen assertion identifiers, in order. ASSERTIONS = tuple(f"AD-{i:03d}" for i in range(1, 16)) diff --git a/packages/authorized-recall/pyproject.toml b/packages/authorized-recall/pyproject.toml index 92384cd..92db6f2 100644 --- a/packages/authorized-recall/pyproject.toml +++ b/packages/authorized-recall/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "authorized-recall" -version = "0.1.0.post1" +version = "0.2.0" description = "Authorized Recall@K — retrieval quality measured over the subset a principal is permitted to use" readme = "README.md" requires-python = ">=3.11" diff --git a/packages/authorized-recall/src/authorized_recall/__init__.py b/packages/authorized-recall/src/authorized_recall/__init__.py index 3a2a81a..c7088e0 100644 --- a/packages/authorized-recall/src/authorized_recall/__init__.py +++ b/packages/authorized-recall/src/authorized_recall/__init__.py @@ -19,7 +19,7 @@ ) from .retrieval import TfIdfIndex -__version__ = "0.1.0.post1" +__version__ = "0.2.0" __all__ = [ "Authorized", "TfIdfIndex", "__version__", "authorized_recall_at_k", "ndcg_at_k", diff --git a/pyproject.toml b/pyproject.toml index d65d913..ec2e7b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "agentic-dataset-reference" -version = "0.1.0" +version = "0.2.0" description = "Reference implementation and conformance suite for the agentic-dataset control plane" readme = "README.md" requires-python = ">=3.11" @@ -15,8 +15,8 @@ license = { text = "Mixed: CC-BY-4.0 / CC0-1.0 / Apache-2.0 / BUSL-1.1 -- see LI # one, so a bare `>=0.1.0` made this distribution uninstallable. At 0.1.0 that # trap is gone, and the bound can say what it means. dependencies = [ - "authorized-recall>=0.1.0", - "agentic-dataset-conformance>=0.1.0", + "authorized-recall>=0.2.0", + "agentic-dataset-conformance>=0.2.0", ] # The core control plane needs no framework. That is load-bearing: if the diff --git a/src/agentic_dataset/__init__.py b/src/agentic_dataset/__init__.py index ec1ca5a..ef9fb29 100644 --- a/src/agentic_dataset/__init__.py +++ b/src/agentic_dataset/__init__.py @@ -32,7 +32,7 @@ Verdict, ) -__version__ = "0.1.0" +__version__ = "0.2.0" __all__ = [ "Approved", "AuthorizationScope", "BoundCapability", "CacheKey", diff --git a/src/agentic_dataset/mcp_boundary.py b/src/agentic_dataset/mcp_boundary.py index 97b6b8d..6c39b91 100644 --- a/src/agentic_dataset/mcp_boundary.py +++ b/src/agentic_dataset/mcp_boundary.py @@ -29,6 +29,7 @@ from mcp.server.mcpserver import MCPServer from mcp.server.mcpserver.resources import FunctionResource +from . import __version__ from .capabilities import BoundCapability, CapabilityRegistry from .descriptor import DatasetDescriptor, DescriptorRegistry from .grant import Grant, GrantAuthority, UnauthorizedExecution @@ -48,7 +49,7 @@ def build_dataset_server( authority: GrantAuthority, name: str = "agentic-dataset", ) -> MCPServer: - server = MCPServer(name=name, version="0.1.0") + server = MCPServer(name=name, version=__version__) for descriptor in descriptors.all(): _add_resources(server, descriptor) diff --git a/zenodo/README.md b/zenodo/README.md index ee5c9aa..2b7684e 100644 --- a/zenodo/README.md +++ b/zenodo/README.md @@ -92,6 +92,8 @@ into linear: The cost of getting this wrong is small and permanent, which is the combination worth spending ten minutes on next time rather than ten minutes now. +**Exercised for `v0.2.0` on 2026-09-27.** `POST /api/records/22536343/versions` created the new-version draft 23005806 under the same concept (22536342), and `POST /api/records/23005806/draft/pids/doi` reserved `10.5281/zenodo.23005806` before the tag existed. A reserved DOI is not registered with DataCite until the record is published: `doi.org` answered 404 for it at reservation, so a tree citing it points at nothing until publish. The new-version draft starts with no files and no `version`, so both have to be supplied again. + ## Sequence `RELEASE.md` fixes the order, and it is not negotiable at the last step: @@ -109,8 +111,8 @@ guaranteed by the payload being correct: 1. all four licences appear in the rendered Rights section, not just the first — this is the one that actually failed on the first attempt, and it fails quietly; -2. `version` matches the tag exactly — `metadata.json` pins `0.1.0`, and it - must be bumped in step with any retag rather than left behind. +2. `version` matches the tag exactly — `metadata.json` pins it, and it + must be bumped in step with every tag rather than left behind. ## What is not archived here diff --git a/zenodo/metadata.json b/zenodo/metadata.json index 275fbc1..81dfd82 100644 --- a/zenodo/metadata.json +++ b/zenodo/metadata.json @@ -5,8 +5,8 @@ }, "title": "Agentic Dataset Reference Implementation and Conformance Suite", "publisher": "Zenodo", - "version": "0.1.0", - "publication_date": "2026-09-06", + "version": "0.2.0", + "publication_date": "2026-09-27", "creators": [ { "person_or_org": {