EU AI Act · Article 50 · in force from 2 August 2026
What each surface on this site actually is.
Article 50(1) requires that you be told, at the start of your first interaction, when you are interacting with an AI system. Article 3(1) defines an AI system as one that infers, from the input it receives, how to generate its output. Recital 12 places outside that definition “systems that are based on the rules defined solely by natural persons to automatically execute operations”.
Self-conformance record · 2026-08-01
Statement. As of 2 August 2026, 171 interactive surfaces on this site are classified: 133 are rule-based instruments or deterministic displays that call no model; 38 routes across 14 components are AI systems — they send your input to the configured model chat endpoint, and they say so. Any surface not in the registry defaults to the strictest reading — treated as an AI system — until it is classified.
How this record updates. The registry is a source file (client/src/lib/ai-surfaces.ts), version 2.0.0; every change is a commit, and a guard in the release gate fails the build if a surface starts calling a model without being registered and noticed. This record is sha256-linked into the public decision chain at publication — recompute it yourself at /gspc-verify.
The correction this page owes you
Version 1.0.0 of this registry (29 July 2026) stated that zero surfaces on this site call a model. That was wrong, and the method was why: the scan walked imports of model-provider SDKs, but the surfaces that talk to a model do it with a plain fetch to our own gateway — no SDK involved. A manual audit of every fetch on 1 August 2026 found 14 components calling the configured model chat endpoint. They are classified below, and the guard is being extended to cover gateway fetches so the next miss is caught by the machine, not by a deadline.
The AI-system surfaces — 38
These routes reach a live model. 4 of them mount the Article 50(1) first-interaction notice above the input today; for the rest, this registry entry is the disclosure while the notice component is wired — listed plainly, because a notice you can check beats a claim you cannot.
The dock sends your message to the configured chat endpoint (/api/chat) and a model writes the reply. It is mounted on every page; the notice below the dock header discloses this at first interaction, per Article 50(1). No Council review is implied.
check it: client/src/components/SovereignDock.tsx · client/src/lib/sovAsk.ts
The embedded 'Ask your Council assistant' panel (SovereignSpot) sends questions to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/ActSummary.tsx · client/src/components/SovereignSpot.tsx
CORRECTED 1 Aug 2026 — v1.0.0 registered this as keyword matching; the code actually sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Article 50(1) notice is mounted above the input.
check it: client/src/pages/EuActClassifier.tsx
The guided demo answers questions by sending your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/DemoOS.tsx · client/src/lib/sovAsk.ts
The embedded 'Ask your Council assistant' panel (SovereignSpot) sends questions to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/ActSummary.tsx · client/src/components/SovereignSpot.tsx
The embedded 'Ask your Council assistant' panel (SovereignSpot) sends questions to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/Penalties.tsx · client/src/components/SovereignSpot.tsx
The embedded 'Ask your Council assistant' panel (SovereignSpot) sends questions to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/GpaiObligations.tsx · client/src/components/SovereignSpot.tsx
The embedded 'Ask your Council assistant' panel (SovereignSpot) sends questions to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/NISTAIRMFGuide.tsx · client/src/components/SovereignSpot.tsx
'Ask your Council assistant about the world' sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The answer can also drive the globe (layers, flights) through a deterministic action layer. The Article 50(1) notice is mounted above the input.
check it: client/src/pages/WorldGlobe.tsx · client/src/lib/sovAsk.ts
The query box sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/GovGraph.tsx
The embedded 'Ask your Council assistant' panel (SovereignSpot) sends questions to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/GpaiObligations.tsx · client/src/components/SovereignSpot.tsx
The query box sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/GovGraph.tsx
The embedded 'Ask your Council assistant' panel (SovereignSpot) sends questions to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/NISTAIRMFGuide.tsx · client/src/components/SovereignSpot.tsx
The map Q&A sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/WatchdogMap.tsx
The framework Q&A sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/FrameworkHive.tsx · client/src/lib/sovAsk.ts
The showcase Q&A sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/PocShowcase.tsx
The embedded 'Ask your Council assistant' panel (SovereignSpot) sends questions to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/Iso42001VsEuAct.tsx · client/src/components/SovereignSpot.tsx
The embedded 'Ask your Council assistant' panel (SovereignSpot) sends questions to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/Iso42001VsEuAct.tsx · client/src/components/SovereignSpot.tsx
The embedded 'Ask your Council assistant' panel (SovereignSpot) sends questions to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/NISTAIRMFGuide.tsx · client/src/components/SovereignSpot.tsx
The showcase Q&A sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/PocShowcase.tsx
The launcher command box posts to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/OsLauncher.tsx
The guided demo answers questions by sending your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/DemoOS.tsx · client/src/lib/sovAsk.ts
The embedded 'Ask your Council assistant' panel (SovereignSpot) sends questions to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/Penalties.tsx · client/src/components/SovereignSpot.tsx
The showcase Q&A sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/PocShowcase.tsx
The atlas Q&A sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/RegulatorAtlas.tsx
The atlas Q&A sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/RegulatorAtlas.tsx
Scenario practice responses come from the configured /api/chat endpoint and are written by one model. They are not Council votes, verdicts, measurements, or signed evidence. The Art 50(1) notice is mounted before interaction.
check it: client/src/pages/CouncilSpace.tsx
Scenario practice responses come from the configured /api/chat endpoint and are written by one model. They are not Council votes, verdicts, measurements, or signed evidence. The Art 50(1) notice is mounted before interaction.
check it: client/src/pages/CouncilSpace.tsx
The workbench asks the configured chat endpoint to produce a governance draft for the skill you pick. Its evidence state is reported separately and no Council review is implied. The Art 50(1) notice is registered here.
check it: client/src/pages/Workbench.tsx · client/src/lib/sovAsk.ts
The first pass is local fixed-rule classification. The optional prompt sends the description to the configured /api/chat endpoint and returns one model response. It is not a Council vote, review, measurement, or signed result. The Article 50(1) notice is mounted above the input.
check it: client/src/pages/TryCouncil.tsx
The map Q&A sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/WatchdogMap.tsx
The map Q&A sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/WatchdogMap.tsx
The workbench asks the configured chat endpoint to produce a governance draft for the skill you pick. Its evidence state is reported separately and no Council review is implied. The Art 50(1) notice is registered here.
check it: client/src/pages/Workbench.tsx · client/src/lib/sovAsk.ts
'Ask your Council assistant about the world' sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The answer can also drive the globe (layers, flights) through a deterministic action layer. The Article 50(1) notice is mounted above the input.
check it: client/src/pages/WorldGlobe.tsx · client/src/lib/sovAsk.ts
The query box sends your input to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Art 50(1) notice for this surface is registered here and being wired; until the component ships, this registry entry is the disclosure.
check it: client/src/pages/GovGraph.tsx
The hive list view mounts the same component as /hive/:slug, whose detail view asks the configured chat endpoint about the framework you open. Because this surface reaches a model endpoint it is registered ai_system; the Article 50(1) notice is mounted at the top of the list view. No Council review is implied.
check it: client/src/pages/FrameworkHive.tsx · client/src/lib/sovAsk.ts
The legacy home is a chat panel: every message you send goes to the chat backend (trpc.chat.sendMessage) and an assistant-written reply is rendered. The server router's types are not in this repo (a pre-existing broken import), so the backend cannot be inspected from here; under this registry's strictest-reading rule a chat-with-assistant surface is treated as an AI system. The Article 50(1) notice is mounted above the message area.
check it: client/src/pages/Home.tsx
The page mounts SovereignSpot, whose 'Ask your Council assistant' box sends your question through askSovereign to the configured /api/chat model endpoint, where a single model writes the answer; no Council review, vote, or signature is implied. The Article 50(1) notice is mounted at the top of the page, before the chat panel.
check it: client/src/pages/WhyCSOAI.tsx · client/src/components/SovereignSpot.tsx · client/src/lib/sovAsk.ts
The rule-based surfaces — 133
Deterministic instruments, data displays and forms. Each was grep-audited for model calls; the mechanism line names what the surface is and asserts only what was verified. Rule-based systems defined solely by natural persons fall outside the Article 3(1) definition (Recital 12), so Article 50(1) does not apply to them — we say so rather than leave it unsaid.
One thing worth watching
3 model SDKs are declared in package.json — @anthropic-ai/sdk, openai, @google/generative-ai — and never imported anywhere. A dependency is not a call, so this is not a disclosure failure. It is the shortest possible distance to becoming one: adding inference is a single import with no install step and nothing to prompt a second look. The guard reports it every run.
What happens when this stops being true
A page like this is worth nothing if it is maintained by remembering to maintain it. The classification is a registry file, and article50_guard.py reads it: if any surface's code reaches a model — by SDK import or, after the 1 August correction, by gateway fetch — that surface must be registered as an AI system and must mount the Article 50(1) notice. If an interactive surface exists and is missing from the registry, the guard fails. The check runs in the release gate.
Three outcomes, never two. When the guard cannot read the app it reports UNMEASURED, which is not a pass. And when its method has a blind spot — as the import-only scan did — the correction is published in the registry itself, not buried in a changelog.
Scope, honestly
- This covers interaction, not reading. Static prose pages are out of scope — Article 50(1) is about interacting with a system.
- Article 50(2) is not engaged. Nothing here generates synthetic audio, image, video or text, so there is no output to mark. If that changes, the marking obligation attaches — and the grace period to 2 December 2026 reaches only systems placed on the market before 2 August 2026, which a new feature would not be.
- The gateway is ours. The model behind the Council chat endpoint is operated under our own governance boundary; the endpoint, not the model vendor, is what these surfaces call.
- Classification is our reading, not a determination. Whether a given rules engine falls inside Article 3(1) is a legal question. The mechanism and the source file are published so you can reach your own view.
- This is our own compliance. Publishing it does not make CSOAI a certifier of anyone else's.