# Promptkit v0.11.0 This release adds reliable, observable model execution and changes Promptkit's license to LGPL-3.0-or-later. ## Summary - Built-in model calls can recover from selected transient HTTP failures. - Optional execution observations report attempts, timing, outcomes, and known token usage, including work completed before a run fails. - Public errors distinguish transport failures, malformed responses, and retry exhaustion without parsing diagnostic text. ## Compatibility The built-in client now defaults to two additional transient attempts. This can increase latency, request counts, and cost; retries do not guarantee exactly-once generation. Injected `LLMClient` implementations retain their own retry policy and are not automatically replayed. Existing generation timeouts apply per attempt, while the caller context governs the complete operation. See the [provider integration contract](../integrations/openai-compatible-chat.md). Public retry and observation controls are additive. Existing successful-result usage semantics remain unchanged, and operational failures still return no partial `RunResult`. Observations distinguish unknown usage from reported zero; they are not a complete billing ledger. See the [consumer guide](../consumers/pkg-promptkit.md) and [observation GoDoc](../../observations.go). Promptkit is now licensed under LGPL-3.0-or-later. Review the [license summary](../../README.md#license), [LGPL text](../../LICENSE), and [accompanying GPL text](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.11.0/COPYING) before adoption or distribution. Previously published releases and dependency licenses are unchanged. ## Upgrade Update the dependency: ```sh go get gitea.maximumdirect.net/eric/promptkit@v0.11.0 ``` To retain single-attempt behavior for built-in generation, set `Config.TransientRetries` to a pointer to zero. `RunRequest.TransientRetries` can override the engine choice per request. Review any existing application or HTTP-transport retry loops to avoid unintentionally multiplying attempts. Transient retries and structural repairs have separate budgets; provide a caller deadline when a total execution time limit is needed. Observation is opt-in through `RunRequest.Observer`, including for prepared execution. Callbacks are synchronous; shared observers must support concurrent runs. Injected clients can supply `GenerateResponse.UsagePresence` to explicitly report known zero counts. No observer or usage-presence changes are required for existing consumers. See the [consumer guide](../consumers/pkg-promptkit.md) for adoption and the [offline example](../../examples/go-library/observe/main.go) for a structured proposal-and-assessment workflow. ## Changes - Centralized built-in retry coordination with cancellable backoff and provider retry timing. Retries and structural repair share existing backend capacity; backoff releases active permits without releasing logical run admission. - Added `ErrTransport`, `ErrMalformedResponse`, `ErrRetriesExhausted`, and `RetryExhaustedError`, retaining applicable underlying error identities. - Added request-scoped lifecycle observations and presence-aware token accounting for ordinary and prepared execution, without recording prompt/response bodies. - Isolated delegated operations' observation state and made injected-client attempt classifications consistent with terminal classifications. - Added an offline observation example and regression coverage for retry, repair, capacity, error, and observation interactions. - Adopted LGPL-3.0-or-later and streamlined the documented local release process. Backend catalog selections are unchanged from v0.10.0: OpenRouter `v2.20260922.1` and Rakestrawhome `v2.20260922.0`. See the [catalog compatibility policy](../policy/release.md#catalog-profile-compatibility) and [profile inventories](../formats.md#external-profile-inventories).