Skip to content
Back to skills

Eu Ai Act Content Check Eduard Wolf

ASecurity

Use before publishing or deploying web content, articles, images, audio or video created with AI assistance: checks which EU AI Act Article 50 transparency duties apply (deepfake labelling, public-interest text disclosure, editorial-review exception) and prepares the editorial review record for the git-native gate.

  • 85 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 8, 2026
ai-agentsgonodeexpressawsgitsecurityperformancedocumentation

Works with

  • cursor
  • cli

Security analysis

A100/100

Scanned October 8, 2026

npx -y skills add ThomasMoreAI/legal-skills-open --skill eu-ai-act-content-check-eduard-wolf --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Eu Ai Act Content Check Eduard Wolf?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Eu Ai Act Content Check Eduard Wolf
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/thomasmoreai-eu-ai-act-content-check-eduard-wolf/badge)](https://www.skillsdirectory.com/skills/thomasmoreai-eu-ai-act-content-check-eduard-wolf)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
---
name: eu-ai-act-content-check-eduard-wolf
title: EU AI Act content check (Article 50)
description: 'Use before publishing or deploying web content, articles, images, audio or video created with AI assistance: checks which EU AI Act Article 50 transparency duties apply (deepfake labelling, public-interest text disclosure, editorial-review exception) and prepares the editorial review record for the git-native gate.'
author: eduard-wolf
author_url: https://github.com/eduard-wolf/eu-ai-act-content-transparency/tree/main/plugins/eu-ai-act-content-check/skills/eu-ai-act-content-check
license: MIT
version: 0.1.0
execution_mode: open
jurisdiction: eu
practice: regulatory
language: en
---

# EU AI Act content check (Article 50)

> ⚠️ **Not legal advice.** This skill is a technical and editorial working aid. The European Commission's guidelines
> (C(2026) 5054 final, 20 July 2026) are legally non-binding; only the CJEU can interpret Regulation (EU) 2024/1689
> with binding effect. There is no case law on Article 50 yet — this builds a defensible position, not a safe
> harbour. **As of: 24 August 2026.**

Article 50 has applied since 2 August 2026 (guidelines para 153). Below, "para" always means a paragraph of
C(2026) 5054 final. Chapter names refer to files in this repository; if only this skill folder was copied, the tree
below still stands on its own. Those chapters — and this file — are labelled as AI-generated: they were produced by
AI agents without editorial review by a human with relevant subject-matter expertise, so the exception of Art. 50(4),
second subparagraph is not claimed for them; `PROVENANCE.md` records what was verified and what was not.

**Two sentences to carry through every check:**

- The editorial exception is **text only**. For images, audio and video there is none — there only the deepfake test
  decides, and the art exception merely relaxes the **form** of disclosure (Art. 50(4); paras 119–123, 133). A
  deepfake stays labelled no matter how carefully a human reviewed it.
- Mnemonic: **text asks "who checked it?" — image asks "does it look real?"**

Run before content is published, deployed, handed to a client or merged into a publishing branch — once **per content
item** (a page with one text and three images is four checks), and again whenever a reviewed item changes.

## The tree (8 steps, 0-7, self-contained)

**Step 0 — Exposure and audience.** Art. 2(10) removes only the **deployer** obligations of natural persons acting
purely personally **and** non-professionally; provider duties (including the Art. 50(2) machine-readable marking) and
other Union and national law stay untouched (para 20). So a private use never ends the check here — go on to Step 1
(are *you* the provider of the system?) and to Step 7. Any activity yielding regular economic benefit or done in a
professional, business, trade or freelance capacity counts as professional (para 19) — a monetised channel is in
scope. The duty holder is whoever has authority over the deployment and its outputs; employees, contractors and
commissioned agencies are not separate deployers (paras 12, 14). Then split by modality: **text** duties require
publication (Step 3), **deepfake** duties do **not** — para 112 lists only AI system + professional use + deepfake +
no law-enforcement exception, and the example catalogue expressly includes an internal *"AI-generated video featuring
a realistic synthetic avatar of a company CEO congratulating employees …"* (box after para 116). So internal deepfakes
are labelled too. The yardstick is the reasonably foreseeable audience (para 115): a subscriber-only area or a
corporate newsletter does not force a broad-public assumption, but if children or people with low AI literacy are
foreseeably in the audience, deception towards *them* counts.

**Step 1 — Direct AI interaction?** Chatbot, voicebot, AI hotline, agent → Art. 50(1) disclosure, unless the AI nature
is obvious to a reasonably well-informed, observant and circumspect person. The duty addresses the **provider** (para
28). You are the provider if you developed the bot in-house and put it into service under your own name, or if you
**modified** a bought-in system (in the example *"with new training data"*) and afterwards put it into service under
your own name (Art. 3(3); paras 10, 11). An unmodified bought-in bot leaves the duty with its maker — check in your
own embedding that the notice really appears, and put it in the contract (`playbook/en/05-agencies-and-contracts.md`). The
notice belongs **in the conversation at first interaction**, not in an imprint, manual or terms of use (Art. 50(5);
paras 33, 142, 143); agents must disclose both their artificial nature and on whose behalf they act (para 31). This
step never ends the check — Art. 50(1) and (4) can apply cumulatively (para 8), so continue with the content itself.

**Step 2 — Image / audio / video: the deepfake test.** Four cumulative criteria (para 113, from Art. 3(60)):

1. **appreciable resemblance** to the simulated subject (recital 134);
2. the subject **exists, could plausibly exist, or could plausibly have existed** — invented photorealistic humans and
   avatars included, representations breaking laws of nature or biology excluded;
3. the subject is a **person, object, place, entity or event** — incl. digital replicas, realistic AI avatars and
   personas, voice, behaviour, performances, buildings, consumer goods, depicted services;
4. it **would falsely appear authentic or truthful** — judged objectively from resemblance, claim, context and
   foreseeable audience; **no intent to deceive is required**, photorealism alone is *"not determinative"* (para 114).

One criterion missing → no deepfake (illustration, cartoon, evidently surreal scene, instrumental music bed depicting
no reality). *Trivial-edit gate (para 116):* insignificant interventions on pre-existing material create no deepfake —
*"editing background details (e.g. removing passerby)"*, lighting, audio parameters, colour correction, noise removal,
accessibility improvements, compression, cosmetic adjustments; in product advertising and packaging also background
extensions, *"replacements of backgrounds for clearly aesthetic purposes"*, arrangements of existing products,
re-scaling. It flips when the manipulation misleads about the **product or subject itself**, or when **journalistic
images** are edited *"beyond standard technical, editorial practices"*. *Art gate (paras 119–123):* evidently
artistic, creative, satirical or fictional works stay under the duty — only the **form** relaxes to *"an appropriate
manner that does not hamper the display or enjoyment of the work"*. *"Evidently"* is narrow, ambiguous content falls
out, on mixed character *"the informative character should always prevail"* (para 122), and Art. 50(5) timing still
applies (para 123).

**Step 3 — Text: published?** *"Published"* = accessible to an indeterminate, fairly large number of unrelated
potential readers, whether or not against payment (para 131 i). Out: private and professional one-to-one
correspondence, closed small groups, organisation-internal texts, and a chatbot answer seen only by the person who
asked. The **publication** date decides, not the generation date (para 154). No → no text duty, go to Step 7.

**Step 4 — Text: matter of public interest?** Para 131 iii lists politics and democratic processes, administration and
public services, justice and law enforcement, fundamental rights, public security, **health**, environmental
protection, **consumer safety**, and any economic, financial, political, scientific or cultural development that may
be a relevant subject of public debate. Very short texts conveying no knowledge, opinion or fact fall out
(para 131 ii). Advertising and product copy are out — **but** expressly *"not including any claims related to e.g.
health, consumer safety or sustainability"*, which puts such copy back in. No → no text duty, go to Step 7.

**Step 5 — Text: the editorial exception (Art. 50(4) subpara 2).** Two **cumulative** conditions (para 133): (1) human
review or editorial control — *"deliberate examination of the substance"* by people with relevant knowledge and
professional judgement, where *"Fact-checking the accuracy of the content is a minimum requirement"* (para 134); (2) a
named natural or legal person holding **ultimate legal responsibility**, whose identity and contact details are
publicly findable (para 138). Not sufficient (para 135): spell- and grammar-checking, the mere existence of an
editorial policy, automated review ("AI reviews AI"), cursory approval without substantive engagement. Met → no label,
but keep the evidence (review record below). Not met → label required — for the labelling path as a whole (when it
is the right choice, the label line, placement, provenance page, as-of date) see `playbook/en/09-labelling-path.md`.

**Step 6 — Form of the label.** See "If a label is required" below and `playbook/en/04-labelling-form.md`.

**Step 7 — Neighbouring duties.** A label is no free pass: unfair-competition (UWG) misleading claims, copyright, data
protection and personality rights remain untouched (para 124; footnotes 32, 34). Platform policies and the DSA apply
alongside. Report these as a note, never as clearance.

## Output: one verdict per content item

```
[file or item]  —  DUTY | NO DUTY | GREY ZONE
Modality:   text | image | audio | video | interactive
Reason:     one or two sentences, in the words of the test that decided it
Anchor:     Art. 50(…) / para …
Next step:  concrete label proposal, or review record, or "nothing to do"
```

- **DUTY** — name the criterion that is met. **NO DUTY** — name the criterion that fails, e.g. "criterion 4 not met:
  stylised infographic, no claim to authenticity (para 113 iv, 114)".
- **GREY ZONE** — flag with ⚠️ and the standing sentence: *grey zone — record the classification with a short
  justification (see `gate/`)*. Never resolve a grey zone silently in either direction; it is a human judgement call
  and the written justification is what makes it defensible. Recurring ones: object removal and background swaps
  (para 116), advertising vs. public-interest information (para 131 iii), half-open distribution lists (para 131 i),
  what counts as a "substantive" AI edit after sign-off (para 136).
- Anchors must be exact. If no source covers the case, write `[zu verifizieren: …]` and say so — never invent a
  paragraph number, a judgment or a file number.

## If a label is required

Match the label language to the content language. Full library incl. the optional EU icons:
`playbook/en/04-labelling-form.md`.

| Case | DE | EN |
|---|---|---|
| Chatbot / direct interaction | „Sie chatten mit einem KI-Assistenten." | "You are chatting with an AI assistant." |
| Image deepfake | „KI-generiertes Bild" · „Mit KI verändertes Bild" | "AI-generated image" · "AI-modified image" |
| Fully synthetic video | „Dieses Video enthält KI-generierte Bild- und Sprachsequenzen." | "This video contains AI-generated visuals and speech." |
| Partly manipulated video | „Einzelne Bild- oder Sprachsequenzen dieses Videos wurden mit künstlicher Intelligenz verändert." | "Parts of this video's visuals or speech have been modified using artificial intelligence." |
| Audio deepfake (audible) | „Dieser Beitrag enthält eine KI-generierte Stimme." | "This recording contains an AI-generated voice." |
| Labelled text | „Dieser Text wurde mit künstlicher Intelligenz erstellt." | "This text was generated using artificial intelligence." |

**Label line for text — three rules** (`playbook/en/09-labelling-path.md`, section 3). The line is a statement of
origin, not a quality verdict; it carries at most three kinds of statement, and only two belong in it.
(1) **Mandatory core — the origin statement:** that the text *"has been artificially generated or manipulated"*
(Art. 50(4) subpara 2), *"clear and perceivable by natural persons (e.g. visible or audible measures) without them
needing to rely on any specific technical tools or performing dedicated actions"* (para 132) — no wording is
prescribed and the EU icon is optional. (2) **True process facts are allowed — if true:** "not editorially reviewed",
"machine-checked against the sources" or "as of <date>" may be added because they shape what readers may legitimately
expect, but each must be backed by a real run (the date comes from the last substantive generation or check run,
never from a build, deploy or layout commit), since, on this playbook's reading, an untrue process statement is a
statement about an essential characteristic of the service and open to attack as misleading (§ 5(2) no. 1 UWG,
German unfair-competition law; whether that reference point holds for free content is undecided, and no ruling
specifically on process statements is on record) — a wrong as-of date is worse than none. (3) **No
self-evaluative claims:** "professionally created", "by AI experts" or "high-quality" are advertising claims about
the trader's qualifications and the service (§ 5(2) no. 3 and no. 1 UWG), not origin statements — they stay out of
the line, as do norm citations (para 142 asks for information that is *"noticeable, easy to understand by and
accessible for the natural person concerned"*), and evidence belongs on the provenance page the line links to. Where
the label path is taken because the competence test in Step 5 fails, draft **no** review record — a record without a
substantive review documents a false statement (this playbook's reading of para 135); note the decision in one
sentence instead ("labelled because the competence test for this topic came out negative").

**Placement** — clear and distinguishable, at the latest at first exposure, with no click, hover or tooling required
(Art. 50(5); para 142): **image** into the image itself where no overlay covers it, then check the responsive crops;
**video** at the start and repeated, at minimum after interruptions; **audio** audibly before the content starts — a
note in the description does not label the audio; **text** above or at the top, near the headline. Terms of use,
footers, metadata and menu layers do not qualify (para 142). Those placement specifics come from the **Code of
Practice on Transparency of AI-Generated Content**, Sec. 2 — image: Sub-measure 1.2.2 lit. a; video: Sub-measure 1.2.2
lit. b; audio: Measure 1.1 with Sub-measure 1.2.3; text: Sub-measure 1.2.2 lit. f. The code binds only its
signatories; non-signatories must demonstrate compliance *"through other adequate means"* and are expected to run a
gap analysis against it (paras 147, 148). What the guidelines themselves carry is the reason for repeating: where it
is foreseeable that people do not perceive the content from its beginning, a disclosure at the start alone *"should be
complemented with disclosure at later moments, where possible"* (para 143). Two standing warnings: the provider's
machine-readable marking under Art. 50(2) **never** replaces your own perceivable label — deployers *"cannot rely on
the machine-readable marking"* (para 117); and a platform AI toggle can carry the disclosure only *"within the context
of the VLOP or VLOSE used"*, never for re-use on your own site or after a repost (para 126).

## If the editorial exception is claimed: draft the review record

Write `<name>.review.json` next to `<name>.md`. Prefill only what you can know; leave every field that attests a human
act empty. **The draft is deliberately incomplete — running the gate on it MUST fail until a human completes it. That
is the expected state, not a bug.**

```json
{
  "content_path": "examples/blog-artikel.md",
  "content_sha256": "",
  "reviewed_at": "",
  "reviewer": { "name": "", "role": "", "fachkompetenz": "" },
  "editorial_responsibility": { "traeger": "", "kontakt_oeffentlich": "" },
  "pruefung": { "faktencheck": false, "quellen_geprueft": false, "aenderungen_vorgenommen": "" },
  "scope": {
    "einstufung": "Veröffentlicht (Rn. 131 i) und öffentliches Interesse bejaht (Rn. 131 iii, Gesundheitsaussage) — Kennzeichnungspflicht dem Grunde nach, redaktionelle Ausnahme wird geltend gemacht.",
    "labels_erforderlich": [],
    "begruendung": "Zwei bis drei Sätze: warum diese Einstufung, welche Grauzone bewusst wie entschieden wurde."
  },
  "ki_beteiligung": "Konkret: welches Modell/Tool, für welchen Schritt (Rohentwurf, Umformulierung, Übersetzung, Zusammenfassung), was davon im veröffentlichten Stand steht."
}
```

- **You fill in:** `content_path` (POSIX path to the content file, normally relative to the repository root),
  `scope.einstufung`, `scope.labels_erforderlich`, `scope.begruendung`, `ki_beteiligung` — the classification and your
  own AI use. Leave `editorial_responsibility.traeger` empty even where the repository appears to name the bearer —
  naming who carries the ultimate legal responsibility is the human's act, not a classification.
- **Only the human fills in:** `content_sha256`, `reviewed_at`, all `reviewer` fields, both
  `editorial_responsibility` fields (`kontakt_oeffentlich` = the publicly findable location, e.g. the imprint URL,
  para 138) and the whole `pruefung` object. `false` means "not attested" — a human flips a boolean to `true` only
  after actually doing the work. Field types and patterns: `gate/review-record.schema.json`.

**Hand the human these instructions:**

1. Review the substance: check the facts (the legal minimum, para 134), verify the sources, change or reject what does
   not hold. Spell-checking, waving it through, or having a model check the model does not qualify (para 135).
2. Enter your name, role and the subject-matter competence that qualifies you, the review date, and the bearer of
   editorial responsibility with a publicly findable contact (para 138). Set the `pruefung` booleans to what is true.
3. Compute the hash **last**, over the raw bytes of the final file, and paste it into `content_sha256`:
   `shasum -a 256 <file> | cut -d' ' -f1` (macOS) · `sha256sum <file> | cut -d' ' -f1` (Linux).
4. Run the gate: `node gate/scripts/check-review-record.mjs <dir>` — green means the record is complete and bound to
   exactly this version of the file.

## Never do these

- **Never attest a human review.** Do not enter a reviewer name, do not fill either `editorial_responsibility` field,
  do not set `faktencheck` or `quellen_geprueft` to `true`, do not fill `reviewed_at`, do not compute the final hash
  into the record yourself. A record produced end-to-end by an agent is exactly the *"automated review process"* that
  para 135 rules out — it would document a breach instead of compliance.
- **Never edit content after the review.** Para 136: *"Any substantive AI intervention occurring after the human
  review or editorial control process has taken place will therefore cause the exception to become void."* If you
  rewrite, shorten, translate, summarise or regenerate a headline or teaser on a reviewed file, the record is void and
  a human must review again; the gate's hash binding enforces it by turning CI red. Purely technical steps (minify,
  format conversion, encoding fix) do not change the substance — where exactly the line runs is a grey zone, so say so
  instead of deciding it away. If something must change, say so plainly and ask for re-review. Never update the hash
  to make the gate pass.
- **Never present the result as legal advice or as compliance.** The gate enforces the **process** and makes it
  auditable; it does not enforce the quality of the review. It is a documentation form going beyond the legal minimum
  and expressly permitted (Code of Practice on Transparency of AI-Generated Content, Sec. 2, Commitment 4) — **not a
  safe harbour**.

## Where to read further

In this repository: decision tree `playbook/en/01-decision-tree.md` · classified cases `playbook/en/02-case-catalog.md` ·
editorial exception `playbook/en/03-editorial-exception.md` · label form `playbook/en/04-labelling-form.md` ·
commissioned work `playbook/en/05-agencies-and-contracts.md` · common errors `playbook/en/06-myths-faq.md` · watermarks
`playbook/en/07-provider-marking.md` · official sources `playbook/en/08-legal-basis.md` · labelling path
`playbook/en/09-labelling-path.md` · the gate `gate/README.md`. From this file: [playbook](../../../../playbook/en/01-decision-tree.md) · [gate](../../../../gate/README.md).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.