TL;DR
Regulation (EU) 2024/1689 uses a staged, role- and risk-based framework. This article is an engineering checklist for recording applicability, classifying intended use, maintaining evidence, and preparing governance controls; it is not legal advice and does not turn example controls into a conformity assessment.
Table of Contents
- Key Takeaways
- Why This Matters Now
- Enforcement Timeline
- Risk Classification Decision Tree
- Engineering Checklist Overview
- Audit Logging Infrastructure
- Bias Testing Pipeline
- Technical Documentation Generator
- Human-in-the-Loop Override Systems
- Fundamental Rights Impact Assessment
- Conformity Assessment and CE Marking
- AI Literacy Program
- Post-Market Monitoring
- FAQ
- Summary
Key Takeaways
- Scope is fact-dependent: Article 2 requires a role, market, deployment, and output-use analysis rather than a single “long-arm” test.
- Four-tier risk: Systems are classified as Unacceptable, High-risk, Limited-risk, or Minimal-risk—each tier carries different obligations.
- Technical documentation: Annex IV requires structured evidence; do not reduce it to a fixed checklist count or a model card.
- Logging is contextual: Article 12 requires capabilities for automatic event recording, with content and retention tied to the system and applicable duties.
- Dates need version control: Record the legal basis, transition rule, amendment status, and jurisdiction for every deadline.
Related reading: If you are building LLM-powered products, review our earlier guide on LLM Guardrails Engineering for runtime safety patterns that complement compliance infrastructure.
Why This Matters Now
The dates below are a planning baseline, not a complete applicability decision. Confirm the consolidated Regulation, transitional provisions, Commission guidance, and any amendments before release:
| Milestone | Date | Status |
|---|---|---|
| Regulation enters into force | Aug 1, 2024 | Done |
| Prohibited practices banned | Feb 2, 2025 | Enforceable |
| AI literacy obligations | Feb 2, 2025 | Enforceable |
| GPAI model obligations | Aug 2, 2025 | Enforceable |
| High-risk AI system provisions | Aug 2, 2026 | Check Article 113 and applicable transition |
| Product-embedded AI systems | Aug 2, 2027 | Upcoming |
Article 2 requires a fact pattern analysis: provider or deployer role, placement or deployment in the Union, and specified output use. It should be assessed alongside GDPR, product-safety law, sector rules, and contractual allocation; do not infer scope from hosting region alone.
The Act contains different maximum fine levels for prohibited practices, other breaches, and incorrect information, with undertaking-size rules and procedural safeguards. Quote the applicable article and current text when preparing a legal position.
Enforcement Timeline
The following chart is a simplified planning view, not a complete legal timeline. Confirm the current consolidated text and transition rules before using it for a release decision.
Risk Classification Decision Tree
The foundation is an applicability record, followed by classification of the system's intended purpose and role. This simplified tree is an engineering triage aid, not a legal classifier; Article 6 exceptions, product-safety routes, and later guidance require human review.
Annex III high-risk categories include AI systems used in:
- Biometric identification and categorization
- Critical infrastructure management
- Education and vocational training access
- Employment, worker management, and recruitment
- Access to essential services (credit scoring, insurance)
- Law enforcement
- Migration, asylum, and border control
- Administration of justice and democratic processes
A recruitment, credit, education, or similar use may fall within Annex III, but classification depends on intended purpose, role, exceptions, and the exact system function. Document the reasoning instead of relying on a keyword match.
Engineering Checklist Overview
For a system confirmed as high-risk, map each applicable article to an owner, control, evidence artifact, and review trigger. The following is an engineering mapping, not a substitute for the legal text:
| Requirement | Article | Engineering Deliverable |
|---|---|---|
| Risk Management System | Art. 9 | Continuous risk identification and mitigation pipeline |
| Data Governance | Art. 10 | Training data lineage, bias analysis, data quality metrics |
| Technical Documentation | Art. 11 + Annex IV | Versioned evidence package matched to the system |
| Automatic Logging | Art. 12 | Event recording with integrity, access, retention, and privacy controls |
| Transparency | Art. 13 | User-facing documentation and instructions for use |
| Human Oversight | Art. 14 | Effective intervention, interpretation, override, and stop procedures |
| Accuracy and Robustness | Art. 15 | Bias testing, adversarial testing, performance benchmarks |
| Conformity Assessment | Art. 43 | Self-assessment or third-party audit + CE marking |
| Post-Market Monitoring | Art. 72 | Continuous performance monitoring after deployment |
The following sections show illustrative control patterns. They omit storage, identity, legal review, deletion, and failure handling; adapt and test them against the actual system rather than treating them as compliant drop-ins.
Audit Logging Infrastructure
Article 12 requires capabilities for automatic recording of events. The implementation should preserve provenance and integrity while limiting personal data, access, and retention to what the applicable purpose and law require; a hash chain alone is not “immutability” or compliance.
Logging Middleware in TypeScript
The following middleware captures every AI inference request with the metadata required by Article 12:
import { v4 as uuidv4 } from "uuid";
import crypto from "crypto";
interface AuditLogEntry {
traceId: string;
timestamp: string;
systemId: string;
systemVersion: string;
inputHash: string;
outputHash: string;
modelId: string;
modelVersion: string;
userId: string;
riskTier: "high" | "limited" | "minimal";
humanOversightTriggered: boolean;
confidenceScore: number;
processingTimeMs: number;
geolocation: string;
dataRetentionDays: number;
}
function createAuditLogEntry(
request: AIRequest,
response: AIResponse,
metadata: SystemMetadata
): AuditLogEntry {
return {
traceId: uuidv4(),
timestamp: new Date().toISOString(),
systemId: metadata.systemId,
systemVersion: metadata.version,
inputHash: crypto
.createHash("sha256")
.update(JSON.stringify(request.input))
.digest("hex"),
outputHash: crypto
.createHash("sha256")
.update(JSON.stringify(response.output))
.digest("hex"),
modelId: metadata.modelId,
modelVersion: metadata.modelVersion,
userId: request.userId,
riskTier: metadata.riskTier,
humanOversightTriggered: response.confidenceScore < metadata.confidenceThreshold,
confidenceScore: response.confidenceScore,
processingTimeMs: response.processingTimeMs,
geolocation: request.geolocation ?? "unknown",
dataRetentionDays: metadata.retentionPolicyDays,
};
}
Immutable Log Storage
Logs should be tamper-evident and protected by storage controls, access separation, backup, deletion policy, and independent verification. An append-only chain is only one possible integrity signal:
import crypto from "crypto";
interface ChainedLogBlock {
sequence: number;
previousHash: string;
entry: AuditLogEntry;
blockHash: string;
}
function appendToChain(
chain: ChainedLogBlock[],
entry: AuditLogEntry
): ChainedLogBlock {
const previousHash =
chain.length > 0 ? chain[chain.length - 1].blockHash : "GENESIS";
const payload = JSON.stringify({ previousHash, entry });
const blockHash = crypto
.createHash("sha256")
.update(payload)
.digest("hex");
const block: ChainedLogBlock = {
sequence: chain.length,
previousHash,
entry,
blockHash,
};
chain.push(block);
return block;
}
This pattern can make some changes detectable, but it is not a blockchain, immutable storage, signature, access-control system, or regulatory guarantee.
Bias Testing Pipeline
Articles 10 and 15 require appropriate data governance, accuracy, robustness, and cybersecurity measures. The Act does not prescribe one universal demographic-parity metric or a 0.8 pass threshold. Select metrics, slices, uncertainty, and human review based on the use, data, and applicable rights risks.
Bias Metrics Computation in Python
All thresholds and metrics in the following code are illustrative policy inputs, not statutory pass/fail values. A production evaluation also needs dataset provenance, missing-group handling, uncertainty, legitimate-purpose analysis, and human review.
from dataclasses import dataclass
from typing import Dict, List
import numpy as np
@dataclass
class BiasReport:
metric: str
group_a: str
group_b: str
group_a_rate: float
group_b_rate: float
disparity_ratio: float
passes_threshold: bool
threshold: float
def compute_demographic_parity(
predictions: List[int],
sensitive_attr: List[str],
positive_label: int = 1,
threshold: float = 0.8,
) -> List[BiasReport]:
groups: Dict[str, List[int]] = {}
for pred, attr in zip(predictions, sensitive_attr):
groups.setdefault(attr, []).append(pred)
group_rates = {
g: np.mean([p == positive_label for p in preds])
for g, preds in groups.items()
}
reports = []
group_names = sorted(group_rates.keys())
for i, g_a in enumerate(group_names):
for g_b in group_names[i + 1 :]:
rate_a = group_rates[g_a]
rate_b = group_rates[g_b]
ratio = min(rate_a, rate_b) / max(rate_a, rate_b) if max(rate_a, rate_b) > 0 else 1.0
reports.append(
BiasReport(
metric="demographic_parity",
group_a=g_a,
group_b=g_b,
group_a_rate=round(rate_a, 4),
group_b_rate=round(rate_b, 4),
disparity_ratio=round(ratio, 4),
passes_threshold=ratio >= threshold,
threshold=threshold,
)
)
return reports
CI/CD Integration
Add bias testing as a required pipeline step. Here is a GitHub Actions workflow:
name: EU AI Act Bias Testing
on:
pull_request:
paths:
- "models/**"
- "training/**"
- "config/model-*.yaml"
jobs:
bias-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install dependencies
run: pip install -r requirements-bias-testing.txt
- name: Run demographic parity tests
run: |
python -m pytest tests/bias/ \
--tb=short \
--junitxml=reports/bias-report.xml \
-v
- name: Run equalized odds tests
run: |
python scripts/bias_audit.py \
--model-path models/latest/ \
--test-data data/bias-test-set.csv \
--threshold 0.8 \
--output reports/bias-audit.json
- name: Upload bias report
uses: actions/upload-artifact@v4
with:
name: bias-audit-report
path: reports/
- name: Fail on bias threshold violation
run: |
python scripts/check_bias_results.py \
--report reports/bias-audit.json \
--fail-on-violation
This illustrative pipeline shows how to preserve evaluation evidence. Its thresholds are policy placeholders, not EU AI Act safe harbors; a passing score does not prove non-discrimination or legal compliance. For RAG systems, define retrieval slices and rights risks separately from model-output metrics.
Technical Documentation Generator
Annex IV specifies the information that technical documentation must cover for the relevant high-risk system. The following generator is only an illustrative schema; it is not a complete legal submission or a “model card” substitute:
interface AnnexIVDocumentation {
generalDescription: {
intendedPurpose: string;
systemArchitecture: string;
interactionWithHardware: string;
versionsOfRelevantSoftware: string[];
};
detailedDescription: {
developmentMethodology: string;
designSpecifications: string;
systemArchitectureDiagram: string;
computationalResources: string;
};
dataGovernance: {
trainingDataDescription: string;
dataSources: string[];
dataPreparationSteps: string[];
dataLabelingMethodology: string;
dataBiasAssessment: string;
};
monitoringAndTesting: {
performanceMetrics: Record<string, number>;
testingProcedures: string[];
validationDatasets: string[];
knownLimitations: string[];
};
riskManagement: {
identifiedRisks: RiskEntry[];
mitigationMeasures: string[];
residualRisks: string[];
};
humanOversight: {
oversightMeasures: string[];
interfaceDescription: string;
overrideCapabilities: string[];
};
accuracyAndRobustness: {
accuracyMetrics: Record<string, number>;
robustnessTests: string[];
cybersecurityMeasures: string[];
};
changeLog: ChangeEntry[];
previousVersions: string[];
}
interface RiskEntry {
riskId: string;
description: string;
likelihood: "low" | "medium" | "high";
impact: "low" | "medium" | "high";
mitigation: string;
status: "open" | "mitigated" | "accepted";
}
function generateAnnexIVSkeleton(
systemId: string,
systemName: string
): AnnexIVDocumentation {
return {
generalDescription: {
intendedPurpose: `[REQUIRED] Describe the intended purpose of ${systemName}`,
systemArchitecture: "[REQUIRED] High-level architecture overview",
interactionWithHardware: "[REQUIRED] Hardware dependencies and requirements",
versionsOfRelevantSoftware: ["[REQUIRED] List all software dependencies"],
},
detailedDescription: {
developmentMethodology: "[REQUIRED] Training methodology and approach",
designSpecifications: "[REQUIRED] Model architecture specifications",
systemArchitectureDiagram: "[REQUIRED] Link to architecture diagram",
computationalResources: "[REQUIRED] GPU/TPU requirements and training cost",
},
dataGovernance: {
trainingDataDescription: "[REQUIRED] Statistical summary of training data",
dataSources: ["[REQUIRED] List all training data sources with provenance"],
dataPreparationSteps: ["[REQUIRED] Data cleaning and preprocessing pipeline"],
dataLabelingMethodology: "[REQUIRED] Annotation guidelines and inter-annotator agreement",
dataBiasAssessment: "[REQUIRED] Demographic bias analysis results",
},
monitoringAndTesting: {
performanceMetrics: {},
testingProcedures: ["[REQUIRED] Unit tests, integration tests, adversarial tests"],
validationDatasets: ["[REQUIRED] Hold-out validation set descriptions"],
knownLimitations: ["[REQUIRED] Known failure modes and edge cases"],
},
riskManagement: {
identifiedRisks: [],
mitigationMeasures: [],
residualRisks: [],
},
humanOversight: {
oversightMeasures: ["[REQUIRED] Human review triggers and procedures"],
interfaceDescription: "[REQUIRED] Operator dashboard and override UI",
overrideCapabilities: ["[REQUIRED] Kill switch, confidence gating, manual approval"],
},
accuracyAndRobustness: {
accuracyMetrics: {},
robustnessTests: ["[REQUIRED] Adversarial input testing results"],
cybersecurityMeasures: ["[REQUIRED] Model extraction, data poisoning protections"],
},
changeLog: [],
previousVersions: [],
};
}
Human-in-the-Loop Override Systems
Article 14 requires effective human oversight for applicable high-risk systems. A confidence score is not a reliable proxy for uncertainty or a legal decision rule; oversight must provide sufficient competence, authority, information, time, and ability to intervene or stop the system.
Confidence-Gated Override Pattern
Confidence gating can be one signal in a broader, validated routing policy. Do not allow a model-generated confidence value alone to authorize, reject, or bypass human review.
from enum import Enum
from dataclasses import dataclass, field
from datetime import datetime
from typing import Optional
class DecisionRoute(Enum):
AUTO_APPROVE = "auto_approve"
HUMAN_REVIEW = "human_review"
AUTO_REJECT = "auto_reject"
@dataclass
class OversightDecision:
request_id: str
model_output: str
confidence: float
route: DecisionRoute
human_reviewer: Optional[str] = None
human_decision: Optional[str] = None
human_rationale: Optional[str] = None
override_timestamp: Optional[str] = None
audit_fields: dict = field(default_factory=dict)
def route_decision(
request_id: str,
model_output: str,
confidence: float,
auto_approve_threshold: float = 0.95,
auto_reject_threshold: float = 0.3,
) -> OversightDecision:
if confidence >= auto_approve_threshold:
route = DecisionRoute.AUTO_APPROVE
elif confidence <= auto_reject_threshold:
route = DecisionRoute.AUTO_REJECT
else:
route = DecisionRoute.HUMAN_REVIEW
return OversightDecision(
request_id=request_id,
model_output=model_output,
confidence=confidence,
route=route,
audit_fields={
"routed_at": datetime.utcnow().isoformat(),
"auto_approve_threshold": auto_approve_threshold,
"auto_reject_threshold": auto_reject_threshold,
},
)
Kill Switch Implementation
Article 14(4)(e) explicitly requires the ability to "interrupt the operation of the high-risk AI system through a stop button." Here is a minimal implementation:
interface KillSwitchState {
systemId: string;
isActive: boolean;
deactivatedBy: string | null;
deactivatedAt: string | null;
reason: string | null;
fallbackBehavior: "reject_all" | "human_only" | "cached_responses";
}
class AIKillSwitch {
private state: KillSwitchState;
constructor(systemId: string) {
this.state = {
systemId,
isActive: true,
deactivatedBy: null,
deactivatedAt: null,
reason: null,
fallbackBehavior: "reject_all",
};
}
deactivate(operatorId: string, reason: string): void {
this.state.isActive = false;
this.state.deactivatedBy = operatorId;
this.state.deactivatedAt = new Date().toISOString();
this.state.reason = reason;
this.emitAuditEvent("SYSTEM_DEACTIVATED", this.state);
}
checkActive(): boolean {
return this.state.isActive;
}
private emitAuditEvent(eventType: string, payload: unknown): void {
console.log(JSON.stringify({ eventType, payload, timestamp: new Date().toISOString() }));
}
}
These patterns are directly related to the jailbreak defense mechanisms covered in LLM Jailbreak Analysis and Defense—when a jailbreak is detected, the kill switch can immediately halt the compromised system.
Fundamental Rights Impact Assessment
Article 27 requires certain deployers of high-risk systems to conduct a Fundamental Rights Impact Assessment (FRIA) before use. It is related to, but not interchangeable with, a GDPR DPIA; applicability and required content must be checked against the article and the deployer's role.
FRIA Template Structure
All dates, counts, thresholds, review cadences, and outcomes in this YAML are fictional placeholders. Replace them with a documented legal basis and an approved rights assessment; none is a statutory default.
fria:
metadata:
system_name: "AI Resume Screening System v2.1"
system_id: "HRS-2026-001"
deployer: "TechCorp International"
assessment_date: "2026-05-16"
assessor: "Compliance Engineering Team"
review_frequency: "quarterly"
scope:
intended_purpose: "Automated screening of job applications"
target_population: "Job applicants in EU member states"
geographic_scope: ["DE", "FR", "NL", "ES", "IT"]
estimated_affected_persons: 50000
deployment_timeline: "2026-Q3"
rights_impact_analysis:
- right: "Non-discrimination (Article 21 EU Charter)"
risk_level: "high"
description: "Model may exhibit bias based on gender or ethnicity in resume language"
affected_groups: ["gender_minorities", "ethnic_minorities", "age_groups"]
mitigation:
- "Demographic parity testing with 0.8 threshold"
- "Blind resume processing - PII stripped before model inference"
- "Quarterly bias audit by external assessor"
residual_risk: "medium"
- right: "Right to an effective remedy (Article 47 EU Charter)"
risk_level: "medium"
description: "Rejected candidates must be able to contest AI-assisted decisions"
affected_groups: ["all_applicants"]
mitigation:
- "Human review mandatory for all rejections"
- "Explainability report generated per decision"
- "Appeals process with 30-day SLA"
residual_risk: "low"
- right: "Right to privacy (Article 7 EU Charter)"
risk_level: "medium"
description: "Processing of personal data in resumes and application materials"
affected_groups: ["all_applicants"]
mitigation:
- "Data minimization - only relevant fields extracted"
- "Auto-deletion after 180 days per GDPR Article 17"
- "Encryption at rest and in transit"
residual_risk: "low"
oversight_measures:
human_review_trigger: "All negative decisions"
operator_training: "40-hour AI oversight certification"
escalation_path: "Operator > Team Lead > DPO > Legal"
conclusion:
overall_risk: "medium"
deployment_approved: true
conditions: "Subject to quarterly bias audit and annual FRIA review"
Validate YAML and compare FRIA revisions with the repository's ordinary CI tooling; the choice of formatter is not a regulatory control.
Conformity Assessment and CE Marking
The conformity-assessment route depends on the system's legal route, applicable product legislation, harmonised standards, and the relevant Annex III category. Do not encode “biometric” or “critical infrastructure” as the only deciding conditions without checking Article 43 and current guidance.
Self-Assessment Decision Logic
type AssessmentRoute = "self_assessment" | "notified_body_required";
interface ConformityResult {
systemId: string;
route: AssessmentRoute;
annexIVComplete: boolean;
riskManagementComplete: boolean;
biasTestingPassed: boolean;
humanOversightImplemented: boolean;
auditLoggingActive: boolean;
ceMarkingEligible: boolean;
blockers: string[];
}
function evaluateConformityReadiness(
systemId: string,
category: string,
checks: ComplianceChecks
): ConformityResult {
const needsNotifiedBody =
category === "biometric_identification" ||
category === "critical_infrastructure";
const blockers: string[] = [];
if (!checks.annexIVDocumentation) blockers.push("Annex IV documentation incomplete");
if (!checks.riskManagementSystem) blockers.push("Risk management system not established");
if (!checks.biasTestingPassed) blockers.push("Bias testing thresholds not met");
if (!checks.humanOversightMechanism) blockers.push("Human oversight not implemented");
if (!checks.auditLogging) blockers.push("Audit logging not active");
if (!checks.friaCompleted) blockers.push("FRIA not completed");
return {
systemId,
route: needsNotifiedBody ? "notified_body_required" : "self_assessment",
annexIVComplete: checks.annexIVDocumentation,
riskManagementComplete: checks.riskManagementSystem,
biasTestingPassed: checks.biasTestingPassed,
humanOversightImplemented: checks.humanOversightMechanism,
auditLoggingActive: checks.auditLogging,
ceMarkingEligible: blockers.length === 0,
blockers,
};
}
The output of this function is an internal readiness record, not an EU Declaration of Conformity. CE marking requires the applicable conformity procedure, responsible legal entity, declaration, registration and other product-law steps; passing these booleans alone does not authorise market placement.
AI Literacy Program
Article 4 establishes AI-literacy duties for providers and deployers, subject to the staged application of the Act and the context of the people involved. Training hours are not prescribed by the Act; define role-specific competence and evidence.
What AI Literacy Means in Practice
This is not about making everyone an ML engineer. It means:
- Operators understand the system's capabilities, limitations, and known failure modes
- Developers understand the regulatory obligations their code must satisfy
- Business stakeholders understand the risk classification and its implications
- End users are informed when they interact with an AI system (transparency obligation)
Minimum Training Curriculum
| Role | Required Knowledge | Hours |
|---|---|---|
| ML Engineers | Full Annex IV documentation, bias testing, logging requirements | 16 |
| Backend Engineers | Audit logging, kill switch, human oversight API integration | 8 |
| Product Managers | Risk classification, FRIA process, post-market monitoring | 8 |
| Operators | System limitations, override procedures, escalation protocols | 12 |
| Customer Support | Transparency scripts, user rights, complaint handling | 4 |
For engineering teams working with AI Agents, literacy training should also cover autonomous decision-making risks and the additional oversight requirements for agentic systems. Our guide on Harness Engineering provides a framework for evaluating and constraining agent behavior.
Post-Market Monitoring
Article 72 requires a post-market monitoring system proportionate to the nature and risks of the AI system. This must be established before deployment and maintained throughout the system's lifecycle.
Monitoring Dashboard Schema
The metrics below are illustrative operational baselines, not legal thresholds or mandatory retention periods. Calibrate them to the intended purpose, risk, data quality, and incident procedure.
post_market_monitoring:
system_id: "HRS-2026-001"
monitoring_plan:
frequency: "continuous"
review_cadence: "monthly"
responsible_team: "ML Platform - Compliance"
metrics:
performance:
- name: "accuracy"
baseline: 0.94
threshold: 0.90
current: null
alert_on: "below_threshold"
- name: "false_positive_rate"
baseline: 0.03
threshold: 0.05
current: null
alert_on: "above_threshold"
fairness:
- name: "demographic_parity_ratio"
baseline: 0.92
threshold: 0.80
current: null
alert_on: "below_threshold"
protected_attributes: ["gender", "ethnicity", "age_group"]
operational:
- name: "human_override_rate"
baseline: 0.08
alert_on: "above_0.15_or_below_0.02"
description: "Anomalous rates may indicate model drift or miscalibrated thresholds"
- name: "mean_confidence_score"
baseline: 0.87
alert_on: "below_0.75"
incident_reporting:
serious_incident_sla: "Verify Article 73 deadline for the incident type"
internal_escalation: "24 hours to compliance team"
root_cause_analysis: "required within 30 days"
data_retention:
audit_logs: "Policy-defined; document legal basis"
monitoring_reports: "Policy-defined; document legal basis"
incident_records: "Policy-defined; document legal basis"
Monitoring should trigger triage, containment, investigation, and escalation according to the incident definition and applicable procedure. Article 73 does not create a universal 72-hour rule analogous to GDPR; verify the relevant deadlines and exceptions in the current text before encoding an SLA.
For teams using vector databases in production RAG systems, post-market monitoring should also track retrieval quality metrics and embedding drift. If your retrieval pipeline degrades, the downstream AI system's compliance posture is directly affected.
Further Reading
- Learn more about securing your AI models in the LLM Guardrails Engineering Guide.
- For safe enterprise integration, check out our MCP Remote Server OAuth Integration guide.
FAQ
Does the EU AI Act apply to companies outside the EU?
Potentially. Article 2 requires a fact-specific analysis of provider/deployer role, market placement or deployment, and output use. A third-country product is not automatically in scope merely because an EU resident can view an output; check the current Regulation and guidance.
What is the difference between high-risk and limited-risk AI systems?
High-risk status depends on intended purpose, role, applicable product-safety route, Article 6, Annex III, and documented exceptions. Transparency duties are also use-specific; direct interaction alone does not settle classification.
How much does EU AI Act non-compliance cost?
The Act sets different maximum administrative-fine levels depending on the violation and undertaking. Quote the applicable article and current consolidated text; headline caps are not an automatic bill.
When should I start preparing for EU AI Act compliance?
Start with an applicability record now. The Act uses staged dates and transition rules for prohibited practices, AI literacy, GPAI, high-risk systems, and product-embedded systems; do not rely on a countdown without checking Article 113 and current guidance.
Can I use open-source models and still be compliant?
Possibly. Open-source treatment depends on the provider's role, model characteristics, and applicable Article 53 conditions. A downstream provider or deployer may have separate duties based on the integrated system and intended purpose; record the model revision, license, role, data, evaluations, and mitigations.
Summary
The EU AI Act is not abstract policy—it is a concrete set of engineering requirements with hard deadlines and significant penalties. For any AI product team targeting the EU market, the compliance checklist comes down to six infrastructure pillars:
- Applicability and classification: Record the role, intended purpose, legal route, exceptions, and reasoning.
- Audit logging: Implement traceable, privacy-aware event recording with integrity and retention controls.
- Evaluation: Choose fairness, accuracy, robustness, and security measures that fit the use and document uncertainty.
- Human oversight: Build confidence-gated routing and kill switches into your inference architecture.
- Technical documentation: Generate and maintain Annex IV documentation as living artifacts, not one-time PDFs.
- Post-market monitoring: Deploy continuous monitoring with automated alerting and incident response SLAs.
Dates and obligations must be checked against the current consolidated Regulation, transition rules, and guidance. Responsible engineering controls are useful evidence, but they do not by themselves establish legal compliance.
For deeper exploration of the security and evaluation patterns that underpin compliance, continue with the Harness Engineering series—particularly the guides on LLM jailbreak defense and AI agent privacy.