ctx v5.14.0
v5.14.0 — Tree-Shaking RC-2a: Phase D, erster Teil — Boot-Vertrag, Config-Vorzeichen, Fence-Toleranz, Dream-Telemetrie
Minor-Release ohne Migration (Schema bleibt bei 151). Zehn Wellen des Tree-Shaking-Runs (Board v3; Entscheide K25–K39 in DECISIONS.md), jede mit Fable-Prüf-Agent (Rot→Grün nachgefahren, Negativ-Proben, Integrations-Suite) und eigenhändigen Gates auf root gelandet. Fünf beabsichtigte Verhaltensänderungen, alle benannt und gepinnt; der Rest ist byte-gleich belegt.
Verhaltensänderungen:
(1) T01-7 — die drei Werkzeug-Binaries ctx-armcost, ctx-llmlog-export, ctx-distillreset validieren ihre Config vollständig, BEVOR sie die Datenbank anfassen (E01-7 = A: dieselbe HasErrors-Grenze wie ctxd). Eine ungültige Cross-Field-Config endet jetzt mit <tool>: config: …, Exit 1, ohne DB-Kontakt — vorher lief der Pool-Aufbau mit Retries, und die Kollision blieb ungeprüft.
(2) T05-4 — V35: ein registry-getriebener Vorzeichen-Walk über alle 90 int-Keys als letzter Validierungs-Pass; 16 Hand-Vorzeichenprüfungen fallen, drei Boden-Prüfungen bleiben. Negative Werte auf int-Keys brechen den Boot (config: invalid field=<key>), PUT /api/settings/<key> mit negativem Wert liefert 422 statt 200, und bestehende negative context_settings-Zeilen werden mit einer WARN verworfen (Registry-Default serviert). Pre-Deploy-Gates: Row-Sweep der Live-DB 0 Zeilen, effektive Compose-Env 0 negative CTX-Werte. WARN-normalisierende Keys (dream.backoff_grace, dream.backoff_inert_offset, dream.parallelism) verhalten sich unverändert.
(3) T04-13 — eine Fence-Toleranz statt drei: llm.StripJSONFence; dream/parse, dream/recurrence und goldbench rufen sie. Einzige Änderung: parseRecurrenceResponse verliert die Toleranz gegen ein abschließendes ``` ohne öffnenden Fence (Angleichung an die Schwester-Pfade; A/B über 170 Roh-Strings, 0 unerwartete Divergenzen).
(4) T04-14 — der Distiller verträgt einen Fence (E04-2 = A, K29): gefencte Antworten werden dekodiert statt als Decode-Fehler gebucht; jede geborgene Antwort läuft durch dieselbe Gate-Kette, und ist ein distillFault weniger. Messprotokoll: ≥ 0 Decode-Fehler im Log-Fenster seit dem v5.13.6-Deploy (2 h 6 min, Bezugsgröße 0) — die Welle steht auf dem Code-Argument (Format: "json" in beiden Pipelines).
(5) T04-12 — die fünf dream-*-Pipelines schreiben cost_usd, metadata.provider_request_id und das servierende Modell in context_llm_log (nil-Guard im Fehlerpfad, Stempel-Reihenfolge served → provider → dispatch gepinnt). Spend-Guard und Tenant-Status filtern auf api_key_id und bleiben unberührt; die Server-Statusseite zeigt für die dream-Eimer jetzt den wahren Wert. Nadel-Test nach Deploy: count(cost_usd) auf externen dream-Zeilen.
Wave-0 (byte-gleich belegt):
T04-11 — internal/toolboot: EIN Boot-Ablauf (FromEnv → Validate → report einmal → HasErrors → NewPool) für fünf Oberflächen (ctxd, overview-worker, drei Werkzeuge); 3 Fälle × 5 Oberflächen × 3 Läufe = 45 Vergleiche über stdout, stderr und Exit-Code ohne Diff; config-layering-Regel bekommt die Ausnahme (K7/K36).
T05-6 — env-only-Klasse: internal/config/envonly.go nennt die 17 Server-Env-Namen, die die Registry bewusst umgehen, mit geschriebenem Grund; AST-Scanner über die 47 Pakete der ctxd-Hülle (K10/A-12), Rot-Probe mit Diskriminierung (internal/handler rot, internal/cli nicht); Direktleser-Menge {schemacontract, overview} gepinnt.
T05-2 — parse:"safe" verlässt das Tag-Vokabular (0 Träger, 0 Mechanismus); ein dritter Wert ist jetzt ein Registry-Fehler.
T05-3 — .env.example gegen seine tatsächlichen Leser (ISOTEST rein, WORK raus) plus Glob-Ratsche über alle Root-Skripte (4 Pflichtnamen, 9 Fundstellen, 5 Dateien).
T05-9 — AST-Pin: niemand im Server-Graphen liest cfg.Contract.Mode für eine Enforcement-Entscheidung (die env>DB-Ausnahme bleibt dokumentiert und wird jetzt gehalten).
Batterie: go test -short 64 ok; vet -tags=integration ok; golangci-lint 0 (frischer Cache); Integration -p 1 ./... 65 ok / 0 FAIL / 0 Paket-Timeout (14:37–15:11Z, 34 min, inkl. ctxcheckpoint); test.sh, eval.sh, Deploy-Parität und der Nadel-Test laufen nach dem Deploy aus dem Tag-Worktree und stehen im Release-Log (LOOP.md).
Commits (root): T04-13 df49692 · T01-7 0780a10 · T05-4 6e4ec4d · T05-6 6a2651d · T05-3 2fa1539 · T05-2 4585ad5 · T04-14 d85b95c · T04-11 4663c6f · T05-9 71cf587 · T04-12 e4c5ac2.
Installation
With Go:
go install github.com/GottZ/ctx/cmd/ctx@v5.14.0Binary download:
Download the binary for your platform, make it executable, move to PATH:
chmod +x ctx-*
sudo mv ctx-* /usr/local/bin/ctx