Automatischer Push: 46 Datei(en) geändert
- .claude/agents/planer.md - .claude/skills/plan-executer-pruefung/SKILL.md - .claude/workflows/plankritik.js - .claude/workflows/planung.js - .claude/workflows/pruefung.js - .claude/workflows/verbrauch.js - .claude/workflows/welle-mit-pruefung.js - .vault-tools/plan-kopie/LIESMICH.md - .vault-tools/plan-kopie/plan_zeichen.py - .vault-tools/plan-kopie/rot_nachweis.py - .vault-tools/trading-plattform-pruefung/LIESMICH.md - .vault-tools/trading-plattform-pruefung/abendkontrolle.py - … und 34 weitere Erzeugt vom PostToolUse-Hook .vault-tools/auto-push/auto_push.py. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
1 parent
67d674cd0b
commit
ea278dc24f
46 files changed
+8403
-80
No files matched your search
@@ -0,0 +1,113 @@
|
||||
"""Angriffsfaelle fuer rueckweg_aapl.py auf einem Wegwerf-Git-Repo. Koordinator-Werkzeug, nicht fuers Repo.
|
||||
|
||||
Jeder Fall einzeln, zuerst die Grundlinie; ohne WSL (--ohne-wsl, Runnerzustand vorgegeben), ohne Meldung.
|
||||
Aufruf unter Windows: python rueckweg_aapl_angriffe.py Exit 0, wenn jeder Fall wie erwartet ausgeht.
|
||||
"""
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
HIER = Path(__file__).resolve().parent
|
||||
sys.path.insert(0, str(HIER))
|
||||
import rueckweg_aapl as rw # noqa: E402
|
||||
|
||||
ZEHN = '[agent]\nquelle = "folge"\ninstrumente = ["AAPL.XNAS", "MSFT.XNAS"]\n'
|
||||
AAPL = '[agent]\nquelle = "register"\ninstrument = "AAPL.XNAS"\n'
|
||||
abweichungen: list[str] = []
|
||||
|
||||
|
||||
def repo(tmp: Path, paper: str | None = ZEHN, aapl: str | None = AAPL) -> Path:
|
||||
projekt = tmp / "projekt"
|
||||
(projekt / "config").mkdir(parents=True)
|
||||
if paper is not None:
|
||||
(projekt / "config" / "paper.toml").write_bytes(paper.encode("utf-8"))
|
||||
if aapl is not None:
|
||||
(projekt / "config" / "paper-aapl-register.toml").write_bytes(aapl.encode("utf-8"))
|
||||
(projekt / ".gitignore").write_text("data/\n", encoding="utf-8")
|
||||
for befehl in (["init", "-q", "-b", "master"], ["config", "user.email", "[email protected]"], ["config", "user.name", "Test"],
|
||||
["config", "core.autocrlf", "false"], ["add", "-A"], ["commit", "-q", "-m", "start"]):
|
||||
subprocess.run([rw.GIT, "-C", str(projekt), *befehl], check=True, capture_output=True)
|
||||
(tmp / "Inbox").mkdir()
|
||||
return projekt
|
||||
|
||||
|
||||
def fall(name, *, jetzt="2026-09-30T22:50:00", vorbereiten=None, runner="inactive", paper=ZEHN, aapl=AAPL,
|
||||
erwartet_code, getauscht, notiz, marke, commits, grund=None):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
tmp = Path(tmp)
|
||||
projekt = repo(tmp, paper, aapl)
|
||||
if vorbereiten:
|
||||
vorbereiten(projekt)
|
||||
vorher = subprocess.run([rw.GIT, "-C", str(projekt), "rev-list", "--count", "HEAD"], capture_output=True, text=True).stdout.strip()
|
||||
code = rw.main(["--jetzt", jetzt, "--projekt", str(projekt), "--vault", str(tmp), "--ohne-wsl", "--runner-zustand", runner])
|
||||
paper_jetzt = (projekt / "config" / "paper.toml").read_text(encoding="utf-8") if (projekt / "config" / "paper.toml").exists() else None
|
||||
notizen = list((tmp / "Inbox").glob("*.md"))
|
||||
text = notizen[0].read_text(encoding="utf-8") if notizen else ""
|
||||
hat_marke = (projekt / "data" / "paper" / "abendkontrollen" / "rueckweg.json").exists()
|
||||
nachher = subprocess.run([rw.GIT, "-C", str(projekt), "rev-list", "--count", "HEAD"], capture_output=True, text=True).stdout.strip()
|
||||
ist = {
|
||||
"code": code,
|
||||
"getauscht": paper_jetzt == AAPL,
|
||||
"notiz": ("nicht ausgeführt" if "nicht ausgeführt" in text else ("ja" if "Rückweg auf AAPL" in text else "nein")),
|
||||
"marke": hat_marke,
|
||||
"commits": int(nachher) - int(vorher),
|
||||
}
|
||||
soll = {"code": erwartet_code, "getauscht": getauscht, "notiz": notiz, "marke": marke, "commits": commits}
|
||||
ok = ist == soll and (grund is None or grund in text)
|
||||
zeile = f"{'OK ' if ok else 'FEHL'} {name}: {ist}" + ("" if ok else f" SOLL {soll}")
|
||||
print(zeile)
|
||||
if not ok:
|
||||
abweichungen.append(zeile)
|
||||
|
||||
|
||||
fall("Grundlinie", erwartet_code=0, getauscht=True, notiz="ja", marke=True, commits=1)
|
||||
fall("zu frueh", jetzt="2026-09-30T21:59:00", erwartet_code=0, getauscht=False, notiz="nein", marke=False, commits=0)
|
||||
fall("Ergebnisdatei schon da",
|
||||
vorbereiten=lambda p: ((p / "data" / "paper" / "abendkontrollen").mkdir(parents=True), (p / "data" / "paper" / "abendkontrollen" / "rueckweg.json").write_text("{}")),
|
||||
erwartet_code=0, getauscht=False, notiz="nein", marke=True, commits=0)
|
||||
fall("Runner aktiv", runner="active", erwartet_code=1, getauscht=False, notiz="nicht ausgeführt", marke=False, commits=0)
|
||||
fall("Runner deactivating", runner="deactivating", erwartet_code=1, getauscht=False, notiz="nicht ausgeführt", marke=False, commits=0)
|
||||
fall("Runnerzustand unlesbar", runner="", erwartet_code=1, getauscht=False, notiz="nicht ausgeführt", marke=False, commits=0)
|
||||
fall("Runner failed (steht)", runner="failed", erwartet_code=0, getauscht=True, notiz="ja", marke=True, commits=1)
|
||||
fall("schon AAPL", paper=AAPL, erwartet_code=0, getauscht=True, notiz="ja", marke=True, commits=0)
|
||||
fall("Ordner nicht sauber (fremde Aenderung)",
|
||||
vorbereiten=lambda p: (p / "config" / "risk.toml").write_text("x\n"),
|
||||
erwartet_code=1, getauscht=False, notiz="nicht ausgeführt", marke=False, commits=0)
|
||||
fall("paper.toml geaendert, nicht committet",
|
||||
vorbereiten=lambda p: (p / "config" / "paper.toml").write_text(ZEHN + "# neu\n"),
|
||||
erwartet_code=1, getauscht=False, notiz="nicht ausgeführt", marke=False, commits=0)
|
||||
fall("paper.toml ohne folge", paper='[agent]\nquelle = "halte"\n',
|
||||
erwartet_code=1, getauscht=False, notiz="nicht ausgeführt", marke=False, commits=0)
|
||||
fall("Rueckweg-Datei fehlt", aapl=None, erwartet_code=1, getauscht=False, notiz="nicht ausgeführt", marke=False, commits=0)
|
||||
fall("zweiter Termin Donnerstag", jetzt="2026-10-01T22:10:00", erwartet_code=0, getauscht=True, notiz="ja", marke=True, commits=1)
|
||||
# Befunde des Pruefers: halb erledigter Tausch, verlorener Abschnitt, falscher Zweig
|
||||
fall("halb getauscht (Datei getauscht, nicht committet)",
|
||||
vorbereiten=lambda p: (p / "config" / "paper.toml").write_bytes(AAPL.encode("utf-8")),
|
||||
erwartet_code=0, getauscht=True, notiz="ja", marke=True, commits=1)
|
||||
AUTO = "\n[auto_fortsetzen]\naktiv = true\n"
|
||||
fall("halb getauscht und fremde Aenderung",
|
||||
vorbereiten=lambda p: ((p / "config" / "paper.toml").write_bytes(AAPL.encode("utf-8")), (p / "config" / "risk.toml").write_text("x\n")),
|
||||
erwartet_code=1, getauscht=True, notiz="nicht ausgeführt", marke=False, commits=0)
|
||||
fall("Abschnitt nur in paper.toml", paper=ZEHN + AUTO,
|
||||
erwartet_code=1, getauscht=False, notiz="nicht ausgeführt", marke=False, commits=0)
|
||||
fall("Abschnitt in beiden", paper=ZEHN + AUTO, aapl=AAPL + AUTO,
|
||||
erwartet_code=0, getauscht=False, notiz="ja", marke=True, commits=1)
|
||||
AUS = "\n[auto_fortsetzen]\naktiv = false\n"
|
||||
fall("Automatik nur in paper.toml abgeschaltet", paper=ZEHN + AUS, aapl=AAPL + AUTO,
|
||||
erwartet_code=1, getauscht=False, notiz="nicht ausgeführt", marke=False, commits=0)
|
||||
fall("Abschnitt in paper.toml geloescht, in der Rueckweg-Datei noch da", paper=ZEHN, aapl=AAPL + AUTO,
|
||||
erwartet_code=1, getauscht=False, notiz="nicht ausgeführt", marke=False, commits=0,
|
||||
grund="auto_fortsetzen.aktiv steht nur in der Rueckweg-Datei")
|
||||
fall("anderer Wert in [grenzen]", paper=ZEHN + "\n[grenzen]\nmax_orders = 5\n", aapl=AAPL + "\n[grenzen]\nmax_orders = 10\n",
|
||||
erwartet_code=1, getauscht=False, notiz="nicht ausgeführt", marke=False, commits=0)
|
||||
fall("Tagesverlust darf sich unterscheiden",
|
||||
paper=ZEHN + "\n[grenzen]\nmax_tagesverlust_anteil = 0.01\n", aapl=AAPL + "\n[grenzen]\nmax_tagesverlust_anteil = 0.002\n",
|
||||
erwartet_code=0, getauscht=False, notiz="ja", marke=True, commits=1)
|
||||
fall("anderer Zweig ausgecheckt",
|
||||
vorbereiten=lambda p: subprocess.run([rw.GIT, "-C", str(p), "checkout", "-q", "-b", "z2"], check=True),
|
||||
erwartet_code=1, getauscht=False, notiz="nicht ausgeführt", marke=False, commits=0)
|
||||
|
||||
print(f"ERGEBNIS: {len(abweichungen)} Abweichung(en)")
|
||||
sys.exit(1 if abweichungen else 0)
|
||||
Reference in new issue
Block a user