state-json-validator
Skill0 starsChanged 23 days agoMITView on GitHub
Validiert JSON-State-, Config- und Snapshot-Dateien auf Schema-Konformitaet, Korruption, veraltete Felder und Timestamp-Plausibilitaet. Pruefe state.json, metrics.json, docsis_snapshot.json (FritzBox), config.json (Discord Feature-Toggles), Analyse-Cache (FootstepPro). Erkennt korrupte JSON-Dateien und bietet Reparatur an. Trigger wenn der User "JSON kaputt", "state korrupt", "config validieren", "Schema pruefen", "warum sind die Werte komisch" sagt, oder nach Crashes/Updates die State-Konsistenz pruefen will.
In this repository46 other files it gives its agents.
- a11y-checkSkill
- agent-createSkill
- branch-finishSkill
- changelog-updaterSkill
- code-doc-syncSkill
- codex-msgSkill
- codex-reviewSkill
- csoSkill
- db-exploreSkill
- deploy-preflightSkill
- deps-checkSkill
- design-htmlSkill
- design-shotgunSkill
- design-taste-frontendSkill
- finanzberaterSkill
- footstep-eq-tunerSkill
- full-auditSkill
- gateSkill
- gemini-digestSkill
- graphifySkill
- handygame-botSkill
- hook-createSkill
- instructions-drift-checkSkill
- investigateSkill
- leanreaSkill
- legal-deSkill
- loopmodeSkill
- loopstopSkill
- lyraSkill
- office-hoursSkill
- plan-ceo-reviewSkill
- profileSkill
- python-env-auditSkill
- quick-reviewSkill
- reviewSkill
- security-auditSkill
- seoSkill
- site-anatomySkill
- skill-createSkill
- spatial-pipeline-helperSkill
- test-runSkill
- tool-scoutSkill
- transient-profile-validatorSkill
- ui-critiqueSkill
- wakeup-setupSkill
- websucheSkill
The file
Files
state-json-validator
Pruefe JSON-Dateien gegen Erwartungs-Schemas und biete Reparatur fuer korrupte oder veraltete Dateien.
Wofuer
Alle drei Projekte nutzen JSON fuer State-Management. Wenn ein Cron-Job mitten im Schreiben crasht (FritzBox), wenn ein Bot-Update neue Felder einfuehrt (Discord), oder wenn der Cache aus einer alten Version stammt (FootstepPro), zeigt sich das oft erst Stunden spaeter durch obskure Folgefehler. Der Skill erkennt das frueh und kann repariert anbieten.
Trigger
- "state.json ist kaputt"
- "Cache stimmt nicht"
- "config.json validieren"
- "Schema fuer X pruefen"
- Nach einem Crash, Update oder verdaechtigen Werten
- Vor einem Deployment als Sanity-Check
Workflow
0. Projekt-Initialisierung pruefen — KLARE Diagnose statt schweigend
Bevor du in den Validierungs-Workflow gehst: Glob die unten gelisteten Pfade. Wenn KEINE der erwarteten JSON-Dateien existiert (auch keine .tmp, .corrupt, .bak-Reste), brich mit klarer Diagnose ab — nicht schweigend "alles OK" melden:
state-json-validator
====================
Projektordner: <pfad>
Status: NICHT INITIALISIERT — keine erwarteten JSON-Dateien gefunden
Erwartet (nicht vorhanden):
- state.json
- metrics.json
- docsis_snapshot.json
- state/bot_status.json
Moegliche Ursachen:
- Projekt wurde noch nie ausgefuehrt (z.B. fritzbox_monitor.py mindestens 1x laufen lassen)
- Andere Pfade in Verwendung — User: bitte konkreten Pfad angeben
- Falscher Projekt-Ordner
Naechster Schritt:
- User fragen: "Wurde das Projekt schon laufen lassen? Gibt es einen anderen Pfad fuer State-Files?"Wenn EINIGE Dateien fehlen, ANDERE da sind: Workflow nur fuer die vorhandenen, fehlende als INFO ("noch nie geschrieben") melden — nicht als CRITICAL.
1. JSON-Dateien einsammeln
Bekannte Pfade pro Projekt:
FritzBox-Monitor:
state.json(root)metrics.jsondocsis_snapshot.json- evtl.
state.json.corrupt(Backup nach Reparatur)
Discord-Bot-System:
config/config.json(Feature-Toggles)state/bot_status.json(Heartbeat — pruefe nicht hier, ist im cron-monitor-check)state/<bot>_<feature>.json(laufzeit-State pro Cog)
FootstepPro:
output/cache/<hash>.json(Analyse-Cache)- evtl.
state.jsonfuer Watcher
Wenn der User einen konkreten Pfad nennt, nur den. Sonst alle bekannten.
2. Korruptions-Pruefung
Versuche json.load(...) auf jede Datei. Bei JSONDecodeError:
- Speichere Inhalt als
<datei>.corrupt(Backup vor jeder Reparatur, immer). - Versuche Reparatur in dieser Reihenfolge:
- Trailing-Komma entfernen: oft Editor-Artefakt
- Letzten unvollstaendigen Eintrag abschneiden: bei abgebrochenem Schreiben — von hinten nach vorn parsen, bis ein gueltiges Object ende erreicht ist (
}) - Mehrere konkatenierte Objects:
}{wird ein Trennstrich — splitte und nimm das zuletzt vollstaendige
- Wenn Reparatur gelingt: schreibe
<datei>.repaired.jsonund zeige Diff. NICHT automatisch ueberschreiben — User entscheidet. - Wenn nicht: melde Fehler mit der Position aus
JSONDecodeError.
3. Schema-Validierung
Pro bekannten Datei-Typ ein Inline-Schema (kein externes JSON-Schema-File noetig fuer den Anfang):
FritzBox state.json:
{
"last_run": str, # ISO timestamp
"last_success": str, # ISO timestamp
"consecutive_failures": int, # >= 0
"last_error": str | None,
"version": str,
}FritzBox metrics.json:
{
"snapshots": [
{
"timestamp": str,
"downstream_power_dbmv": float,
"upstream_power_dbmv": float,
"downstream_snr_db": float,
"errors": dict,
}
],
"schema_version": int,
}Discord config.json:
{
"features": {
"<bot_name>": {
"<feature_key>": bool,
...
}
},
"schema_version": int,
}FootstepPro Cache:
{
"wav_path": str,
"wav_mtime": float,
"wav_size": int,
"analyzer_version": str,
"metrics": dict,
"computed_at": str,
}Pro Eintrag pruefe:
- Pflichtfelder vorhanden
- Typ stimmt
- Timestamp parsebar (ISO 8601 oder Unix-Float)
version-Felder gegen aktuelle Projekt-Version- Listen-Eintraege in chronologischer Reihenfolge (Drift = wahrscheinlich Korruption)
4. Plausibilitaets-Checks
- Timestamp nicht in der Zukunft: ein Eintrag mit Timestamp > now ist verdaechtig (Uhrzeit am Server falsch beim Schreiben).
- Timestamp nicht zu alt: bei Heartbeat-aehnlichen Files (FritzBox
last_run) — wenn > 24h, melden. consecutive_failureszu hoch: bei FritzBox > 10 — der Monitor laeuft offenbar leer.- Keine Snapshots in
metrics.jsonder letzten 24h: die Erfassungs-Pipeline ist gestorben. config.jsonFeature-Flags: Pruefe ob jeder im Code genutzteis_enabled("xyz")einen Eintrag hat (cross-check mit Grep).
5. Versions-Drift
schema_version oder analyzer_version mit dem Projekt-Stand vergleichen. Bei alter Cache-Version: schlage Loeschung des Caches vor (NICHT automatisch loeschen — User-Entscheidung).
6. Schema-Datei generieren (optional)
Wenn der User explizit fragt: erzeuge fuer jede validierte JSON-Datei ein begleitendes <datei>.schema.json im JSON-Schema-Format (Draft 2020-12). Damit kann der User in Zukunft auch ohne diesen Skill validieren.
Report-Format
state-json-validator
====================
state.json (FritzBox):
[OK] gueltige JSON
[OK] Schema vollstaendig
[WARN] last_success: 7h alt — Cron laeuft, kommt aber nicht durch
[WARN] consecutive_failures = 12 — schau in den letzten Log-Eintrag
metrics.json (FritzBox):
[OK] gueltige JSON
[WARN] schema_version: 1 (aktuell: 2) — neue Felder fehlen
docsis_snapshot.json (FritzBox):
[CRITICAL] JSONDecodeError @ pos 4421
[INFO] Reparaturversuch (Trailing-Komma): erfolgreich
[INFO] Repariert geschrieben nach: docsis_snapshot.repaired.json
[INFO] Backup nach: docsis_snapshot.json.corrupt
Naechster Schritt: pruef diff docsis_snapshot.json docsis_snapshot.repaired.json — falls OK, ersetzen.
config/config.json (Discord):
[OK] gueltige JSON
[WARN] feature 'mc_server_status' im Code referenziert (cogs/server.py:42), in config.json nicht definiertEdge Cases
- Symlinks: bei Symlinks die Quelldatei lesen, nicht das Ziel als zusaetzliche Datei zaehlen.
- Sehr grosse JSON (>50 MB): warnen und Streaming-Parser empfehlen, hier nicht laden.
- Encoding: alles als UTF-8 lesen. Wenn UTF-8 fehlschlaegt: BOM/CP1252 als Fallback, dann nach UTF-8 normalisieren.
- Atomare Write-Pattern erkennen: Wenn
<datei>.tmpexistiert und juenger als<datei>ist, ist gerade ein Schreibvorgang im Gange — nicht in dem Moment validieren, melden ("write in progress?"). - Backup-Hygiene: nach erfolgreicher Reparatur und User-Bestaetigung gibts einen
.repaired.jsonund.corrupt— User soll den.repaired.jsonselbst nach Pruefung umbenennen.
Sicherheit
- Niemals automatisch ueberschreiben ohne explizite Bestaetigung.
- Backup vor JEDER Reparatur, immer mit Suffix
.corrupt. - Werte mit Secrets (z.B. API-Keys in
state.json): Im Report nur Variablennamen, nie Werte ausgeben.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

