XP-Content-Vertrag 1.0.0
Offizieller Inhaltsvertrag für eigene Anwendungen, die in XP-Fenstern dargestellt
werden. Gilt für HTML-Programme und MCP-Apps; fremde Apps verwenden ihren eigenen
Stil, bis sie ausdrücklich teilnehmen. Er ersetzt weder ci-xp-ui/v1 noch MCP Apps.
Öffentliche Referenz: https://mcp-lab.christian-igel.tech/documentation/contracts/xp-content/v1/
Version und Einbindung
Datei xp-content-1.0.0.css, Root .xp-content[data-xp-content-version="1"].
Eine veröffentlichte Dateiversion wird nicht verändert. Fehlerkorrekturen erhalten
eine neue Patchversion; inkompatible Semantik einen neuen Major und Rootwert.
Keine Netzwerkfonts, Skripte oder Fremdressourcen im Stylesheet.
Eigene MCP-Apps kopieren die Datei beim Build in ein <style>-Element ihres
vollständig gebündelten text/html;profile=mcp-app-Dokuments. HTML-Programme dürfen
die gepinnte Datei relativ aus ihrem eigenen Release laden. Kein Laufzeit-Hotlink
auf die Doku, kein Themezugriff durch Iframes und kein Umschreiben fremder HTML.
Klassen
| Klasse | Bedeutung und semantisches Element |
|---|---|
xp-content |
expliziter Inhaltsbereich, main oder umschließendes div |
xp-card |
zusammengehöriger Abschnitt, section/article mit Überschrift |
xp-note |
ergänzender Hinweis; keine geheimen oder wesentlichen versteckten Informationen |
xp-prose |
mehrzeiliger Text mit Zeilenumbruch und begrenzter Lesebreite |
xp-stack |
vertikaler Inhaltsfluss |
xp-grid |
automatisch umbrechende Inhaltsgruppen |
xp-form |
semantisches form; Validierung bleibt App-Verantwortung |
xp-field |
label mit zugeordnetem Eingabefeld |
xp-actions |
umbrechende Aktionsgruppe mit nativen Buttons |
xp-list |
echte ul/ol; keine Dateinavigation oder ARIA-Rolle allein durch CSS |
xp-statusbar |
App-Status im Inhalt, bei Aktualisierung role="status"; keine Hoststatusleiste |
xp-error |
visuelle Fehlerbetonung; zusätzlich verständlicher Fehlertext |
xp-tree, xp-root, Explorerpfade, Dateioperationen, Berechtigungen, Rootauswahl,
Titelleiste, Minimieren, Schließen und Fensternavigation sind kein Bestandteil.
Allgemeine Semantik stammt aus program-standard.css, components.css und
desktop.css; die alten globalen Selektoren und das Explorer-Raster wurden nicht übernommen.
Beispiel
<main class="xp-content xp-stack" data-xp-content-version="1">
<h1>Aufgaben</h1>
<section class="xp-card"><h2>Beschreibung</h2>
<p class="xp-prose">Freigegebene Aufgaben lesen.</p>
</section>
<label class="xp-field">Suche<input type="search"></label>
<p class="xp-statusbar" role="status">Bereit</p>
</main>
Die App baut keine zweite XP-Titelleiste. Das vollständige Beispiel steht in
example.html und funktioniert ohne MCP und ohne private Daten.
Barrierearme und mobile Regeln
Native Überschriften, Labels, Listen, Buttons und Linktexte verwenden. Fokus bleibt sichtbar, Status nie ausschließlich farblich kennzeichnen. Inhalt ab 320 CSS-Pixeln und bei 200 Prozent Zoom ohne abgeschnittene Bedienung prüfen. Steuerflächen sind mindestens 44 Pixel hoch. Raster brechen nach verfügbarer Iframebreite um. Reduzierte Bewegung und Windows-Kontrastmodus werden berücksichtigt. Dynamische Fehler entfernen veraltete private Daten; Tastaturbedienung und Lesereihenfolge gehören zur App-Abnahme. CSS allein garantiert keine Barrierefreiheit.
data-xp-theme="dark" ist ein ausdrücklich von der App gesetztes Theme. Hosttheme
kommt über den normalen MCP-Hostkontext; die App entscheidet über die Anwendung.
Keine Kopie beliebiger Host-CSS-Variablen, kein Zugriff auf Parent-DOM oder Cookies.
MCP-Metadaten und Host
Opt-in am Ressourceninhalt, außerhalb der Standard-ui-Policy:
{"_meta":{"tech.christian-igel/xp-content":{"version":"1.0.0"},"ui":{"csp":{"connectDomains":[],"resourceDomains":[]}}}}
Der Host validiert die genaue Version. Nur bei diesem Opt-in liefert er im
hostContext["tech.christian-igel/xp-content"] Version, Darstellungsfähigkeiten
cards, notes, prose, forms, lists, status, responsive, light, dark, chrome:"host"
und stylesheet:"bundled-by-app". Dieser namespaced Zusatz nutzt die ausdrücklich
erlaubten zusätzlichen HostContext-Felder des gepinnten MCP Apps SDK 2.0.0.
Die Kennzeichnung „XP-Content 1.0.0 · deklariert“ bestätigt Versionskompatibilität,
keine Identität, Sicherheitszertifizierung oder erfolgreiche CSS-Prüfung.
Unbekannte Versionen ergeben spezifischen App-Fallback, Funktionen bleiben verfügbar.
Fremde Apps ohne Opt-in erhalten keine XP-Kennzeichnung und keine XP-Metadaten.
Ressourcen-CSP und Permissions bleiben unverändert und unabhängig vom CSS-Vertrag.
Der gegenwärtige XP-Sandboxhost erlaubt ausschließlich gebündelte Inhalte ohne
Fremdnetz oder Geräteberechtigungen. Nicht leere Domainlisten und unbekannte
Policyfelder werden mit Feld und begrenztem Wert benannt. Die Karten-App verlangt
aktuell in connectDomains und resourceDomains die drei Werte
https://*.openstreetmap.org, https://cesium.com, https://*.cesium.com.
Kein permissions-Objekt ist deklariert. Insbesondere Wildcardfreigaben werden
nicht still in exakte Origins umgedeutet. Für Darstellung fehlen eine endliche,
geprüfte Originliste sowie ein browsergeprüfter CSP-/Worker-Vertrag. Keine
automatischen Toolaufrufe oder fremde Inhalte zum Ermitteln weiterer Rechte.
Build, Test und Veröffentlichung
Stylesheetversion und Hash im App-Release festhalten. Ressourcen-MIME, Metadaten, Bundling und keine externen Importe prüfen. Hosttests müssen fehlendes Opt-in, falsche Version, Policyfelder, fremde Origins und Geräteanfragen abdecken. Browserprüfung: 320/390/1280 Pixel, Tastatur, Theme, App/Funktionen, zwei Fenster, Resize, Schließen, Fehler und verspätete Antworten. Authentifizierung, effektive Rolle und Programmfreigabe separat prüfen; WP-Lab bleibt dafür die Autorität.
Veröffentlichung als neues Artefakt mit SHA-256-Manifest; Auswahl atomar, vorheriges Release als Rückweg erhalten. Keine aktiven Dateien ändern. Ein HTTP 200, ein Build oder CSS-Opt-in ist keine OAuth-/Browserabnahme.
Wiederverwendbarer Skill
xp-mcp-content-contract ist lokal unter ~/.codex/skills/ und auf wpmcp00 unter
~/.agents/skills/ installiert. Die öffentliche Kopie SKILL.md enthält dieselben
Anwendungs- und Sicherheitsregeln, ohne Credentials.