Runtime safety layer for LLM agents. Detects token spirals, kills doomed tasks early, tells you why.
Project description
state-harness ๐
Runtime safety layer for LLM agents. Detects runaway token spirals, kills doomed tasks early, and tells you exactly why they failed โ before they burn your budget.
from state_harness import GrowthRatioGuard, FailureReport
guard = GrowthRatioGuard(token_budget=50_000)
with guard:
for turn in agent_loop:
result = llm.invoke(turn.prompt)
guard.record_step(tokens_used=result.usage.total_tokens)
# What went wrong? (zero-cost, no LLM calls)
report = FailureReport.from_guard(guard)
print(report)
โ ๏ธ STABILITY TRIPPED at turn 12
Pattern: Context Accumulation Spiral (confidence: 92%)
โข Last 5 turns all exceeded 1.5ร baseline (4/4 were accelerating).
โข Peak growth ratio: 5.2ร baseline.
โข Without intervention, projected cost was $0.0396 (actual: $0.0039).
Energy: โโโโโโโโโโโ
Baseline: 1050 tokens/turn
Peak ratio: 5.2ร baseline
Cost: $0.0039 (saved ~$0.0357 by tripping early)
Suggested actions:
๐ด 1. Enable RG history compression in your agent loop.
โ Compressing older messages reduces prompt tokens by 40-60%.
๐ก 2. Lower the growth ratio threshold to 1.8ร.
โ A lower threshold would have caught it earlier.
๐ข 3. Add a sliding-window context strategy.
โ Send only the last N messages plus a summary of earlier ones.
Why this exists
Every team running LLM agents in production has experienced this: an agent gets stuck in a loop, token usage spirals, and you find a $15 charge for a single failed request the next morning.
Existing solutions are either too simple (hard budget caps that kill tasks indiscriminately) or too complex (platforms requiring dashboards, infrastructure, and vendor lock-in).
State-harness is a library, not a platform. pip install and go. It uses Lyapunov stability theory to detect runaway behavior before it becomes expensive โ and when it does trip, it tells you exactly what went wrong and how to fix it.
What it catches
| Pattern | Signal | Example |
|---|---|---|
| Context Spiral | Token growth accelerating beyond baseline | Agent replaying full history each turn |
| Retry Storm | Low-variance repeated calls | Tool failing, agent retrying identically |
| Policy Drift | VSA similarity score dropping | Agent going off-topic mid-conversation |
| Early Explosion | Token spike in first 3 turns | Oversized system prompt or tool response |
| Budget Exhaustion | Cumulative spend hits ceiling | Complex task, not necessarily broken |
Installation
pip install state-harness
Requires Python โฅ 3.10. Pre-built wheels are available for Linux, macOS, and Windows (x86_64 and ARM64). No Rust toolchain needed.
From source (for development)
git clone https://github.com/vishal-dehurdle/state-harness.git
cd state-harness
python -m venv .venv && source .venv/bin/activate
# Install Rust (if not already installed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
pip install maturin
maturin develop --release
# Run tests
pip install pytest
pytest tests/
Quickstart
Basic: GrowthRatioGuard (recommended)
The GrowthRatioGuard normalizes token usage against a baseline, so it only trips on disproportionate growth โ not the natural growth of multi-turn context windows.
from state_harness import GrowthRatioGuard, StabilityViolation
guard = GrowthRatioGuard(
token_budget=100_000, # hard ceiling
ratio_threshold=2.0, # trip when turn is 2ร the baseline
window=3, # 3 consecutive escalating turns to trip
budget_gate=8_000, # don't trip until 8K tokens spent
)
with guard:
for turn in agent_loop:
try:
result = llm.invoke(turn.prompt)
guard.record_step(
tokens_used=result.usage.total_tokens,
errors=0,
)
except StabilityViolation as e:
print(f"Agent killed: {e}")
break
print(f"Total cost: {guard.total_tokens} tokens")
print(f"Baseline: {guard.baseline} tokens/turn")
print(f"Peak ratio: {guard.current_ratio}ร")
Failure Diagnostics
After any execution (tripped or not), get a structured failure report:
from state_harness import FailureReport
report = FailureReport.from_guard(guard, model="gemini-2.5-flash")
# Human-readable terminal output
print(report)
# Structured dict for logging / dashboards
import json
print(json.dumps(report.to_dict(), indent=2))
The report classifies the failure pattern, provides evidence, estimates cost impact, and suggests specific fixes โ all without any LLM calls.
Classic: BoundaryGuard
For lower-level control using raw token counts (no normalization):
from state_harness import BoundaryGuard
with BoundaryGuard(token_budget=100_000, lambda_=1.0, window=5) as guard:
for turn in agent_loop:
result = llm.invoke(turn.prompt)
guard.record_step(
tokens_used=result.usage.total_tokens,
errors=0,
tool_name="search",
)
Decorator: @boundary_guard
from state_harness import boundary_guard
@boundary_guard(
token_budget=50_000,
token_counter=lambda r: r.usage.total_tokens,
)
def agent_step(prompt: str):
return llm.invoke(prompt)
Framework Integration
LangGraph
from state_harness import BoundaryGuard
from state_harness.adapters import LangGraphMiddleware
guard = BoundaryGuard(token_budget=150_000)
middleware = LangGraphMiddleware(guard)
@middleware.wrap_tool
def search_database(query: str):
return db.search(query)
with guard:
result = agent.invoke({"messages": [...]})
Vanilla Python Hooks
from state_harness import BoundaryGuard
from state_harness.adapters import VanillaHook
guard = BoundaryGuard(token_budget=50_000)
hook = VanillaHook(guard)
with guard:
for step in agent_loop:
hook.before_call(tool_name="search")
result = execute_tool(step)
hook.after_call(tokens_used=result.tokens)
Architecture
State-harness combines three physics-inspired mechanisms, implemented in Rust for microsecond-speed enforcement:
Agent Loop
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ GrowthRatioGuard (Python SDK) โ
โ โโโ Normalizes tokens โ growth ratio โ
โ โโโ Warmup baseline (first N turns) โ
โ โโโ Budget gate (min spend before trip)โ
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโผโโโโโโโโโโโ
โผ โผ โผ
โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโโโโโ
โLyapunovโ โ RG โ โHolographic โ
โMonitor โ โDecim. โ โ Engine โ
โ โ โ โ โ (VSA) โ
โV(k)=S+ฮปฮธโ โTF-IDF โ โ Drift โ
โฮV โฅ 0? โ โCompressโ โ Detection โ
โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโโโโโ
Rust Rust Rust
| Component | Purpose | Speed |
|---|---|---|
| Lyapunov Monitor | Tracks energy derivative ฮV(k). Trips when ฮV โฅ 0 for W consecutive steps. | ~1ฮผs/step |
| RG Decimator | Compresses conversation history using TF-IDF scoring. Retains structurally important messages. | ~100ฮผs/compress |
| Holographic Engine | VSA-based policy drift detection. Binds domain invariants to high-dimensional vectors. | ~10ฮผs/check |
Benchmarks
Evaluated across three complementary benchmarks spanning customer service, software engineering, and multi-turn reasoning. Full methodology and data in the research paper.
Summary: Token savings scale with loop length
| Benchmark | Avg Turns | Token Savings | Trip Rate | Pass-Rate Impact |
|---|---|---|---|---|
| MINT (reasoning + coding) | 1โ5 | 0.8% | 0% | None (29.2% โ 28.5%) |
| ฯยณ-bench (customer service) | 3โ10 | 9% | ~5% | None (58% preserved) |
| SWE-bench Verified (coding) | 10โ50 | 49.5% | 43% | 10/15 resolved preserved |
Key finding: The monitor is non-invasive on short-loop agents (0โ9% savings, zero false trips) and highly effective on long-loop agents where token spirals concentrate (49.5% savings, 68.8% precision).
SWE-bench Verified (central result)
37 Django instances from SWE-bench Verified. Agent: moatless-tools SearchTree with 50-node budget. Model: Gemini 2.5 Flash.
| Metric | Baseline | State-Harness (ฯ=3.0, W=5) |
|---|---|---|
| Total tokens | 19,838,665 | 10,011,520 |
| Token savings | โ | 49.5% |
| Resolved | 15 / 37 | 10 / 37 |
| Precision | โ | 68.8% |
The worst spirals โ failed tasks consuming 1.5โ1.6M tokens โ are terminated at 74โ83% savings per task. The guard trips at a median of node 23 (~46% through the budget), early enough for substantial savings but late enough for calibration.
Threshold sensitivity (Pareto frontier):
| ฯ | W | Trips | Token Savings | Resolved Preserved | Precision |
|---|---|---|---|---|---|
| 1.5 | 3 | 32 | 83.1% | 3 / 15 | 62.5% |
| 2.0 | 5 | 27 | 69.1% | 6 / 15 | 66.7% |
| 3.0 | 5 | 16 | 49.5% | 10 / 15 | 68.8% |
| 5.0 | 3 | 9 | 24.0% | 12 / 15 | 66.7% |
ฯยณ-bench Airline
50 tasks ร 3 configurations. Agent handles airline reservations via tool calls.
| Config | Pass Rate | Token Savings | Notes |
|---|---|---|---|
| Baseline (no guard) | 58% | โ | Full agent loop, no monitoring |
| Naive Cap (100K) | 58% | 0% | No airline task exceeds cap |
| State-Harness (ฯ=2.0) | 58% | 9% | Non-invasive: same pass rate, fewer tokens |
The naive cap achieves 0% savings because no airline task exceeds 100K tokens โ confirming that hard budget caps provide no value when set above the task's natural consumption envelope.
MINT (non-invasiveness validation)
284 tasks across GSM8K (48), MATH (100), HumanEval (45), MBPP (91). Agent uses up to 5 turns per task.
| Category | Baseline Success | Harness Success | Token Savings |
|---|---|---|---|
| reasoning/gsm8k | 91.7% | 91.7% | 3.0% |
| reasoning/math | 39.0% | 37.0% | โ0.3% |
| coding/humaneval | 0.0% | 0.0% | 2.8% |
| coding/mbpp | 0.0% | 0.0% | 0.4% |
| Total | 29.2% | 28.5% | 0.8% |
Zero stability violations recorded. The monitor correctly identifies short-loop tasks as stable and does not intervene.
Reproducing the benchmarks
ฯยณ-bench reproduction steps
# 1. Clone both repos
git clone https://github.com/vishal-dehurdle/state-harness.git
git clone https://github.com/sierra-research/tau-bench.git tau3-bench
# 2. Install state-harness
cd state-harness
python -m venv .venv && source .venv/bin/activate
pip install maturin && maturin develop --release
# 3. Install ฯยณ-bench (with state-harness agent)
cd ../tau3-bench
uv sync
cp ../state-harness/tau3_integration/harness_agent.py src/tau2/agent/
cp ../state-harness/tau3_integration/naive_cap_agent.py src/tau2/agent/
# 4. Configure Vertex AI
export GOOGLE_CLOUD_PROJECT=your-project-id
export VERTEXAI_LOCATION=asia-south1 # or your preferred region
# 5. Run full benchmark
cd ../state-harness
./benchmarks/run_full_benchmark.sh
Per-domain threshold tuning:
| Domain | ฯ | Budget Gate | Rationale |
|---|---|---|---|
| Airline | 2.0 | 8,000 | Simple lookups; spirals are clear |
| Retail | 2.5 | 12,000 | Multi-item orders need more tokens per turn |
| Telecom | 2.0 | 8,000 | Sequential workflows; similar to airline |
See benchmarks/ for full setup, configs, and reproduction instructions for all three benchmarks.
Future evaluations
- Terminal-Bench โ Terminal-based agent tasks; tests command-line tool loops where spirals manifest as repeated failed commands
- SWE-bench Pro โ Harder, contamination-resistant variant of SWE-bench
- LiveCodeBench โ Freshly sampled coding problems with no training data overlap
- Cross-model validation โ GPT-4o, Claude Sonnet 4, Llama 4 to validate model-agnosticity
Planned features
- Adaptive threshold โ Auto-calibrate ฯ from warmup dynamics instead of fixed per-domain defaults
- Causal intervention โ Instead of killing spiraling tasks, redirect them (e.g., inject summary, reset context)
- Streaming support โ Real-time monitoring for streaming/voice agents
Configuration Guide
| Parameter | Default | Description |
|---|---|---|
token_budget |
100,000 | Hard ceiling on cumulative tokens |
ratio_threshold |
2.0 | Growth ratio above which a turn counts as "escalating" (domain-tuned: airline=2.0, retail=2.5, telecom=2.0) |
window |
3 | Consecutive escalating turns before circuit breaker trips |
warmup_turns |
3 | Turns used to establish baseline (no monitoring during warmup) |
budget_gate |
8,000 | Minimum cumulative tokens before the monitor can trip (retail: 12,000) |
lambda_ |
1.0 | Error weighting in the Lyapunov energy function |
Environment variable overrides (highest precedence, for threshold sweeps):
| Env Var | Description |
|---|---|
HARNESS_RATIO_THRESHOLD |
Override ratio_threshold (e.g., 2.5) |
HARNESS_BUDGET_GATE |
Override budget_gate (e.g., 12000) |
Tuning tips:
- More aggressive (catch spirals earlier):
ratio_threshold=1.8, window=2 - More conservative (fewer false positives):
ratio_threshold=2.5, window=3 - High-value tasks: Increase
budget_gateto 20K+ to let expensive tasks run longer - Complex domains (retail, multi-tool): Start with
ratio_threshold=2.5
Theoretical Foundations
State-harness applies control theory to LLM agent execution:
- Lyapunov stability: The energy function V(k) = S(k) + ฮปฮธ(k) models token consumption as a dynamical system. When ฮV โฅ 0 for W consecutive steps, the system is provably unstable.
- Renormalization Group (RG) theory: Message compression is modeled as coarse-graining โ eliminating high-frequency noise while preserving scale-invariant task objectives.
- Vector Symbolic Architecture (VSA): Domain policies are bound to high-dimensional bipolar vectors (10,000-d, i8 space), enabling constant-time semantic drift detection outside the LLM context window.
Research
This library implements the framework described in:
Empirical Lyapunov Stability: Growth-Ratio Energy Functions as Leading Indicators of Agent Task Failure Vishal Verma, 2026 Read the full paper โ
Key findings from the paper:
- Growth-ratio normalization achieves 49.5% token savings on SWE-bench with 68.8% precision
- The monitor is non-invasive on short-loop agents (0.8% savings on MINT, zero false trips)
- Token savings scale with loop length: 0.8% โ 9% โ 49.5% (MINT โ ฯยณ โ SWE-bench)
- The guard trips at a median of node 23 (~46% through the budget), early enough for savings, late enough for calibration
Based on the theoretical framework from:
The Fluid Dynamics of Multi-Agent AI: Resolving d'Alembert's Paradox of Generative Workflows Vishal Verma, 2026 Read โ
Contributing
Contributions are welcome. See CONTRIBUTING.md for dev environment setup, code style, and PR guidelines.
Security
For security vulnerabilities, see SECURITY.md. Please do not open public issues for security reports.
License
Split-core licensing:
| Component | License | Notes |
|---|---|---|
Rust Core (src/) |
BSL 1.1 | Free for non-commercial + ARR < $1M. Converts to Apache 2.0 on May 26, 2030. |
Python SDK (python/) |
Apache 2.0 | Fully permissive. |
See LICENSE.md for full details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 state_harness-0.2.0.tar.gz.
File metadata
- Download URL: state_harness-0.2.0.tar.gz
- Upload date:
- Size: 103.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f276485e416191956512a151ee396b4c829a8fd70bbcd17649b975c18a0a6825
|
|
| MD5 |
6c8b9dcfc8c6fd87f37b26bc21fbd9d4
|
|
| BLAKE2b-256 |
4dfb440b624866d2d18e398acbab27828085453d44dfd56e5904c04eb45ea69f
|
Provenance
The following attestation bundles were made for state_harness-0.2.0.tar.gz:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0.tar.gz -
Subject digest:
f276485e416191956512a151ee396b4c829a8fd70bbcd17649b975c18a0a6825 - Sigstore transparency entry: 1682996563
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 264.9 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44132a076e6c53c5be89ae6b65d3c245a00b4b52cef2ea3739bba3d9271379bf
|
|
| MD5 |
9cfce33162d3bf94fbe61c6a33c1c07c
|
|
| BLAKE2b-256 |
6c77340355010a6b98b99c6817b93526fd50dfe27ca7c96488b35a3aaa94cf5d
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp312-cp312-win_amd64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp312-cp312-win_amd64.whl -
Subject digest:
44132a076e6c53c5be89ae6b65d3c245a00b4b52cef2ea3739bba3d9271379bf - Sigstore transparency entry: 1682997063
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 414.2 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d59ceeae4bb46eddd3e3e1866ca9ebf41ab46ee041e7585c6a969dc112eb39c
|
|
| MD5 |
3c4714be9d0359821f29f682d602dc7c
|
|
| BLAKE2b-256 |
4e98fe4b7adde4e093f2df2881bc93822dc293b5a5ff3f97f739824530362812
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
4d59ceeae4bb46eddd3e3e1866ca9ebf41ab46ee041e7585c6a969dc112eb39c - Sigstore transparency entry: 1682997976
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 412.7 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b0d48fdd3bc9e940bb53907d12cbfbc3165208669302966ffc735aa9734a7dc
|
|
| MD5 |
191ac7a9ef4fc67298ce279b5f693e10
|
|
| BLAKE2b-256 |
9791bdb93934465715d3cf1e9e6458fb379abf8208d81bf3cd2d13e313429452
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
4b0d48fdd3bc9e940bb53907d12cbfbc3165208669302966ffc735aa9734a7dc - Sigstore transparency entry: 1682997795
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 367.6 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0fef2bf5be4d23d5ff0ad361f2d71e4e6cde118a6e708d6aac77c22ef619ae9
|
|
| MD5 |
ddbcd5680ed51144382a0d8140b0a950
|
|
| BLAKE2b-256 |
a55126c8c054de8f1c1b8253fbe28337b2814570cfda002438494106a329ab68
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
a0fef2bf5be4d23d5ff0ad361f2d71e4e6cde118a6e708d6aac77c22ef619ae9 - Sigstore transparency entry: 1682997672
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 370.1 kB
- Tags: CPython 3.12, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5e2bde8a31ff72b9780a0c572e8e7eae7787d4d30e309569323e7b9f7f70cdbf
|
|
| MD5 |
6a5db37a1dd13bc7444b1eaa51ed403c
|
|
| BLAKE2b-256 |
cfd81e4b79f89cbb92eec40ff9c4478d8f57acfad0cf4f6977daa13f8b0c0994
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl -
Subject digest:
5e2bde8a31ff72b9780a0c572e8e7eae7787d4d30e309569323e7b9f7f70cdbf - Sigstore transparency entry: 1682997166
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 266.8 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c6c4851d606aec5b602c80a3655a24d5dd9af0b67b902e221fb6b45098dc21e
|
|
| MD5 |
076d0bb974fc0ff0f3967f162a92d7a4
|
|
| BLAKE2b-256 |
62c4ef8b6a04d640bea695b3f7d8a0aa92ea3db510494159085a430a8c820f92
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp311-cp311-win_amd64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp311-cp311-win_amd64.whl -
Subject digest:
8c6c4851d606aec5b602c80a3655a24d5dd9af0b67b902e221fb6b45098dc21e - Sigstore transparency entry: 1682997299
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 416.8 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35302ca9a8c7595a4a5dad1e4e4ad74da47fd153d62d7d5a1ef438c0dd0f8115
|
|
| MD5 |
cfd124200d6fbfce581e47e64fe927e3
|
|
| BLAKE2b-256 |
efa7cf6090aa27fdbbdcdb24e5d049c0e2720ebf3c76ac05c8907d5357f4b3ce
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
35302ca9a8c7595a4a5dad1e4e4ad74da47fd153d62d7d5a1ef438c0dd0f8115 - Sigstore transparency entry: 1682997441
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 411.7 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a76520f1fbba5cb9b646c34cdd1099c6385daf22a75ba141ab11d2e1347bfe47
|
|
| MD5 |
81c3c6b0d2006793f0496ec3eea9274b
|
|
| BLAKE2b-256 |
97d0493bccb068bdad2ec29964d371eb9ae1f893181731eb94509eac9caaf8f9
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
a76520f1fbba5cb9b646c34cdd1099c6385daf22a75ba141ab11d2e1347bfe47 - Sigstore transparency entry: 1682997559
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 369.1 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bdbc6bcd2bdb9f57bed5ace30055a1106f6425cbcf35d9d46808f6bb383e23f
|
|
| MD5 |
032fe9b584924a190c6f176bd8238f03
|
|
| BLAKE2b-256 |
7e4dd44417851caea21392ca0d2b751378c9a4aa8ae388012ae4b993b1d6890d
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
2bdbc6bcd2bdb9f57bed5ace30055a1106f6425cbcf35d9d46808f6bb383e23f - Sigstore transparency entry: 1682996825
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl
- Upload date:
- Size: 373.2 kB
- Tags: CPython 3.11, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65f49c2788a27309c02c8acf830656929d4b306d47b9c4165e76fdeb5420fa16
|
|
| MD5 |
621b4268355eb9c3a71068b16df9d813
|
|
| BLAKE2b-256 |
2e0a161f6c37fe993810e44e180005f890271f6d58cdafeea7c4e42042bb2654
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl -
Subject digest:
65f49c2788a27309c02c8acf830656929d4b306d47b9c4165e76fdeb5420fa16 - Sigstore transparency entry: 1682996937
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 268.8 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
12fac44fec4cb3324e26a5f7b29757ba17bcf2f851fa83d238fdfe8f6559d7da
|
|
| MD5 |
91545cad99df95d436969b624b7e2a36
|
|
| BLAKE2b-256 |
3a33d9cbc6114789bb26ac538aec63745871eaec4d97a7a59f802063dfada3ed
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp310-cp310-win_amd64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp310-cp310-win_amd64.whl -
Subject digest:
12fac44fec4cb3324e26a5f7b29757ba17bcf2f851fa83d238fdfe8f6559d7da - Sigstore transparency entry: 1682996632
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 419.5 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dcaa216118fcd3d116d2c471fd66992109e82d2dc9888b1522fe3f525bfdcc30
|
|
| MD5 |
38b09b68fb37e408ba1712118b0ffe54
|
|
| BLAKE2b-256 |
c59e073da404b20147d61fcd29c7cdda4076dcbfdc3df2cd0e62c0b5cbdd1fa4
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
dcaa216118fcd3d116d2c471fd66992109e82d2dc9888b1522fe3f525bfdcc30 - Sigstore transparency entry: 1682996701
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 411.8 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aacf6c3d846b7e813966711e136d046eedcc9c6dfaec711917ee7442788b18d7
|
|
| MD5 |
d150764900d3c47a5d245a3ab9c43055
|
|
| BLAKE2b-256 |
d9fc5313f12170c90da979951ff0b18e9d57da900fdfe49e0fad414a2a7b9a56
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
aacf6c3d846b7e813966711e136d046eedcc9c6dfaec711917ee7442788b18d7 - Sigstore transparency entry: 1682997369
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 368.9 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
846d920f115ee30ab7b2d06efe72d6c047b22b294d0691a9a30c576a9305dd0b
|
|
| MD5 |
47aef25f7f8452d329212a9c0583da58
|
|
| BLAKE2b-256 |
145778d2b885ed51296e3c9c2f642f1e041c6336015e7399fab18b14ecc49735
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp310-cp310-macosx_11_0_arm64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp310-cp310-macosx_11_0_arm64.whl -
Subject digest:
846d920f115ee30ab7b2d06efe72d6c047b22b294d0691a9a30c576a9305dd0b - Sigstore transparency entry: 1682997884
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file state_harness-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl.
File metadata
- Download URL: state_harness-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl
- Upload date:
- Size: 373.0 kB
- Tags: CPython 3.10, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b3f8a177ff467e36d97c2d90a4509db5ec53f18603fbe432d83aafd7b7d28af
|
|
| MD5 |
cadd83a00fce14a0d2a5b8697b7c9182
|
|
| BLAKE2b-256 |
6b401e713e02bb77c77d05a53e34960488095147a2df377b843b3e104ceb9b89
|
Provenance
The following attestation bundles were made for state_harness-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl:
Publisher:
release.yml on vishal-dehurdle/state-harness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
state_harness-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl -
Subject digest:
4b3f8a177ff467e36d97c2d90a4509db5ec53f18603fbe432d83aafd7b7d28af - Sigstore transparency entry: 1682997241
- Sigstore integration time:
-
Permalink:
vishal-dehurdle/state-harness@cff0778f29d7fec314a8066cdd7748c302487b70 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vishal-dehurdle
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cff0778f29d7fec314a8066cdd7748c302487b70 -
Trigger Event:
push
-
Statement type: