fix: Story 3.13 Re-Run-#4-Auflösung — P-16 Floor-Semantik (Env exportiert 16000; geerbte Werte <32000 angehoben, A/B 1698/5002, 6/6-Subshell-Test) + Status-Sync (Spec-Change-Log, log.md Re-Run-#2/-#3/-#4-Befunde: winpty/CLAUDE_BIN, P-17 Normalisierer 21/21, Prompt-Wortung)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -88,12 +88,21 @@ 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"
|
||||
# P-16 (Re-Run-#3/#4-Befund): CLI-Per-Response-Output-Limit reicht für
|
||||
# E.3-Compiler-Läufe nicht — "API Error: Claude's response exceeded the
|
||||
# 16000 output token maximum". ACHTUNG: 16000 ist hier KEIN bloßes Default —
|
||||
# die Session-Umgebung EXPORTIERT es bereits (CLI tragt das Modell-Built-in
|
||||
# in Child-Env), daher greift ${VAR:-32000} nie. Das Gate definiert eine
|
||||
# BODEN-GRANZE (Floor): geerbte Werte unter 32000 werden angehoben,
|
||||
# höhere bleiben erhalten (P-3-Override-Semantik). A/B-geprüft: 1698
|
||||
# Zeilen abgebrochen bei 16000 vs 5002 Zeilen vollständig bei 32000.
|
||||
TOKEN_FLOOR=32000
|
||||
_cur_tokens="${CLAUDE_CODE_MAX_OUTPUT_TOKENS:-}"
|
||||
case "$_cur_tokens" in
|
||||
''|*[!0-9]*) export CLAUDE_CODE_MAX_OUTPUT_TOKENS="$TOKEN_FLOOR" ;;
|
||||
*) if [ "$_cur_tokens" -lt "$TOKEN_FLOOR" ]; then export CLAUDE_CODE_MAX_OUTPUT_TOKENS="$TOKEN_FLOOR"; fi ;;
|
||||
esac
|
||||
echo "CLAUDE_CODE_MAX_OUTPUT_TOKENS: $CLAUDE_CODE_MAX_OUTPUT_TOKENS (Floor $TOKEN_FLOOR, P-16)"
|
||||
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"
|
||||
|
||||
+2
@@ -127,6 +127,8 @@ _Dismissed (6): G-6-„Hash-Primitive"-Beobachtung (Duplikat von D-3.13-3/P-2);
|
||||
|
||||
## Spec Change Log
|
||||
|
||||
**Re-Run-#3/#4-Auflösung (Voll-Lauf-Re-Runs des gehärteten Gates, 2026-08-23) — Patches P-16/P-17 (Gate-Umgebung + D.4-Pfad-Toleranz; keine AC-/Intent-/Boundary-Änderung, frozen-Block unangetastet):** **P-16 (CLI-Per-Response-Output-Token-Limit, E.3-Compiler-Läufe):** der frische `claude -p`-Agent-Lauf bricht ab mit „API Error: Claude's response exceeded the 16000 output token maximum" (E.3 braucht eine einzige große Antwort: compiler.md lesen + mehrere Writes + Receipt). Befund Re-Run #4: die Session-Umgebung **exportiert bereits** `CLAUDE_CODE_MAX_OUTPUT_TOKENS=16000` (CLI trägt das Modell-Built-in in die Child-Env weiter), daher greift ein `${VAR:-32000}`-Default nie. **Lösung = Floor-Semantik (Bodengranze):** geerbte numerische Werte unter 32000 werden auf 32000 angehoben, höhere Werte bleiben erhalten (P-3-Override-Semantik), leer/nicht-numerisch → 32000. **Belege:** A/B-Test (5000-Zeilen-Output: 1698 Zeilen abgebrochen bei 16000 vs 5002 Zeilen vollständig bei 32000) + 6/6-Subshell-Unit-Test. **P-17 (D.4-Verdikt-Pfad-Matching):** der Validator-Agent schrieb in der alten Prompt-Wortung „gepunktete Pfad" (Dotted-Form `wiki.alpha.md`) bzw. konnte absolute/backslash-Pfade liefern — 4 gültige Verdicts existierten, das Regex matchte nichts (falsch-rot D.4 bei grünem D.5/D.6, Re-Run #3). **Lösung:** `norm_verdict_path()`-Normalisierer (Backslash→Slash, Quote-/`./`-Strip, Abschnitt bei `wiki/`, Dotted-Form-Regression mit `concepts/`-Subpfad-Erhaltung) + diagnostischer Verdict-Zeilen-Dump; angewendet in D.4 (Exhaustivität/Eindeutigkeit) und D-NEG-Zählern; **Prompt-Wortung präzisiert** („RELATIVE PFAD zum Käfig-Root mit Schrägstrichen", explizite Negativ-Beispiele). **Beleg:** 21/21-Test inkl. Negativ-Kontrollen (andere Dateien dürfen nicht matchen). **Umgebungshinweis (kein Patch):** die headless/Background-Aufrufe des Gates benötigen `CLAUDE_BIN` auf die echte, winpty-freie `claude.exe` (der `C:\Users\mita\bin\claude`-Shim ist winpty-PTY-wrapped und bricht ohne TTY ab — `stdin is not a tty`, rc=1; P-3-Override kanalisiert ALLE Agent-Aufrufe durch `CLAUDE_BIN`; Re-Run #2-Vollbeweis, D-NEG 5/5 im Re-Run #3). **Re-Run-Status:** #2 rot (winpty, E.3 `rc=1`), #3 rot (D.4-falsch-rot + E.3-Token-Cap; 12/12 Sub-Runs grün, D-NEG 5/5), #4 nach A.5+12/12-Sub-Runs vor D gestoppt (Env-Befund 16000 → Floor-Fix, ~1,5 h gespart); Gehärtetes Gate **915 Z., `bash -n` clean**; Re-Run #5 ausstehend.
|
||||
|
||||
**Review-Loop-1 (bmad-code-review, 4 Layer, 2026-08-22; 28 eindeutige Befunde: 7 decision-needed / 15 patch / 2 defer / 6 dismissed) — Befundauflösung 2026-08-23 (ProMods, „Ich folge Deinen Empfehlungen"):** keine intent_gap/bad_spec — **kein Loopback** (Step-04 nicht ausgelöst). **Nutzer-Entscheidungen (alle empfohlene Option):** D-3.13-1 = **Option 1** (AGENT_PROMPT nur Instruktion + Fixture-Fakten; Gate-Checks = A-vs-B + Nicht-Vakuum-Witness gegen Baseline); D-3.13-2 = **Option 1** (Run-Receipt A-vs-B-Vergleich, keine erwarteten Literale — Modell sandbox-3-8 DET-2, at-/Pfad-Zellen gefiltert); D-3.13-3 = **Option 2** (G-6 = perturbed committeter Tree `wt-c` + at-only-Kontrolle `wt-c2`, deterministisch durch denselben E.4-Classifier, kein 3. Agent — deterministische Realisierung der frozen-Matrix-Zeile PERTURBIERTE_ENTSCHEIDUNG: divergente Bäume werden erkannt, Non-Zero-Exit, kein false-PASS); D-3.13-4 = **Option 1** (G-7 = generische Link-Auflösung + geschlossene, am realen Bundle validierte Planungstoken-Menge); D-3.13-5 = **Option 1** (D-NEG: separater /tmp-Käfig mit 3 §7-/§6-Negativ-Fixtures + Positiv-Kontrolle; frischer Validator-Agent MUSS 3×FAIL + 1×SUCCESS liefern); D-3.13-6 = **Option 1** (Fixture um CREATE-Fall erweitert: neue raw-Quellen `beta-v1/v2` → neues Concept (Pfad term-geleitet, §5.15/§5.7 — nicht hart-codiert) + Index-Link; Multi-Beleg `raw/alpha-v1.md#S-2; raw/alpha-v2.md#S-3`); D-3.13-7 = **Option 1** (Status-Revert: `sprint-status.yaml`-Key + Spec-Frontmatter `done → in-progress`; finaler `done`-Flip erst nach konvergiertem Loop + grünem Re-Run, Präzedenz 3.7–3.12). **Patches (alle 15 angewendet):** P-1 (sandbox-3-1 harte Exit-Pfade, separat re-executiert: 14 PASS, FAILED=0, Exit 0), P-2..P-14 in `sandbox-3-13/run-sandbox.sh` (839 Z.), P-15 in dieser Spec (Design Notes: `--stat`-Beispiel auf `$HEAD_A/$HEAD_B`-Form; ≠leer-Pin auf Allowance-leerer-Diff + Witness-Nicht-Vakuum; Fixture-Satz um CREATE-Kandidat). **Renegotiation-Kandidat (frozen I/O-Matrix, unangetastet):** Zeile `VALIDATOR_DEFIZIT` trägt „G-5 PASS" — widerspricht der Boundary „schlägt G-5 fehl (Non-Zero)" und AC-4; **Boundary/AC-4 gilt implementiert** (Gate-Flip auf Non-Zero + Remediation-Text „Bedarf einer separat autorisierten Epic-1-Remediation"); die Matrix-Zeile ist als Nachverhandlungs-Kandidat notiert (frozen-Block erst nach menschlicher Bestätigung änderbar — Ask-First). **Spec-Frontmatter:** `status: 'done' → 'in-progress'`, `review_loop_iteration: 0 → 1` (D-3.13-7). Defer W-1/W-2 unverändert (bereits `[x]`).
|
||||
|
||||
## Design Notes
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user