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
6 changes: 5 additions & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,18 @@ 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"
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:
Expand Down
15 changes: 5 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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**:

Expand Down
8 changes: 8 additions & 0 deletions RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
61 changes: 32 additions & 29 deletions docs-site/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

from __future__ import annotations

import posixpath
import re
import shutil
from pathlib import Path
Expand Down Expand Up @@ -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?://|#)([^)]+)\)")

Expand All @@ -70,27 +56,44 @@
)


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 ""
if target in INTERNAL:
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:
Expand All @@ -108,15 +111,15 @@ 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 -->", 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():
body = (ROOT / source).read_text()
# 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, "
Expand Down
9 changes: 5 additions & 4 deletions docs-site/pages/citation.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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.*

Expand Down
4 changes: 1 addition & 3 deletions docs-site/pages/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
11 changes: 6 additions & 5 deletions docs-site/src/citation.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -34,7 +35,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.

Expand All @@ -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.*

Expand Down
6 changes: 3 additions & 3 deletions docs-site/src/conformance-package.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
10 changes: 4 additions & 6 deletions docs-site/src/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

```
Expand Down Expand Up @@ -69,19 +69,17 @@ 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

**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.

**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

Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/portability.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/results.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand Down
2 changes: 1 addition & 1 deletion packages/agentic-dataset-conformance/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
2 changes: 1 addition & 1 deletion packages/authorized-recall/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/agentic_dataset/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
Verdict,
)

__version__ = "0.1.0"
__version__ = "0.2.0"

__all__ = [
"Approved", "AuthorizationScope", "BoundCapability", "CacheKey",
Expand Down
Loading
Loading