P1: 65536 fix verified; new finding = admission gate 503 (backend busy)
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
GO vom Menschen — grind-Container neu gestartet (bullpen-coder mit max_tokens 65536, Modell-Kontext 64k). Bitte Package 1/2 (envelope.lua) unveraendert an @coder dispatchen, fortlaufende Job-Nummer ab 719.
|
||||
|
||||
KAMPAGNE (a) ENGLISH-ONLY — KICKOFF, PACKAGE 1/2: envelope.lua
|
||||
|
||||
PROBLEM
|
||||
PO-Order: replace all German terms (code and comments) with English translations. Phase 1 is
|
||||
purely mechanical — renames and comment translations ONLY, zero behavior change. The conformance
|
||||
suite (27/27, sha256 c90450a6…, Vertrag unveraendert) is the regression net. Erste Stufe:
|
||||
umschlag.lua wird zu envelope.lua (Dateiname + Modul-Funktion + Parameter), dann versions.lua,
|
||||
dann lmcp.lua (Integration = Operator-Arbeit). KEINE Logik aendern.
|
||||
|
||||
WHERE
|
||||
Der Coder arbeitet in seiner Sandbox (Container grind, /var/lib/bullpen/coder/). Die
|
||||
Quelldatei liegt NICHT dort — der vollstaendige Inhalt von umschlag.lua steht weiter unten
|
||||
in diesem Ticket. Aus ihm entsteht envelope.lua. Die Zieldatei ist ein REINES Modul.
|
||||
|
||||
TRAPS (Verboten — das sind die plausiblen Fehler)
|
||||
- NICHT die Logik aendern: Regeln 1–5 bleiben exakt (Fehlercodes -32020/-32602, Reihenfolge,
|
||||
Meldungstexte Englisch wie sie sind). Es sind NUR Identifier-Umbenennungen + Kommentar-Uebersetzung.
|
||||
- KEIN Selbsttest in der Datei (Entscheidung C der letzten Kampagne: die Suite ist der Test).
|
||||
- KEINE Fences/Backticks/Markdown — Zeile 1 echte Lua, `return M` als LETZTE Zeile, danach nichts.
|
||||
- KEINE weiteren Funktionen, keine print-Ausgaben im Modul.
|
||||
- Die Funktion heisst NEU `M.check` (nicht mehr `M.pruefe`), Parameter heissen NEU `header`
|
||||
(nicht `kopf`) und `body` (nicht `rumpf`). Lua-Tabellenzugriffe `kopf[...]` → `header[...]`,
|
||||
`rumpf.method` → `body.method`, `rumpf.params` → `body.params`.
|
||||
- Der Dateiname im Ticket ist nur ein Hinweis — geliefert wird der DATEIINHALT.
|
||||
|
||||
ANFORDERUNG (Zieldatei envelope.lua)
|
||||
Nimm den untenstehenden Quelltext von umschlag.lua und erzeuge daraus envelope.lua:
|
||||
1. Datei-Kommentarzeilen (oben, -- umschlag.lua … / -- Basis: job667.lua … / -- kopf: … / -- rumpf: … /
|
||||
-- Rueckgabe: …) ins Englische uebersetzen, sinngemaess (die deutsche Provenienz darf bleiben,
|
||||
z.B. "Based on job667.lua (coder run 5, #669)").
|
||||
2. `function M.pruefe(kopf, rumpf)` → `function M.check(header, body)`; alle Verwendungen von
|
||||
`kopf` → `header`, `rumpf` → `body` im Funktionskoerper.
|
||||
3. Inline-Kommentare (-- Regel 1 … -- Erfolg) ins Englische uebersetzen.
|
||||
4. Regeln, Codes, Meldungstexte, Reihenfolge: UNVERAENDERT.
|
||||
5. Struktur: `local M = {}` … `return M` (letzte Zeile). Kein Selbsttest.
|
||||
|
||||
ABNAHME (Coder-seitig)
|
||||
- Sandbox-Parse-Check: `lua5.4 envelope.lua` → exit 0, keine stderr.
|
||||
- Melde: (1) Dateiinhalt als Rohtext ohne Fences, (2) sha256, (3) Parse-Check-Ergebnis.
|
||||
- Der Operator integriert, laesst die Suite laufen (27/27 muss gruen bleiben) und attestiert.
|
||||
|
||||
QUELLTEXT (umschlag.lua, komplett):
|
||||
```
|
||||
-- umschlag.lua: Kopf-/Envelope-Pruefung nach Spec 2026-07-28
|
||||
-- Basis: job667.lua (coder Lauf 5, #669) — parst, reine Struktur, zwei
|
||||
-- Defekte per Foreman-Review #671/#674 hier korrigiert:
|
||||
-- Regel 3: mcp-name-KOPF wird geprueft (war nur params.name/uri)
|
||||
-- Regel 4: _meta liegt unter rumpf.params._meta (war rumpf.meta)
|
||||
local M = {}
|
||||
|
||||
-- kopf: Tabelle der HTTP-Kopfzeilen, Namen KLEINGESCHRIEBEN, z.B.
|
||||
-- {['mcp-method']='tools/list',['mcp-protocol-version']='2026-07-28'}
|
||||
-- rumpf: dekodierte JSON-RPC-Anfrage als Lua-Tabelle
|
||||
-- {jsonrpc='2.0',id=1,method='tools/list',params={_meta={...}}}
|
||||
-- Rueckgabe: true,nil,nil | false,<fehlercode>,<meldung>
|
||||
function M.pruefe(kopf, rumpf)
|
||||
if not kopf or not rumpf then
|
||||
return false, -32600, "Invalid Request"
|
||||
end
|
||||
|
||||
-- Regel 1: k['mcp-protocol-version'] fehlt
|
||||
if not kopf['mcp-protocol-version'] then
|
||||
return false, -32020, 'Missing required header: MCP-Protocol-Version'
|
||||
end
|
||||
|
||||
-- Regel 2: k['mcp-method'] fehlt
|
||||
if not kopf['mcp-method'] then
|
||||
return false, -32020, 'Missing required header: Mcp-Method'
|
||||
end
|
||||
|
||||
-- Regel 2: k['mcp-method'] ~= rumpf.method
|
||||
if kopf['mcp-method'] ~= rumpf.method then
|
||||
return false, -32020, 'Mcp-Method header does not match body'
|
||||
end
|
||||
|
||||
-- Regel 3: Mcp-Name-Kopf Pflicht bei tools/call, resources/read, prompts/get
|
||||
local method = rumpf.method
|
||||
local params = rumpf.params or {}
|
||||
|
||||
if method == 'tools/call' or method == 'prompts/get' then
|
||||
if not kopf['mcp-name'] or kopf['mcp-name'] ~= params.name then
|
||||
return false, -32020, 'Mcp-Name header does not match body'
|
||||
end
|
||||
elseif method == 'resources/read' then
|
||||
if not kopf['mcp-name'] or kopf['mcp-name'] ~= params.uri then
|
||||
return false, -32020, 'Mcp-Name header does not match body'
|
||||
end
|
||||
end
|
||||
|
||||
-- Regel 4: _meta-Pflichtfelder (liegen unter params._meta)
|
||||
local meta = (rumpf.params or {})._meta or {}
|
||||
if not meta['io.modelcontextprotocol/protocolVersion'] then
|
||||
return false, -32602, 'Missing required _meta field: io.modelcontextprotocol/protocolVersion'
|
||||
end
|
||||
if not meta['io.modelcontextprotocol/clientCapabilities'] then
|
||||
return false, -32602, 'Missing required _meta field: io.modelcontextprotocol/clientCapabilities'
|
||||
end
|
||||
|
||||
-- Regel 5: k['mcp-protocol-version'] ~= meta['io.modelcontextprotocol/protocolVersion']
|
||||
if kopf['mcp-protocol-version'] ~= meta['io.modelcontextprotocol/protocolVersion'] then
|
||||
return false, -32020, 'Header MCP-Protocol-Version does not match _meta protocolVersion'
|
||||
end
|
||||
|
||||
-- Erfolg
|
||||
return true, nil, nil
|
||||
end
|
||||
|
||||
return M
|
||||
```
|
||||
|
||||
STEP 1 @testdesigner: NICHT noetig fuer Phase 1 — der Vertrag existiert bereits
|
||||
(konformitaet_2026_07_28.py, sha256 c90450a6240f133c…, 27/27 gruen, E1-Entscheidung: Suite
|
||||
bleibt unveraendert). @testdesigner kommt erst in Phase 2 (Dual-Protokoll-Suite) zum Zug.
|
||||
|
||||
STEP 2 @coder: envelope.lua aus dem Quelltext oben erzeugen (Regeln/TRAPS beachten),
|
||||
Parse-Check in der Sandbox, Inhalt + sha256 melden.
|
||||
|
||||
CONSTRAINTS
|
||||
- Nur /var/lib/bullpen/coder/ in der Sandbox. Kein laufender Dienst, keine anderen Dateien.
|
||||
- Lieferung als Rohtext im Raum, keine Fences.
|
||||
|
||||
Dispatch, then END YOUR TURN.
|
||||
@@ -0,0 +1,124 @@
|
||||
GO #2 — grind-Container neu gestartet, Patch in grind bestaetigt (MAXBODY 65536, Modell ctx 65536 laut Katalog). Bitte Package 1/2 (envelope.lua) erneut an @coder dispatchen, fortlaufende Job-Nummer. Erwartung: Datei NICHT leer (mind. ~2k chars).
|
||||
|
||||
KAMPAGNE (a) ENGLISH-ONLY — KICKOFF, PACKAGE 1/2: envelope.lua
|
||||
|
||||
PROBLEM
|
||||
PO-Order: replace all German terms (code and comments) with English translations. Phase 1 is
|
||||
purely mechanical — renames and comment translations ONLY, zero behavior change. The conformance
|
||||
suite (27/27, sha256 c90450a6…, Vertrag unveraendert) is the regression net. Erste Stufe:
|
||||
umschlag.lua wird zu envelope.lua (Dateiname + Modul-Funktion + Parameter), dann versions.lua,
|
||||
dann lmcp.lua (Integration = Operator-Arbeit). KEINE Logik aendern.
|
||||
|
||||
WHERE
|
||||
Der Coder arbeitet in seiner Sandbox (Container grind, /var/lib/bullpen/coder/). Die
|
||||
Quelldatei liegt NICHT dort — der vollstaendige Inhalt von umschlag.lua steht weiter unten
|
||||
in diesem Ticket. Aus ihm entsteht envelope.lua. Die Zieldatei ist ein REINES Modul.
|
||||
|
||||
TRAPS (Verboten — das sind die plausiblen Fehler)
|
||||
- NICHT die Logik aendern: Regeln 1–5 bleiben exakt (Fehlercodes -32020/-32602, Reihenfolge,
|
||||
Meldungstexte Englisch wie sie sind). Es sind NUR Identifier-Umbenennungen + Kommentar-Uebersetzung.
|
||||
- KEIN Selbsttest in der Datei (Entscheidung C der letzten Kampagne: die Suite ist der Test).
|
||||
- KEINE Fences/Backticks/Markdown — Zeile 1 echte Lua, `return M` als LETZTE Zeile, danach nichts.
|
||||
- KEINE weiteren Funktionen, keine print-Ausgaben im Modul.
|
||||
- Die Funktion heisst NEU `M.check` (nicht mehr `M.pruefe`), Parameter heissen NEU `header`
|
||||
(nicht `kopf`) und `body` (nicht `rumpf`). Lua-Tabellenzugriffe `kopf[...]` → `header[...]`,
|
||||
`rumpf.method` → `body.method`, `rumpf.params` → `body.params`.
|
||||
- Der Dateiname im Ticket ist nur ein Hinweis — geliefert wird der DATEIINHALT.
|
||||
|
||||
ANFORDERUNG (Zieldatei envelope.lua)
|
||||
Nimm den untenstehenden Quelltext von umschlag.lua und erzeuge daraus envelope.lua:
|
||||
1. Datei-Kommentarzeilen (oben, -- umschlag.lua … / -- Basis: job667.lua … / -- kopf: … / -- rumpf: … /
|
||||
-- Rueckgabe: …) ins Englische uebersetzen, sinngemaess (die deutsche Provenienz darf bleiben,
|
||||
z.B. "Based on job667.lua (coder run 5, #669)").
|
||||
2. `function M.pruefe(kopf, rumpf)` → `function M.check(header, body)`; alle Verwendungen von
|
||||
`kopf` → `header`, `rumpf` → `body` im Funktionskoerper.
|
||||
3. Inline-Kommentare (-- Regel 1 … -- Erfolg) ins Englische uebersetzen.
|
||||
4. Regeln, Codes, Meldungstexte, Reihenfolge: UNVERAENDERT.
|
||||
5. Struktur: `local M = {}` … `return M` (letzte Zeile). Kein Selbsttest.
|
||||
|
||||
ABNAHME (Coder-seitig)
|
||||
- Sandbox-Parse-Check: `lua5.4 envelope.lua` → exit 0, keine stderr.
|
||||
- Melde: (1) Dateiinhalt als Rohtext ohne Fences, (2) sha256, (3) Parse-Check-Ergebnis.
|
||||
- Der Operator integriert, laesst die Suite laufen (27/27 muss gruen bleiben) und attestiert.
|
||||
|
||||
QUELLTEXT (umschlag.lua, komplett):
|
||||
```
|
||||
-- umschlag.lua: Kopf-/Envelope-Pruefung nach Spec 2026-07-28
|
||||
-- Basis: job667.lua (coder Lauf 5, #669) — parst, reine Struktur, zwei
|
||||
-- Defekte per Foreman-Review #671/#674 hier korrigiert:
|
||||
-- Regel 3: mcp-name-KOPF wird geprueft (war nur params.name/uri)
|
||||
-- Regel 4: _meta liegt unter rumpf.params._meta (war rumpf.meta)
|
||||
local M = {}
|
||||
|
||||
-- kopf: Tabelle der HTTP-Kopfzeilen, Namen KLEINGESCHRIEBEN, z.B.
|
||||
-- {['mcp-method']='tools/list',['mcp-protocol-version']='2026-07-28'}
|
||||
-- rumpf: dekodierte JSON-RPC-Anfrage als Lua-Tabelle
|
||||
-- {jsonrpc='2.0',id=1,method='tools/list',params={_meta={...}}}
|
||||
-- Rueckgabe: true,nil,nil | false,<fehlercode>,<meldung>
|
||||
function M.pruefe(kopf, rumpf)
|
||||
if not kopf or not rumpf then
|
||||
return false, -32600, "Invalid Request"
|
||||
end
|
||||
|
||||
-- Regel 1: k['mcp-protocol-version'] fehlt
|
||||
if not kopf['mcp-protocol-version'] then
|
||||
return false, -32020, 'Missing required header: MCP-Protocol-Version'
|
||||
end
|
||||
|
||||
-- Regel 2: k['mcp-method'] fehlt
|
||||
if not kopf['mcp-method'] then
|
||||
return false, -32020, 'Missing required header: Mcp-Method'
|
||||
end
|
||||
|
||||
-- Regel 2: k['mcp-method'] ~= rumpf.method
|
||||
if kopf['mcp-method'] ~= rumpf.method then
|
||||
return false, -32020, 'Mcp-Method header does not match body'
|
||||
end
|
||||
|
||||
-- Regel 3: Mcp-Name-Kopf Pflicht bei tools/call, resources/read, prompts/get
|
||||
local method = rumpf.method
|
||||
local params = rumpf.params or {}
|
||||
|
||||
if method == 'tools/call' or method == 'prompts/get' then
|
||||
if not kopf['mcp-name'] or kopf['mcp-name'] ~= params.name then
|
||||
return false, -32020, 'Mcp-Name header does not match body'
|
||||
end
|
||||
elseif method == 'resources/read' then
|
||||
if not kopf['mcp-name'] or kopf['mcp-name'] ~= params.uri then
|
||||
return false, -32020, 'Mcp-Name header does not match body'
|
||||
end
|
||||
end
|
||||
|
||||
-- Regel 4: _meta-Pflichtfelder (liegen unter params._meta)
|
||||
local meta = (rumpf.params or {})._meta or {}
|
||||
if not meta['io.modelcontextprotocol/protocolVersion'] then
|
||||
return false, -32602, 'Missing required _meta field: io.modelcontextprotocol/protocolVersion'
|
||||
end
|
||||
if not meta['io.modelcontextprotocol/clientCapabilities'] then
|
||||
return false, -32602, 'Missing required _meta field: io.modelcontextprotocol/clientCapabilities'
|
||||
end
|
||||
|
||||
-- Regel 5: k['mcp-protocol-version'] ~= meta['io.modelcontextprotocol/protocolVersion']
|
||||
if kopf['mcp-protocol-version'] ~= meta['io.modelcontextprotocol/protocolVersion'] then
|
||||
return false, -32020, 'Header MCP-Protocol-Version does not match _meta protocolVersion'
|
||||
end
|
||||
|
||||
-- Erfolg
|
||||
return true, nil, nil
|
||||
end
|
||||
|
||||
return M
|
||||
```
|
||||
|
||||
STEP 1 @testdesigner: NICHT noetig fuer Phase 1 — der Vertrag existiert bereits
|
||||
(konformitaet_2026_07_28.py, sha256 c90450a6240f133c…, 27/27 gruen, E1-Entscheidung: Suite
|
||||
bleibt unveraendert). @testdesigner kommt erst in Phase 2 (Dual-Protokoll-Suite) zum Zug.
|
||||
|
||||
STEP 2 @coder: envelope.lua aus dem Quelltext oben erzeugen (Regeln/TRAPS beachten),
|
||||
Parse-Check in der Sandbox, Inhalt + sha256 melden.
|
||||
|
||||
CONSTRAINTS
|
||||
- Nur /var/lib/bullpen/coder/ in der Sandbox. Kein laufender Dienst, keine anderen Dateien.
|
||||
- Lieferung als Rohtext im Raum, keine Fences.
|
||||
|
||||
Dispatch, then END YOUR TURN.
|
||||
@@ -64,3 +64,15 @@ Das ist INFRA, keine Gesellschafts-Aufgabe und kein Task-Shape-Problem.
|
||||
- AUSSTEHEND (Flottenzugriff): Patch im grind-Container einspielen + bullpen-coder.service
|
||||
neustarten. Anleitung: /root/harvest/deploy_coder_65536.md.
|
||||
- Danach: Entwarnung an deus, Go des Menschen, dann re-dispatch P1 (envelope.lua) via @foreman.
|
||||
|
||||
## BUDGET-FIX VERIFIZIERT + NEUER BEFUND (2026-08-10)
|
||||
- 65536-Budget WIRKT: kleine Requests liefern echten content (mt=1400 -> 170 chars,
|
||||
tiny -> 200 in 37-73s). Leerdatei-Muster (692/696/699/702/725) ist behoben.
|
||||
- Neuer Befund: voller Coder-Request (langes Reasoning) -> HTTP 503 nach ~90s,
|
||||
body: {"error":{"message":"backend busy (admission gate), retry shortly","type":"backend_busy"}}.
|
||||
Das ist Admission-Gate-Lastabwurf, kein Request-Problem. Deckt sich mit
|
||||
"Hardware ueberlastet" (Mensch).
|
||||
- Dispatch #2 (ask 749, job 751) -> reply 754: codegen error 503. foreman hat gestoppt
|
||||
(758), keine weiteren Dispatches ohne Entwarnung.
|
||||
- Empfehlung: Gate abkuehlen lassen (keine parallelen Probes!), dann EIN sauberer
|
||||
Re-Dispatch. deus probt nicht mehr parallel zum Coder.
|
||||
|
||||
Reference in New Issue
Block a user