Files
claude-regelwerk/.claude/skills/bookstack-upload/scripts/bookstack/abgleich.py
T
Pascal MichelandClaude Opus 5 2c9a4475fc Regelwerk, Agenten, Skills und Werkzeuge veröffentlichen
Erster Stand des öffentlichen Ausschnitts aus dem Vault. Die .gitignore
arbeitet als Positivliste: ausgeschlossen ist alles, eingeschlossen nur,
was ausdrücklich wieder aufgenommen wird. Notizen, Projekte, Finanzen,
das Sitzungsgedächtnis und settings.local.json bleiben damit außen vor.

Der Kundenname in AI/Regelwerk/seo.md ist durch eine neutrale
Bezeichnung ersetzt; die Regeln selbst sind unverändert.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-17 22:38:15 +02:00

51 lines
1.5 KiB
Python

"""Entscheidet je Notiz, ob sie angelegt, aktualisiert oder übersprungen wird."""
from __future__ import annotations
import hashlib
from dataclasses import dataclass
from enum import Enum
from bookstack.notiz import Notiz
class Aktion(Enum):
ANLEGEN = "anlegen"
AKTUALISIEREN = "aktualisieren"
UEBERSPRINGEN = "überspringen"
@dataclass(frozen=True)
class Entscheidung:
aktion: Aktion
seiten_id: int | None
pruefsumme: str
begruendung: str
def berechne_pruefsumme(
titel: str, markdown: str, buch_id: int, kapitel_id: int | None
) -> str:
"""Deckt Inhalt *und* Ablageort ab — ein verschobenes Ziel gilt als Änderung."""
roh = "\x00".join([titel, str(buch_id), str(kapitel_id or 0), markdown])
return "sha256:" + hashlib.sha256(roh.encode("utf-8")).hexdigest()
def entscheide(notiz: Notiz, pruefsumme: str) -> Entscheidung:
roh_id = notiz.frontmatter.get("bookstack_page_id", "").strip()
if not roh_id:
return Entscheidung(Aktion.ANLEGEN, None, pruefsumme, "noch nie hochgeladen")
try:
seiten_id = int(roh_id)
except ValueError:
return Entscheidung(
Aktion.ANLEGEN, None, pruefsumme, f"bookstack_page_id unlesbar: {roh_id!r}"
)
if notiz.frontmatter.get("bookstack_hash", "").strip() == pruefsumme:
return Entscheidung(
Aktion.UEBERSPRINGEN, seiten_id, pruefsumme, "unverändert seit letztem Upload"
)
return Entscheidung(Aktion.AKTUALISIEREN, seiten_id, pruefsumme, "Inhalt hat sich geändert")