• v4.2.1 504b1d943e

    v4.2.1
    All checks were successful
    CI / Bot/backend version sync (push) Successful in 43s
    CI / Backend lint (ruff) (push) Successful in 54s
    Release / Create Forgejo release (push) Successful in 12s
    CI / Summarisation accuracy eval harness (stub provider) (push) Successful in 1m25s
    CI / Frontend tests, audit, and build (push) Successful in 1m51s
    CI / Bot tests and audit (push) Successful in 2m9s
    CI / Docker image build (push) Successful in 4m30s
    Release / Build and push versioned images (push) Successful in 4m41s
    CI / Backend migration, tests, and audit (push) Successful in 9m24s
    CI / Synthetic session harness (no GPU, no LLM) (push) Successful in 15m14s
    Stable

    claude-bot released this 2026-09-05 16:26:30 +00:00 | 193 commits to main since this release

    Superseded by v4.2.2. The preflight fix below did not hold on the bundled llama.cpp stack: a reasoning model thinks for as many tokens as it is given, so the larger budget still produced no visible answer and the panel still read "Not measured" (#507). v4.2.2 measures throughput from the tokens the model did produce instead. The other two fixes in this release are good; upgrade straight to v4.2.2.

    A patch on v4.2.0 from the first live validation of the release: the hardware preflight now measures reasoning models instead of reporting "Not measured", usage rows name the ASR model that actually served the run, and the synthetic-session harness scores its in-character assembly against the right denominator.

    No migration. The database schema is unchanged from v4.2.0 (e9fa0b1c2d3e remains the head).

    Bot API contract v1, unchanged. A v4.2.0 bot works with a v4.2.1 backend and vice versa; BOT_EXPECTED_APP_VERSION is bumped so the bot's startup log matches.

    No new settings. Nothing to add to .env. If your preflight panel showed "Not measured" for the LLM on a self-hosted reasoning model, re-run the preflight after upgrading; nothing else is required.

    Fixed

    • [webapp] The hardware preflight now measures deployments running a
      reasoning model, instead of reporting "Not measured"
      (#507). Admin → AI →
      "Run preflight" asked for at most 128 tokens of prose, which is not a short
      answer for a thinking model — it is no answer at all, because the hidden
      reasoning spends the whole budget before the first visible word. On the
      bundled llama.cpp stack serving qwen3.5, which is the default self-hosted
      configuration, the probe failed every time: no generation rate, no expected
      session time, and a "Not measured" label beside an endpoint that summarises
      whole sessions perfectly well. A provider that declares reasoning is now
      probed with a budget it can answer in, and one that turns out to need it
      anyway — an OpenAI o-series model, or Ollama serving qwen3 — is retried once
      with the larger budget, with the panel saying why that measurement took
      longer. The reported rate still counts the reasoning tokens, because a real
      summarisation run pays for them too.

    • [webapp] Admin → AI Usage now says which model transcribed a session
      (#508). If you run the bundled transcription server, the model column was
      empty on every run: the server picks its model at startup and takes no model
      parameter, so there was nothing configured to record — while the
      summarisation half happily named its model. That left the one question worth
      asking of a self-hosted box unanswerable, because the model does change
      under you when somebody redeploys it with a smaller one, and nothing in the
      history said when. Quest Board already asks the server what it is running
      (that is how it knows whether your server can do word timings); it now
      records the answer alongside the run and shows it beside the transcription
      time. A model you have set by hand still wins, an endpoint that never
      answered is recorded as unknown rather than blank, and a run on your own
      hardware is still costed in compute seconds rather than dollars. Older rows
      keep their empty column — the model a session used last month is not
      recoverable now.

    • [webapp] "No vocabulary hints" is now reported as a medium-impact gap, not
      a low one
      (#506). The capability panel ranked it below "the provider was
      guessed from the URL", which told operators the wrong thing to fix first: the
      measurement in v4.2.0 put the campaign vocabulary at roughly ten to
      twenty-five points of proper-noun recall on identical audio, at no cost to
      the rest of the words — the largest single effect anything in that release
      measured. The wording now says what you actually lose, which is your own
      characters' and places' names coming back mis-heard and spelled differently
      every time. Nothing about the pipeline changed; if you run the bundled
      transcription server, the fix is still to update it.

    Internal (no operator-visible change)

    • The synthetic-session harness scored marker detection for its ic_only
      assembly over the whole script's 54 marker occurrences, four of which are
      only ever spoken in out-of-character lines that assembly does not render —
      so that leg understated itself by counting markers no transcriber could have
      returned (#506). Each assembly is now scored against its own script, and the
      excluded occurrences are reported next to the count. full is unchanged.
      Committed calibration figures are annotated rather than restated: re-deriving
      them needs a rerun on the GPU box.
    • The same harness seeded its Discord links unverified, and attendance
      resolution deliberately ignores unclaimed links, so a live run reported all
      five known players as unmatched strangers and never reached the
      uncaptured-member check the fixture exists to exercise (#506). The links are
      seeded verified now, seed_db --verify checks that they are, and the
      expected attendance outcome of a live run is written down.
    Downloads