Erste Fassung: Claude-Werkzeuge aus dem Vault

.vault-tools (ohne trading-plattform-pruefung und watermarks-remover),
.claude/agents, .claude/skills, .claude/workflows, .claude/settings.json.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Pascal MichelandClaude Opus 5.5 committed 2026-10-14 11:27:59 +02:00
commit fa1c26b407
137 files changed
+43926

No files matched your search

+115
View File
@@ -0,0 +1,115 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Angriffsfaelle fuer strip_code() aus linkcheck.py.
Vorgehen nach AI/Regelwerk/pruefwerkzeuge.md Abschnitt 3: je Fall ein
eigener Durchlauf, Grundlinie zuerst. Faellt die Grundlinie, misst der
Rest nichts.
Der Fall "Reihenfolge" (Link an erster UND letzter Position) ist Nr. 3 -
laut Regelwerk der Fall, dessen Fehlen am teuersten war.
Aufruf: python .vault-tools/linkcheck/faelle.py
"""
import os
import re
import sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from linkcheck import strip_code, wikilinks # noqa: E402
_LINK = re.compile(r"\[\[([^\]\|#\^]+)")
class _V:
"""Minimaler Ersatz fuer vaultlib in den Faellen."""
_WIKILINK_RE = _LINK
def links(text):
return wikilinks(_V, text)
# (Nummer, Name, Text, erwartete Links)
FAELLE = [
(0, "GRUNDLINIE: einfacher Link", "Siehe [[Zielnotiz]] dazu.", ["Zielnotiz"]),
(1, "leerer Text", "", []),
(2, "nur Fliesstext mit Link", "Ein [[A/B]] mitten im Satz.", ["A/B"]),
(3, "Reihenfolge: Link vor UND nach einem Zaun",
"[[Vorher]]\n\n```bash\n[[ $EUID -eq 0 ]]\n```\n\n[[Nachher]]",
["Vorher", "Nachher"]),
(4, "Zaun mit Sprachangabe", "```bash\nif [[ -f x ]]; then :; fi\n```", []),
(5, "Tilde-Zaun", "~~~\n[[drin]]\n~~~", []),
(6, "Zaun ohne Abschluss", "Text\n```\n[[drin]]\nnoch drin", []),
(7, "Inline-Code", "Der Ausdruck `[[:space:]]` trifft Leerzeichen.", []),
(8, "doppelte Backticks", "Siehe ``[[roh]]`` im Text.", []),
(9, "einzelner Backtick ohne Partner",
"Ein ` einzelner Backtick und danach [[Echt]].", ["Echt"]),
(10, "vier Backticks als Zaun", "````\n[[drin]]\n````", []),
(11, "eingerueckter Zaun in einer Liste",
"- Punkt:\n ```\n [[drin]]\n ```\n- [[Danach]]", ["Danach"]),
(12, "Link unmittelbar an der Zaunzeile",
"[[Davor]]\n```\ncode\n```\n[[Danach]]", ["Davor", "Danach"]),
(13, "Bestandsfall EUID im Block",
"```bash\nif [[ $EUID -eq 0 ]]; then exit 1; fi\n```", []),
(14, "Bestandsfall Zeichenklasse inline",
"Mit `grep -o '[[:space:]]'` filtern.", []),
(15, "escaptes Pipe in einer Tabellenzelle",
r"| Datei | [[Pfad/Zur/Notiz\|Alias]] | Rest |", ["Pfad/Zur/Notiz"]),
(16, "escaptes Pipe am Zeilenende ohne Alias",
r"Siehe [[Ziel\|]] dort.", ["Ziel"]),
(17, "Dreier-Zaun mit Info-String in Vierer-Zaun",
"````markdown\n```bash\ngrep '[[:space:]]' datei\n```\n````\n[[Danach]]",
["Danach"]),
(18, "Dreier-Schliesszaun schliesst Vierer nicht",
"````\n```\n[[drin]]\n````\n[[Danach]]", ["Danach"]),
(19, "Vierer-Zaun schliesst Vierer-Zaun",
"````\n[[drin]]\n````\n[[Danach]]", ["Danach"]),
(20, "```bash in einem ```-Block schliesst nicht",
"```\n```bash\n[[drin]]\n```\n[[Danach]]", ["Danach"]),
(21, "Schliesszaun mit Leerraum dahinter",
"```\n[[drin]]\n``` \t\n[[Danach]]", ["Danach"]),
(22, "Schliesszaun mit CR am Zeilenende",
"```\r\n[[drin]]\r\n```\r\n[[Danach]]\r\n", ["Danach"]),
(23, "anderes Zaunzeichen schliesst nicht (Backtick vs. Tilde)",
"```\n[[drin]]\n~~~\n[[Danach]]", []),
(24, "Schliesszaun mit vier Leerzeichen davor schliesst nicht",
"```\n[[drin]]\n ```\n[[Danach]]", []),
(25, "Schliesszaun mit Tab davor schliesst (symmetrische Regel, benannte Luecke oberste Ebene)",
"```\n[[drin]]\n\t```\n[[Danach]]", ["Danach"]),
(26, "Liste: mit Tab eingerueckter Block schliesst mit Tab-Zaun",
"- Punkt:\n\t```\n\t[[drin]]\n\t```\n- [[Danach]]", ["Danach"]),
]
def main():
grundlinie = FAELLE[0]
ist = links(grundlinie[2])
if ist != grundlinie[3]:
sys.stdout.write("GRUNDLINIE FAELLT: erwartet %r, bekommen %r\n"
% (grundlinie[3], ist))
sys.stdout.write("Der Rest der Faelle misst damit nichts. Abbruch.\n")
return 2
fehler = 0
for nr, name, text, erwartet in FAELLE:
try:
ist = links(text)
except Exception as exc: # ein Absturz ist ein Befund
sys.stdout.write(" FALL %-2d ABSTURZ %s -> %s\n" % (nr, name, exc))
fehler += 1
continue
ok = ist == erwartet
if not ok:
fehler += 1
sys.stdout.write(" FALL %-2d %-7s %-42s erwartet %r, bekommen %r\n"
% (nr, "ok" if ok else "FEHLER", name, erwartet, ist))
gepruefte = len(FAELLE)
sys.stdout.write("\n%d von %d Faellen bestanden.\n" % (gepruefte - fehler, gepruefte))
return 1 if fehler else 0
if __name__ == "__main__":
sys.exit(main())