uacp-interop
Interop conformance probe for wippa-uacp.
UACP's own L0 to L3 conformance levels are a feature checklist. Passing proves an implementation matches its author's reading of the spec, and says nothing about whether two implementations built by different people interoperate, which is the premise the project rests on.
This harness tests the three things the checklist cannot:
- Schema versus prose. Build a message the spec requires an implementation to accept, validate it against the shipped schema, report the rejection.
- Schema versus the implementations. Check that each reference implementation can represent what the schema declares, and that the two implementations model the same envelope. This class found a silent credential downgrade between the TypeScript and Python implementations.
- Cross-format divergence, both directions. Map a framework-native agent description into a UACP descriptor, validate the artifact actually produced, and separately test whether a UACP capability survives being expressed in a framework's native tool format.
Results
See FINDINGS.md. Against main at 7bcc2594: 8 schema conflicts
and 12 cross-format findings (5 blocker, 11 major, 4 minor). Four findings have
since been fixed upstream and are retained only as regression guards, so a
regression re-opens them rather than passing silently.
Install
uvx uacp-interop # or: pipx run uacp-interop
Nothing to clone and no virtualenv to build. From a checkout:
pip install -e . # runtime only
uacp-interop # the report
Quick start
uacp-interop
uacp-interop --json # machine-readable
uacp-interop --fail-on-blocker # exit 1 if any blocker is found
pip install -e ".[dev]" && pytest -q # only to run the tests
A captured run of the current corpus is committed at docs/sample-report.txt, so you can see the output before installing anything.
Method
Losses are computed, not asserted. SCHEMA_VIOLATION findings are observed by
running the real validator over the artifact an adapter produced, and it is the
only source of them: the adapters do not predict schema violations from
hand-copied patterns, because a copied pattern is a second source of truth that
can drift from the schema, and because predicting as well as observing counted
each such defect twice. Divergences in the reverse direction are found by
walking the source JSON Schema and collecting keywords outside the target
format's supported subset.
Each field yields at most one finding. When both reference implementations
disagree the same way about a field, that is one defect with two witnesses and
both are cited in the evidence line, not two findings. duplicate_findings()
enforces this over the whole report, and the suite asserts it holds for the real
corpus and that the guard is able to see a duplicate when one is injected.
Every corpus entry declares a confidence:
observed-serialization: a real serialized artifact was readdocumented-api: taken from official documentation of the public APIinferred: our modelling choice, not a documented shape
Findings derived from weaker entries are weaker evidence, and the CLI says so. The AutoGen entry currently models a documented constructor surface rather than an observed serialization, which makes it the weakest evidence in the corpus.
Each check is backed by a meta-test that mutates a copy of the schema and confirms the check fires, so a check that quietly stopped working fails the suite rather than passing silently.
Vendored schemas
uacp_interop/schemas/ holds a copy of UACP's JSON Schemas so the harness can
validate offline. A conformance report that silently tests an old protocol is
worse than no report, so the upstream commit is pinned in
uacp_interop/schemas/PROVENANCE.json and CI fails on drift:
python scripts/refresh_schemas.py # refresh and re-pin
python scripts/refresh_schemas.py --check # verify only, exit 1 on drift
Known limits
- No behavioural half. Everything here is structural: "these two definitions cannot both be true", not "these two implementations produced different messages". That is the harder half and the one not yet built.
- No LangGraph, CrewAI or OpenAI Assistants entries. The LangGraph docs did not yield a sourceable serialization format, and an entry that cannot be sourced honestly is worse than a missing one.
- The implementation audit records observed field sets as data with provenance rather than parsing the dataclass and TypeScript interface at runtime. Re-reading them is a manual step, so they can drift.
License
MIT.
Release files for uacp-interop 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| uacp_interop-0.1.0.tar.gz | 40.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| uacp_interop-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 69.6 kB
Release files / uacp_interop-0.1.0.tar.gz
| Download URL | uacp_interop-0.1.0.tar.gz |
|---|---|
| Size | 40.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1d3dea7ce676b5ab7429923d0af756e8963ea876c3416d1bea3f4a625220d95f
|
|
BLAKE2b-256 checksum How to use checksums |
42a18d1167712a2b8b3e0ff3bc6747e0bccd78b2d72b124a9e85014cafd65918
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logRelease files / uacp_interop-0.1.0-py3-none-any.whl
| Download URL | uacp_interop-0.1.0-py3-none-any.whl |
|---|---|
| Size | 29.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0bc445be7b6c00379dbbe2744c91c0644170e1e065793b5edf13fe99946e55e4
|
|
BLAKE2b-256 checksum How to use checksums |
f766598964e87e853d36d38f36e918bd6e3f8f3df7e0aae4b6cea666b7b3105f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency log