Skip to main content

EU AI Act readiness

Article 12 of the EU AI Act enforces on 2 August 2026. Providers of high-risk AI systems must keep automatic event logs over the lifetime of the system, with a 6-month minimum retention, that cannot be retroactively altered. Penalties run up to €15M / 3% of worldwide turnover for general violations and €35M / 7% for prohibited-practice violations.

Ujex's hash-chained audit ledger maps directly to Article 12 requirements. This page documents that mapping, lists what's automatic vs. what you must configure, and provides the export tooling that hands a regulator a verifiable bundle.

What Article 12 requires​

Article 12 requirementUjex primitive
"Automatic event logging over the lifetime of the system"audit/{seq} collection appended on every privileged action
"Logs cannot be retroactively altered"sha256 hash chain: hash = sha256(prevHash ‖ payloadHash ‖ timestamp ‖ seq); Firestore Security Rules deny client writes; hourly audit.verifyChain
"Retention period appropriate to the intended use; at least 6 months"Ujex default = 12 months (matches IETF AAT § 7); TTL-bypass guard prevents misconfigured deletion
"Logs identify the natural or legal persons concerned"payload.actorKind + payload.actorId (human uid) + payload.agentId (NHI)
"Period of each use of the system"aat.session_id correlates rows within a session; timestamp (unix ms) is hashed into every entry
"Reference database against which the system was checked"aat.parent_record_id chains every action to the approval / policy decision that authorised it
"Logs of input data"Inbox stores messages/{msgId} with dkim/spf/dmarc verdicts and pi_score; ingest path emits inbound_email audit row

What's automatic​

Out of the box, every auditAppend call writes a row with these AAT fields filled in:

  • record_id (32-hex Ujex-minted UUID)
  • agent_id, agent_version (when supplied by SDK)
  • session_id, parent_record_id (when supplied)
  • action_type (inferred from the action string; explicit override available)
  • outcome (success / denied / error / pending)
  • trust_level (high / medium / low / unknown)
  • prev_hash, payload_hash, hash

Subsystems that already emit AAT rows: Inbox (ingest / send / bounce), Approvals (request / approve / deny), Memory (write / append / delete), Tools (invoke), Budgets (block / debit), Identity (key rotate / delegate / secret store), Admin (every privileged callable).

What you must configure​

  1. Stamp agent_version on every event. Pass agentVersion when constructing UjexComplianceClient (or agent_version on each audit.append call). Without this, exports show "unspecified" — auditable but weaker.
  2. Pass session_id per conversation / task. Optional but recommended; lets auditors reconstruct multi-step workflows.
  3. Set trust_level on tool-call rows. Use low when tool calls touched untrusted external input (web pages, inbound mail with PI score > 0.5).
  4. Hold retention at ≥ 12 months. Ujex defaults already meet this; do not lower without legal sign-off.
  5. Use Approvals on every "high-risk" verb that the operator decides for the deployment. Pair with Phase-3 approvals.policy so Article 14 (human oversight) evidence ships chained.

Export an audit bundle​

Open app.ujex.dev, go to Evidence, choose the Article 12 audit window, and export the signed AAT bundle.

The zip contains:

  • records.jsonl — one AAT record per line
  • manifest.json — producer, range, head hash, bundle sha256
  • trust-bundle.txt — offline verifier instructions

To verify the bundle offline — no Ujex deployment, stdlib-only Python:

pip install ujex-audit-chain
python -m ujex_audit_chain verify ./bundle-2026-w32.zip

ISO/IEC 42005:2025 evidence pack​

Auditors who need an ISO 42005-formatted impact-assessment pack can call:

const pack = await fns.httpsCallable('auditExportISO42005')({
from: '2026-04-01T00:00:00Z',
to: '2026-07-01T00:00:00Z',
});

The pack maps each ISO 42005 control reference to the Ujex primitive that satisfies it. See iso-42005.md.

Non-EU providers​

Article 22 may require non-EU providers of high-risk systems to designate an authorised representative in the EU. Ujex's deployment guidance is to register the representative before deploying to EU end users; the audit bundle export already carries the producer identifier the regulator expects.

Disclaimer​

Ujex ships the technical controls Article 12 names. Compliance also requires policy, governance, and DPO sign-off. This page is engineering documentation, not legal advice.