---
version: 0.7.1
date: 2026-06-17
headline: "One OpenAI client, build-enforced — the dead HTTPEngine seam is deleted and an architest invariant keeps it singular."
themes:
  - engine
  - architest
  - tooling
highlights:
  - "Delete the degenerate, never-wired engine.HTTPEngine — agent.HTTPPlanner is the one OpenAI client."
  - "New architest gate fails the build if a duplicate chat-completions seam re-grows (TICKETS T4)."
  - "internal/engine no longer imports net/http; net −222 lines of dead code + dead tests."
  - "WSL test guidance: ext4-vs-9p fs perf note; test.ps1 distro fallback fix."
---

**TL;DR** — Maintenance release that closes TICKETS **T4**: the two parallel OpenAI HTTP
seams are collapsed to one. The dead `engine.HTTPEngine` is removed and the
single-client topology is now an architecture invariant the build enforces, so it can't
re-entrench the way it did before. Also folds in the already-landed WSL test-runner
ergonomics. No served-path behavior change.

## One OpenAI client — delete the dead HTTPEngine seam (#engine)

- **What changed** — `engine.HTTPEngine` (+ `NewHTTPEngine`, its file-local
  `parseUsage`/`hashHex`, and its three tests) is deleted; `internal/engine` no longer
  imports `net/http`/`bytes`/`io`/`time`.
  - *Why:* it was a degenerate, never-wired second client — it spoke a bespoke
    `tool=X args=Y` prompt instead of real tool-calling, registered only `mock`, and its
    sole caller was its own test. The seam had *entrenched* over time (the gateway added
    a third consumer of the live planner while this copy sat orphaned).
  - *How:* `agent.HTTPPlanner` already covered everything it offered and strictly more —
    `base_url` local↔remote swap (`adapter.Endpoint`), usage extraction, transcript
    witness, and a better retry (4-attempt 429/5xx backoff vs a 2-attempt transport-only
    loop) — so the duplicate was removed, not folded. The Mock + cassette engines and the
    engine-residency adjudicator are unchanged.

## Build-enforced single-client invariant (#architest)

- **What changed** — new attribute test `architest.TestSingleOpenAIChatClient`.
  - *Why:* T4 re-entrenched last time precisely because nothing stopped a second client
    from appearing; a convention is not a guarantee.
  - *How:* it asserts the OpenAI `chat/completions` endpoint appears — as a string
    literal in non-test code — in *exactly* `{agent (client), gateway (server route)}`.
    A new package referencing it (a re-grown duplicate) or either declared holder losing
    it fails the build. AST-based, so a doc comment mentioning the path doesn't count.

## Tooling — WSL test ergonomics (#tooling)

- **What changed** — `CLAUDE.md` documents the WSL **ext4-vs-9p** filesystem perf gap for
  the test hot path; `fak/test.ps1` / `fak/test.sh` gain a distro fallback (use
  `Ubuntu-24.04` if present, else WSL's default — the old hardcoded distro broke nodes
  whose distro is just `Ubuntu`). *(Landed since v0.7.0; included here for completeness.)*

---

*Verification:* `engine`, `architest`, `agent`, `gateway`, and the full `./...` suite are
green via WSL. Released on `fak-v0.1` (the active release line; `master` trails it) as a
single-writer, lock-guarded release; concurrent fleet experiment-output churn in the
shared tree was deliberately left uncommitted.
