Changelog¶
All notable Brama changes are documented here: what each release changed, why it changed, and what an operator has to do
about it. Brama follows Semantic Versioning and the pre-one compatibility policy in
RELEASE.md. This page is the index; the entries themselves are on the five pages
below, newest first.
Older entries describe the contract as it stood at the time. Where a later change replaced it — most recently the route contract, under which an alias resolves to exactly one route — the entry says so and links the change that replaced it.
Unreleased¶
Unreleased changes holds the entries that are committed but carry no published release coordinate yet and do not concern the subscription pool:
- a decision served by a chat route carries its answer's JSON Schema, sent on the OpenAI chat wire as a strict
response_formatnameddecision, so a route that decodes under it cannot write one question's label under another; the answer is still checked against what the caller declared; brama subscription sign-intakes--by weles|hand, stated every time, andsign-in-manualis gone: signing an account in by hand issign-in --by hand, with the same flags, paste on stdin and gateway options. The routes follow:POST /v1/admin/subscription-pool/sign-inrequires"by": "weles"|"hand", the paste goes to…/sign-in/:sign_in_id, and…/sign-in-manual[/:sign_in_id]no longer exist; Brama Desktop sends the method on both of its sign-in actions;brama subscription authenticator listandauthenticator enrolreplacesecond-factorandenrol-authenticator: one object, the authenticator behind each account's second factor, with the verbs that read and create it; inputs, output and refusals are unchanged;- a Claude Code grant travels in Claude Code's own shape - user agent, beta list, billing attestation and sentence - which is the only shape Anthropic honours it in for the newest models;
- an omitted
temperatureis omitted on the wire too, instead of an invented 0.7 the newest Claude models refuse; brama subscription import(since removed withheldandsync, 0.4.4x) takes a grant any harness on the machine - omp, Claude Code, Codex CLI, Kimi Code - already holds, and every grant that reaches Brama without Weles is proved by a probe;brama subscription sign-in-manual(nowsign-in --by hand) signs a Claude account in through the operator's own browser and a pasted code, without Weles;- the manual sign-in no longer takes
--code: the code is a credential and is read from stdin only, pasted or piped; brama voices remove VOICE_ID --confirmandDELETE /v1/audio/voices/{voice_id}?model=…delete a voice from the deployment's account, beside listing and cloning;- an alias resolves to exactly one route, the registry document keeps
schema_version,deploymentsandroutesonly, andbrama routes migratemoves an existing registry file to that shape; - subscription plan usage replaces four invocations with
POST /v1/plan-usage; - the subscription pool replaces eleven invocations with one capability and one leaf command;
- the backend alias is the client's name,
wisent-backend; - subscription usage and failure reporting across the CLI and Brama Desktop.
Unreleased: subscriptions and credentials holds the rest of the
unpublished entries: the pool that sees every account the machine holds, the imports and sign-ins that fill it, the one
vault listing every reader shares, the grant shapes Anthropic and Codex honour, and the readiness the gateway reports
before its subscription sweep ends. One more is unpublished: the pool banks only real accounts' subscriptions, so
re-banking an existing member whose vault item names no account, without naming one, is refused with
account email address is required: the selected subscription names no account, and the pool holds only real
accounts' subscriptions (pool membership; real
journey tests/subscriptions/accounts/bank_requires_account.sh).
Unreleased: pool membership: the pool lists only the members the vault
holds, and ids only the usage history remembers are answered apart under remembered, counted by nothing.
Published releases¶
Released 0.4.46 to 0.4.13 covers 0.4.46 (a gateway that signs itself in,
with borrowed grants gone), 0.4.14 (image-aware best selection) and 0.4.13 (the Codex imports proved by a
completion probe, and the concurrent catalogue discovery behind them).
Released 0.2.77 to 0.2.42 covers 0.2.77 (the managed backend identity derived from the required backend aliases), 0.2.76 (the managed launcher's aliases, and reviewing and adopting existing route configuration) and 0.2.42 of 2026-08-27, the large re-cut of 0.2.41 that carried streaming, the Anthropic Messages and OpenAI Responses ingress, plan usage read from the providers' own reports, credential refresh and classification, the readiness endpoints, and the archive that no longer ships a signing key.
Released 0.2.5 to 0.2.2 covers 0.2.5, 0.2.4 and 0.2.3 of 2026-08-05 — a shared HTTP client, routes-file validation on the snapshot path, and the desktop control plane — and 0.2.2 of 2026-08-04, which established the documented product contract: error codes, attempt bounds, request limits, public-surface versioning and immutable release provenance.
What a release coordinate means¶
A published coordinate is immutable, and a tag alone is not a release: a tagged revision whose release workflow did not
finish leaves a coordinate with nothing installable behind it. The machine-maintained records are
released-surface.json and the GitHub Releases list; release and support policy
states how a version is chosen and how long it is supported.