From 90a01fed37cfac2b6b3602434c5aa9ab5b36dca5 Mon Sep 17 00:00:00 2001 From: Michael Tamse Date: Sun, 23 Aug 2026 12:45:16 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Story=203.13=20Re-Run-#3-Aufl=C3=B6sung?= =?UTF-8?q?=20(P-16/P-17):=20CLAUDE=5FCODE=5FMAX=5FOUTPUT=5FTOKENS=3D32000?= =?UTF-8?q?=20(16000-Default=20bricht=20E.3=20ab,=20A/B-gepr=C3=BCft:=2016?= =?UTF-8?q?98=20vs=205002=20Zeilen)=20+=20D.4/D-NEG=20Pfad-Normalisierung?= =?UTF-8?q?=20(Agent=20schrie=20'wiki.alpha.md'=20via=20alter=20Prompt-Wor?= =?UTF-8?q?tung;=2021/21-Test=20gr=C3=BCn)=20+=20Prompt-Pfad-Wortung=20pr?= =?UTF-8?q?=C3=A4zisiert;=20Gate=20906=20Z.,=20bash=20-n=20clean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sandbox-3-13/run-sandbox.sh | 65 +++++++++++++++++-- 1 file changed, 59 insertions(+), 6 deletions(-) diff --git a/_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh b/_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh index 39a78f5..a8b4b08 100644 --- a/_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh +++ b/_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh @@ -88,6 +88,12 @@ echo "REPO-HEAD (real): $BASE_REAL" CLAUDE_BIN="${CLAUDE_BIN:-$(command -v claude 2>/dev/null || true)}" [ -n "$CLAUDE_BIN" ] && [ -x "$CLAUDE_BIN" ] || hardfail "CLAUDE_BIN nicht auflösbar (PATH: 'claude' nicht gefunden; CLAUDE_BIN-Env setzen)" echo "CLAUDE_BIN: $CLAUDE_BIN" +# P-16 (Re-Run-#3-Befund): CLI-Per-Response-Output-Limit (Default 16000 Token) +# reicht für E.3-Compiler-Läufe nicht — "API Error: Claude's response exceeded +# the 16000 output token maximum" (mehrere Write-Tool-Calls + Text in einer +# Response). Override auf 32000; bleibt per Env überschreibbar. +export CLAUDE_CODE_MAX_OUTPUT_TOKENS="${CLAUDE_CODE_MAX_OUTPUT_TOKENS:-32000}" +echo "CLAUDE_CODE_MAX_OUTPUT_TOKENS: $CLAUDE_CODE_MAX_OUTPUT_TOKENS" command -v timeout >/dev/null || hardfail "timeout fehlt (git-for-win/coreutils erwartet)" command -v sha256sum >/dev/null || hardfail "sha256sum fehlt (git-for-win/coreutils erwartet)" command -v tar >/dev/null || hardfail "tar fehlt" @@ -221,7 +227,8 @@ WICHTIG: Dein OUTPUT ist KEINE Prosa, sondern NUR eine Liste von Zeilen in der Validator-Grammatik (validator.md): - für JEDE validierte wiki/-Datei EXAKT EINE Verdict-Zeile: SUCCESS ODER FAIL -- ist der relativ zum Käfig-Root gepunktete Pfad (z.B. 'wiki/index.md'). +- ist der RELATIVE PFAD zum Käfig-Root mit Schrägstrichen + (z.B. 'wiki/index.md' — NICHT 'wiki.index.md', NICHT absolut). - Keine weiteren Ausgabezeilen, keine Erklärungen, keine Markdown-Listen-Sterne." \ > "$out" 2>&1 echo "VALIDATOR_DONE $cdir" >> "$out" @@ -236,12 +243,42 @@ WIKI_MD_COUNT=$(printf '%s\n' "$WIKI_MD_LIST" | grep -c '^') echo "--- wiki/-Dateiliste ($WIKI_MD_COUNT Dateien) ---" echo "$WIKI_MD_LIST" VERDICTS=$(grep -E '^(SUCCESS|FAIL) [^ ]+' "$VAL_A" | head -50) -# P-6: exakt EIN Verdict pro Datei (Pfad-Vorkommen zählen; Toleranz wiki/-Präfix) +echo "--- Verdict-Zeilen (Validator-Ausgabe, Diagnose) ---" +printf '%s\n' "$VERDICTS" +# P-17 (Re-Run-#3-Befund): Pfad-Token-Normalisierung — der Agent schrieb +# 'wiki.alpha.md' (alte Prompt-Wortung „gepunktete Pfad") und kann absolute +# oder backslash-Pfade liefern. Normalisiert auf Käfig-relativ ohne wiki/: +# 'wiki/alpha.md', 'alpha.md', '/…/cage/wiki/alpha.md', 'wiki\.alpha.md' +# -> 'alpha.md'. D.5 (Zählung) bleibt unverändert; D.4 matcht normalisiert. +norm_verdict_path() { + local p + p="${1//\\//}" # Backslash -> Slash (bash-nativ, kein tr/Transport-Problem) + p="${p#\"}"; p="${p%\"}" + p="${p#\'}"; p="${p%\'}" + p="${p#./}" + # Absolute/relative Vorpfad bis 'wiki/' abschneiden (auch führende 'wiki/'). + case "$p" in */wiki/*) p="${p##*/wiki/}" ;; esac + case "$p" in wiki/*) p="${p#wiki/}" ;; esac + case "$p" in wiki.*) p="${p#wiki.}" ;; esac + # Dotted-Form der alten Prompt-Wortung ('gepunktete Pfad'): 'concepts.neg-1.md' + # / 'alpha.md' -> alle Punkte zu '/', dann das LETZTE '/' (die .md-Extension) + # wiederherstellen. Nur ohne bereits vorhandenes '/' (sonst wäre es schon Slash-Form). + if [[ "$p" == *.* && "$p" != */* ]]; then + p="${p//./\/}" + p="${p%/*}.${p##*/}" + fi + printf '%s' "$p" +} +# P-6: exakt EIN Verdict pro Datei (normalisierte Pfad-Vorkommen zählen) DUP_FAIL=0 while IFS= read -r wmd; do [ -z "$wmd" ] && continue rel="${wmd#wiki/}" - n=$(printf '%s\n' "$VERDICTS" | grep -cE "^(SUCCESS|FAIL) (wiki/)?$rel " || true) + n=$(printf '%s\n' "$VERDICTS" | while IFS= read -r v; do + [ -z "$v" ] && continue + vp=$(printf '%s\n' "$v" | awk '{print $2}') + [ "$(norm_verdict_path "$vp")" = "$rel" ] && echo X + done | grep -c '^X$' || true) if [ "$n" -eq 0 ]; then fail "D.4 Exhaustivität: KEIN Verdict für $wmd (Defizit-Route, P-7)" DUP_FAIL=1 @@ -252,7 +289,7 @@ while IFS= read -r wmd; do done <' wird matcht. +neg_count() { + printf '%s\n' "$NEG_VERDICTS" | while IFS= read -r v; do + [ -z "$v" ] && continue + case "$v" in FAIL\ *) : ;; *) continue ;; esac + vp=$(printf '%s\n' "$v" | awk '{print $2}') + [ "$(norm_verdict_path "$vp")" = "concepts/$1" ] && echo X + done | grep -c '^X$' || true +} +pos_count() { + printf '%s\n' "$NEG_VERDICTS" | while IFS= read -r v; do + [ -z "$v" ] && continue + case "$v" in SUCCESS\ *) : ;; *) continue ;; esac + vp=$(printf '%s\n' "$v" | awk '{print $2}') + [ "$(norm_verdict_path "$vp")" = "concepts/$1" ] && echo X + done | grep -c '^X$' || true +} neg1=$(neg_count neg-1.md); neg2=$(neg_count neg-2.md); neg3=$(neg_count neg-3.md) pos1=$(pos_count pos.md) [ "$neg1" -ge 1 ] && pass "D-NEG.2 neg-1 (ohne type): FAIL-Verdikt erhalten" \