Automatischer Push: 11 Datei(en) geändert

- .claude/agents/planer.md
- .claude/workflows/plankritik.js
- .claude/workflows/quorum.js
- .claude/workflows/welle-mit-pruefung.js
- .vault-tools/plan-kopie/LIESMICH.md
- .vault-tools/plan-kopie/plan_bloecke.py
- .vault-tools/plan-kopie/plan_materialisiere.py
- .vault-tools/plan-kopie/plan_zaun_treiber.py
- .vault-tools/workflow-pruefung/LIESMICH.md
- .vault-tools/workflow-pruefung/faelle_workflows.mjs
- .vault-tools/workflow-pruefung/mutanten_workflows.py

Erzeugt vom PostToolUse-Hook .vault-tools/auto-push/auto_push.py.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
Pascal MichelandClaude Opus 5 committed 2026-11-03 03:00:01 +01:00
1 parent 7f484f9be5
commit 22761eb186
11 files changed
+1520 -65

No files matched your search

+23 -11
View File
@@ -13,8 +13,14 @@ Koordinator-Werkzeug im Scratchpad. Geltungsbereich (Fangnetz, kein Nachweis):
Schraegstrich; Name, der direkt in --projekt als Datei liegt oder Dateiname eines Eintrags ist), ist
jeder Aus- und wird-Block danach ein Befund, bis eine Ueberschrift mit Ziel kommt; vorher wurde still
gegen das vorige Ziel geprueft. Luecken wie in plan_materialisiere.py; Nachweis: plan_ziel_treiber.py.
- Zaunpruefung (seit 2026-11-02, Regel und Luecken im Kopf von plan_materialisiere.py, Nachweis: plan_zaun_treiber.py):
Klebt ein Zaun, fehlt einer oder schliesst ein Block nie, ist das ein Befund, und die Bloecke dieser Taskdatei
werden nicht geprueft: Hinter dem Zaun stimmt die Datei nicht mehr, und ein still geschluckter Aus-Block fiele
sonst nur als "steht nicht in ..." auf. Vorher lief hier eine eigene Blocksuche nur in Spalte 0; seitdem gilt
dieselbe wie in plan_materialisiere.py (zaun() und schliesst()), Aus- und wird-Bloecke zaehlen weiter nur mit
Zaun in Spalte 0.
- Exit 3 hat Vorrang: Wurde in keiner Taskdatei ein Block gegen eine Datei geprueft, endet es mit 3,
auch wenn Befunde ausgegeben sind.
auch wenn Befunde ausgegeben sind. Ausnahme ist ein Befund der Zaunpruefung, dort bleibt es bei 2.
- Modus vor: jeder Aus-Block steht genau einmal in seiner Zieldatei (0 = Befund, >1 = Befund
"mehrdeutig"). Belegt, dass der Plan den heutigen Stand byte-genau zitiert.
- Modus nach: jeder wird-Block steht in der Zieldatei; jeder Aus-Block steht nicht mehr darin,
@@ -30,12 +36,11 @@ import re
import sys
from pathlib import Path, PureWindowsPath
# Die Zielregel (PFAD, Zieldateien, offene Token) steht einmal, in plan_materialisiere.py im selben Ordner;
# Zielregel und Zaunregel stehen einmal, in plan_materialisiere.py im selben Ordner;
# der Ordner kommt ausdruecklich in den Suchpfad, sonst scheitert der Import unter "python -I"
sys.path.insert(0, str(Path(__file__).resolve().parent))
from plan_materialisiere import ordne, zieldateien # noqa: E402
from plan_materialisiere import ordne, schliesst, zaun, zaunbefunde, zieldateien # noqa: E402
ZAUN = re.compile(r"^```")
UEBERSCHRIFT = re.compile(r"^#{2,4} ")
@@ -60,16 +65,15 @@ def lies_bloecke(taskdatei: Path, projekt: Path) -> list[dict]:
ziel, ungeklaert = neu, None
elif offen:
ungeklaert = (i + 1, offen)
if ZAUN.match(zeile):
laenge = zaun(zeile)
if laenge:
start = i
einzug = len(zeile) - len(zeile.lstrip())
# Ein Zaun aus n Backticks schliesst erst mit mindestens n Backticks: Ein
# Vier-Backtick-Block darf einen Drei-Backtick-Block enthalten (Doku-Tasks).
laenge = len(zeile) - len(zeile.lstrip("`"))
i += 1
inhalt: list[str] = []
while i < len(zeilen) and not (
zeilen[i].startswith("`" * laenge) and not zeilen[i].strip("`").strip()
):
while i < len(zeilen) and not schliesst(zeilen[i], laenge, einzug):
inhalt.append(zeilen[i])
i += 1
marke = ""
@@ -78,7 +82,7 @@ def lies_bloecke(taskdatei: Path, projekt: Path) -> list[dict]:
k -= 1
if k >= 0:
marke = zeilen[k].strip()
if marke in ("Aus:", "wird:"):
if marke in ("Aus:", "wird:") and zeile.startswith("`"):
bloecke.append({"art": marke[:-1], "ziel": ziel, "zeile": start + 1, "text": "\n".join(inhalt),
"ungeklaert": ungeklaert})
i += 1
@@ -95,8 +99,16 @@ def main() -> int:
befunde = 0
geprueft = 0
zaunfehler = False
for name in argumente.taskdateien:
taskdatei = Path(name)
kaputt = zaunbefunde(taskdatei)
if kaputt:
for zeile, meldung in kaputt:
print(f"BEFUND {taskdatei.name}:{zeile}: {meldung}; Bloecke dieser Taskdatei nicht geprueft")
befunde += len(kaputt)
zaunfehler = True
continue
bloecke = lies_bloecke(taskdatei, projekt)
paare = 0
for nummer, block in enumerate(bloecke):
@@ -143,7 +155,7 @@ def main() -> int:
print(f"BEFUND {taskdatei.name}:{block['zeile']}: Aus-Block steht noch in {block['ziel']}")
befunde += 1
print(f"{taskdatei.name}: {len(bloecke)} Aus-/wird-Bloecke, im Modus {argumente.modus} geprueft: {paare}")
if geprueft == 0:
if geprueft == 0 and not zaunfehler:
print("Nichts geprueft: kein Aus-/wird-Block gefunden.")
return 3
print(f"{befunde} Befund(e).")