From 9647b862c911e75d8a6935b39d0d0a2c0be3682c Mon Sep 17 00:00:00 2001 From: dschlueter Date: Fri, 16 Oct 2026 04:19:53 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20kurze=20Berichte=20f=C3=BCr=20Judge=20u?= =?UTF-8?q?nd=20Freigabe=20(Blocker/Major=20vollst=C3=A4ndig,=20Rest=20beg?= =?UTF-8?q?renzt)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- BEDIENUNGSANLEITUNG.md | 4 ++++ pi-coding-extension.ts | 21 +++++++++++++++++++-- tests/pure-logic.test.mjs | 13 +++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/BEDIENUNGSANLEITUNG.md b/BEDIENUNGSANLEITUNG.md index 4d88abb..322d691 100644 --- a/BEDIENUNGSANLEITUNG.md +++ b/BEDIENUNGSANLEITUNG.md @@ -43,6 +43,10 @@ Härtung über die Anforderungen hinaus, Skalierung, Stil und Wünsche schreibt ändern das Urteil nicht, und der Coder bearbeitet sie bei `/fix` nicht. Ein Major ohne Reproduktion gilt als Hinweis. Ohne diese Regeln urteilte der Judge mit Strata am 15.10.2026 in keiner Aufgabe PASS. +Judge und Freigabeprüfung berichten kurz: keine Tabelle bestandener Prüfungen, Blocker und Major vollständig mit +Fundstelle, Minor, fehlende Tests und Hinweise höchstens 5 Punkte je Abschnitt. Grund: Lange Berichte kosten +Rechenzeit und bleiben im Kontext jeder weiteren Runde (Messung im Repo `strata-betrieb`, FUNKTIONSWEISE). + Die Umschaltung zwischen den Rollen erfolgt über unterschiedliche System-Prompts, die die Extension automatisch vor jeder Inference einsetzt. Es läuft kein zweiter Server. diff --git a/pi-coding-extension.ts b/pi-coding-extension.ts index 87958e4..72175ac 100644 --- a/pi-coding-extension.ts +++ b/pi-coding-extension.ts @@ -70,6 +70,21 @@ function judgeVerdictSection(): string[] { "- Fehlende Tests", "- Hinweise (ändern das Urteil nicht)", "- Konkrete Fix-Aufträge an den Coder (nur für Blocker, Major, Minor und fehlende Tests)", + "", + ...reportBrevityRules(), + ]; +} + +// Kurze Berichte für Judge und Freigabe. Am 15.10. (File Listing, Strata) erzeugte eine Sitzung 777 000 Tokens bei rund +// 100 tok/s; lange Prüfprotokolle und Tabellen machten einen großen Teil davon aus und landeten im Kontext jeder +// weiteren Runde. +function reportBrevityRules(): string[] { + return [ + "Berichte kurz – der Bericht ist eine Arbeitsliste, kein Protokoll:", + "- Keine Liste oder Tabelle der bestandenen Prüfungen; nenne nur, was fehlschlug, und in einer Zeile, was geprüft wurde.", + "- Blocker und Major vollständig, je Punkt höchstens 3 Sätze plus Fundstelle (Datei:Zeile) oder Reproduktionsbefehl.", + "- Minor, fehlende Tests und Hinweise: höchstens 5 Punkte je Abschnitt, die wichtigsten zuerst, je Punkt eine Zeile.", + "- Leere Abschnitte mit „keine“. TASK.md nicht nacherzählen, keinen Code wiederholen, den der Coder schon kennt.", ]; } @@ -130,7 +145,7 @@ function fixPrompt(extra: string): string { "Führe nach den Fixes passende Tests aus.", "Führe danach einen Commit durch: git add -A && git commit -m 'fix: ...'", "Wenn ein Punkt nicht sinnvoll umsetzbar ist, begründe das präzise.", - "Liefere am Ende nur:", + "Liefere am Ende nur, je Punkt eine Zeile:", "- Was geändert wurde", "- Welche Judge-Punkte geschlossen wurden", "- Welche Punkte offen bleiben", @@ -150,7 +165,9 @@ function shipitPrompt(extra: string): string { "- Urteil: SHIP | NO-SHIP", "- Letzte Blocker", "- Restrisiken", - "- Empfohlene Sofortmaßnahmen vor Deployment" + "- Empfohlene Sofortmaßnahmen vor Deployment", + "", + ...reportBrevityRules(), ].join("\n") + (extra?.trim() ? "\n\nZusätzlicher Fokus:\n" + extra.trim() : ""); } diff --git a/tests/pure-logic.test.mjs b/tests/pure-logic.test.mjs index a91f15e..907a94e 100644 --- a/tests/pure-logic.test.mjs +++ b/tests/pure-logic.test.mjs @@ -120,6 +120,7 @@ test("parseShipVerdict: SHIP, NO-SHIP, Markdown, unklar", () => { // Judge-Prompts rufen judgeVerdictSection() auf; extractFn wertet jede Funktion einzeln aus, freie Namen landen // im globalen Scope. +globalThis.reportBrevityRules = extractFn("reportBrevityRules"); globalThis.judgeVerdictSection = extractFn("judgeVerdictSection"); const judgePrompt = extractFn("judgePrompt"); const judgeWithTestsPrompt = extractFn("judgeWithTestsPrompt"); @@ -140,3 +141,15 @@ test("Judge-Prompts: Urteilsregeln und Hinweise in beiden Varianten (Strata-Judg test("fixPrompt: Hinweise sind kein Auftrag", () => { assert.match(fixPrompt(""), /„Hinweise“ ist kein Auftrag/); }); + +const shipitPrompt = extractFn("shipitPrompt"); + +test("Judge- und Freigabe-Prompts verlangen kurze Berichte, Blocker/Major bleiben vollständig", () => { + for (const p of [judgePrompt(""), judgeWithTestsPrompt("1 passed", ""), shipitPrompt("")]) { + assert.match(p, /Berichte kurz/); + assert.match(p, /Blocker und Major vollständig/); + assert.match(p, /höchstens 5 Punkte je Abschnitt/); + } + assert.match(shipitPrompt(""), /- Urteil: SHIP \| NO-SHIP/); + assert.match(fixPrompt(""), /Liefere am Ende nur, je Punkt eine Zeile/); +});