Automatischer Push: 8 Datei(en) geändert

- .vault-tools/trading-plattform-pruefung/LIESMICH.md
- .vault-tools/trading-plattform-pruefung/abbau_alpaca_lesen.py
- .vault-tools/trading-plattform-pruefung/abbau_glattstellen.sh
- .vault-tools/trading-plattform-pruefung/abbau_ibkr_lesen.sh
- .vault-tools/trading-plattform-pruefung/abbau_restbestand.py
- .vault-tools/trading-plattform-pruefung/abbau_restbestand_angriffe.py
- .vault-tools/trading-plattform-pruefung/abbau_restbestand_einrichten.ps1
- AI/Regelwerk/windows-shell.md

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-10-08 04:00:01 +02:00
1 parent 30ed04a643
commit 3784322a76
8 files changed
+1687 -3

No files matched your search

@@ -0,0 +1,97 @@
#!/usr/bin/env bash
# Abbau Restbestand: stellt eine Paper-Instanz ueber scripts/killswitch.py glattstellen glatt.
# Ersteller: Pascal Michel Erstellt: 2026-10-07
# Doku: LIESMICH.md in diesem Ordner, Abschnitt "Paket AB"
#
# Das Bestaetigungswort verlaesst WSL nie: Dieses Skript liest es aus config/killswitch.toml der
# Instanz und reicht es nur an killswitch.py weiter. Jede Zeile von killswitch.py geht danach durch
# einen Filter: das Wort wird [wort], dann ohne_kontonummer() aus abendkontrolle_wsl.py
# (Kontonummern als [konto], dann maskiere()), dann jede Dezimalzahl als [x].
# Den Broker waehlt das Skript ausdruecklich: alpaca -> --broker alpaca, ibkr -> --broker ibkr
# (gemessen: ibkr ist im IBKR-Ordner mit Marke ibkr erlaubt, alpaca im Projektordner ohne Marke).
# --broker attrappe ersetzt die Wahl, nur fuer die Probe in einer Wegwerfkopie und die Angriffsfaelle.
# Den Instanzordner nennt immer der Aufrufer (abbau_restbestand.py); hier steht kein echter Pfad.
# Genau ein Aufruf von killswitch.py je Start, keine Schleife.
#
# Aufruf: bash abbau_glattstellen.sh <alpaca|ibkr> <instanzordner> [--broker attrappe]
# Exit: der von killswitch.py (0 erfolgreich, 1 nicht erfolgreich, 3 abgelehnt, 4 Voraussetzung),
# 2 Bedienfehler, 4 Wort nicht lesbar oder Instanzordner nicht erreichbar.
set -u
GRUND="Abbau Restbestand nach Netzschalter-Abriss 2026-10-07; Auftrag Pascal 2026-10-07, ausgefuehrt von der Aufgabe Abbau Restbestand"
HIER="$(dirname "$(readlink -f "$0")")"
export TRADING_GEHEIMNISSE=/home/claude/.config/trading-plattform/secrets.toml
export PYTHONIOENCODING=utf-8
if [ "$#" -lt 2 ]; then
echo "Bedienfehler: Aufruf abbau_glattstellen.sh <alpaca|ibkr> <instanzordner> [--broker attrappe]" >&2
exit 2
fi
instanz="$1"
ordner="$2"
shift 2
case "$instanz" in
alpaca)
py=/home/claude/venvs/trading/bin/python
broker=(--broker alpaca)
;;
ibkr)
py=/home/claude/venvs/trading-ibkr/bin/python
broker=(--broker ibkr)
;;
*)
echo "Bedienfehler: Instanz muss alpaca oder ibkr sein" >&2
exit 2
;;
esac
while [ "$#" -gt 0 ]; do
case "$1" in
--broker)
if [ "$#" -lt 2 ] || [ "$2" != "attrappe" ]; then
echo "Bedienfehler: --broker nimmt nur attrappe" >&2
exit 2
fi
broker=(--broker attrappe)
shift 2
;;
*)
echo "Bedienfehler: unbekannte Angabe" >&2
exit 2
;;
esac
done
if ! cd "$ordner"; then
echo "Voraussetzung fehlt: Instanzordner nicht erreichbar" >&2
exit 4
fi
# Das Wort, nur in dieser Shell; tomllib aus dem Python der Instanz.
wort="$("$py" -I -c 'import tomllib
with open("config/killswitch.toml", "rb") as datei:
print(tomllib.load(datei)["killswitch"]["bestaetigungswort"])' 2>/dev/null)"
if [ -z "$wort" ]; then
echo "Voraussetzung fehlt: Bestaetigungswort in config/killswitch.toml nicht lesbar" >&2
exit 4
fi
# Genau ein Aufruf; stdout und stderr zusammen, gefiltert erst hinter dem Lauf.
ausgabe="$("$py" scripts/killswitch.py "${broker[@]}" glattstellen --grund "$GRUND" --bestaetigung "$wort" 2>&1)"
code=$?
# Filter je Zeile: Wort, Kontonummern und maskiere(), Dezimalzahlen. Das Wort geht nur ueber die Umgebung.
if ! printf '%s\n' "$ausgabe" | ABBAU_WORT="$wort" "$py" -I -c 'import os
import re
import sys
sys.path.insert(0, sys.argv[1])
from abendkontrolle_wsl import ohne_kontonummer
wort = os.environ.pop("ABBAU_WORT", "")
for zeile in sys.stdin.read().splitlines():
if wort:
zeile = zeile.replace(wort, "[wort]")
zeile = ohne_kontonummer(zeile)
print(re.sub(r"-?\d+[.,]\d+", "[x]", zeile)[:300])' "$HIER"; then
echo "Ausgabe von killswitch.py nicht gefiltert und deshalb zurueckgehalten"
fi
unset wort ausgabe
exit "$code"