Skip to main content

AI Integrity Receipts — cryptographic receipts for commits with declared AI involvement

Project description

Invariant Systems

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.

PyPI CI License: Apache-2.0 Zero Dependencies Website GitHub Marketplace GitLab CI/CD Catalog OpenSSF Scorecard GitHub stars

AIIR terminal demo — pip install aiir && aiir --pretty


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 releaseaiir-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/verify Check 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 into run: 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-identity and --signer-issuer in 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 commitgit add .aiir/ is your entire audit trail
  • Auto-deduplicates — re-running aiir on the same commit is a no-op
  • Git-friendly — append-only JSONL means clean diffs and easy git blame
  • Queryablejq, grep, and wc -l all 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.repository field is part of the content hash. The same commit produces a different receipt_id if 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:

[![AIIR Receipts](https://img.shields.io/badge/AIIR-Receipted-blue)](https://github.com/invariant-systems-ai/aiir)

Preview: AIIR Receipts

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aiir-1.3.0.tar.gz (187.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aiir-1.3.0-py3-none-any.whl (134.4 kB view details)

Uploaded Python 3

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

Hashes for aiir-1.3.0.tar.gz
Algorithm Hash digest
SHA256 53b1e7b11f9c99eeda65ee82e745091d81694bcbb965bd6e3b2fe496ee2ba3c6
MD5 dde25ac3ca84b8fd40a36daf2fad1179
BLAKE2b-256 73b55bc8d60c04021d89597a0d758633913a6501e163c3b84665890a471e0342

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiir-1.3.0.tar.gz:

Publisher: publish.yml on invariant-systems-ai/aiir

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for aiir-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8050312d605d6dd9932060078a7c9dbd535675ecb35bda158ceb652a6ac4fc3e
MD5 54390898e3f890f8779be0b68e972e0c
BLAKE2b-256 5d8adc660f30ff668bb47867d1e819f2baea95aa834e82b407025fdb719318fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiir-1.3.0-py3-none-any.whl:

Publisher: publish.yml on invariant-systems-ai/aiir

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page