Tricks — schema, conventions, validator
Ziel: ≥ 70 belegte Trick-Datensätze (Projekt-Goal G3). Start leer; die echten Datensätze liefern Track G1 und Track G2. Diese Seite beschreibt das Schema, nicht die Inhalte.
Eine Trick-Datei ist ein einzelnes Markdown-Dokument mit YAML-Frontmatter.
Sie ist strukturierte Daten und wird vom Validator (scripts_build/trick_validate.py)
geprüft, vom Hub-Build gefiltert, und von decay_check an ihrem checked_on
gemessen.
Slug, ID, Dateiname und Sprache sind kanonisch englisch. Deutsche
Suchbegriffe und lokalisierte UI-Strings stehen explizit daneben (name_de,
ui_strings_ref), werden aber nie automatisch übersetzt — sie sind zu
belegende Fakten.
1. Datei
Wiki/tricks/
├── README.md ← dieses Dokument
├── TA-001-timezone-date-time-shift-bypass.md
└── …
ID-Schema (Stand Runde 3, 2026-08-16).
Frühere Versionen nummerierten mit T-001 … T-040. G1 und G2
verwendeten unabhängig dieselbe Nummerierung, dadurch waren 35 IDs
doppelt vergeben. Wir sind auf ein kategorie-bezogenes Schema
umgestiegen, dessen Suffix die Herkunft sichtbar lässt:
| Kürzel | Kategorie | Spur |
|---|---|---|
TA | time | G1 |
AC | account | G1 |
DE | device | G1 |
AI | app-install | G1 |
CO | content | G2 |
NE | network | G2 |
SE | social-engineering | G2 |
SD | second-device | G2 |
AT | advanced-technical | G2 |
PM | parental-misconfiguration | G2 |
Format: <Kategorie-Kürzel>-<3-stellige Ordinalzahl>.
Die dreistellige Ordinalzahl wird pro Kategorie und pro Ingestion-Lauf
hochgezählt. scripts_build/tricks_ingest.py liest die existierenden
Zähler aus den Frontmatter-Dateien aus und nimmt den höchsten Wert + 1
als nächste Ordinalzahl — so ist die ID-Vergabe kollisionsfrei, auch wenn
ein dritter Track (z.B. G3 Apps) dazukommt und die gleiche Kategorie
bedient. Siehe _ID_MIGRATION.md für die vollständige Migrations-
Tabelle alt → neu.
Dateinamenkonvention: <id-klein>-<slug>.md · Beispiel
TA-001-timezone-date-time-shift-bypass.md. Der Validator prüft,
dass jede Datei diese Konvention einhält (trick_validate.py --corpus).
Eine Trick-Datei muss mit YAML-Frontmatter beginnen (----Zeilen). Body
darf Begleitnotizen enthalten; der Validator liest nur das Frontmatter.
2. Felder
2.1 Pflichtfelder (HART, ohne sie nicht publizierbar)
| Feld | Typ | Bedeutung |
|---|---|---|
id | string | Format XX-NNN mit zweistelligem Kategorie-Kürzel und 3+ Stellen, eindeutig im Korpus |
slug | string | Kleinbuchstaben, Ziffern, Bindestriche; identisch zum Dateinamen-Stamm |
name_en | string | Englischer Name, kanonisch |
name_de | string | Deutscher Name; darf identisch zur englischen Zeichenkette sein, wenn kein guter Suchbegriff existiert |
category | enum | Siehe §3 |
platform | enum | Siehe §3 |
defeats | liste | Wiki-Slugs der Kontrollfunktionen, die ausgehebelt werden; jeder Eintrag muss ein existierender Wiki-Slug sein |
effort | enum | Siehe §3 |
still_works | enum | Siehe §3 |
still_works_evidence | liste | Mindestens ein Block mit source (Slug) + date (YYYY-MM-DD); reine Vermerkfelder reichen nicht |
detection | string | Beobachtbare Symptome — kein Ausführungsrezept |
fix_technical | block | ui_strings_ref (Liste von UI-String-Schlüsseln, nicht leer) und note (string, nicht leer) |
fix_relational | string | Was der Trick über das Bedürfnis sagt; wie das Gespräch statt der Eskalation aussieht |
sources | liste | Slugs oder Blöcke mit slug; Platzhalter siehe §5 |
2.2 Optionale Felder (WEICH)
| Feld | Typ | Bedeutung |
|---|---|---|
typical_age | int | Realistisches Mindestalter (6–16). Fehlt → Validator meldet weich |
residual_risk | string | Was nach dem Fix offen bleibt. Fehlt → Validator meldet weich |
prevalence | string | Wie verbreitet der Trick real vorkommt. Trennt “technisch möglich” von “kommt real vor” — entscheidende Information für Eltern. Werte sind Freitext mit Belegquelle. |
closable | enum | true · partial · false. Markiert, ob der Trick auf der im Datensatz genannten Ebene technisch schliessbar ist. false ist die explizite Aussage “auf dieser Ebene existiert keine Gegenmassnahme” und verlangt ein prevalence-Feld (soft-Befund sonst). |
closed_since | string | Pflicht, wenn still_works: closed. Beispiel "iOS 26" |
name_fr, name_it | string | Spätere Sprachen; vorerst nicht erforderlich |
checked_on | date | Datum der letzten inhaltlichen Prüfung. Pflicht für Publish |
os_version | string | OS-Stand, gegen den geprüft wurde, Pflicht für Publish |
2.3 Strukturblock fix_technical
fix_technical:
ui_strings_ref: [apple.screentime.downtime.enable, android.familylink.app_limits.set]
note: |
In den Geräteeinstellungen Datum & Uhrzeit den automatischen Wechsel sperren
und die Zeitzone manuell setzen. Den Screen-Time-Code getrennt vom Gerätecode
aufbewahren.ui_strings_refist Pflicht und nicht leer. Verweise aufui-strings/*.yaml.noteist Pflicht. Darf den Pfad in Worten beschreiben, aber keine UI-Pfad-Zeichenkette wieSettings → Screen Time → Downtimeenthalten, die einen hartkodierten Pfad simuliert.- Weder
ui_strings_refnochnotedürfen eine Ausführungsanleitung enthalten (siehe §6).
2.3.1 Wenn closable: false — die “no-countermeasure”-Datensätze
Eine Router-Sperre, die am Datentarif endet, ist gefährlicher als gar keine, wenn man sich darauf verlässt. Für die in der Forschung als “technisch nicht schliessbar” markierten Datensätze gilt daher ein erweiterter Pflichtkanon:
closable: falseauf der im Datensatz genannten Ebene (typisch: Heimrouter, einzelner Browser).prevalencemit dem Belegstand (Architekturgrenze / fehlende Evidenz / konkrete Praevalenz-Zahl) — der Validator meldet weich, wenn das Feld fehlt.fix_technical.notebeschreibt, wo stattdessen angesetzt werden muss (Endgerät, Konto, Anbieter) — nicht wie.
Diese drei Angaben gehören zusammen; eine isolierte closable: false
ohne prevalence versteckt die Begründung im Fliesstext und
verhindert, dass der Hub-Build die Information prominent rendert.
3. Enums
| Enum | Werte |
|---|---|
category | time · content · app-install · account · device · network · social-engineering · second-device · advanced-technical · parental-misconfiguration |
platform | ios · android · both · platform-agnostic · router · app-specific |
effort | trivial · moderate · technically skilled |
still_works | yes · partially · no |
age_band (Filter) | 0-5 · 6-9 · 10-12 · 13-15 · 16+ |
defeats, ui_strings_ref, sources, still_works_evidence und die Namen
sind Listen, in denen die Slugs kleinbuchstaben-mit-bindestrich geschrieben
sind und dem kanonischen Baum entsprechen (Wiki/en/<slug>.md oder ein
anderer Trick-Datensatz in Wiki/tricks/).
4. Belegpflicht
still_works ist die teuerste Pflege im Projekt (architecture §11) und
darf nie ohne Beleg stehen:
still_works: partially
still_works_evidence:
- source: apple-ios-26-release-notes
url: https://developer.apple.com/news/releases/
date: 2026-08-12
note: "iOS 26.1 schliesst die Lücke nicht; Familienkonfiguration weiterhin nötig."Mehrere Einträge sind zulässig; mindestens einer ist Pflicht. Foren-Belege dürfen nur die Verbreitung belegen, nicht die technische Funktionsweise.
5. PLACEHOLDER-Konvention
Beim Aufbau des Schemas entstehen Vorlagen-Datensätze, deren Quellen erfunden
sind. Diese werden mit PLACEHOLDER- markiert, damit sie niemals mit echten
Datensätzen verwechselt werden. Der Validator meldet jeden Datensatz mit
einer Placeholder-Quelle als „nicht publizierbar” — hart blockierend.
Eine Placeholder-Quelle sieht so aus:
sources:
- slug: PLACEHOLDER-apple-support-108806
type: placeholder
note: "Slug existiert; wird ersetzt, sobald der echte Quellenextrakt vorliegt."Erkennungsregel (vom Validator angewandt):
sources-Eintrag ist ein String und beginnt mitPLACEHOLDER-, odersources-Eintrag ist ein Block mitslug: PLACEHOLDER-…, odersources-Eintrag ist ein Block mittype: placeholder.
Sobald der Track-G-Lieferbetrieb echte Slugs einsetzt, verschwinden die Platzhalter und der Validator wird die Datensätze freigeben.
6. Redaktionelle Grenze (HART, vom Validator geprüft)
detection, fix_technical und fix_relational beschreiben, wie Eltern
erkennen und schliessen, nicht wie sie ausführen. Der Validator
schlägt hart an, wenn:
- Ausführungssequenzen in
name_en/name_de/detectionstehen:- Nummerierte Schritte (
Step 1: …,step 3: …,1. open …). - Imperative Verkettungen in diesem Stil:
First, open …; then install …; finally ….
- Nummerierte Schritte (
- Links auf Bypass-/Jailbreak-Domänen in
fix_technical,detectionoderfix_relational: bekannte Muster aus der iOS-/Android-Szene (theiphonewiki, jailbreak, unc0ver, checkra1n, magisk, sileo, cydia, …).
Gemeinsam mit §3 in concept.md (No-go „Schritt-für-Schritt-Exploits”) ist
das die einzige normative Schranke gegenüber dem ausgelieferten Inhalt —
alles andere ist Stilfrage.
7. Beispiel-Datensätze
Drei vollständige Datensätze liegen als Vorlage im selben Verzeichnis — je
einer aus time, account und content:
T-014-change-time-zone.mdT-025-recovery-resets-apple-id.mdT-044-pwa-bypass.md
Alle drei tragen ausschliesslich Placeholder-Quellen und werden vom Validator als „nicht publizierbar” gemeldet, bis Track G sie mit echten Belegen befüllt.
8. Werkzeuge
| Tool | Zweck |
|---|---|
scripts_build/trick_validate.py | Prüft einzelne Datensätze oder das Verzeichnis; CLI für Editor-Workflow, API für den Hub-Build |
scripts_build/trick_schema.py | Enums, Parser-Helfer, Filter |
tests/test_tricks.py | Positiv- und Negativtests je Regel |
Filter für Hubs (nach Plattform, Kategorie, Altersband) liegen in
trick_schema.py und sind die öffentliche Schnittstelle für den Hub-Build.
—
Diese Seite ist selber kein Trick-Datensatz (sie hat kein Pflichtfeld
id,category, …). Sie wird vom Validator übersprungen, weil die erste Zeile im Body nicht---als Frontmatter-Eröffnung trägt.