AI Integrity Receipts — cryptographic receipts for commits with declared AI involvement
Project description
AIIR — AI Integrity Receipts
The missing provenance layer for AI-assisted code.
Your team uses AI to write code. In six months, someone — an auditor, a security review, a regulator, a customer — will ask: which parts of this codebase were AI-generated, and can you prove it?
Git history can't answer that. Co-authored-by trailers are inconsistent and easy to strip. Policy documents aren't machine-verifiable. Today, most AI involvement in code leaves no durable, tamper-evident trace.
AIIR closes that gap. It generates deterministic, content-addressed receipts for commits with declared AI involvement, and verifies them anywhere — locally, in CI, or offline — without trusting a central service. Zero dependencies. Apache 2.0.
Install → Generate → Verify
pip install aiir # Python 3.9+, zero dependencies
cd your-repo
aiir --pretty # receipt your last commit
aiir --verify .aiir/receipts.jsonl # verify nothing was tampered with
That's it. Your last commit now has a content-addressed receipt in .aiir/receipts.jsonl. Run it again on the same commit: same receipt, zero duplicates. Add CI and signing later only if you need stronger release evidence.
What just happened?
┌─ Receipt: g1-a3f8b2c1d4e5f6a7...
│ Commit: c4dec85630
│ Author: Jane Dev <jane@example.com>
│ Files: 4 changed
│ AI: YES (copilot)
│ Hash: sha256:7f3a8b...
└──────────────────────────────────────
AIIR read your commit metadata, canonicalized the declared AI context, and produced a content-addressed receipt. Change one byte in the receipt core and verification fails — that's the tamper-evidence.
Without signing, a receipt proves integrity (nothing was altered). Add Sigstore signing in CI for authenticity (proving who generated it).
Verification does not require trusting AIIR or a hosted service. Receipts are plain JSON and can be checked anywhere a verifier runs.
What AIIR does — and does not do
AIIR does three things at its core:
- Records declared AI involvement in commit metadata
- Generates deterministic, tamper-evident receipts for those commits
- Verifies those receipts independently across local, CI, and offline workflows
AIIR does not attempt to prove hidden AI usage.
It does not claim to detect every undeclared use of Copilot, ChatGPT, Claude, Cursor, or any other tool. Its job is narrower and stronger: make declared AI involvement verifiable and tamper-evident.
Why not just trailers or git notes?
You could track AI involvement with Co-authored-by trailers or ADRs — and AIIR is compatible with that. The difference:
- Machine-verifiable — receipts have a deterministic hash. Change one byte and verification fails.
- Consistent — same format across CLI, editor, CI, and AI assistants instead of ad-hoc free text.
- Optional signing — add Sigstore in CI when you need cryptographic non-repudiation.
Trailers are the baseline. AIIR makes that baseline verifiable.
Declared Provenance and Optional Signal Enrichment
AIIR records what is declared in commit metadata, not what is hidden.
Detection signals are optional enrichment. They help normalize and classify declared context, but they are not authoritative proof of hidden AI usage.
Catches: Co-authored-by: Copilot trailers, bot authors (Dependabot, Renovate), Generated-by: trailers, 48 known AI-tool signals, and Unicode evasion attempts (TR39 confusable resolution, NFKC normalization).
Does not catch: Copilot inline completions (no trailer), copy-paste from ChatGPT, agent-mode sessions (Copilot Chat, Claude Code, Cursor Agent), squash merges that strip trailers, or amended commits.
We built this repo mostly with Copilot Chat. Of 252 dogfood receipts, 199 are classified human because Copilot Chat doesn't add trailers. Those false negatives aren't a bug — they're the gap AIIR exists to close by encouraging the ecosystem to declare.
See THREAT_MODEL.md for the full STRIDE/DREAD analysis, and the detection table below for every signal.
System Layers
AIIR is one kernel with trust layers around it, not a bundle of separate products.
- Kernel — deterministic receipts + independent verification
- Assurance — signing, policy enforcement, release evidence
- Adapters — CLI, GitHub Action, GitLab CI, VS Code, MCP, browser verification
- Enrichment — AI signal detection, heuristics, metadata extraction
Everything above emits or verifies the same receipt format.
Where AIIR fits in the supply chain
AIIR is not a replacement for SLSA, in-toto, or SCITT. It fills a specific gap: authorship-level provenance — recording who or what produced a code change, before it enters the build pipeline.
| System | Layer | What it proves | Where AIIR fits |
|---|---|---|---|
| SLSA | Build provenance | How an artifact was built, from which source | AIIR receipts feed SLSA as source-level attestations |
| in-toto | Supply chain attestation | That each step in a layout was performed correctly | AIIR wraps receipts as in-toto Statements (--in-toto) |
| SCITT | Transparency ledger | That a claim was registered in a tamper-evident log | AIIR receipts are valid SCITT claims (content-addressed, signable) |
| Sigstore | Signing infrastructure | Who signed an artifact (identity binding) | AIIR uses Sigstore for receipt signing (--sign) |
| OpenSSF Scorecard | Project health | Security posture of an OSS project | Orthogonal — AIIR tracks per-commit AI provenance, not project posture |
| Git trailers | Commit metadata | Free-text annotation | AIIR makes trailers machine-verifiable and tamper-evident |
Think of it this way: Git records that a change happened. SLSA records how the artifact was built. AIIR records what produced the change — human, AI-assisted, or bot — with a verifiable receipt.
Next steps: pick your path
Once the CLI works for you, add whichever surface fits your workflow:
VS Code
Install the AIIR extension — receipt commits, inspect AI signals, and verify directly in the editor. Type @aiir in Copilot Chat for receipt generation, verification, and policy checks without leaving the conversation.
CI/CD
# GitHub Actions — one line (signing on by default)
- uses: invariant-systems-ai/aiir@v1
with:
output-dir: .receipts/
# GitLab CI/CD Catalog — one line
include:
- component: gitlab.com/invariant-systems/aiir/receipt@1
See GitHub Action details, GitLab CI details, or other CI platforms (Azure, CircleCI, Bitbucket, Jenkins, Docker).
AI assistants via MCP
{
"mcpServers": {
"aiir": { "command": "aiir-mcp-server", "args": ["--stdio"] }
}
}
Works with Claude, Copilot, Cursor, Continue, Cline, and Windsurf. Your assistant generates receipts automatically after writing code.
Adoption guides
| Guide | For |
|---|---|
| Solo developer | Local receipting, pre-commit hook, no CI needed |
| OSS maintainer | Signed CI receipts, policy gates, contributor guidelines |
| Security team | Independent verification, trust tiers, compliance integration |
See also: Verify AIIR independently — verify receipts without trusting AIIR, using only standard tools.
Proof points
Everything below is verifiable. No testimonials-behind-a-login — just public artifacts you can audit yourself.
These proof surfaces support the kernel. They do not replace it.
| Proof | What it proves | Verify it |
|---|---|---|
| This repo receipts itself | Dogfood — AIIR generates its own receipts on every push to main |
for f in .receipts/*.json; do aiir --verify "$f"; done |
| 2,214 collected tests, 100% coverage | Every release passes Python 3.9–3.13 × Ubuntu/macOS/Windows | CI runs |
| 97 conformance test vectors | Third-party implementors can verify hashing, adversarial handling, Unicode evasion, and canonicalization | schemas/test_vectors.json, conformance-manifest.json |
| 153 security controls | Full STRIDE/DREAD analysis — we show attackers what we defend against | THREAT_MODEL.md |
| Release evidence on every release | PyPI artifacts, GitHub provenance bundles, the release SBOM, and a Rekor-backed release manifest are bound into a public verification surface | python scripts/verify-release-evidence.py 1.3.0 |
| OpenSSF Scorecard | Automated security health assessment | Scorecard |
| CycloneDX SBOM | Machine-readable bill of materials on every GitHub Release | Latest release → aiir-sbom.cdx.json |
| Zero runtime dependencies | Nothing to compromise | pip install aiir && pip show aiir |
| Browser verifier | Client-side receipt verification — no upload, no account | invariantsystems.io/verify |
Trust tiers
| Tier | What you get | Use when |
|---|---|---|
Unsigned (sign: false) |
Tamper-evident — hash integrity detects modification | Local dev, internal audit trails |
| Inference-Bound | Model output cryptographically committed via hash chain | Verifying AI inference provenance |
Signed (sign: true, default in CI) |
Authenticity — Sigstore binds the receipt to an OIDC identity | CI/CD compliance, SOC 2 evidence |
Enveloped (--in-toto --sign) |
Signed + in-toto Statement v1 envelope | SLSA provenance, EU AI Act evidence |
Verification pipeline
git commit → AIIR receipt → Sigstore signing → Policy evaluation → VSA → CI gate
For developers: add aiir to CI and get a pass/fail check.
For security teams: get policy-evaluated results as signed attestations.
For auditors: query the JSONL ledger — every claim is cryptographically verifiable.
# Verify a receipt with explanation
aiir --verify receipt.json --explain
# Verify an inference receipt (auto-detected by field signature)
aiir --verify inference_receipt.json
# Evaluate all receipts against policy, emit a Verification Summary Attestation
aiir --verify-release --policy strict --emit-vsa
CLI reference
# Receipt the last commit (auto-saves to .aiir/receipts.jsonl)
aiir --pretty
# Receipt a whole PR branch
aiir --range origin/main..HEAD --pretty
# Only AI-authored commits (CI mode)
aiir --ai-only --output .receipts/
# Verify with explanation
aiir --verify receipt.json --explain
# Sign + in-toto envelope (full supply-chain attestation)
aiir --sign --in-toto --output .receipts/
# Policy gate in CI
aiir --check --policy strict
# Release verification → VSA
aiir --verify-release --receipts .aiir/receipts.jsonl --emit-vsa --policy strict
Full CLI reference
# Print JSON to stdout for piping (bypasses ledger)
aiir --json | jq .receipt_id
# JSON Lines output for streaming
aiir --range HEAD~5..HEAD --jsonl | jq .receipt_id
# Custom ledger location
aiir --ledger .audit/
# Wrap receipts in an in-toto Statement v1 envelope
aiir --range HEAD~3..HEAD --in-toto --output .receipts/
# Attach agent attestation metadata
aiir --agent-tool copilot --agent-model gpt-4o --agent-context ide
# Initialize .aiir/ directory
aiir --init # scaffolds receipts.jsonl, index, config, .gitignore
aiir --init --policy strict # also creates policy.json
# Review receipts — human attestation
aiir --review HEAD
aiir --review abc123 --review-outcome rejected --review-comment "needs refactor"
# Commit trailers
aiir --trailer # prints AIIR-Receipt, AIIR-Type, AIIR-AI, AIIR-Verified
# Policy engine
aiir --policy-init strict # creates .aiir/policy.json
aiir --check --policy strict # CI gate: fail if policy violated
aiir --check --max-ai-percent 50 # fail if >50% commits are AI-authored
# Ledger utilities
aiir --stats # dashboard of ledger statistics
aiir --badge # shields.io badge Markdown
aiir --export backup.json # portable JSON bundle
# Privacy — omit file paths from receipts
aiir --redact-files --namespace acme-corp
# Native GitLab CI mode
aiir --gitlab-ci --output .receipts/
aiir --gitlab-ci --gl-sast-report
Reference
Detection details
Declared AI assistance
| Signal | Examples |
|---|---|
| Copilot | Co-authored-by: Copilot, Co-authored-by: GitHub Copilot |
| ChatGPT | Generated by ChatGPT, Co-authored-by: ChatGPT |
| Claude | Generated by Claude, Co-authored-by: Claude |
| Cursor | Generated by Cursor, Co-authored-by: Cursor |
| Amazon Q / CodeWhisperer | amazon q, codewhisperer, Co-authored-by: Amazon Q |
| Devin | Co-authored-by: Devin, devin[bot] |
| Gemini | gemini code assist, google gemini, gemini[bot] |
| GitLab Duo | gitlab duo, duo code suggestions, duo chat, duo enterprise |
| Tabnine | tabnine in commit metadata |
| Aider | aider: prefix in commit messages |
| Generic markers | AI-generated, LLM-generated, machine-generated |
| Git trailers | Generated-by:, AI-assisted:, Tool: |
Automation / bot activity
| Signal | Examples |
|---|---|
| Dependabot | dependabot[bot] as author |
| Renovate | renovate[bot] as author |
| Snyk | snyk-bot as author |
| CodeRabbit | coderabbit[bot] as author |
| GitHub Actions | github-actions[bot] as author |
| GitLab Bot | gitlab-bot as author |
| DeepSource | deepsource[bot] as author |
Since v1.0.4, bot and AI signals are fully separated. A Dependabot commit gets is_bot_authored: true and authorship_class: "bot", not is_ai_authored: true.
Detection internals
Homoglyph detection uses the full Unicode TR39 confusable map — 669 single-codepoint → ASCII mappings across 69 scripts. Combined with NFKC normalization, this covers all single-character homoglyphs documented by the Unicode Consortium. Multi-character confusable sequences are not covered — see S-02 in the threat model.
GitHub Action details
Full workflow (signed, with PR integration)
name: AIIR
on:
push:
tags-ignore: ['**']
pull_request:
permissions:
id-token: write
contents: read
checks: write
pull-requests: write
jobs:
receipt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: invariant-systems-ai/aiir@v1
with:
output-dir: .receipts/
Signing is on by default. Artifacts uploaded automatically when output-dir is set.
Hardened (pin to full SHA):
- uses: invariant-systems-ai/aiir@a54fe440a2be18fe51ad30149f1bbab944d578e5 # v1
Unsigned (no permissions needed):
- uses: invariant-systems-ai/aiir@v1
with:
sign: false
Automatic PR integration (when GITHUB_TOKEN is available):
- Creates an
aiir/verifyCheck Run (pass/fail status on every PR) - Posts a receipt summary comment (idempotent, no spam)
Inputs
| Input | Description | Default |
|---|---|---|
ai-only |
Only receipt AI-authored commits | false |
commit-range |
Specific commit range (e.g., main..HEAD) |
Auto-detected |
output-dir |
Directory to write receipt JSON files | (log only) |
sign |
Sign receipts with Sigstore | true |
Outputs
| Output | Description |
|---|---|
receipt_count |
Number of receipts generated |
ai_commit_count |
Number of AI-authored commits detected |
signed_receipt_count |
Number of signed receipts generated |
unsigned_receipt_count |
Number of unsigned receipts generated |
receipts_json |
Full JSON array (set to "OVERFLOW" if >1 MB) |
receipts_overflow |
"true" when truncated |
⚠️ Security note on
receipts_json: Contains commit metadata which may include shell metacharacters. Never interpolate directly intorun:steps via${{ }}. Write to a file instead.
Example: PR Comment with AI Summary
- uses: invariant-systems-ai/aiir@v1
id: receipt
with:
output-dir: .receipts/
- name: Comment on PR
if: steps.receipt.outputs.ai_commit_count > 0
uses: actions/github-script@v7
with:
script: |
const count = '${{ steps.receipt.outputs.ai_commit_count }}';
const total = '${{ steps.receipt.outputs.receipt_count }}';
const signed = '${{ steps.receipt.outputs.signed_receipt_count }}';
const unsigned = '${{ steps.receipt.outputs.unsigned_receipt_count }}';
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `🔐 **AIIR**: ${total} commits receipted, ${count} AI-authored, ${signed} signed, ${unsigned} unsigned.\n\nReceipts uploaded as build artifacts.`
});
GitLab CI details
CI/CD Catalog component (recommended — browse in Catalog):
include:
- component: gitlab.com/invariant-systems/aiir/receipt@1
inputs:
stage: test
| Input | Type | Default | Description |
|---|---|---|---|
stage |
string | test |
Pipeline stage |
version |
string | 1.3.0 |
AIIR version from PyPI |
ai-only |
boolean | false |
Only receipt AI-authored commits |
output-dir |
string | .aiir-receipts |
Artifact output directory |
artifact-expiry |
string | 90 days |
Artifact retention |
sign |
boolean | true |
Sigstore keyless signing (GitLab OIDC) |
gl-sast-report |
boolean | false |
Generate SAST report for Security Dashboard |
approval-threshold |
number | 0 |
AI% threshold for extra MR approvals (0 = off) |
extra-args |
string | "" |
Additional CLI flags |
Legacy include (no Catalog required):
include:
- remote: 'https://raw.githubusercontent.com/invariant-systems-ai/aiir/v1.3.0/templates/gitlab-ci.yml'
Self-hosted GitLab? Mirror the repo and use project: instead:
include:
- project: 'your-group/aiir'
ref: 'v1.3.0'
file: '/templates/gitlab-ci.yml'
Customise via pipeline variables: AIIR_VERSION, AIIR_AI_ONLY, AIIR_EXTRA_ARGS, AIIR_ARTIFACT_EXPIRY. See templates/gitlab-ci.yml.
More CI/CD platforms (Docker, Bitbucket, Azure, CircleCI, Jenkins)
Docker
docker run --rm -v "$(pwd):/repo" -w /repo invariantsystems/aiir --pretty
docker run --rm -v "$(pwd):/repo" -w /repo invariantsystems/aiir --ai-only --output .receipts/
Works in any CI system that supports container steps — Tekton, Buildkite, Drone, Woodpecker, etc.
pre-commit Hook
# .pre-commit-config.yaml
repos:
- repo: https://github.com/invariant-systems-ai/aiir
rev: v1.3.0
hooks:
- id: aiir
Runs post-commit. Customise with args: ["--ai-only", "--output", ".receipts"]
Bitbucket Pipelines
pipelines:
default:
- step:
name: AIIR Receipt
image: python:3.11
script:
- pip install aiir
- aiir --pretty --output .receipts/
artifacts:
- .receipts/**
Full template: templates/bitbucket-pipelines.yml
Azure DevOps
steps:
- task: UsePythonVersion@0
inputs: { versionSpec: '3.11' }
- script: pip install aiir && aiir --pretty --output .receipts/
displayName: 'Generate AIIR receipt'
- publish: .receipts/
artifact: aiir-receipts
Full template: templates/azure-pipelines.yml
CircleCI
jobs:
receipt:
docker:
- image: cimg/python:3.11
steps:
- checkout
- run: pip install aiir && aiir --pretty --output .receipts/
- store_artifacts:
path: .receipts
Full template: templates/circleci/config.yml
Jenkins
pipeline {
agent { docker { image 'python:3.11' } }
stages {
stage('AIIR Receipt') {
steps {
sh 'pip install aiir && aiir --pretty --output .receipts/'
archiveArtifacts artifacts: '.receipts/**'
}
}
}
}
Full template: templates/jenkins/Jenkinsfile
Sigstore signing
Sign receipts with Sigstore keyless signing for cryptographic non-repudiation:
permissions:
id-token: write
contents: read
steps:
- uses: invariant-systems-ai/aiir@v1
with:
output-dir: .receipts/
sign: true
Fork PRs: GitHub does not grant OIDC tokens to fork pull requests. AIIR will detect the missing credential and fail with a clear error rather than hanging.
Each receipt gets an accompanying .sigstore bundle (Fulcio certificate + Rekor transparency log entry + signature).
# Basic: checks signature is valid (any signer)
aiir --verify receipt.json --verify-signature
# Recommended: pin to a specific CI identity
aiir --verify receipt.json --verify-signature \
--signer-identity "https://github.com/myorg/myrepo/.github/workflows/aiir.yml@refs/heads/main" \
--signer-issuer "https://token.actions.githubusercontent.com"
⚠️ Always use
--signer-identityand--signer-issuerin production. Without identity pinning, verification accepts any valid Sigstore signature.
Install signing support: pip install aiir[sign]
Ledger — .aiir/ directory
By default, aiir appends receipts to a local JSONL ledger:
.aiir/
├── receipts.jsonl # One receipt per line (append-only)
└── index.json # Auto-maintained lookup index
- One file to commit —
git add .aiir/is your entire audit trail - Auto-deduplicates — re-running
aiiron the same commit is a no-op - Git-friendly — append-only JSONL means clean diffs and easy
git blame - Queryable —
jq,grep, andwc -lall work naturally
| Flag | Behaviour |
|---|---|
| (none) | Append to .aiir/receipts.jsonl (default) |
--ledger .audit/ |
Append to custom ledger directory |
--json |
Print JSON to stdout — no ledger write |
--jsonl |
Print JSON Lines to stdout — no ledger write |
--output dir/ |
Write individual files to dir/ — no ledger write |
--pretty |
Human-readable summary to stderr (combines with any mode) |
Receipt format
{
"type": "aiir.commit_receipt",
"schema": "aiir/commit_receipt.v2",
"receipt_id": "g1-a3f8b2c1d4e5f6a7b8c9d0e1f2a3b4",
"content_hash": "sha256:7f3a...",
"timestamp": "2026-03-06T09:48:59Z",
"commit": {
"sha": "c4dec85630232666aba81b6588894a11d07e5d18",
"author": { "name": "Jane Dev", "email": "jane@example.com" },
"subject": "feat: add receipt generation to CI",
"files_changed": 4
},
"ai_attestation": {
"is_ai_authored": true,
"signals_detected": ["message_match:co-authored-by: copilot"],
"authorship_class": "ai_assisted",
"detection_method": "heuristic_v2"
}
}
Content-addressed: receipt_id is derived from SHA-256 of the canonical JSON. Change any field → hash changes → receipt invalid.
Receipt identity depends on repository provenance. The
provenance.repositoryfield is part of the content hash. The same commit produces a differentreceipt_idif the remote URL changes (fork, rename, etc.).
Release verification & VSA
aiir --verify-release --receipts .aiir/receipts.jsonl --policy strict --emit-vsa
Produces an in-toto Statement v1 with a Verification Summary Attestation predicate recording: verifier identity, policy digest, coverage metrics, and pass/fail result.
Policy presets: strict (hard-fail, signing required, zero unsigned receipts, max 50% AI), balanced (soft-fail, signing recommended), permissive (warn-only). Customise via .aiir/policy.json.
Policy engine
aiir --policy-init strict # creates .aiir/policy.json
aiir --check --policy strict
aiir --check --max-ai-percent 50
| Preset | Enforcement | Signing | Max AI % | Use case |
|---|---|---|---|---|
strict |
Hard-fail | Required | 50% | Regulated industries, SOC 2, EU AI Act |
balanced |
Soft-fail | Recommended | 80% | Most teams |
permissive |
Warn-only | Optional | 100% | Early adoption |
Agent attestation
aiir --agent-tool copilot --agent-model gpt-4o --agent-context ide
Stored in extensions.agent_attestation (not part of the content hash). Six allowlisted keys: tool_id, model_class, session_id, run_context, tool_version, confidence.
MCP server details
Seven tools: aiir_receipt, aiir_verify, aiir_stats, aiir_explain, aiir_policy_check, aiir_verify_release, aiir_gitlab_summary.
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"aiir": { "command": "aiir-mcp-server", "args": ["--stdio"] }
}
}
VS Code / Copilot (.vscode/mcp.json):
{
"servers": {
"aiir": { "command": "aiir-mcp-server", "args": ["--stdio"] }
}
}
Also works with Cursor (.cursor/mcp.json), Continue (.continue/mcpServers/), Cline (cline_mcp_settings.json), and Windsurf (~/.codeium/windsurf/mcp_config.json).
in-toto Statement wrapping
aiir --in-toto --output .receipts/
aiir --sign --in-toto --output .receipts/
Predicate type: https://invariantsystems.io/predicates/aiir/commit_receipt/v1. Compatible with SLSA verifiers, Sigstore policy-controller, Kyverno/OPA, and Tekton Chains.
Show AIIR in your README
Add a transparency badge so reviewers and auditors know your project receipts AI involvement:
aiir --badge # auto-generates Markdown with your repo's AI %
Or copy a static badge:
[](https://github.com/invariant-systems-ai/aiir)
The --badge variant reads your ledger and shows the actual AI-assisted percentage. The static badge signals adoption without revealing stats.
Specification & schemas
| Document | Purpose |
|---|---|
| SPEC.md | Normative specification — canonical JSON, content addressing, verification |
| SPEC_GOVERNANCE.md | Change control, compatibility policy, extension registry |
| docs/ecosystem.md | Where AIIR fits — comparison with SLSA, in-toto, SCITT, Sigstore |
| schemas/commit_receipt.v2.schema.json | JSON Schema (draft 2020-12) for current receipt format |
| schemas/test_vectors.json | 25 core vectors in this file; 97 total across all published vector files and formats |
| schemas/verification_summary.v1.schema.json | JSON Schema for VSA predicate |
| THREAT_MODEL.md | STRIDE/DREAD threat model |
| docs/tamper-detection.md | Walkthrough — what happens when a receipt is modified |
| docs/stability-contract.md | 1.0 stability contract — what freezes, what doesn't |
| docs/verify-independently.md | Verify receipts without trusting AIIR |
About
Built by Invariant Systems, Inc. — Apache-2.0.
Citing: Use the Cite this repository button on GitHub or see CITATION.cff.
Trademarks: "AIIR", "AI Integrity Receipts", and "Invariant Systems" are trademarks of Invariant Systems, Inc. See TRADEMARK.md.
Signed releases: Every PyPI release uses Trusted Publishers (OIDC) — no static API tokens. Each release is tied to a specific GitHub Actions run, commit SHA, and workflow file.
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 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 aiir-1.3.0.tar.gz.
File metadata
- Download URL: aiir-1.3.0.tar.gz
- Upload date:
- Size: 187.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53b1e7b11f9c99eeda65ee82e745091d81694bcbb965bd6e3b2fe496ee2ba3c6
|
|
| MD5 |
dde25ac3ca84b8fd40a36daf2fad1179
|
|
| BLAKE2b-256 |
73b55bc8d60c04021d89597a0d758633913a6501e163c3b84665890a471e0342
|
Provenance
The following attestation bundles were made for aiir-1.3.0.tar.gz:
Publisher:
publish.yml on invariant-systems-ai/aiir
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aiir-1.3.0.tar.gz -
Subject digest:
53b1e7b11f9c99eeda65ee82e745091d81694bcbb965bd6e3b2fe496ee2ba3c6 - Sigstore transparency entry: 1203554292
- Sigstore integration time:
-
Permalink:
invariant-systems-ai/aiir@777ac9b4811ee5c7ca737759bcc6a1dd5635f88c -
Branch / Tag:
refs/tags/v1.3.0 - Owner: https://github.com/invariant-systems-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@777ac9b4811ee5c7ca737759bcc6a1dd5635f88c -
Trigger Event:
push
-
Statement type:
File details
Details for the file aiir-1.3.0-py3-none-any.whl.
File metadata
- Download URL: aiir-1.3.0-py3-none-any.whl
- Upload date:
- Size: 134.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8050312d605d6dd9932060078a7c9dbd535675ecb35bda158ceb652a6ac4fc3e
|
|
| MD5 |
54390898e3f890f8779be0b68e972e0c
|
|
| BLAKE2b-256 |
5d8adc660f30ff668bb47867d1e819f2baea95aa834e82b407025fdb719318fd
|
Provenance
The following attestation bundles were made for aiir-1.3.0-py3-none-any.whl:
Publisher:
publish.yml on invariant-systems-ai/aiir
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aiir-1.3.0-py3-none-any.whl -
Subject digest:
8050312d605d6dd9932060078a7c9dbd535675ecb35bda158ceb652a6ac4fc3e - Sigstore transparency entry: 1203554297
- Sigstore integration time:
-
Permalink:
invariant-systems-ai/aiir@777ac9b4811ee5c7ca737759bcc6a1dd5635f88c -
Branch / Tag:
refs/tags/v1.3.0 - Owner: https://github.com/invariant-systems-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@777ac9b4811ee5c7ca737759bcc6a1dd5635f88c -
Trigger Event:
push
-
Statement type: