ResultSeal
HTTP 200 is not an observation. Empty is not not-found. A tool call is not an effect.
ResultSeal is a small, framework-neutral Python toolkit that prevents AI-agent workflows from promoting empty, partial, stale, source-mismatched, or unverified tool results into factual claims. Shipped adapters cover raw JSON, HTTP responses, MCP-style tool results (structuredContent / isError / outputSchema), and stdio process output — each establishing structural facts only (see docs/specs/ADAPTERS.md).
What it does
ResultSeal normalizes a tool result, applies a declarative contract, and produces a deterministic decision. Unknown and incomplete evidence is blocked by default.
Install
Not on PyPI yet — install from a clone:
git clone https://github.com/sx4im/resultseal.git
cd resultseal
pip install .
Requires Python 3.11+.
Try it
# Replay a self-contained fixture bundle against its recorded expectation
resultseal replay fixtures/empty-result.yaml # empty response -> blocked/empty
resultseal replay fixtures/explicit-not-found.yaml # approved sentinel -> sealed/not_found
# Evaluate a shipped example against a shipped contract (exit 0 = sealed, 1 = blocked)
resultseal check examples/mcp_result.json --contract examples/customer_contract.json
resultseal check examples/http_empty.json --contract examples/customer_contract.json
The last two are the toolkit's thesis side by side: a complete MCP result seals,
while an HTTP 200 carrying an empty body blocks as empty — it can never be
promoted to not_found. All four commands print the decision record with a
verifiable deterministic_fingerprint.
Scope
ResultSeal is not an agent framework, proxy, dashboard, policy engine, retry middleware, signed receipt system, or LLM judge. It is an executable semantic boundary for tool observations.
Development
make install # editable install with dev tools
make all # test, lint, typecheck, build
Contributing
Bug reports, fixes, and spec feedback are welcome — see CONTRIBUTING.md for what a change is expected to include. The normative specifications live in docs/specs/, and changes that touch a documented invariant add a dated entry to the decision log.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file resultseal-0.1.1.tar.gz.
File metadata
- Download URL: resultseal-0.1.1.tar.gz
- Upload date:
- Size: 52.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6d9f12316d8ec5018d37ac757bbb2b115a28ceef24d30bb01f57bcd5401af92
|
|
| MD5 |
9636ad1adfe133db1b71905900d87b70
|
|
| BLAKE2b-256 |
4acd42df5c52e581b9f01d53728eed4112b64a94d2c939b8c9c2d3d30ad5a5da
|
Provenance
The following attestation bundles were made for resultseal-0.1.1.tar.gz:
Publisher:
publish.yml on sx4im/resultseal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
resultseal-0.1.1.tar.gz -
Subject digest:
c6d9f12316d8ec5018d37ac757bbb2b115a28ceef24d30bb01f57bcd5401af92 - Sigstore transparency entry: 2568882195
- Sigstore integration time:
-
Permalink:
sx4im/resultseal@d35567d8d5e6da332c28e59ebb6ebff37a4e643a -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/sx4im
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d35567d8d5e6da332c28e59ebb6ebff37a4e643a -
Trigger Event:
push
-
Statement type:
File details
Details for the file resultseal-0.1.1-py3-none-any.whl.
File metadata
- Download URL: resultseal-0.1.1-py3-none-any.whl
- Upload date:
- Size: 27.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d999a1f32b6628b243dc6f29357cabd39e7df3c93ce4aae827db82b60f8ebb8
|
|
| MD5 |
6b751a5862a83d8d1bc2fe941d703c38
|
|
| BLAKE2b-256 |
9688bba14ea5e15e6189c1328495135ad5574a50f31f97df92d665d732044731
|
Provenance
The following attestation bundles were made for resultseal-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on sx4im/resultseal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
resultseal-0.1.1-py3-none-any.whl -
Subject digest:
1d999a1f32b6628b243dc6f29357cabd39e7df3c93ce4aae827db82b60f8ebb8 - Sigstore transparency entry: 2568882197
- Sigstore integration time:
-
Permalink:
sx4im/resultseal@d35567d8d5e6da332c28e59ebb6ebff37a4e643a -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/sx4im
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d35567d8d5e6da332c28e59ebb6ebff37a4e643a -
Trigger Event:
push
-
Statement type: