• v2.3.0-ew-1 86b4521fcb

    Bifrost v2.3.0-ew-1 (EW Fork)
    All checks were successful
    Docker Build / docker (push) Successful in 9m56s
    Docker Release / release (push) Successful in 8m7s
    Stable

    engel75 released this 2026-10-14 13:15:27 +02:00 | -4338 commits to 1.4.23-ew since this release

    Bifrost v2.3.0-ew-1 (EW Fork)

    Port-Release: EW-Fork auf Upstream transports/v2.3.0 (712-Commit-Sprung — A2A Agent Gateway, Warp Assistant, GPT Live Sessions, Cloudflare Provider, Provider-Injected MCP Tools, OAuth-Minted Keys).

    ⚠️ Breaking: EW Decisions nativ-only (Spec 11, Betriebsentscheidung)

    • Upstream 2.3.0 hat den Core-seitigen Emulations-Fallback entfernt (unsupported_operation → emulateDecisionViaResponses existiert nicht mehr; Emulation ist jetzt Opt-in via convert_decision_to_responses)
    • Fork-Entscheidung: der Vertrag „nativ zuerst, Emulation als Fallback" ist gestrichen — ein EW-Backend ohne /v1/systemone bekommt jetzt den echten 404/405/501-Fehler statt transparenter Emulation
    • Ausweg für Clients: x-bf-compat: ["convert_decision_to_responses"] — Achtung: der Marker umgeht den nativen EW-Pfad komplett (Dispatch geht direkt zur Emulation, der SystemOne-Endpunkt wird nicht mehr gefragt)
    • Decision-Schema jetzt OpenAI-Shape: input + geordnete Fragenliste (predicate/choice/score statt noul/choice/score), Antworten als Liste in Fragenreihenfolge; das alte Map-Shape bleibt als deprecated Body lesbar (kind wird als Type gelesen)
    • Unsere bare POST /v1/systemone bleibt TypeSafe-nativ (Provider-Default ew); Upstreams neue Route liegt unter /typesafe/v1/systemone — keine Kollision

    Port-Umfang

    • 102 Picks + 2 Harness-Deferrals (Reconciliation) + 7 Adaption/Fixup/Docs-Commits; 10 Konflikt-Stops, alle mit etablierten Mustern — Details in specs/08 (Sektion Port v2.2.6-ew1 → v2.3.0-ew1)
    • Neue Provider-Interface-Methode ModelRetrieve → EW-Stub (unsupported_operation)
    • x-ewcs-Branding erweitert: Header-Konstanten-Werte gebrandet (Namen bleiben upstream-förmig) + gatewayOwnedResponseHeaderPrefixEW — ein chained EW-Hop antwortet mit x-ewcs-* wie ein chained Bifrost-Hop mit x-bifrost-*, beides wird nie als eigene Identity weitergeleitet
    • EW-Migrationen bleiben EW-LAST (jetzt 3: add_ew_key_config_columns, add_ew_allowed_requests_column, add_ew_capacity_column)
    • config.schema.json: EW-$defs konfliktfrei durchgegangen (der in Spec 12 prognostizierte Re-Anchor-Konflikt trat nicht ein)
    • ew.lane-wait in die neue overheadBreakdown.tsx (upstream verlagerte OVERHEAD_BUCKET_CATEGORY)

    Operator-Hinweise

    • E2E/UI-Smoke braucht jetzt E2E_BASE_URL zusätzlich zu BASE_URL (playwright.config liest E2E_BASE_URL || :8080; BASE_URL allein lässt den Setup gegen einen Stale-8080-Server laufen)
    • npm run format (oxfmt lokal) formatiert 38 Upstream-UI-Dateien um (Versionsdrift) — nicht committen
    • Upstream-Neuflächen (A2A/Warp/Live/Cloudflare) sind ohne EW-Gates — EW-Keys davon nicht berührt (AllowedRequests-Defaults)
    • Der neue Upstream-Tools-Tab-E2E-Test ist gegen eine stale MCP-Fixture (:3001, "reusing it") flaky — Umgebungsproblem, kein Fork-Defekt

    Qualität

    • make build LOCAL=1, go vet über alle Module, 4 Testsuiten grün (handlers TestAuth inkl. Spec-04-Regressionen, integrations inkl. 9 EW-Route-Tests, ew inkl. 13 umgeschriebener Decision-Tests, configstore inkl. EW-LAST-Pin + Redaction-Test)
    • Docker-Build + Symbol-Check: 157 Spec-Symbole + 14 Lane-Symbole, Versionsstring exakt
    • UI-Smoke: 64 passed / 1 pre-existing / 3 skipped
    • Harness: 5 EW-Folder (8.5.Q–U, 9 Cases, Specs 09/03/10/11/12) in beiden 8.5-Positionen re-appliziert, augment/filter validiert

    Details: specs/08-version-port-log.md, specs/11-ew-decisions-systemone.md (Update-Note)
    Image: forge.engelmann.me/engel75/bifrost:v2.3.0-ew-1

    Downloads