6.1 KiB
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 Mals LETZTE Zeile, danach nichts. - KEINE weiteren Funktionen, keine print-Ausgaben im Modul.
- Die Funktion heisst NEU
M.check(nicht mehrM.pruefe), Parameter heissen NEUheader(nichtkopf) undbody(nichtrumpf). Lua-Tabellenzugriffekopf[...]→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:
- 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)").
function M.pruefe(kopf, rumpf)→function M.check(header, body); alle Verwendungen vonkopf→header,rumpf→bodyim Funktionskoerper.- Inline-Kommentare (-- Regel 1 … -- Erfolg) ins Englische uebersetzen.
- Regeln, Codes, Meldungstexte, Reihenfolge: UNVERAENDERT.
- 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.