Changelog
Notable changes across the Aira platform — backend, dashboard, SDKs, and docs. Reverse chronological. SDK releases are versioned and linked to PyPI / npm.
This page lists notable changes across all five Aira surfaces (backend
API, dashboard, Python SDK, TypeScript SDK, docs). SDK releases are
versioned and linked to PyPI / npm; backend / dashboard ship
continuously off main.
If you're integrating against the API, the wire contract is stable —
nothing in the changelog below is a breaking change. Field names
(action_uuid, receipt_uuid, etc.) are the same as they've always
been; only user-facing labels and added features have changed.
Frontier Model Expansion — 2026-08-19
25 new models across 8 providers. Cohere added as 13th provider.
New models: gpt-5.6, gpt-5.6-terra, gpt-5.6-luna, o4-mini, claude-opus-5, claude-sonnet-5, gemini-3.7-flash, gemini-3.6-flash, grok-4.6, grok-4.5, deepseek-v4-flash, mistral-medium-3.5, mistral-small-3.2, kimi-k3, qwen3.8-max, glm-5.3, command-a-plus, plus 8 cloud variants (Bedrock, Azure, Vertex).
Cohere: new provider with Command A+ model via OpenAI-compatible API (api.cohere.com/compatibility/v1). Added to backend config, schemas, frontend provider definitions, and docs.
Credential source: GET /api/v1/models returns credential_source per model (byok, platform, or null).
Total built-in models: 61 (was 37).
Auto-Merge — 2026-07-25
Clean PRs auto-merge after governance scan. PRs with violations go through an AI-evaluated auto-merge policy.
Flow: 0 violations → auto-approve and squash-merge. N violations + auto-merge policy → AI evaluates whether violations are safe to skip or must block. No policy + violations → blocked (safe default).
Before merging: dismisses prior CHANGES_REQUESTED reviews, resolves all conversation threads, posts merge decision comment with reasoning. If violations were allowed, generates follow-up guidance tagging the PR author with file:line references.
Policy modes: AI (single model) or consensus (multi-model vote). Write rules in plain language.
Merge methods: squash (default), rebase, merge.
Webhook: action.auto_merged event fired with full audit trail.
Gated behind github_auto_merge feature flag.
Built-in Code Review Agent — 2026-07-15
Zero-config PR governance. Every connected repo gets reviewed automatically — no policies needed.
Built-in categories:
- Security (critical): hardcoded secrets, SQL injection, XSS, SSRF, missing auth, weak crypto, insecure deserialization
- Data protection (critical): PII in logs, sensitive data in error messages, missing input sanitization
- Error handling (warning): empty catch blocks, overly broad catches, missing null checks
- Performance (warning): N+1 queries, unbounded queries, resource leaks, sync blocking in async
- Code quality (warning): console.log/print in production, dead code, magic numbers
Critical findings block the merge. Warning findings are posted as comments.
Default model: claude-sonnet-4-6, configurable per org via Dashboard → Models → Code Review tab.
PR description verification: when a PR has a substantive description (>50 chars), Aira verifies the code delivers what the description promises.
Scan caching and rate limiting added to prevent redundant scans.
Custom policies still stack on top of the built-in agent.
Dashboard-Only Approvals — 2026-07-10
Approve/deny actions exclusively in the dashboard. Email, Slack, and Teams messages are notification-only with a dashboard link.
Approval token flow removed entirely — simpler, more secure.
details_preview stored on actions and piped through to all notification channels.
Modern email templates with shared branding wrapper. Consistent expiry copy across all channels.
Microsoft Teams Integration — 2026-07-08
Approval notifications via Adaptive Cards in Teams channels.
Uses Workflows (Power Automate) — no Azure app registration required. Admin pastes a webhook URL, Aira posts Adaptive Card v1.4 with action details and a dashboard link.
Gated behind teams_integration feature flag.
Slack Integration — 2026-07-01
Approval notifications in Slack channels via OAuth.
Cloud: one-click connect from Dashboard → Integrations → Slack. Self-hosted: create your own Slack app, set OAuth callback URL.
Bot token encrypted at rest (AES-256-GCM). Channel selection, test notification, disconnect.
Gated behind slack_integration feature flag.
Notification Channel Dispatcher — 2026-07-01
Unified channel abstraction: email, Slack, and Teams. All configured channels receive approval notifications in parallel. Per-channel failures are caught and logged — one failing channel doesn't block the others.
GET /api/v1/approvers/notification-channels returns available
channels based on what is connected. PUT updates the active list.
Anthropic Prompt Caching — 2026-07-15
All LLM prompts upgraded for Claude's prompt caching. Reduces latency and cost on repeated policy evaluations and code reviews with the same system prompt.
Universal Receipts — 2026-04-15
Every terminal action state now produces a signed Ed25519 receipt.
Previously, only successful actions (notarized) were signed; denials
and failures were recorded in the audit log but lacked cryptographic
proof.
New receipt statuses:
notarized— action completed successfully, receipt seals the outcome.denied— policy blocked the action, receipt proves the system caught it.failed— action executed but failed, receipt records the failure.denied_by_human— human reviewer rejected the action, receipt records who and when.
Gateway: policy denials now return a receipt_uuid in the error
response body (both OpenAI and Anthropic formats), so the denial is
cryptographically verifiable without a second API call.
Zero audit gaps. A regulator can verify any decision Aira made, including the ones it blocked.
SDKs v3.1.0 — DORA compliance module — 2026-04-14
Full support for the EU Digital Operational Resilience Act (Regulation 2022/2554) — in force since 17 January 2025, mandatory for every EU financial entity and their critical ICT providers.
Install:
pip install aira-sdk==3.1.0
npm install aira-sdk@3.1.0Backend: new /api/v1/dora/* routes covering Articles 17–19
(incidents), 24–27 (resilience testing), and 28–44 (ICT third-party
register). Major-incident PDFs are rendered server-side and signed
with Ed25519 using the same key infrastructure as EU AI Act reports.
Gated behind ENABLE_DORA=true (default on).
Python + TypeScript SDKs (v3.1.0): 12 new methods each, sync +
async mirrors on Python. New types: DoraIncident, IctThirdParty,
DoraTest.
Dashboard: three new admin-only sections under
/dashboard/dora/ — incidents list + detail + classify/resolve flows,
ICT third-party register CRUD, resilience test log.
Docs: three new guides (DORA compliance, incident reporting, third-party risk) plus the DORA API reference.
SDKs v2.4.0 — 2026-04-15
Three phases of SDK work, catching up since v2.1.0. All additive.
Install:
pip install aira-sdk==2.4.0
npm install aira-sdk@2.4.0Phase B — Article 6 signed explanation envelope (v2.2.0):
verify_action_explanation()/verifyActionExplanation()on both syncAiraandAsyncAira. Public endpoint — no API key needed, so a regulator or auditor with just the saved JSON can re-verify.ActionExplanationcarries an_envelopeblock (Ed25519 signature over the canonical JSON of the explanation, excluding the envelope itself andrequest_id).- New types:
ExplanationVerification,ExplanationEnvelope(TS).
Phase C — Annex IV technical documentation (v2.3.0):
- New constant
FRAMEWORK_ANNEX_IV = "eu_ai_act_annex_iv"exported from both SDKs alongsideFRAMEWORK_ART12 / ART9 / ART6. create_compliance_report(framework=FRAMEWORK_ANNEX_IV, ...)generates the full Annex IV technical file mapped 1:1 to the nine sub-sections referenced by Article 11. 10-year retention.
Phase 2 — Output content-scan policy (v2.4.0):
get_output_policy()/update_output_policy(**fields)(PATCH semantics — only fields you pass change). Admin role required.ActionReceipt.output_scan_flags: dict | Nonecarries the mode (flag/deny/redact), decision, worst severity, libraries, and per-pattern hits.Nonewhen output filtering is disabled.- New types:
OutputPolicy,OutputPolicyUpdate,OutputScanFlags,OutputScanHit(TS).
See Output Filtering and the envelope guide for the full behaviour.
Backend + Dashboard — 2026-04-15
Output content filtering (Phase 2)
- New
enable_output_filteringfeature flag, defaultTrue. POST /api/v1/output-policiesGET + PATCH for the per-org policy. Admin-only. Returns 404 when feature flag off.POST /api/v1/output-policies/test— dry-run sandbox. Returns what would fire under the current policy without minting a receipt. Powers the dashboard "Test your policy" panel at/dashboard/settings/output-filtering.- Notarize hook scans
outcome_detailsagainst the org's policy. Three modes:flag(record on the receipt),deny(refuse the receipt with HTTP 422OUTPUT_SCAN_VIOLATION, action stays at pre-notarize state),redact(matched spans replaced with[REDACTED]before the outcome is hashed and signed). output_scan_flagsJSON column added toaction_receipts— part of the signed canonical payload, so the scan result is cryptographically tamper-evident.output_scan_policyJSON column added toorganizations— hydrated with defaults on read.
See Output Filtering guide + API reference.
Article 6 signed envelope (Phase B)
- Every
GET /api/v1/actions/{id}/explanationresponse carries an_envelopeblock (Ed25519 signature, content_hash, signing_key_id, generated_at). - New public endpoint
POST /api/v1/verify/explanation— accepts a saved explanation JSON, recomputes the canonical hash, verifies the signature against the public key registered at the JWKS endpoint. No auth required. - PDF rendering of Article 6 explanations now embeds the envelope metadata so paper exports carry the same proof as the JSON form.
Annex IV technical documentation (Phase C)
- New compliance report framework
eu_ai_act_annex_iv, generates the full Annex IV technical file mapped to the nine sub-sections referenced by Article 11. - 10-year retention (
retention_requirement_years: 10) per Article 18, vs Article 12's 6 years. - Pulls every input from existing data: org profile, registered agents, policy catalogue, signing keys, policy evaluations, behavioral baselines, drift alerts, settlement commitments.
- Section metadata also exposed on the report row's
report_metadata.sections, so the dashboard can render per-section without re-fetching the PDF.
See Annex IV guide.
Phase 1 cleanup
Article9RiskCategorymodel +GET /api/v1/compliance/reports/article9/categoriesquery route. Each Article 9 report now also persists one row per(agent_id, category)observed in the period — answers "what was agent X's risk profile in Q1 2026?" without re-running the generator.- New per-article guide pages: Article 12, Article 9, Article 6.
Internal cleanup (no behaviour change)
- All four
_build_legacy_v1_N_payloadbuilders deleted, verify dispatch collapsed to one path.ACTION_RECEIPT_VERSIONreset to"1". No customer receipts existed at the older versions — pure dead-code removal. - Provider adapter
api_key=backwards-compat shim removed; the one supported path is nowcredentials={"api_key": "..."}. - 45 accumulated Alembic migrations collapsed into a single
0001_initial_schemamigration that usesBase.metadata.create_all. Future schema changes start adding incremental migrations on top of0001as normal. Hosting moves viapg_dump/pg_restoreunaffected.
Audit fixes shipped during the same window
- Redact mode now honours
redact_severity_threshold(was redacting on every match regardless of severity — leaked policy signal). - Explicit
await db.rollback()in deny-modeOUTPUT_SCAN_VIOLATIONpath so rollback doesn't depend on implicit FastAPI exception handling. apply_redactionapplies the Luhn validation filter symmetrically for credit-card matches (no more false-positive CC redactions).ActionReceiptSummaryandActionNotarizeResponseschemas now exposeoutput_scan_flagsso the SDK gets the scan result back on the same response, no second round trip needed.- CORS
allow_methodsnow includesPATCH(previously the/output-policiesPATCH preflight failed silently).
Polish — 2026-04-15
- Landing page #04 Content Scan card + #12 Compliance Reports card updated to reflect Phases B/C/2.
- Docs
what-is-airaoverview gained a "Compliance bundles + regulator-ready reports" subsection covering Article 12, Article 9, Article 6 (with envelope), Annex IV. - UUID label sweep across dashboard dialogs, docs prose, and the
Python CLI: anywhere the underlying value is a
UUIDand the human-facing label said "ID", it now says "UUID". Wire-contract field names (action_uuid,receipt_uuid, etc.) are unchanged.
Earlier history
The platform shipped its initial round of regulatory features in the weeks leading up to this changelog page (Article 12 / Article 9 / Article 6 PDFs, compliance bundles with Annex VII field mapping, Merkle settlements, drift detection, multi-party signatures, replay context, agent identity + DIDs, evidence packages, agent estate). Going forward each shipped feature gets a dated entry above.