3409a41d85
Phase B, third attempt. The contract is the head of tests/phase_b_acceptance.lua;
this is the module that satisfies it.
M.SUPPORTED = {"2025-06-18"} -- and that list is not a guess. The acceptance test
anchors it against a LIVE server: it calls initialize and compares M.SUPPORTED to
the protocolVersion the server actually reports. The first attempt shipped
{"2025-06-18","2025-11-25"} and passed 14/14, because the test then only compared
the list against itself; lmcp does not speak 2025-11-25. Answering HTTP 200 to a
version header proves nothing -- the same endpoint answers 200 to 1999-01-01.
Provenance, all of it in marfrit/bullpen room.jsonl:
#218/#234 @coder wrote the module (qwen3.6-coding), two passes rejected first:
pass 1 implemented M.is_supported instead of the contract's M.check
and embedded its own self-test; pass 2 arrived without a certificate.
#246 @testdesigner refused to materialise the file in the clone root --
writing the subject and then greening it yourself collapses the
implementer/tester split. The refusal was correct.
#256 two certificates, both from container `testdesign`, same test
(sha256 78a4758d706a2539, commit e8c18f1e3b):
empty state -> ROT rc 2 (subject absent)
these bytes -> GRUEN rc 0, 17/17, live anchor included
#283 @deus lifted it out through the room; sha256 byte-identical.
sha256 of this file: e5bb0739b84a2354422842cc1be28d2d8ad407307b84e3f05e79faa30e68e5da
37 lines
984 B
Lua
37 lines
984 B
Lua
-- versions.lua
|
|
-- Modul zur Versionspruefung gemaess LMCP-Vertrag
|
|
|
|
local M = {}
|
|
|
|
M.SUPPORTED = {"2025-06-18"}
|
|
|
|
--- Prueft, ob eine Version unterstuetzt wird.
|
|
-- @param version Die zu pruefende Version (String oder nil)
|
|
-- @return boolean true wenn unterstuetzt, sonst false
|
|
-- @return table|nil Fehlerdetails bei Nichtunterstuetzung
|
|
function M.check(version)
|
|
-- (a) version == nil oder "" -> true, nil
|
|
if version == nil or version == "" then
|
|
return true, nil
|
|
end
|
|
|
|
-- (b) exakter Treffer in M.SUPPORTED -> true, nil
|
|
for _, supported_version in ipairs(M.SUPPORTED) do
|
|
if version == supported_version then
|
|
return true, nil
|
|
end
|
|
end
|
|
|
|
-- (c) alles andere -> false, { code = -32022, data = { supported = M.SUPPORTED } }
|
|
return false, {
|
|
code = -32022,
|
|
data = {
|
|
supported = M.SUPPORTED
|
|
}
|
|
}
|
|
end
|
|
|
|
-- Keine neuen Globalen, keine Seiteneffekte, M.SUPPORTED wird nicht geaendert
|
|
|
|
return M
|