EU AI Act Compliance — Ecotrans / p24-infra Platform
Last reviewed: 2026-06-28
Next review due: 2027-06-16
Owner: Radek Konarski (p24-infra admin)
Regulation: Regulation (EU) 2024/1689 — the EU Artificial Intelligence Act
1. Applicability & Timeline
The EU AI Act applies to any AI system placed on the market or put into service in the EU, including internal deployment.
| Date | What applies |
|---|---|
| 2025-02-02 | Chapter II — prohibited AI practices (already in force) |
| 2025-08-02 | Chapter V — GPAI model obligations (general-purpose AI providers only; we are deployers, not providers) |
| 2026-08-02 | Chapter III — Annex III high-risk systems + conformity assessments |
| 2027-08-02 | Chapter IV — high-risk AI embedded in Annex I regulated products |
2026-08-02 is 47 days away. Any system classified as high-risk must be fully compliant before that date.
As a deployer (not a provider) of general-purpose AI (Claude by Anthropic), our obligations under Article 26 are:
- Use AI systems in accordance with the provider’s instructions
- Ensure human oversight where required
- Monitor operation and report serious incidents to authorities
2. Risk Classification Framework
| Tier | Definition | Obligations |
|---|---|---|
| Prohibited | Systems banned by Chapter II (e.g. social scoring, subliminal manipulation, real-time biometric surveillance in public) | Never deploy |
| High | Systems listed in Annex III (see §3) | Full compliance: risk mgmt, data governance, technical docs, logging, human oversight, transparency, accuracy |
| Limited | Chatbots, AI-generated content, emotion recognition in some contexts | Transparency: users must know they are interacting with AI (Art. 52) |
| Minimal | Everything else | No mandatory obligations; register for completeness |
3. Annex III — High-Risk Categories Relevant to Our Platform
The following Annex III categories could apply to fleet/logistics and workforce management:
| Category | Description | Applies? |
|---|---|---|
| III.2(a) | AI managing/operating critical road transport infrastructure | Potentially if managing public road infrastructure — does NOT apply to private fleet management |
| III.3(a) | AI for education/vocational training | Not applicable |
| III.4(a) | AI for recruitment or selection of natural persons, evaluating, promoting, terminating workers, allocating tasks, monitoring and evaluating performance | Review required if driver scoring, performance KPI tracking, or task allocation uses AI |
| III.4(b) | AI for evaluating creditworthiness / credit scoring | Not applicable |
| III.5(a) | AI used by public authorities in essential private services | Not applicable (private platform) |
| III.6(a) | AI for law enforcement | Not applicable |
| III.8(a) | AI for administration of justice | Not applicable |
Current verdict: No deployed system is classified as high-risk. This must be re-evaluated if AI is introduced for driver performance scoring, automated task assignment to workers, or any HR decision support.
4. Current AI Systems Inventory
All systems are registered in public.dev_r_ai_systems. The table is the authoritative source; this section summarises the current assessment.
p24-infra
| System | Service | Risk | Status | Annex III |
|---|---|---|---|---|
workbook-designer | audit-engine | minimal | compliant | — |
report-generator | audit-engine | minimal | compliant | — |
resource-incident-triage | gha/resource-incident-triage | limited | compliant | — (not Annex III — infra telemetry only, no people scoring/allocation) |
queue-analyst | queue-infra (bms-4) | limited | compliant | — (not Annex III — internal job-queue telemetry only, no people scoring/allocation) |
Daily Session Audit Summariser | daily-session-audit (bms-4) | minimal | compliant | — (not Annex III — internal session transcripts only, no people scoring/allocation) |
nightly-devops-triage | nightly-devops-triage (bms-4) | limited | compliant | — (not Annex III — infra/GitHub-issue housekeeping only, no people scoring/allocation) |
telegram-claude-interface | telegram-claude-bot (bms-4) | limited | compliant | — (not Annex III — human-controlled remote terminal UI, no people scoring/allocation) |
telegram-claude-orchestrator | claude-session-manager (bms-4) | limited | partial | — (not Annex III — user-initiated Claude session orchestration, no people scoring/allocation) |
step-0b-planning-phase | p24-worker-queue (bms-4) | limited | compliant | — (not Annex III — internal worker capacity planning, no people scoring/allocation) |
council-judge-review | review-council-judge | limited | compliant | — (not Annex III — reviews code/plan/PR-diff content only, no personal data, no people scoring/allocation) |
ecodriving-per-route-anomaly | atrax-ecodriving-anomaly-daily (bms-4) | limited | compliant | III.4(a) adjacent — evaluates a named driver’s driving style, but advisory-only guardrail keeps it out of high-risk (never an automated employment decision). #7153: triage moved to the escalation panel; still advisory/limited |
route-consumption-anomaly | atrax-route-anomaly-daily (bms-4) | limited | compliant | III.4(a) adjacent — driver_pattern attribution evaluates a named driver’s behaviour, but advisory-only (rule-based stats, not ML); never an automated employment decision. Registered #7153 (plan-7107 §4) |
vehicle-health-voltage | atrax-vehicle-health-daily (bms-4) | minimal | compliant | — (NOT Annex III — about the vehicle asset (battery/alternator), no driver, affects_people=false). Registered #7153 |
tachograph-compliance | atrax-tachograph-compliance-daily (bms-4) | limited | compliant | III.4(a) adjacent — inherently per-driver (regulatory compliance), but advisory/investigatory only (rule-based on legal limits, requires_human_review=true on every escalation). Registered #7153 (reverses the #7045 deferral) |
driver-pairwise-fuel-comparison | atrax-driver-pairwise-fuel-compute (bms-4) | limited | compliant | III.4(a) adjacent — ranks named drivers by fuel consumption on identical (vehicle, route) pairs, but advisory/informational only (rule-based median/MAD, not ML); deliberately not an escalation, never feeds p24_fleet_anomaly_escalations, never an automated employment decision. Registered #7277 |
dispo-document-classification | dispo-classify-backfill (bms-4) | minimal | compliant | — (not Annex III — one-off gpt-4o classification of freight business documents into kategoria/kontrahent; output advisory for a human reviewer in the Dispo UI, no decision about a natural person, no worker/driver scoring/allocation). Registered #7679 |
Atrax fleet-anomaly detectors — audit completed #7153 (plan-7107 §4). All four Atrax detectors now escalate into the shared
p24_fleet_anomaly_escalationstable (a human-triaged panel in et-operational-platform), and thedev_r_ai_systemsaudit that PR-1 completes registers the three that were previously missing.route-consumption-anomaly(#6194/#6710) andtachograph-compliance(#7045) are limited and advisory/investigatory only: both are adjacent to Annex III.4(a) (they concern named drivers) but neither uses AI to make/automate any employment decision — every finding is human-interpreted and everydriver_pattern/ tachograph escalation row carriesrequires_human_review=true, which the panel honours by blocking bulk/auto resolution. Both are rule-based (median/MAD + fixed thresholds; legal limits for tachograph), not ML. Wiring either into an automated employment decision requires a fresh conformity assessment first.vehicle-health-voltage(#7044) is minimal andaffects_people=false: it monitors a vehicle asset (battery/alternator voltage), carries no driver attribution, and is explicitly assessed as out of Annex III scope. Theecodriving-per-route-anomalyclassification is unchanged by the panel move (still limited/advisory); itsdev_r_ai_systemsrow was revised only to record the new triage surface. Ops doc:docs/atrax-fleet-anomaly-escalation-operations.md.
ecodriving-per-route-anomaly(#6848; Etap 2 Branch A of design #6841): nightly rule-based statistics (scripts/nightly-etl/atrax_ecodriving_anomaly_daily.py) that readsp24_ride_events, derives harsh-accel / harsh-brake / high-RPM / speeding signals from consecutive-event telemetry deltas, and flags modified-Z / MAD deviations of a per-route harsh-events-per-km metric intop24_ecodriving_anomalies, with leave-one-driver-outdriver_patternattribution. This is the first p24-infra analytic that evaluates a named driver’s performance (Atrax entries carrydriverNameAndSurname), so it sits adjacent to Annex III.4(a) (“monitoring and evaluating the performance of workers”). It is nonetheless classified limited (not high-risk,annex_iii_categoryNULL) because the Annex III trigger is using AI to make or automate an employment decision — discipline, ranking, task allocation — and this analytic does none of that: it is advisory/investigatory only, a human interprets every finding, and the output is never wired into any automated disciplinary/performance/allocation system. That advisory-only guardrail — the same onep24_route_consumption_anomalies’driver_patternattribution carries (docs/atrax-route-norm-control-operations.md §EU AI Act) — is exactly what keeps it out of the high-risk tier. Wiring this output into any automated employment decision requires a fresh conformity assessment first. It is rule-based statistics (median/MAD + fixed thresholds), not ML —ai_provider='none (rule-based statistics)'. Human oversight (Art. 14): findings are advisory GitHub/dashboard signals only. Logging (Art. 12):p24_ecodriving_anomaliesrows + the nightly ETL logs + Discord/GH error notifications. Transparency (Art. 13): this entry + the ops doc EU AI Act section. Ops doc:docs/atrax-ecodriving-per-route-control-operations.md.
driver-pairwise-fuel-comparison(#7277): nightly rule-based statistics (scripts/nightly-etl/atrax_driver_pairwise_fuel_compute.py) that reads the driver-level median l/100km rows already computed by the route-consumption control intop24_route_consumption_norm(≥DRIVER_SLICE_MIN=5 trips), groups them by(vehicle, route), keeps groups with ≥ 2 distinct drivers, and ranks the drivers by median fuel consumption — recording per driver the gap to the best driver (delta l/100km, percent, and a modified-Z of the median vs the best driver’s distribution, i.e. the other driver as baseline rather than the all-drivers aggregate) intop24_driver_pairwise_fuel_comparison. This is the most direct per-driver ranking in the fleet analytics — it evaluates a named driver’s relative fuel performance — so it sits adjacent to Annex III.4(a) (“monitoring and evaluating the performance of workers”). It is nonetheless classified limited (not high-risk,annex_iii_categoryNULL) because the Annex III trigger is using AI to make or automate an employment decision — discipline, ranking-for-action, task allocation — and this analytic does none of that: it is advisory/informational only (a pilot KPI), a human interprets the comparison, and — per issue #7277 point 2 — it is deliberately not an escalation and never feedsp24_fleet_anomaly_escalations. That advisory-only guardrail — the same oneroute-consumption-anomalyandecodriving-per-route-anomalycarry — is exactly what keeps it out of the high-risk tier. Unlike the vehicle-levelp24_ecodriving_vehicle_ranking(#7274, nodev_r_ai_systemsrow because it is not worker data), this analytic is registered indev_r_ai_systemsprecisely because it ranks a named driver — honouring the #6848 note “do NOT ship driver-level ranking without the registration”. Scope is small by construction: only ~33(vehicle, route)pairs today have ≥ 2 overlapping drivers — it is not a whole-fleet driver ranking, only a comparison where drivers physically share a vehicle+route. Wiring this output into any automated employment decision requires a fresh conformity assessment first. It is rule-based statistics (median/MAD + deterministic ranking), not ML —ai_provider='other',ai_model='n/a — median/MAD + deterministic ranking'. Human oversight (Art. 14): the comparison is an advisory GitHub/dashboard signal only. Logging (Art. 12):p24_driver_pairwise_fuel_comparisonrows + the nightly ETL logs + Discord/GH error notifications. Transparency (Art. 13): this entry + the ops doc EU AI Act section. Ops doc:docs/atrax-driver-pairwise-fuel-comparison-operations.md.
resource-incident-triage(#1191): Claude agent dispatched by the n8nresource-incident-analysisworkflow on a CPU/RAM pressure alert. It correlates Mezmo logs + live SSH state and takes only documented-playbook-bounded remediation, escalating anything else via thehuman-actionlabel (human-in-loop). Production-critical targets (WAHA, MongoDB, Pinbox24) are hard-excluded from autonomous action. Logging: GH Actions run logs + issue comments +dev_r_incidents. Activation gated on #1467. Plan/runbook:docs/playbooks/resource-incident-monitoring.md.
nightly-devops-triage(.claude/commands/nightly-devops-triage.md, bms-4 cron 20:00 UTC daily): Claude agent that triages the full open-issue backlog in seven bounded phases — milestone hygiene, merged-PR cleanup, SLA watchdog, infra alert queue (Tier 1/2/3), night-task dev queue,docs/priorities.mdstatus sync, summary. It acts only on GitHub issue/PR metadata and repository infra-doc content — no personal data, no worker/driver scoring, no task allocation to people — so it is not Annex III. Phase 3.5 (#4559) is the first phase to write repository files: it auto-resolvesdocs/priorities.mdrows only under a fail-safe, fixture-tested resolution rule (docs/playbooks/priorities-status-sync.md) and lands changes exclusively via a reviewable PR, never a direct push or auto-merge. Human oversight (Art. 14): every Tier-3/escalation path routes to a human via thehuman-actionlabel + Telegram, and each phase is independently disableable (Phase 3.5 ships dry-run-only, flip is a one-line PR). Logging (Art. 12):/var/log/nightly-devops-triage.log, per-phasep24_nightly_triage_resultPrometheus metric, Discord embeds, GH issue comments. Runbook:docs/playbooks/priorities-status-sync.md(Phase 3.5); other phases documented inline in the skill file.
queue-analyst(#2061): Claude agent on a 30-min systemd timer (bms-4) that diagnoses repeat failures in the developer worker queue (dev_r_worker_queue). It reads only internal job telemetry — queue row, the failing job’s GitHub issue + comments, the agent session summary, the worker log tail, and PR/CI state — and takes a bounded action: requeue, requeue-as-continue, ask for clarification, close-stale, or escalate. It operates exclusively on internal CI/automation metadata: no personal data, no worker/driver scoring, no task allocation to people, so it is not Annex III. Human oversight (Art. 14): every escalation routes to a human via thehuman-actionlabel, and the timer/service can be disabled at any time without stalling the queue (the retry-worker has a 4-hour bypass). Logging (Art. 12):journalctl -u p24-queue-analyst, theanalyst_notesJSONB column, GH issue comments, and Discord embeds. Transparency (Art. 13): AI involvement is disclosed by theai-analysis-donelabel and the analyst’s signed issue comment. Runbook:docs/playbooks/queue-analyst-operations.md.
Daily Session Audit Summariser(DSA, #2654, plan #2637): Claude summariser on a daily bms-4 timer that reads finished Claude Code session transcripts (dev_r_agent_sessionswhereaudited_at IS NULL AND ended_at IS NOT NULL), writes a short summary for internal knowledge retention, and stampsaudited_at. It processes only internal CI/automation session metadata — no personal data, no worker/driver scoring, no task allocation to people — so it is classified minimal risk under Article 6 (no Annex III high-risk category applies). Human oversight (Art. 14): summaries are advisory only and reviewable, and the timer can be disabled at any time without operational impact. Logging (Art. 12): theaudited_atmarker column plus the generated summaries. Registered for completeness indev_r_ai_systems.
telegram-claude-interface(docs/telegram-claude-bot-operations.md): a Telegram bot (n8n on bms-4) that lets the single authorized user (radieu) drive Claude CLI sessions on bms-4 via/status /start /stop /restart /send /log. It is purely a human-controlled remote terminal UI — the human sends every prompt explicitly; no automated decisions, no scoring of persons, no autonomous actions — so no Annex III category applies (human-in-loop). Transparency (Art. 13): AI involvement is inherent to the interface (the user is directly operating Claude). Risk justification recorded indev_r_ai_systems.
telegram-claude-orchestrator(serviceclaude-session-manager, bms-4; registered 2026-08-06, #2776 / deployment #3793): the session-management layer behind the Telegram control surface — it holds each user’stg_conversation_sessions/tg_conversation_messagescontext and turns an explicit user Telegram message into a dispatched Claude session (Phase 2 also dispatches infra-tasks). Distinct fromtelegram-claude-interfaceabove: theinterfacerow is the thin n8n bot UI (the command surface); thisorchestratorrow is the backend service that manages conversation state and drives the sessions. It is classified limited / human-in-loop: every action is initiated by an explicit user Telegram message — the agent executes but the user retains oversight and can review the full conversation history and audit trail (tg_conversation_sessions/tg_conversation_messages) — so no Annex III category applies (no personal data of third parties, no worker/driver scoring, no task allocation to people). Transparency (Art. 13): AI involvement is inherent (the user is directly operating Claude).compliance_status = partial(2026-08-17): held pending end-to-end verification of the Phase 2 deployment tracked in #3793 (still open) — it will move tocompliantonce that E2E verification lands. Risk justification recorded indev_r_ai_systems.
step-0b-planning-phase(docs/queue-dispatcher-operations.md): the worker self-assessment step that reads an issue, generates a design if missing, classifies it SOLO/PARALLEL-N and callsmax_subagents_for_weight()to pick a parallelism level. Its output is advisory only — a planning decision that never directly acts on code, and every resulting change lands via a human-reviewed PR — so no Annex III category applies (recommendation-only, no personal data, no people scoring/allocation). Registered indev_r_ai_systemsfor completeness.
council-judge-review(#6212; design + dogfood review #6207, implementation PR #6211): the council+judge multi-agent review system implemented as Claude Code skill/prompt files —.claude/commands/review-plan.md,.claude/commands/review-pr.md, and the autonomousinfra/agent-prompts/review-pr-worker.md. It reviews GitHub design-plans and PR diffs via 8–9 parallel Haiku “perspectives” (completeness, correctness/accuracy, risk, quality/tests, security, secrets, reuse, simplicity, value) synthesised by a judge into a singleAPPROVE/REQUEST_CHANGESverdict. It acts only on GitHub design-plan / issue / PR title, body and diff content — no personal data, no worker/driver/employee scoring, no task allocation to people — so no Annex III high-risk category applies (same basis as the other GitHub-metadata agents above). Interactive-vs-autonomous distinction (flagged explicitly per #6212): the interactive/review-planand/review-prskills are fully advisory — Haiku-only, they post a verdict and a human decides what to do with it. The autonomousreview-pr-worker.mdis the higher-risk component — its Sonnet judge auto-merges onAPPROVEand auto-closes/labels onREQUEST_CHANGESwith no human in the loop. Human oversight (Art. 14): the autonomous worker is bounded (open, non-draft PRs only; CI-gated; self-skips on failing CI),review-pr-worker.mdis aprotected: trueproduction file requiring explicit human confirmation to change, and every auto-merge is still subject tomainbranch protection requiring an approving review from a separate identity; the whole pipeline is disableable at the dispatcher. Data governance (Art. 10): PR/issue/diff content is treated as external/untrusted input, with an explicit prompt-injection defense clause in the review prompts. Logging (Art. 12): the AI-authored review comments on each issue/PR,dev_r_worker_queue.result_summary, and the queue-dispatcher logs. Transparency (Art. 13/52): every review comment carries an AI-authored disclosure footer naming the model. Nodev_r_servicesrow — this is Claude Code skill prompt files, not a new container/service.
dispo-document-classification(#7679, Partially implements #7582;scripts/dispo_classify_backfill.py, run once on bms-4): a one-offgpt-4obackfill that classifies the ~476 unclassified non-footer dispatch-inbox attachments inp24_l_dispo_dokumenty(external freight e-mails + their PDF/image/Excel documents) into the 30-valuekategoriabusiness-purpose dictionary and, where the printed issuer matches a known contractor, setskontrahent_id. Not Annex III high-risk — it classifies commercial freight documents and makes no decision about a natural person: no worker/driver recruitment, evaluation, monitoring or task allocation (III.4(a)), no critical-infrastructure management, no biometric/credit/law-enforcement function. Classified minimal, consistent with the registry’s other inbound-document classifiers (imap-inbox-ai-classifier,ai-documents-inbox-processing,vipo-offer-parser). Transparency (Art. 50) does not apply — output is internal operational metadata, not public-facing generated content and not a chatbot. Human oversight (Art. 14): every classification is advisory only and reviewed/editable by azarzad/platform_adminoperator in the et-op “Zarząd Dispo” UI;typ_dokumentuandjest_stopkaare never touched,szablon_idis always left NULL, and low-confidence rows are surfaced for review. Data governance (Art. 10): the external e-mail headers/body and attachment content are treated as untrusted DATA, never instructions — the system prompt carries an explicit SECURITY/prompt-injection clause and lowers confidence on any embedded instruction. Logging (Art. 12):/var/log/p24-infra-workers/dispo_classify_backfill.log(ids/filenames/categories/confidences/token-counts only — no document content, no secret values), the per-rowclassification_model/classified_at/classification_confidenceaudit columns, and Discord + GH-issue error notification. Cost is hard-capped (25 USD). Source of truth for the prompt + 30-slug dictionary:infra-src/n8n-workflows/prompts/dispo-document-classification.md+dispo-document-categories.json. Ops doc:docs/logistics-order-extraction-pipeline-operations.md.
et-operational-platform
| System | Service | Risk | Status | Notes |
|---|---|---|---|---|
vipo-offer-parser | et-operational-platform | minimal | compliant | — (not Annex III — freight-offer extraction from inbound email → internal transport-register rows; no decision about a natural person, no worker scoring/allocation) |
vipo-offer-parser(vipoOfferParserService, VIPO epic et-operational-platform#1267; migrated to Vercel AI Gateway in et-op commitf2e85fb1; flagged unassessed during the VIPO Wave-2/coverage dispatch 1789; assessed per p24-infra#6591): AI parser that extracts freight-transport offers from inbound email and auto-createsrejestr-przewozow(transport register) rows in et-op. Not Annex III high-risk — it extracts commercial cargo/freight-offer data and makes no decision about a natural person: no worker recruitment/evaluation/monitoring or task allocation (III.4(a)), no critical road-infrastructure management (III.2(a)), and no biometric / credit-scoring / law-enforcement / education / justice function. Classified minimal risk, consistent with the registry’s other inbound-email extraction systems (imap-inbox-ai-classifier,ai-documents-inbox-processing,wa-ai-to-inbox). Transparency (Art. 50): does not apply — output is internal operational register data, not public-facing synthetic/generated content and not a chatbot interacting with natural persons; inbound offer emails may incidentally carry carrier/dispatcher contact PII, governed the same as the other inbound-email systems (docs/ai-risk-data-governance.mdPart C). Human oversight (Art. 14): the auto-createdrejestr-przewozowrows are reviewable and editable by operators in the et-op UI. Logging (Art. 12): created rows are persisted and auditable in et-op. Assessment + record-keeping only — no code change in et-op. Registered indev_r_ai_systems.
whatsup-android-chat-puller
| System | Service | Risk | Status | Notes |
|---|---|---|---|---|
wa-thread-summarization | wa-thread-review | minimal | partial | — (not Annex III — summarizes already-captured WhatsApp chat content into reviewable threads; no decision about a natural person, no worker scoring/allocation) |
wa-thread-summarization(scripts/whatsapp-extractor/thread_builder.py, scheduled via.github/workflows/generate-wa-threads.ymlon the self-hostedbms4-androidrunner; implemented in whatsup-android-chat-puller PR #213 / issue #212, compliance follow-up p24-infra#6915): fetches a user’sp24_wap_messagesfor a WhatsApp thread, chunks them into 7-day windows, and sends each window to Claude (local CLI, OAuth subscription — noANTHROPIC_API_KEY) to detect discussion-thread boundaries within a Polish fleet-messaging chat, writing title/summary/context rows intop24_wap_thread_reviewsfor human approve/reject review in et-operational-platform’s admin “Historia WA” tab (et-operational-platform PR #1973). Not Annex III high-risk — it does not recruit/evaluate/monitor any worker or driver, does not allocate tasks, and does not evaluate or score anyone’s performance (III.4(a) does not apply); it makes no decision about a natural person, only reorganizing already-existing chat content into a more reviewable shape (affects_people=false), same basis asvipo-offer-parser. Classified minimal, not limited: output is an internal admin-panel view, not public-facing generated content and not a chatbot interacting with natural persons, so Art. 50 transparency does not apply. Human oversight (Art. 14): every generated thread carries areview_status(pending/approved/rejected) that aplatform_adminmust act on — summaries are never auto-actioned. Logging (Art. 12):p24_wap_thread_reviewsrows, this repo’s existingp24_wap_pipeline_eventsaudit-trail pattern, and Discord/GH-issue error notification on the new scheduled workflow. Compliance status: partial, not compliant — input is WhatsApp message content from fleet drivers/dispatchers (personal communications, potentially containing PII) anddocs/ai-risk-data-governance.mdPart C has not yet been updated to cover this input source (has_data_governance=false); there is also no dedicated ops-doc EU AI Act section yet (has_technical_docs=false). Both are tracked as follow-up work, not blocking the feature. At registration time PR #213 was open (not yet merged) and the scheduled workflow had not yet run on thebms4-androidrunner.
n8n AI workflows
Any n8n workflow that calls the Claude proxy, OpenAI, or any other AI provider must be registered. Use service_name = 'n8n-bms4' (or 'n8n-hstgr' for Hostinger) and system_name = workflow slug.
Registered as of 2026-06-16 (migration 021 + 023):
| System | Service | Risk | Status | Notes |
|---|---|---|---|---|
tronik-gps-kierowcy | n8n-bms4 | limited | compliant | Art.52 disclosure footer in build_report node (#720 workflow Imgxpl5hYgjSaqd5); risk + GPS data governance in ai-risk-data-governance.md Part C. Not used for worker performance evaluation (#1976). 2026-06-29 (#1947): driver footer was claimed in 2026-06-16 but never actually applied — corrected on the live workflow and repo backup. |
tronik-gps-serwisant-mobilny | n8n-bms4 | limited | compliant | Same as above for technicians (footer was genuinely present since 2026-06-16; workflow W50qRbJs9xrGotaX) |
wa-ai-to-inbox | n8n-bms4 | minimal | compliant | No mandatory obligation; Art.52 N/A (no AI reply to users). Claude via SSH→vps-i1 (Haiku) since 2026-06-24 (#1214). Governance in Part C |
imap-inbox-ai-classifier | n8n-hstgr | minimal | compliant | No mandatory obligation; email PII governance documented in Part C |
ai-documents-inbox-processing | n8n-cloud | minimal | compliant | No mandatory obligation; document PII governance documented in Part C |
gmail-tools-daily-inbox-agent | n8n-bms4 | minimal | compliant | Added 2026-07-31 (#4724). Daily 07:00 Europe/Warsaw cron → claude -p on bms-4 over the owner’s own radieu@gmail.com inbox (label / archive / digest). Agentic — the model holds Gmail write tools and, via --dangerously-skip-permissions, unrestricted host tools on bms-4, so the prompt-injection control set is documented separately as C-R6 in Part C, whose (b) dimension is assessed elevated and gates activation; email PII governance in Part C. Art.52 N/A — the only recipient of AI-generated text is the inbox owner, who is also the operator. Ships deactivated (see docs/gmail-tools-daily-agent-operations.md §Activation checklist) |
gmail-tools-telegram-bot | n8n-bms4 | minimal | compliant | Added 2026-08-01 (#4819). On-demand Telegram bot (workflow google-worker-bot, id BBVD0cAN6uuIbcqr) → SSH → claude --allowedTools -p on bms-4 over the owner’s own radieu@gmail.com inbox, triggered by a message from the single authorized owner. Agentic, but ships with --allowedTools from the start (Option A) — the host dimension of C-R6(b) is mitigated at source (no bare Bash/Write), unlike the daily agent’s original --dangerously-skip-permissions; residual host-account exposure is Option B (#4815), out of scope. Input surface is narrower than the daily agent’s (only the authorized owner can trigger it). Art.52 N/A — the sole recipient of AI-generated text is the owner who sent the request. Ships deactivated (see docs/gmail-tools-telegram-bot-operations.md §Activation checklist) |
voice-to-text-inspection | telegram-inspection-bot | minimal | compliant | Transcription only; risk + governance in Part C |
et-chatbot-produkcja | n8n-hstgr | limited | n/a | WIP — disabled until Art.52 disclosure implemented. Needs an interactive-chat opening disclosure (not a report footer) + ops re-enable decision — tracked in #2100 |
2026-06-28 (#1976) — partial-status remediation: The seven systems previously at
compliance_status = partial were reviewed and moved to compliant. None is high-risk, so no Annex III
obligation is triggered; their has_risk_management and has_data_governance records are completed in
ai-risk-data-governance.md Part C. A registry-wide review confirmed
no system has drifted into high-risk classification (6 minimal / 6 limited / 0 high). The two GPS
report systems were explicitly confirmed not used for worker performance evaluation, so they remain
limited (not Annex III.4(a)).
5. Compliance Requirements by Risk Tier
High-Risk (Annex III) — checklist
Before deploying any high-risk system, all items must be true in dev_r_ai_systems:
| Field | Article | Requirement |
|---|---|---|
has_risk_management | Art. 9 | Documented risk management system: identify, analyse, evaluate risks; test before deployment |
has_data_governance | Art. 10 | Data governance practices: training data quality, relevance, bias assessment |
has_technical_docs | Art. 11 | Technical documentation before market placement; includes architecture, capabilities, limitations |
has_logging | Art. 12 | Automatic logging of events; retain logs for at least 6 months |
has_transparency | Art. 13 | Clear information to deployers and affected persons about AI involvement |
has_human_oversight | Art. 14 | Designated human overseer who can interrupt, override, or shut down the system |
Additionally:
- Accuracy, robustness, cybersecurity requirements (Art. 15)
- Register in EU AI Act database if deploying to third parties or in public-interest context (Art. 49)
- Post-market monitoring plan (Art. 72)
- Serious incident reporting to national authority (Art. 73)
Limited-Risk — checklist
| Field | Article | Requirement |
|---|---|---|
has_transparency | Art. 52 | Disclose to users that they are interacting with an AI system |
Minimal-Risk — best practices (not legally required)
- Register in
dev_r_ai_systemsfor visibility - Set
has_logging = true(audit trail) - Set
has_human_oversight = true(ability to override) - Annual review of classification
6. Compliance Status — audit-engine AI systems
Both current systems are minimal risk. No Annex III category applies.
workbook-designer — current gaps
| Measure | Status | Notes |
|---|---|---|
| Human oversight | ✅ yes | Workbooks reviewed; /reoptimize endpoint allows manual override |
| Logging | ✅ yes | Every design attempt in audit.runs |
| Transparency | ✅ yes | Internal team; documented in docs/audit-engine.md |
| Technical docs | ✅ yes | docs/audit-engine.md covers architecture, designer, WorkbookSpec |
| Risk management | ✅ yes | docs/ai-risk-data-governance.md Part A (A.1–A.5): risk register (R-01/R-02), residual-risk verdict, review schedule |
| Data governance | ✅ yes | docs/ai-risk-data-governance.md Part B (B.1–B.8): data inventory, personal-data assessment, retention, access controls |
Not legally required at minimal risk, but the habit is established — both docs existed already, this table just hadn’t been updated to reflect it (found 2026-08-01).
report-generator — current gaps
Same status as workbook-designer — covered by the same Part A/B entries in docs/ai-risk-data-governance.md (both systems share the same risk register).
7. Registering a New AI System
Before deploying any new AI-powered feature:
-
Classify the risk tier — use §3 Annex III table to check if the system falls into a high-risk category. When in doubt, consult the EU AI Act official text.
-
Insert a row in
dev_r_ai_systems:
INSERT INTO public.dev_r_ai_systems (
project_id, service_name, system_name, description,
ai_provider, ai_model, purpose, decision_type, affects_people,
eu_ai_act_risk, annex_iii_category, risk_justification,
has_human_oversight, has_logging, has_transparency,
has_technical_docs, has_risk_management, has_data_governance,
compliance_status, compliance_notes, doc_url, status, last_reviewed
) VALUES (
'p24-infra', -- or 'et-operational-platform'
'service-name', -- matches dev_r_services.service_name
'system-slug', -- short identifier for this AI capability
'What this AI does.',
'anthropic', -- ai_provider
'claude-sonnet-4-6', -- ai_model
'Plain-English purpose.',
'informational', -- decision_type
false, -- affects_people
'minimal', -- eu_ai_act_risk
NULL, -- annex_iii_category (NULL unless high-risk)
'Why this classification was chosen.',
false, false, false, false, false, false, -- compliance checklist (update to actual values)
'partial',
'Notes on what is done and what is missing.',
'docs/eu-ai-act-compliance.md',
'active',
CURRENT_DATE
);-
For high-risk systems, complete all six compliance checklist items before going live. Create a separate ops doc section covering the risk management system and data governance policy.
-
Update this document — add the system to §4 inventory table and document its compliance status in §6.
8. Automated Audit Check
The eu_ai_act_check action runs every Monday at 08:00 UTC via the audit engine.
What it checks:
| Rule | Severity | Condition |
|---|---|---|
| Prohibited system active | FAIL | eu_ai_act_risk = 'prohibited' and status = 'active' |
| High-risk: missing oversight | FAIL | eu_ai_act_risk = 'high' and has_human_oversight = false |
| High-risk: missing logging | FAIL | eu_ai_act_risk = 'high' and has_logging = false |
| High-risk: missing technical docs | FAIL | eu_ai_act_risk = 'high' and has_technical_docs = false |
| High-risk: missing risk management | FAIL | eu_ai_act_risk = 'high' and has_risk_management = false |
| High-risk: missing data governance | WARN | eu_ai_act_risk = 'high' and has_data_governance = false |
| Limited-risk: missing transparency | FAIL | eu_ai_act_risk = 'limited' and has_transparency = false |
| Annual review overdue | FAIL | last_reviewed < today - 365 days or last_reviewed IS NULL |
| High-risk: quarterly review overdue | WARN | eu_ai_act_risk = 'high' and last_reviewed < today - 90 days |
Results are recorded in audit.runs. A FAIL triggers the standard error notification (Discord + GitHub issue).
9. Annual Review Process
Who: Platform owner (Radek Konarski) or delegated technical lead.
Frequency: All systems annually; high-risk systems quarterly.
Review steps:
- Query
dev_r_ai_systemsfor all active systems - Re-evaluate EU AI Act risk classification — check if Annex III scope has changed, if system use has changed, or if new guidance has been issued
- Verify each compliance checklist field reflects current state
- Update
last_reviewed = CURRENT_DATEfor each reviewed system - Update this document’s “Last reviewed” date
- If any system is newly classified as high-risk, complete the full compliance checklist before the next deployment
10. Regulatory References
| Document | URL |
|---|---|
| EU AI Act full text | https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1689 |
| Annex III (high-risk categories) | EU AI Act, Annex III |
| Art. 26 — deployer obligations | EU AI Act, Article 26 |
| EU AI Act database | https://database.euaiact.eu (from 2026-08-02) |
| National authority (Poland) | Urząd Komunikacji Elektronicznej (UKE) — pending designation |
11. Incident Reporting
If an AI system causes or contributes to a serious incident (harm to health, safety, or fundamental rights of persons), report to the national supervisory authority within 15 days (Art. 73).
Record all incidents in dev_r_incidents and tag with source = 'eu-ai-act'.