---
title: "Release digest: October 26 - November 2, 2026 (Week 44)"
description: "Cratis releases for October 26 - November 2, 2026: AI, Ante, Arc, Arc.Kotlin, AuthProxy, Chronicle, Chronicle.Elixir, Chronicle.Kotlin, Chronicle.TypeScript…"
editUrl: "https://github.com/Cratis/.github/edit/main/release-digests/2026-10-26-to-2026-11-02.md"
---
## Week in numbers

- **204 releases**: 122 with new features, 78 with fixes, 2 with breaking changes.
- **266 merged pull requests** and **536 issues closed**.
- From merge to release: median **< 1 minute** (90% within 9 minutes).
- Busiest repository: [cli](https://github.com/Cratis/cli) (25 releases).
- Current daily release streak: **90 days**.

## Version movement

| Repository | Previous version | Current version |
| --- | --- | --- |
| [AI](https://github.com/Cratis/AI) | [v7.121.0](https://github.com/Cratis/AI/releases/tag/v7.121.0) | [v7.128.0](https://github.com/Cratis/AI/releases/tag/v7.128.0) |
| [Ante](https://github.com/Cratis/Ante) | [v1.4.0](https://github.com/Cratis/Ante/releases/tag/v1.4.0) | [v1.6.0](https://github.com/Cratis/Ante/releases/tag/v1.6.0) |
| [Arc](https://github.com/Cratis/Arc) | [v22.143.0](https://github.com/Cratis/Arc/releases/tag/v22.143.0) | [v22.156.4](https://github.com/Cratis/Arc/releases/tag/v22.156.4) |
| [Arc.Kotlin](https://github.com/Cratis/Arc.Kotlin) | [v7.10.1](https://github.com/Cratis/Arc.Kotlin/releases/tag/v7.10.1) | [v7.11.0](https://github.com/Cratis/Arc.Kotlin/releases/tag/v7.11.0) |
| [AuthProxy](https://github.com/Cratis/AuthProxy) | [v2.32.4](https://github.com/Cratis/AuthProxy/releases/tag/v2.32.4) | [v2.40.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.40.0) |
| [Chronicle](https://github.com/Cratis/Chronicle) | [v19.111.0](https://github.com/Cratis/Chronicle/releases/tag/v19.111.0) | [v19.115.4](https://github.com/Cratis/Chronicle/releases/tag/v19.115.4) |
| [Chronicle.Elixir](https://github.com/Cratis/Chronicle.Elixir) | [v3.14.3](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.14.3) | [v3.16.1](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.16.1) |
| [Chronicle.Kotlin](https://github.com/Cratis/Chronicle.Kotlin) | [v7.2.1](https://github.com/Cratis/Chronicle.Kotlin/releases/tag/v7.2.1) | [v7.3.1](https://github.com/Cratis/Chronicle.Kotlin/releases/tag/v7.3.1) |
| [Chronicle.TypeScript](https://github.com/Cratis/Chronicle.TypeScript) | [v6.53.1](https://github.com/Cratis/Chronicle.TypeScript/releases/tag/v6.53.1) | [v6.54.0](https://github.com/Cratis/Chronicle.TypeScript/releases/tag/v6.54.0) |
| [cli](https://github.com/Cratis/cli) | [v3.103.3](https://github.com/Cratis/cli/releases/tag/v3.103.3) | [v3.118.0](https://github.com/Cratis/cli/releases/tag/v3.118.0) |
| [Components](https://github.com/Cratis/Components) | [v4.38.0](https://github.com/Cratis/Components/releases/tag/v4.38.0) | [v4.39.0](https://github.com/Cratis/Components/releases/tag/v4.39.0) |
| [Fundamentals](https://github.com/Cratis/Fundamentals) | [v7.27.0](https://github.com/Cratis/Fundamentals/releases/tag/v7.27.0) | [v7.32.0](https://github.com/Cratis/Fundamentals/releases/tag/v7.32.0) |
| [Fundamentals.Kotlin](https://github.com/Cratis/Fundamentals.Kotlin) | [v0.7.1](https://github.com/Cratis/Fundamentals.Kotlin/releases/tag/v0.7.1) | [v0.8.0](https://github.com/Cratis/Fundamentals.Kotlin/releases/tag/v0.8.0) |
| [Orleans](https://github.com/Cratis/Orleans) | [v1.32.2](https://github.com/Cratis/Orleans/releases/tag/v1.32.2) | [v1.33.1](https://github.com/Cratis/Orleans/releases/tag/v1.33.1) |
| [Prologue](https://github.com/Cratis/Prologue) | [v2.0.5](https://github.com/Cratis/Prologue/releases/tag/v2.0.5) | [v3.0.1](https://github.com/Cratis/Prologue/releases/tag/v3.0.1) |
| [Prompter](https://github.com/Cratis/Prompter) | [v0.2.5](https://github.com/Cratis/Prompter/releases/tag/v0.2.5) | [v0.12.0](https://github.com/Cratis/Prompter/releases/tag/v0.12.0) |
| [Scene](https://github.com/Cratis/Scene) | [v4.82.0](https://github.com/Cratis/Scene/releases/tag/v4.82.0) | [v4.86.0](https://github.com/Cratis/Scene/releases/tag/v4.86.0) |
| [Screenplay](https://github.com/Cratis/Screenplay) | [v4.250.0](https://github.com/Cratis/Screenplay/releases/tag/v4.250.0) | [v5.1.0](https://github.com/Cratis/Screenplay/releases/tag/v5.1.0) |
| [Screenplay.Generation](https://github.com/Cratis/Screenplay.Generation) | [v0.18.2](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.18.2) | [v0.19.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.19.0) |
| [Showrunner](https://github.com/Cratis/Showrunner) | First release | [v1.14.0](https://github.com/Cratis/Showrunner/releases/tag/v1.14.0) |
| [Specifications](https://github.com/Cratis/Specifications) | [v5.1.0](https://github.com/Cratis/Specifications/releases/tag/v5.1.0) | [v5.2.0](https://github.com/Cratis/Specifications/releases/tag/v5.2.0) |
| [Stage](https://github.com/Cratis/Stage) | [v4.201.1](https://github.com/Cratis/Stage/releases/tag/v4.201.1) | [v4.213.0](https://github.com/Cratis/Stage/releases/tag/v4.213.0) |
| [Stage.Axon](https://github.com/Cratis/Stage.Axon) | First release | [v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0) |
| [Templates](https://github.com/Cratis/Templates) | [v1.8.1](https://github.com/Cratis/Templates/releases/tag/v1.8.1) | [v1.8.3](https://github.com/Cratis/Templates/releases/tag/v1.8.3) |

## Added

- **Prompter** ([Release v0.12.0](https://github.com/Cratis/Prompter/releases/tag/v0.12.0)): Per-user fairness for paid answers: each requester is limited to a small number of admissions per day, with a short cooldown between questions
- **Prompter** ([Release v0.12.0](https://github.com/Cratis/Prompter/releases/tag/v0.12.0)): Separate limits for button actions, feedback clicks, issue searches and GitHub webhook processing, so one busy surface cannot use up capacity meant for others
- **Prompter** ([Release v0.12.0](https://github.com/Cratis/Prompter/releases/tag/v0.12.0)): GitHub webhook deliveries are claimed durably before processing, so a redelivered event is handled once; the endpoint answers 429 when processing capacity is full
- **Screenplay** ([Release v5.1.0](https://github.com/Cratis/Screenplay/releases/tag/v5.1.0)): `statemachine` declarations that follow a read model, with states, `initial` and `final`, `entering send <Command>` and `entering start <Workflow>`, and event transitions with optional guards (#1118)
- **Screenplay** ([Release v5.1.0](https://github.com/Cratis/Screenplay/releases/tag/v5.1.0)): `workflow` declarations with trigger, action, decide, wait, approval, foreach and join nodes, edges between outlets, and nested specifications run by `screenplay test` (#1119)
- **Screenplay** ([Release v5.1.0](https://github.com/Cratis/Screenplay/releases/tag/v5.1.0)): Diagnostics PLAY0834 to PLAY0851 for the new constructs
- **Screenplay** ([Release v5.1.0](https://github.com/Cratis/Screenplay/releases/tag/v5.1.0)): ESM v36 with `stateMachines` and `workflows`; earlier versions are unchanged
- **Screenplay** ([Release v5.1.0](https://github.com/Cratis/Screenplay/releases/tag/v5.1.0)): Monaco and VS Code highlighting, completion and keyword help for both constructs
- **Screenplay** ([Release v5.1.0](https://github.com/Cratis/Screenplay/releases/tag/v5.1.0)): AcmeCommerce and Invoicing samples and the `statemachines` and `workflows` documentation pages
- **Showrunner** ([Release v1.14.0](https://github.com/Cratis/Showrunner/releases/tag/v1.14.0)): `NotesOptions.EventStore` and `NoteCollectingOptions.EventStore` set an explicit event store for hosts that need another store
- **Screenplay** ([Release v5.0.0](https://github.com/Cratis/Screenplay/releases/tag/v5.0.0)): Structured values as indented blocks: `member = value` lines for an object, one `item` line per list element, `<name> none` for an empty list and `<name> empty` for an object without members. For example, `property columns` followed by an indented `item` holding `id = "received"`. See https://github.com/Cratis/Screenplay/blob/main/Documentation/screenplay/structured-values.md.
- **Screenplay** ([Release v5.0.0](https://github.com/Cratis/Screenplay/releases/tag/v5.0.0)): `then returns value` opens a structured response, and `then no readmodel X for` takes its key members as a block.
- **Screenplay** ([Release v5.0.0](https://github.com/Cratis/Screenplay/releases/tag/v5.0.0)): `from literal` takes a block, with its modifiers on the line.
- **Screenplay** ([Release v5.0.0](https://github.com/Cratis/Screenplay/releases/tag/v5.0.0)): Error `PLAY0833` for a value written as inline JSON. The editors offer a quick fix, and printing a document converts every occurrence.
- **Screenplay** ([Release v5.0.0](https://github.com/Cratis/Screenplay/releases/tag/v5.0.0)): Highlighting and hover documentation for `item`, `none` and `empty` in structured values.
- **AI** ([Release v7.128.0](https://github.com/Cratis/AI/releases/tag/v7.128.0)): `cratis-onboarding-runtime` teaches Ante's opt-in sign-up review: the held sign-up, `OrganizationRegistrationAwaitingReview`, the host's approve or decline decision and `OrganizationRegistrationDeclined`
- **AI** ([Release v7.128.0](https://github.com/Cratis/AI/releases/tag/v7.128.0)): `cratis-onboarding-runtime` teaches starting a new tenant on a Box Office default offering with `DefaultOffering` and `IDefaultOffering.StartTenant`, its failures and the explicit event store options
- **cli** ([Release v3.117.0](https://github.com/Cratis/cli/releases/tag/v3.117.0)): `cratis direct mcp` bridges stdio MCP clients to Direct's remote MCP endpoint using stored Direct credentials. It pins the origin and tenant, keeps stdout limited to JSON-RPC and refreshes a rejected access token once. (part of #206)
- **cli** ([Release v3.117.0](https://github.com/Cratis/cli/releases/tag/v3.117.0)): `cratis direct mcp install`, `status` and `uninstall` manage tenant-pinned stdio registrations for Claude Code, Codex, Copilot in VS Code, Cursor and OpenCode in user or project scope. Conflict-safe ownership preserves unrelated configuration, backs up existing files before changing them, keeps existing file ACLs and permissions, rejects overlapping or stale updates and supports dry runs and backup-based recovery of interrupted updates. (part of #206)
- **Stage** ([Release v4.212.0](https://github.com/Cratis/Stage/releases/tag/v4.212.0)): The `signupDeclined` email is sent through Herald when Ante declines a reviewed sign-up, with the reviewer's message as `decline.message`, once per registration
- **Stage** ([Release v4.212.0](https://github.com/Cratis/Stage/releases/tag/v4.212.0)): A model's `offering` renders against Box Office: the application declares the offer as its default, and each new tenant is started on it with that offer's seats and modules as soon as the operator has published the offer
- **Stage** ([Release v4.212.0](https://github.com/Cratis/Stage/releases/tag/v4.212.0)): `STAGE-ONBOARDING-008` tells the operator to publish an offer with the model's offering name, and that Box Office's seat and compute policies are not rendered
- **Stage** ([Release v4.212.0](https://github.com/Cratis/Stage/releases/tag/v4.212.0)): Documentation: [Onboarding rendering](https://github.com/Cratis/Stage/blob/main/Documentation/reference/onboarding-rendering.md)
- **Ante** ([Release v1.6.0](https://github.com/Cratis/Ante/releases/tag/v1.6.0)): Opt-in registration review with `Ante:Registration:Review` (off by default): a completed sign-up is held instead of completing, and Ante publishes `OrganizationRegistrationAwaitingReview` with the same contact and tenant details as `OrganizationRegistrationCompleted`
- **Ante** ([Release v1.6.0](https://github.com/Cratis/Ante/releases/tag/v1.6.0)): The host decides by appending `OrganizationRegistrationApproved` or `OrganizationRegistrationDeclineRequested` (with a required reviewer message) to its outbox on the registration id; approval completes the registration as before
- **Ante** ([Release v1.6.0](https://github.com/Cratis/Ante/releases/tag/v1.6.0)): `OrganizationRegistrationDeclined` is published once per declined registration with the person's contact details and the reviewer's message; a completed registration is never declined (#207)
- **Ante** ([Release v1.6.0](https://github.com/Cratis/Ante/releases/tag/v1.6.0)): The lobby tells the person their sign-up is waiting for review, or that it was not approved, in English and Norwegian
- **Ante** ([Release v1.6.0](https://github.com/Cratis/Ante/releases/tag/v1.6.0)): Documentation: [Review sign-ups before they complete](https://github.com/Cratis/Ante/blob/main/Documentation/host-integration.md)
- **Showrunner** ([Release v1.13.0](https://github.com/Cratis/Showrunner/releases/tag/v1.13.0)): `ProductOfferingBuilder.DefaultOffering("Starter")` declares the offer new tenants start on, published to the operator as `DefaultOfferingDeclared`
- **Showrunner** ([Release v1.13.0](https://github.com/Cratis/Showrunner/releases/tag/v1.13.0)): `IDefaultOffering.StartTenant(tenant, organization)` starts a newly provisioned tenant on the default offering: the tenant gets the offer's seats and modules at once, the operator sees `TenantStartedOnOffer`, a later operator decision replaces it, and starting the same tenant again does nothing (#75)
- **Showrunner** ([Release v1.13.0](https://github.com/Cratis/Showrunner/releases/tag/v1.13.0)): Starting a tenant on an offer that is not declared, not published or withdrawn fails with `DefaultOfferingNotDeclared` or `DefaultOfferingNotPublished` instead of starting it silently
- **Showrunner** ([Release v1.13.0](https://github.com/Cratis/Showrunner/releases/tag/v1.13.0)): `BoxOfficeOptions.EventStore`, `OfferingOptions.EventStore` and `HeraldOptions.EventStore` set an explicit event store for hosts that need another store
- **Showrunner** ([Release v1.13.0](https://github.com/Cratis/Showrunner/releases/tag/v1.13.0)): Documentation: [Starting a tenant on the default offering](https://github.com/Cratis/Showrunner/blob/main/Documentation/BoxOffice/offering.md)
- **Orleans** ([Release v1.33.0](https://github.com/Cratis/Orleans/releases/tag/v1.33.0)): Workflow engine in `Cratis.Orleans`: a graph of Trigger, Action, Decision, Wait, Approval, ForEach and Join nodes with named outlets and per-node retry policy, versioned definitions with admission policies, run and workflow grains, and node work executed as jobs. (#167)
- **Orleans** ([Release v1.33.0](https://github.com/Cratis/Orleans/releases/tag/v1.33.0)): `IWorkflowRunJournal`, with a journal on Orleans grain storage so workflows run without Chronicle.
- **Orleans** ([Release v1.33.0](https://github.com/Cratis/Orleans/releases/tag/v1.33.0)): A sweep and a per-run timer and reminder, so waits and retries resume after a restart.
- **Orleans** ([Release v1.33.0](https://github.com/Cratis/Orleans/releases/tag/v1.33.0)): `AddCratisOrleansWorkflows()` and `CratisOrleansOptions.Workflows` to host workflows.
- **Orleans** ([Release v1.33.0](https://github.com/Cratis/Orleans/releases/tag/v1.33.0)): `CratisOrleansOptions.Local()`, a database-free configuration with localhost clustering and in-memory grain storage, for development and embedded hosts.
- **Orleans** ([Release v1.33.0](https://github.com/Cratis/Orleans/releases/tag/v1.33.0)): Chronicle adapter in `Cratis.Orleans.Chronicle`: an event-sourced journal, event, state-machine, schedule and manual triggers, signals, run listing and open-wait read models, and `AddEventSourcedWorkflows()`.
- **Orleans** ([Release v1.33.0](https://github.com/Cratis/Orleans/releases/tag/v1.33.0)): Documentation for workflows: https://github.com/Cratis/Orleans/blob/main/Documentation/concepts/workflows.md
- **Prompter** ([Release v0.11.0](https://github.com/Cratis/Prompter/releases/tag/v0.11.0)): Configurable feedback click limits default to 10 clicks per user every 10 minutes; repeated identical votes do not write to the database again (#98)
- **Prologue** ([Release v3.0.0](https://github.com/Cratis/Prologue/releases/tag/v3.0.0)): The Prologue Workbench at `/` on the Receiver, with seven steps (Systems, Discover, Capture, Explore, Events, Model, Rebuild) in the Cratis design system, a prologue switcher and a phone layout. Discover, Capture and Rebuild are optional; at least one of Discover and Capture stays on (#65) (#67)
- **Prologue** ([Release v3.0.0](https://github.com/Cratis/Prologue/releases/tag/v3.0.0)): `docker compose -f Source/Receiver/docker-compose.yml up --build` runs the Workbench with the Chronicle kernel it needs (#66)
- **Prologue** ([Release v3.0.0](https://github.com/Cratis/Prologue/releases/tag/v3.0.0)): Systems: define a prologue's systems, each with a repository host, repository, branch and sub path, so several systems can share one monorepo; pick runtime sources, see what is and is never recorded, and copy the generated `cratis-prologue.json`, which points the Extractor at the Receiver you are using (#68)
- **Prologue** ([Release v3.0.0](https://github.com/Cratis/Prologue/releases/tag/v3.0.0)): Repository connections for GitHub, Azure DevOps and GitLab, plus local folders; system repositories are cloned read-only, shallow and sparse into `Prologue:Repositories:CloneDirectory`, with one clone shared by systems in the same repository (#69)
- **Prologue** ([Release v3.0.0](https://github.com/Cratis/Prologue/releases/tag/v3.0.0)): AI setup through Cratis.AI: providers (Anthropic, OpenAI, Azure OpenAI, OpenAI-compatible for models in your network, Z.ai, OpenAI Codex, GitHub Copilot), pools with tier, ordering and fallback, and Prologue's agents (Dramaturg, Prompter, Usher, Interpreter). The shell shows whether code stays in your network: Local only, Local first or Leaves network (#70)
- **Prologue** ([Release v3.0.0](https://github.com/Cratis/Prologue/releases/tag/v3.0.0)): Discover analyzes a system's source, or any folder, into an application map of capabilities, decision points with file and line, and dependencies between systems, matched against what the captures show; maps can be shared as a read-only link. ASP.NET controllers are mapped even without an AI provider (#71)
- **Prologue** ([Release v3.0.0](https://github.com/Cratis/Prologue/releases/tag/v3.0.0)): Capture shows captures as they arrive, with rate, command shapes, tables touched, trace-linked share, uncorrelated writes, coverage by route, a timeline per capture, and an explanation of each accepted or refused decision (#72)
- **Prologue** ([Release v3.0.0](https://github.com/Cratis/Prologue/releases/tag/v3.0.0)): Scenario scripts: mark the business scenario you are running, and the captures that arrive meanwhile carry its label into interpretation (#73)
- **Prologue** ([Release v3.0.0](https://github.com/Cratis/Prologue/releases/tag/v3.0.0)): Explore shows a command-by-table matrix with how often each write happens, observations per shape, journeys inferred from ids in request paths, uncorrelated writes by hour, and questions about the captures answered with cited shapes. Shapes can be excluded from interpretation or split by response status (#74)
- **Prologue** ([Release v3.0.0](https://github.com/Cratis/Prologue/releases/tag/v3.0.0)): Business events with reasons, for example "Loan refused, because no copy was available (`LoansController.cs:71`)", using
- **Fundamentals** ([Release v7.32.0](https://github.com/Cratis/Fundamentals/releases/tag/v7.32.0)): `ICanCreateEnumConverters`: generated type discovery providers implement it to create `EnumConverter<TEnum>` for the enums their assembly declares. Hand-written providers can implement it to cover enums from assemblies built without the generator (#1237)
- **AI** ([Release v7.127.0](https://github.com/Cratis/AI/releases/tag/v7.127.0)): `cratis-screenplay-authentication-and-onboarding`: the Screenplay `authentication` and `onboarding` blocks, their diagnostics and the environment keys derived from them
- **AI** ([Release v7.127.0](https://github.com/Cratis/AI/releases/tag/v7.127.0)): `cratis-environments-and-secrets`: Cratis environments in `.cratis/environments`, passphrase-encrypted values and Azure Key Vault or HashiCorp Vault references, and how `cratis run` resolves them
- **AI** ([Release v7.127.0](https://github.com/Cratis/AI/releases/tag/v7.127.0)): `cratis-showrunner-herald`: sending email with Herald, its templates, images and transports
- **AI** ([Release v7.127.0](https://github.com/Cratis/AI/releases/tag/v7.127.0)): `cratis-onboarding-runtime`: how AuthProxy, Ante and the Stage Manager operator run an application, including local development mode
- **AI** ([Release v7.127.0](https://github.com/Cratis/AI/releases/tag/v7.127.0)): The Stage rendering and render-and-gap-fill skills teach what Stage renders for authentication and onboarding, the sandbox's forwarded identity, and what `cratis run` starts when a model declares authentication (#969)
- **cli** ([Release v3.116.0](https://github.com/Cratis/cli/releases/tag/v3.116.0)): `cratis run` starts AuthProxy in front of the Stage when the model has `authentication`, configured from the model's providers and the selected environment, and opens the application through it; the Stage trusts the identity AuthProxy forwards instead of playing a persona (#516)
- **cli** ([Release v3.116.0](https://github.com/Cratis/cli/releases/tag/v3.116.0)): `cratis run` starts the application's own Ante in development mode, with a MongoDB and the model's legal terms, when the model has `onboarding`; onboarding emails are written to `.cratis/local/mail` unless the environment names a mail server
- **cli** ([Release v3.116.0](https://github.com/Cratis/cli/releases/tag/v3.116.0)): `cratis run` stops before starting any container when the environment lacks keys the model needs, and lists them
- **cli** ([Release v3.116.0](https://github.com/Cratis/cli/releases/tag/v3.116.0)): `cratis run` options `--environment`, `--auth-port`, `--lobby-port`, `--authproxy-tag` and `--ante-tag`
- **cli** ([Release v3.116.0](https://github.com/Cratis/cli/releases/tag/v3.116.0)): `cratis config --missing <model>` reads the keys a `.play` file or folder needs and lists those the environment lacks
- **cli** ([Release v3.116.0](https://github.com/Cratis/cli/releases/tag/v3.116.0)): `cratis render` renders a model's `authentication` and `onboarding`: the AuthProxy, Ante and environment configuration under `.runtime/`, sign-in and persona mapping, onboarding provisioning and the email templates
- **Fundamentals** ([Release v7.31.0](https://github.com/Cratis/Fundamentals/releases/tag/v7.31.0)): `TransformingSubject<TSource, TResult>.CreateSubscriberScoped(sourceFactory, transform)` creates a transforming subject for cold, restartable sources. It connects to the source when the first subscriber arrives and disconnects when the last one leaves; the next subscriber gets a fresh connection. (part of #1238)
- **Stage** ([Release v4.211.0](https://github.com/Cratis/Stage/releases/tag/v4.211.0)): Applications rendered from a model with `authentication` trust the identity AuthProxy forwards, so `authenticated`, `role` and `claim` policies hold for signed-in callers, and personas map to the roles and claims their policies require (#915)
- **Stage** ([Release v4.211.0](https://github.com/Cratis/Stage/releases/tag/v4.211.0)): The provider list AuthProxy needs and the environment keys the application reads are rendered as `.runtime/authproxy.application.json` and `.runtime/environment.json`
- **Stage** ([Release v4.211.0](https://github.com/Cratis/Stage/releases/tag/v4.211.0)): Applications rendered from a model with `onboarding` subscribe to their Ante's outcomes and provision once per outcome: a new tenant becomes a Chronicle namespace, its first member gets the `as` persona, and joins grant only the personas the model allows (#916)
- **Stage** ([Release v4.211.0](https://github.com/Cratis/Stage/releases/tag/v4.211.0)): An `InviteMemberToTenant` command restricted to the model's inviting personas and grantable personas
- **Stage** ([Release v4.211.0](https://github.com/Cratis/Stage/releases/tag/v4.211.0)): Invitation and welcome emails sent through Herald from the model's templates and images, once per invitation or registration
- **Stage** ([Release v4.211.0](https://github.com/Cratis/Stage/releases/tag/v4.211.0)): An invitation Ante rejects is recorded as `OnboardingInvitationRejected` with a warning for an administrator; the invitee is not emailed. The `signupDeclined` template is rendered but not sent until Ante publishes a declined sign-up, which the render reports as `STAGE-ONBOARDING-007` (see Cratis/Ante#207)
- **Stage** ([Release v4.211.0](https://github.com/Cratis/Stage/releases/tag/v4.211.0)): The `Ante:Onboarding` configuration for the application's Ante is rendered as `.runtime/ante.onboarding.json`
- **Stage** ([Release v4.211.0](https://github.com/Cratis/Stage/releases/tag/v4.211.0)): The sandbox option `Stage:Sandbox:ForwardedIdentity` trusts the identity AuthProxy forwards instead of playing a persona, and the sandbox reads the Chronicle connection string from `CRATIS_CHRONICLE_CONNECTION_STRING_FILE`
- **Stage** ([Release v4.211.0](https://github.com/Cratis/Stage/releases/tag/v4.211.0)): Documentation: [Onboarding rendering](https://github.com/Cratis/Stage/blob/main/Documentation/reference/onboarding-rendering.md)
- **Showrunner** ([Release v1.12.0](https://github.com/Cratis/Showrunner/releases/tag/v1.12.0)): `Cratis.Showrunner.Notes.Contracts`: public events for feedback given on the current context, chosen slices, a screen, a component or a suggested change to a component's property, and for the answers sent back (acknowledged, addressed in a version, declined). See [Notes](https://github.com/Cratis/Showrunner/blob/main/Documentation/Notes/index.md). (#69)
- **Showrunner** ([Release v1.12.0](https://github.com/Cratis/Showrunner/releases/tag/v1.12.0)): `Cratis.Showrunner.Notes`: commands for an application's signed-in users to give, suggest and withdraw notes, the live `MyNotes` list with each note's status, and publishing of notes to the people building the application; `NotesOptions.BindFrom` reads the options from configuration. (#69)
- **Showrunner** ([Release v1.12.0](https://github.com/Cratis/Showrunner/releases/tag/v1.12.0)): `Cratis.Showrunner.Notes.Collecting`: the receiving side that records an application's notes in the right tenant and answers them. (#69)
- **Showrunner** ([Release v1.12.0](https://github.com/Cratis/Showrunner/releases/tag/v1.12.0)): Notes can travel over HTTP between an application and a receiver on a different Chronicle kernel, authenticated by a token per publication, with `Notes__Transport=Http`. See [Transports](https://github.com/Cratis/Showrunner/blob/main/Documentation/Notes/transports.md). (#69)
- **Showrunner** ([Release v1.12.0](https://github.com/Cratis/Showrunner/releases/tag/v1.12.0)): `@cratis/showrunner.notes` and `@cratis/showrunner.notes.react`: the feedback button with its drop-down (this context, specific slices, this screen, point at a component to describe it or suggest a property change, my feedback), the same button in slice-owned dialogs, and the feedback dialogs. (part of #70)
- **Showrunner** ([Release v1.12.0](https://github.com/Cratis/Showrunner/releases/tag/v1.12.0)): Stage Manager runs a published Stage application from a `Performance` with `spec.application.published`: the exported package from a ConfigMap, storage from a Secret, sign-in through AuthProxy, Notes over HTTP, rollouts that roll back on failure with a version history, and CPU and memory usage in the status. See [Published Stage applications](https://github.com/Cratis/Showrunner/blob/main/Documentation/StageManager/published-stage-applications.md). (#71)
- **Showrunner** ([Release v1.12.0](https://github.com/Cratis/Showrunner/releases/tag/v1.12.0)): A `Performance` can run permanently or until a given time (`spec.lifetime`); at that time its public route is removed, it is scaled to zero and its phase becomes `Expired`. (#71)
- **Prompter** ([Release v0.10.0](https://github.com/Cratis/Prompter/releases/tag/v0.10.0)): A `prompter_state_index_full_ceiling_usd` metric that reports the full-run ceiling recorded for today's index spend (#86)
- **Components** ([Release v4.39.0](https://github.com/Cratis/Components/releases/tag/v4.39.0)): Dialogs have a header-actions region before the close button: pass `headerActions` to `Dialog`, `CommandDialog` or `StepperCommandDialog`, or register `dialogHeaderActions` once on `CratisComponentsProvider` to show an action in every dialog, with `hideGlobalHeaderActions` to opt a dialog out. The registered action receives the dialog's id, title, whether it is a command dialog and, when given, its slice location. (#477)
- **Components** ([Release v4.39.0](https://github.com/Cratis/Components/releases/tag/v4.39.0)): Components render `data-cratis-component` (and `data-cratis-component-id` when they have an id or name) on their root, so an element on screen can be traced to the component that drew it. (part of #478)
- **Components** ([Release v4.39.0](https://github.com/Cratis/Components/releases/tag/v4.39.0)): `@cratis/components/ComponentPicker` adds `useComponentPicker` and `ComponentPicker` to pick a component with the mouse or keyboard (also inside open dialogs), `ComponentHighlight` to highlight one, and `PresentationPropertyEditor` to propose changes to a component's presentation properties with an optional live preview that reverts cleanly. (part of #478)
- **Components** ([Release v4.39.0](https://github.com/Cratis/Components/releases/tag/v4.39.0)): Buttons, icon buttons, text inputs, text areas, dialogs, pages and data table columns describe their presentation properties, so the property editor knows what can be changed. (part of #478)
- **Prompter** ([Release v0.9.0](https://github.com/Cratis/Prompter/releases/tag/v0.9.0)): Indexing of https://cratis.no, https://cratis.studio and https://cratis.direct, including their `llms.txt`. Each site can be switched off (#87)
- **Prompter** ([Release v0.9.0](https://github.com/Cratis/Prompter/releases/tag/v0.9.0)): Indexing of the README of every public, non-archived Cratis repository and of the Cratis organization profile. This source can also be switched off (#87)
- **Prompter** ([Release v0.9.0](https://github.com/Cratis/Prompter/releases/tag/v0.9.0)): Answers may combine several retrieved passages. Inferred statements are marked "(inferred from [n], [m])" and cite every passage they rely on. When nothing relevant is found, the bot still refuses (#87)
- **Prompter** ([Release v0.9.0](https://github.com/Cratis/Prompter/releases/tag/v0.9.0)): Product awareness for Specifications, Stage, Screenplay, Prologue, Studio, Direct and Assurance in answering, scoping and triage (#87)
- **Screenplay** ([Release v4.259.0](https://github.com/Cratis/Screenplay/releases/tag/v4.259.0)): `onboarding` block: self-signup that creates or joins a tenant, invitations naming who may invite and which personas they may grant, legal terms as files, an optional offering, and email templates and images as files (#1116)
- **Screenplay** ([Release v4.259.0](https://github.com/Cratis/Screenplay/releases/tag/v4.259.0)): Diagnostics `PLAY0826` to `PLAY0832` for invalid or duplicate onboarding declarations, onboarding without `authentication`, unknown personas and unknown email kinds
- **Screenplay** ([Release v4.259.0](https://github.com/Cratis/Screenplay/releases/tag/v4.259.0)): Environment key convention: each provider binds to `authentication.providers.<Identity>.*` keys and onboarding mail settings to `onboarding.email.*`, with secrets marked; values never live in the model (#1115)
- **Screenplay** ([Release v4.259.0](https://github.com/Cratis/Screenplay/releases/tag/v4.259.0)): `EnvironmentRequirements` lists the keys a model needs from a syntax or semantic compilation, and `screenplay environment` prints them as text or JSON
- **Screenplay** ([Release v4.259.0](https://github.com/Cratis/Screenplay/releases/tag/v4.259.0)): Documentation: [Onboarding](https://github.com/Cratis/Screenplay/blob/main/Documentation/screenplay/onboarding.md) and [Environments](https://github.com/Cratis/Screenplay/blob/main/Documentation/screenplay/environments.md)
- **cli** ([Release v3.115.0](https://github.com/Cratis/cli/releases/tag/v3.115.0)): `cratis prologue start` asks whether the system is made of several services. If it is, the wizard collects each named service with its own SQL Server and PostgreSQL databases, API base path and address, and OpenTelemetry `service.name` values, and writes them under `prologue.services` with one reverse-proxy route and cluster per service. See [Prologue](https://github.com/Cratis/cli/blob/main/Documentation/reference/prologue.md#a-system-made-of-several-services).
- **cli** ([Release v3.115.0](https://github.com/Cratis/cli/releases/tag/v3.115.0)): `cratis prologue interpret --service <NAME>` interprets only the captures of one named service. Without it every captured service is interpreted, each into its own module.
- **cli** ([Release v3.115.0](https://github.com/Cratis/cli/releases/tag/v3.115.0)): `cratis prologue interpret` reports the interpreted services in its summary panel and as a `services` array in JSON output.
- **Prompter** ([Release v0.8.0](https://github.com/Cratis/Prompter/releases/tag/v0.8.0)): Each page's description is indexed as a short summary passage, so overview questions find the page that lists all products (#85)
- **Prompter** ([Release v0.8.0](https://github.com/Cratis/Prompter/releases/tag/v0.8.0)): A same-day catch-up run for scheduled reindexing that runs only when no earlier scheduled run happened that day (#84)
- **Prologue** ([Release v2.1.0](https://github.com/Cratis/Prologue/releases/tag/v2.1.0)): `prologue.services` in `cratis-prologue.json` names the services of a multi-service system. Each named service has its own `sqlServer` and `postgres` databases, claims the reverse-proxy `clusters` and OpenTelemetry `telemetryServiceNames` whose traffic belongs to it (both default to the service name), and can be set from the environment, for example `Prologue__Services__billing__Postgres__0__ConnectionString`. See [Configuration](https://github.com/Cratis/Prologue/blob/main/Documentation/reference/configuration.md#prologueservices).
- **Prologue** ([Release v2.1.0](https://github.com/Cratis/Prologue/releases/tag/v2.1.0)): Captures and observations carry a `service` property (`ServiceName` in `Cratis.Prologue.Contracts`, `ServiceOptions` in `Cratis.Prologue.Configuration`). It is empty for the default service, and capture files and Receiver-stored captures written before this release read back as the default service.
- **Prologue** ([Release v2.1.0](https://github.com/Cratis/Prologue/releases/tag/v2.1.0)): JSON output writes a named service's captures to `prologue-{service}-{kind}-{index}.jsonl`; the default service keeps its existing file names.
- **Prologue** ([Release v2.1.0](https://github.com/Cratis/Prologue/releases/tag/v2.1.0)): The Interpreter turns each named service into its own module, analyzed against that service's own database schema.
- **Prologue** ([Release v2.1.0](https://github.com/Cratis/Prologue/releases/tag/v2.1.0)): `--captured-service <name>` (or `PROLOGUE_CAPTURED_SERVICE`) makes a batch Interpreter run model a single service.
- **Prologue** ([Release v2.1.0](https://github.com/Cratis/Prologue/releases/tag/v2.1.0)): `OfService` and `Services` extension methods on capture sets in `Cratis.Prologue.Contracts`.
- **Arc** ([Release v22.155.0](https://github.com/Cratis/Arc/releases/tag/v22.155.0)): `useApplicationContext()` returns a snapshot of the focused slice location, every active slice, the current screen, the open dialogs and host-contributed values; `ApplicationContext` exposes the same as an external store (`subscribe`/`getSnapshot`) for code outside React rendering. See [Application context](https://github.com/Cratis/Arc/blob/main/Documentation/frontend/react/application-context.md). (#3604)
- **Arc** ([Release v22.155.0](https://github.com/Cratis/Arc/releases/tag/v22.155.0)): `useContributeApplicationContext()` and `<ApplicationContextContributor>` let a host or router supply the current screen and its own values. (#3604)
- **Arc** ([Release v22.155.0](https://github.com/Cratis/Arc/releases/tag/v22.155.0)): `<Arc sliceMarkers>` renders `data-cratis-module`, `data-cratis-feature` and `data-cratis-slice` on slice boundaries so a DOM element can be traced to its slice; nothing extra is rendered when it is off. (#3604)
- **Arc** ([Release v22.155.0](https://github.com/Cratis/Arc/releases/tag/v22.155.0)): Dialogs opened with `useDialog` keep the slice scope they were opened from, can declare their own with `useDialog(Component, { slice })`, are tracked as the focused location while open, and expose their location through `useDialogSliceLocation()`. (#3605)
- **Showrunner** ([Release v1.11.0](https://github.com/Cratis/Showrunner/releases/tag/v1.11.0)): Stage Manager operator with custom resources in `showrunner.cratis.io/v1alpha1` generated from C# types: `Performance`, plus `Production`, `Understudy`, `Restore`, `Rehearsal`, `BackstagePass` and `ControlRoom` as schema (part of #14)
- **Showrunner** ([Release v1.11.0](https://github.com/Cratis/Showrunner/releases/tag/v1.11.0)): `Performance` runs one application per environment: the application, AuthProxy when it has authentication, and exactly one Ante when it has onboarding, reachable only through AuthProxy's ingress (#68)
- **Showrunner** ([Release v1.11.0](https://github.com/Cratis/Showrunner/releases/tag/v1.11.0)): Environment values and secrets are resolved from a Cratis environment (passphrase from a Kubernetes Secret, Azure Key Vault or HashiCorp Vault) and reach containers only as mounted Secret files
- **Showrunner** ([Release v1.11.0](https://github.com/Cratis/Showrunner/releases/tag/v1.11.0)): A `Performance` with missing environment keys is reported as `Blocked` with the keys listed, and nothing is rolled out
- **Showrunner** ([Release v1.11.0](https://github.com/Cratis/Showrunner/releases/tag/v1.11.0)): Generated signing keys for Ante invitations and AuthProxy attestation, rotated on request while previous public keys stay pinned
- **Showrunner** ([Release v1.11.0](https://github.com/Cratis/Showrunner/releases/tag/v1.11.0)): `cratis/showrunner-operator` Helm chart and container image, versioned together
- **Showrunner** ([Release v1.11.0](https://github.com/Cratis/Showrunner/releases/tag/v1.11.0)): Documentation: [Stage Manager](https://github.com/Cratis/Showrunner/blob/main/Documentation/StageManager/index.md)
- **AI** ([Release v7.126.0](https://github.com/Cratis/AI/releases/tag/v7.126.0)): New universal rule: building and running specs must be as fast as possible locally and in CI, specs are safe to run in parallel, setup cost is fixed in the framework rather than paid per spec, and analyzers and generators stay cheap (#968)
- **AI** ([Release v7.126.0](https://github.com/Cratis/AI/releases/tag/v7.126.0)): A per-artifact table in the scenario specification guidance: plain calls for decisions (`Handle`, `Provide`, validators, reducer transitions, reactor logic), scenarios for wiring and engine behavior, with what each scenario must cover (#968)
- **AuthProxy** ([Release v2.40.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.40.0)): `Cratis:AuthProxy:Application` configuration contract: a provider list (`EntraId`, `GitHub`, `Google`, `Apple`, `OpenId`, each with an identity) and environment values keyed `authentication.providers.<Identity>.<key>`, translated onto the existing `Cratis:AuthProxy:*` settings (#233)
- **AuthProxy** ([Release v2.40.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.40.0)): Secrets read from a configured secrets directory (one file per key) or `<key>_FILE` indirection, never from command-line arguments and never logged
- **AuthProxy** ([Release v2.40.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.40.0)): Onboarding wiring: with `Onboarding` on, the contract configures invitation stage and exchange URLs, the lobby frontend and attestation for the application's own Ante
- **AuthProxy** ([Release v2.40.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.40.0)): Development setting that allows HTTP on loopback for local runs
- **AuthProxy** ([Release v2.40.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.40.0)): A missing or invalid contract value stops startup with exit code 78 and a message naming the key, provider and environment, never the value
- **AuthProxy** ([Release v2.40.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.40.0)): Shared contract fixtures (`Contract/application-contract.fixture.json` and `.env`) and documentation: [Application configuration contract](https://github.com/Cratis/AuthProxy/blob/main/Documentation/configuration/application-contract.md)
- **cli** ([Release v3.114.0](https://github.com/Cratis/cli/releases/tag/v3.114.0)): Environments in `.cratis/environments/<name>.yaml` with any name, `development` by default, and a per-user selection that is never committed; select with `--environment`, `CRATIS_ENVIRONMENT` or `cratis env select` (#514)
- **cli** ([Release v3.114.0](https://github.com/Cratis/cli/releases/tag/v3.114.0)): `cratis env init`, `select`, `ls` and `rm`, and `cratis config set`, `get`, `rm` and `list` with `--output json`
- **cli** ([Release v3.114.0](https://github.com/Cratis/cli/releases/tag/v3.114.0)): `cratis config --missing <keys>` lists the keys an environment still lacks
- **cli** ([Release v3.114.0](https://github.com/Cratis/cli/releases/tag/v3.114.0)): Secrets providers per environment: values encrypted with AES-256-GCM from a passphrase (`CRATIS_PASSPHRASE`, `CRATIS_PASSPHRASE_FILE` or a prompt), Azure Key Vault, or HashiCorp Vault (#515)
- **cli** ([Release v3.114.0](https://github.com/Cratis/cli/releases/tag/v3.114.0)): `cratis config set <key> --secret` reads the value from stdin or a hidden prompt, and secrets print as `[secret]` unless `--show-secret` is passed
- **cli** ([Release v3.114.0](https://github.com/Cratis/cli/releases/tag/v3.114.0)): `cratis env change-secrets-provider` and `cratis env change-passphrase` move or re-encrypt every secret
- **cli** ([Release v3.114.0](https://github.com/Cratis/cli/releases/tag/v3.114.0)): `Cratis.Environments` package for reading environments and resolving secrets from other tools
- **cli** ([Release v3.114.0](https://github.com/Cratis/cli/releases/tag/v3.114.0)): Documentation: [Environments](https://github.com/Cratis/cli/blob/main/Documentation/environments/index.md) and [Secrets](https://github.com/Cratis/cli/blob/main/Documentation/environments/secrets.md)
- **Prompter** ([Release v0.7.0](https://github.com/Cratis/Prompter/releases/tag/v0.7.0)): Prompter can answer help-forum posts that have had no reply from anyone but their author after a delay; it is off until forum channels and a delay are configured, answers each post at most once, and stores no question text (#80)
- **Prompter** ([Release v0.7.0](https://github.com/Cratis/Prompter/releases/tag/v0.7.0)): Maintainers can run the answer-quality evaluation against the production corpus on demand from a dispatch-only workflow with a cost ceiling; the report is attached to the workflow run (#79)
- **Showrunner** ([Release v1.10.0](https://github.com/Cratis/Showrunner/releases/tag/v1.10.0)): `Cratis.Showrunner.Herald`: `AddHerald` registers Herald in an Arc and Chronicle host; `IEmails.Send` renders an email of a given kind from the templates folder and queues it, refusing to send when a value is unknown or a required value is missing (#67)
- **Showrunner** ([Release v1.10.0](https://github.com/Cratis/Showrunner/releases/tag/v1.10.0)): Templates per email kind and language with subject and preview text, Handlebars-style `{{values}}` that are always HTML-encoded, `#if` and a `date` helper that formats in the email's language, and a generated plain-text alternative
- **Showrunner** ([Release v1.10.0](https://github.com/Cratis/Showrunner/releases/tag/v1.10.0)): Images from an images folder embedded in the email; CSS from the template is inlined for email clients
- **Showrunner** ([Release v1.10.0](https://github.com/Cratis/Showrunner/releases/tag/v1.10.0)): SMTP delivery (STARTTLS, TLS or none for local relays) with retries and backoff when the server is unavailable, and a folder transport that writes `.eml` files for local development
- **Showrunner** ([Release v1.10.0](https://github.com/Cratis/Showrunner/releases/tag/v1.10.0)): `Cratis.Showrunner.Herald.Contracts`: `EmailSent`, `EmailFailed` and `EmailBounced`, recorded against what the email was about without the recipient, the values or any secret
- **Showrunner** ([Release v1.10.0](https://github.com/Cratis/Showrunner/releases/tag/v1.10.0)): Documentation: [Herald](https://github.com/Cratis/Showrunner/blob/main/Documentation/Herald/index.md)
- **Ante** ([Release v1.5.0](https://github.com/Cratis/Ante/releases/tag/v1.5.0)): `Ante:Onboarding` configuration contract: host store, public and application URLs, sign-up creating or joining a tenant, allowed invitation types, grantable personas, locales, legal terms and mounted secrets, mapped onto the existing `Ante:*` settings when `Ante:Onboarding:Enabled` is `true` (#205)
- **Ante** ([Release v1.5.0](https://github.com/Cratis/Ante/releases/tag/v1.5.0)): Legal terms read from files (`Ante:Legal:Source=Files`), versioned by content so editing a mounted file publishes a new version without a restart
- **Ante** ([Release v1.5.0](https://github.com/Cratis/Ante/releases/tag/v1.5.0)): Secrets read from a mounted folder with one file per setting, so signing keys never pass through the command line
- **Ante** ([Release v1.5.0](https://github.com/Cratis/Ante/releases/tag/v1.5.0)): Development mode for `cratis run`: a development signing key is generated and kept outside source control, and Ante refuses development mode for production-like environments or public URLs
- **Ante** ([Release v1.5.0](https://github.com/Cratis/Ante/releases/tag/v1.5.0)): `InvitationRejected` generation 4 with the reasons `PersonaNotGrantable` and `InvitationTypeNotAllowed`, published only when the onboarding contract restricts personas or invitation types
- **Stage** ([Release v4.210.0](https://github.com/Cratis/Stage/releases/tag/v4.210.0)): Stage renders `require anonymous` policies as `[AllowAnonymous]` and reports explicitly anonymous commands and queries through information diagnostic STAGE-ESM-060 (part of #635)
- **Stage** ([Release v4.210.0](https://github.com/Cratis/Stage/releases/tag/v4.210.0)): `cratis run` executes inline and `file` reducer bodies, so their read models populate at runtime (part of #891)
- **Stage** ([Release v4.210.0](https://github.com/Cratis/Stage/releases/tag/v4.210.0)): Rendering can map inline authored bodies back to their `.play` file and line through the opt-in `CratisRendering.WithSourceLineMapping` (part of #849)
- **Stage** ([Release v4.210.0](https://github.com/Cratis/Stage/releases/tag/v4.210.0)): Observable collection queries can have a performer body that transforms the read-model stream and serves its result as a live query (#834)
- **Arc** ([Release v22.154.0](https://github.com/Cratis/Arc/releases/tag/v22.154.0)): Opt-in signed forwarded-identity verification for both Arc hosts, with freshness and replay protection; it requires a compatible signer and separately provisioned integration keys, and is disabled by default. (part of #2837)
- **Arc** ([Release v22.154.0](https://github.com/Cratis/Arc/releases/tag/v22.154.0)): Register `ITenantMembership` to verify that the caller belongs to a request-selected tenant; denied commands, queries and observable connections return 403 Forbidden.
- **Arc** ([Release v22.154.0](https://github.com/Cratis/Arc/releases/tag/v22.154.0)): Startup diagnostics and documentation explain request-selected tenancy and explicitly configured trusted-ingress membership enforcement.
- **Arc** ([Release v22.154.0](https://github.com/Cratis/Arc/releases/tag/v22.154.0)): `CommandScenario` gives the state you seed to protected read-model parameters of a command's `Handle()`, so specs give state and assert the outcome without configuring decision reads. (#3586)
- **Arc** ([Release v22.154.0](https://github.com/Cratis/Arc/releases/tag/v22.154.0)): Analyzer ARCCHR0039 (Info) suggests taking a plain read-model parameter instead of `IDecisionReads` in a command's `Handle()`. (#3586)
- **Chronicle** ([Release v19.115.0](https://github.com/Cratis/Chronicle/releases/tag/v19.115.0)): Use `Occurred.WeekYear`, the ISO 8601 week-numbering year, with `Occurred.Week` in event-context keys and mappings to avoid collisions around New Year. (#4505)
- **Chronicle** ([Release v19.115.0](https://github.com/Cratis/Chronicle/releases/tag/v19.115.0)): Read event sequences in bounded keyset pages with `IEventSequence.GetPage` and `GetLatest`. Pages support forward or backward order, inclusive bounds, event-source, stream, event-type and tag filters, at most 1,000 events, and a continuation position. The kernel page query honors read protection and is available in `Cratis.Chronicle.Testing`. (#3772)
- **Chronicle** ([Release v19.115.0](https://github.com/Cratis/Chronicle/releases/tag/v19.115.0)): Register artifacts as a deployment step with `IEventStore.RegisterDefinitions`, without starting reactors, reducers or seeding. Registration covers event types, event sources, read models, constraints and projections, and returns a deterministic `Registration.Fingerprint`. The kernel records the deployment generation and fingerprint per event store, refuses older deployment generations, and exposes the current deployment through `GetEventStoreDeployment`. (#5111)
- **Chronicle** ([Release v19.115.0](https://github.com/Cratis/Chronicle/releases/tag/v19.115.0)): Configure .NET clients for functions, command-line tools and jobs with `ChronicleOptions.ForShortLivedProcess(...)` or `.UseShortLivedProcess(...)`. These open no keep-alive stream or watchdog and register no client-hosted observers, while retaining append and read support. `RegistrationMode` selects inline registration, event-types-only registration or definitions registered at deployment; inline remains the default. (#5113)
- **Chronicle** ([Release v19.115.0](https://github.com/Cratis/Chronicle/releases/tag/v19.115.0)): Compliance release supports `ReleaseRequest.Strict`, which fails closed when a protected value cannot be decrypted and lists the property paths in `ReleaseResponse.FailedProperties`. Erased subjects still release to empty values. (#4480)
- **Chronicle** ([Release v19.115.0](https://github.com/Cratis/Chronicle/releases/tag/v19.115.0)): Grant and revoke administrator privilege through `GrantAdministrator` and `RevokeAdministrator`, and list administrators with `AllAdministrators`. These operations require a current administrator; user-management permissions for ordinary System-store operations remain opt-in. (part of #5234)
- **Chronicle** ([Release v19.115.0](https://github.com/Cratis/Chronicle/releases/tag/v19.115.0)): The Workbench first-run screen has a setup token field, used for the token that the server prints in its log during initial administrator setup.
- **Chronicle** ([Release v19.115.0](https://github.com/Cratis/Chronicle/releases/tag/v19.115.0)): `Clustering:GatewayEnabled` lets you turn off the Orleans client gateway port. The hosting docs show how to keep the cluster ports private with Docker and a Kubernetes NetworkPolicy example.
- **Chronicle** ([Release v19.115.0](https://github.com/Cratis/Chronicle/releases/tag/v19.115.0)): The .NET client logs a startup warning when it skips server certificate validation for a host that is not localhost. The docs explain how to turn validation on.
- **Showrunner** ([Release v1.9.0](https://github.com/Cratis/Showrunner/releases/tag/v1.9.0)): `@cratis/showrunner.marquee.react` with `<Marquee />`, mounted once: banners in a polite live region with the importance icon and color, and dialogs one at a time, the most important first. A dialog shown once is acknowledged through the command when it is closed, so it is gone on every device; a dialog shown every session is closed for that session only. (#39)
- **Showrunner** ([Release v1.9.0](https://github.com/Cratis/Showrunner/releases/tag/v1.9.0)): Safe Markdown for announcement bodies: raw HTML is dropped, images are left out, links open in a new tab with `noopener noreferrer`, and only `https`, `mailto` and `tel` links are links. (part of #39)
- **Showrunner** ([Release v1.9.0](https://github.com/Cratis/Showrunner/releases/tag/v1.9.0)): The window of each announcement is applied against the clock every 60 seconds, with the start inclusive and the end exclusive, so a scheduled announcement appears and ends on time without a round trip. (part of #39)
- **Showrunner** ([Release v1.9.0](https://github.com/Cratis/Showrunner/releases/tag/v1.9.0)): `banner`, `dialog` and `markdown` slots to replace what is drawn, `labels` to localize every text, and `useAnnouncements` to draw a surface of your own. (part of #39)
- **Showrunner** ([Release v1.9.0](https://github.com/Cratis/Showrunner/releases/tag/v1.9.0)): Storybook stories for the banner and the dialog, one for every importance and display. (part of #39)
- **Showrunner** ([Release v1.9.0](https://github.com/Cratis/Showrunner/releases/tag/v1.9.0)): Marquee documentation: how it works, a tutorial for adding announcements to a product, how to author announcements without Direct, how to replace the banner or the dialog, and a reference of the contract events and their generations. The code examples build with the package. (#41)
- **Chronicle** ([Release v19.114.4](https://github.com/Cratis/Chronicle/releases/tag/v19.114.4)): Each projection registration logs one Information line with how long detecting changes, registering with the engine, subscribing and retiring took, and how many subscriptions were left to the background repair, so a slow registration can be told apart from a queued one.
- **AI** ([Release v7.125.0](https://github.com/Cratis/AI/releases/tag/v7.125.0)): Decision records 150 (specifications never see runtime concerns; the idiomatic decision shape) and 151 (fast feedback is a product requirement).
- **Prompter** ([Release v0.6.0](https://github.com/Cratis/Prompter/releases/tag/v0.6.0)): **Apps → Ask Prompter** on any Discord message answers that message; inside a thread or forum post it also reads a bounded window of the recent conversation, which is never stored (#72)
- **Prompter** ([Release v0.6.0](https://github.com/Cratis/Prompter/releases/tag/v0.6.0)): Answers show up to three suggested follow-up questions as buttons, grounded in the pages the answer used (#74)
- **Prompter** ([Release v0.6.0](https://github.com/Cratis/Prompter/releases/tag/v0.6.0)): When a question could be about several Cratis products, Prompter asks which one is meant and answers from that product's documentation after you choose (#75)
- **Prompter** ([Release v0.6.0](https://github.com/Cratis/Prompter/releases/tag/v0.6.0)): "Which should I use?" and "is there a tool for…?" questions get a short, cited recommendation of the right Cratis product or tool (#76)
- **Prompter** ([Release v0.6.0](https://github.com/Cratis/Prompter/releases/tag/v0.6.0)): Release notes of Chronicle, Arc, Fundamentals, Components and the CLI are indexed and cited by their GitHub URL, so "what changed" questions can be answered (#68)
- **Prompter** ([Release v0.6.0](https://github.com/Cratis/Prompter/releases/tag/v0.6.0)): A curated set of Cratis/Samples files is indexed and cited by GitHub URL, so "how do I" answers can point to real code (#69)
- **Prompter** ([Release v0.6.0](https://github.com/Cratis/Prompter/releases/tag/v0.6.0)): A protected `eval` command runs a curated question set against the corpus and reports retrieval, refusal and cost scores; it only runs with `--paid` and a cost ceiling (#77)
- **Showrunner** ([Release v1.8.0](https://github.com/Cratis/Showrunner/releases/tag/v1.8.0)): `@cratis/showrunner.boxoffice.react`: `BoxOfficeProvider`, `useEntitlements`, `useModuleFilter`, `RequiresModule`, `TrialBanner`, `SuspensionBanner`, `NoLicense`, `PortalButton`, `SeatsPage`, `UsagePage` and `PlanPage`, with replaceable texts and a stylesheet built on the Cratis Components tokens. (#51)
- **Showrunner** ([Release v1.8.0](https://github.com/Cratis/Showrunner/releases/tag/v1.8.0)): `CurrentEntitlements` query returning what the signed-in user's tenant may do in one answer: read-only reason, trial, seats and each module's access.
- **Showrunner** ([Release v1.8.0](https://github.com/Cratis/Showrunner/releases/tag/v1.8.0)): `CurrentUsage` query, authorized by `BoxOffice.ManageCompute`, returning where the tenant stands with each meter in its allowance period.
- **Showrunner** ([Release v1.8.0](https://github.com/Cratis/Showrunner/releases/tag/v1.8.0)): `LinkToPortal` query and the `CustomerPortalUrl`, `CustomerPortalSigningKey` and `CustomerPortalLinkLifetime` options: a product can send tenants to the operator's customer portal with a signed, short-lived link. The host fails to start when only one of the address and the key is set.
- **Showrunner** ([Release v1.8.0](https://github.com/Cratis/Showrunner/releases/tag/v1.8.0)): Documentation for the React components and the customer portal, and the new queries and options on the existing Box Office pages. (#53)
- **Showrunner** ([Release v1.7.0](https://github.com/Cratis/Showrunner/releases/tag/v1.7.0)): Module gating: commands and queries in a namespace a module owns are refused with `ModuleNotEntitled` when the tenant does not have the module, a gated reactor asks `IModuleGate.Admits(this)` and skips the event, and an included module is always admitted. A module trial or grant stops admitting the day after its last day without any event. `BoxOfficeOptions.EnforceModules` turns enforcement off; it is on by default. (#45)
- **Showrunner** ([Release v1.7.0](https://github.com/Cratis/Showrunner/releases/tag/v1.7.0)): Compute admission: `IComputeAdmission.Admit(meter)` decides before work starts whether the tenant may run it, returning admitted, `AtConcurrencyLimit`, `AllowanceExhausted`, `BudgetReached`, or parked until the next period starts, and `End` frees the concurrent slot. The concurrency limit is decided from the tenant's start and stop facts under a concurrency scope, so two starts for the last slot admit one. (#49)
- **Showrunner** ([Release v1.7.0](https://github.com/Cratis/Showrunner/releases/tag/v1.7.0)): The first refusal for an allowance in a period records that it ran out and reports `AllowanceExhausted` to the operator once; later refusals in the period are logged and counted, and record nothing. (#49)
- **Showrunner** ([Release v1.7.0](https://github.com/Cratis/Showrunner/releases/tag/v1.7.0)): `SetComputeBudget` and `SetComputeConcurrencyLimit` let a product's maintainers set a budget below the operator's allowance and a concurrency limit per meter, and the `CurrentLimits` query returns them, with generated proxies in `@cratis/showrunner.boxoffice`. (#49)
- **Showrunner** ([Release v1.7.0](https://github.com/Cratis/Showrunner/releases/tag/v1.7.0)): `BoxOfficeOptions.MaximumWorkDuration` (12 hours by default) bounds how long admitted work that was never ended holds its concurrent slot.
- **Showrunner** ([Release v1.7.0](https://github.com/Cratis/Showrunner/releases/tag/v1.7.0)): Documentation for [module gating](https://github.com/Cratis/Showrunner/blob/main/Documentation/BoxOffice/gating.md) and [compute admission](https://github.com/Cratis/Showrunner/blob/main/Documentation/BoxOffice/compute-admission.md).
- **Showrunner** ([Release v1.6.0](https://github.com/Cratis/Showrunner/releases/tag/v1.6.0)): `Cratis.Showrunner.Marquee.Authoring`: commands to author, amend, retarget and withdraw an announcement, an observable per-product query for the authoring screen, and one `MarqueeOutbox` reactor that publishes all four contract events. Authorization is the host's: register a policy named `MarqueeAuthoring.Policy`. A withdrawal that is processed together with, or ahead of, its publication never leaves the announcement standing. (#36)
- **Showrunner** ([Release v1.6.0](https://github.com/Cratis/Showrunner/releases/tag/v1.6.0)): `Cratis.Showrunner.Marquee`: `AddMarquee` subscribes the product to its authoring store's outbox, records announcements once in the product's own namespace, drops what arrives after a retraction, and answers the observable query `AnnouncementsForMe` per tenant. Module and plan audiences are answered by the host's `IAudienceEntitlements`, and never match without one. A tenant created after publication still sees an active announcement. (#37)
- **Showrunner** ([Release v1.6.0](https://github.com/Cratis/Showrunner/releases/tag/v1.6.0)): `AcknowledgeAnnouncement`: records that a person saw a dialog shown once, in the tenant's namespace with the person as compliance subject, so it is shown once per person on every device. Acknowledging twice, a dialog shown every session and a banner record nothing. (#38)
- **Showrunner** ([Release v1.6.0](https://github.com/Cratis/Showrunner/releases/tag/v1.6.0)): `@cratis/showrunner.marquee` and `@cratis/showrunner.marquee.authoring`: the generated TypeScript proxies for the receiving and the authoring slices.
- **Showrunner** ([Release v1.6.0](https://github.com/Cratis/Showrunner/releases/tag/v1.6.0)): Documentation for authoring, receiving, acknowledging and the proxy packages: https://github.com/Cratis/Showrunner/blob/main/Documentation/Marquee/index.md
- **Prompter** ([Release v0.5.0](https://github.com/Cratis/Prompter/releases/tag/v0.5.0)): Answer channel questions in a thread, configurable per channel and off by default. (#63)
- **Prompter** ([Release v0.5.0](https://github.com/Cratis/Prompter/releases/tag/v0.5.0)): Add an "Ask a human" button that mentions a configured maintainer role with a short summary of the question, once per conversation. (#64)
- **Prompter** ([Release v0.5.0](https://github.com/Cratis/Prompter/releases/tag/v0.5.0)): Post a weekly docs-gap digest to a configured maintainer channel, with per-product counts of docs gaps, possible missing capabilities, likely bugs and thumbs-down answers. Add "This should be documented" and "Request this" buttons that forward the question to maintainers at the asker's request, without storing it. (#65)
- **Prompter** ([Release v0.5.0](https://github.com/Cratis/Prompter/releases/tag/v0.5.0)): Show when each cited documentation page was indexed, and its product version when the page states one. (#66)
- **Prompter** ([Release v0.5.0](https://github.com/Cratis/Prompter/releases/tag/v0.5.0)): Link up to three related public GitHub issues under an answer when the question names a Cratis product. (part of #49)
- **Prompter** ([Release v0.5.0](https://github.com/Cratis/Prompter/releases/tag/v0.5.0)): Classify each interaction as answered, docs gap, missing capability, likely bug or out of scope, with the product it concerns, storing only those labels.
- **Showrunner** ([Release v1.5.0](https://github.com/Cratis/Showrunner/releases/tag/v1.5.0)): `Cratis.Showrunner.BoxOffice.Offering` package. `AddBoxOfficeOffering` declares a product's modules (requirements, owned namespaces, trial days, availability), meters and seat licensing, rejects a declaration that cannot be sold at startup, and reports `OfferingDeclared` only when the declaration differs from the last one reported (#43)
- **Showrunner** ([Release v1.5.0](https://github.com/Cratis/Showrunner/releases/tag/v1.5.0)): `AddBoxOfficeMetering` and `IMeter`: a meter reads the product's own events into a quantity per tenant, meter and UTC day, kept in buckets beside the event log in MongoDB. Box Office adds no second "session started" event (#48)
- **Showrunner** ([Release v1.5.0](https://github.com/Cratis/Showrunner/releases/tag/v1.5.0)): A UTC day closes 6 hours after midnight and `ComputeDayClosed` is reported once, also across restarts; a session that ends after its day closed produces one `ComputeDayCorrected` with the corrected totals (#48)
- **Showrunner** ([Release v1.5.0](https://github.com/Cratis/Showrunner/releases/tag/v1.5.0)): Counters for metering buckets, closed days and corrections (#48)
- **Showrunner** ([Release v1.5.0](https://github.com/Cratis/Showrunner/releases/tag/v1.5.0)): Documentation for the offering declaration and for compute metering, and integration specifications for the MongoDB metering store (#48)
- **Specifications** ([Release v5.2.0](https://github.com/Cratis/Specifications/releases/tag/v5.2.0)): New warning CRSPEC0012 reports facts that call members which usually change shared state, judged by name: `Execute`/`Handle` (and their `Async` forms), destructive reads such as `Take`, `Dequeue`, `Pop` and `MoveNext`, and changes such as `Push`, `Enqueue`, `TryAdd`, `Reset`, or `Add`/`Remove`/`Clear` on a collection reached through a field. Move the call into `Because`, or mark the class `[PerFactSpecificationLifecycle]`. (#97)
- **Showrunner** ([Release v1.4.0](https://github.com/Cratis/Showrunner/releases/tag/v1.4.0)): `Cratis.Showrunner.BoxOffice`, added with `AddBoxOffice`: it subscribes the application to each operator's outbox, records the operator's decisions about a tenant in the tenant's own namespace, and answers what the tenant may use through `IEntitlements`: trial, seats, modules, previews and allowances. A trial, module or seat that has an end stops counting the day after it, without an event. (#44)
- **Showrunner** ([Release v1.4.0](https://github.com/Cratis/Showrunner/releases/tag/v1.4.0)): A command filter that refuses every command from a suspended tenant, or one whose trial closed without seats, with `TenantSuspended` or `TrialClosed`. Commands marked `AllowedWhileSuspended` still run, and `TenantReinstated` lifts the refusal immediately. The `CurrentStanding` query tells the frontend why. (#47)
- **Showrunner** ([Release v1.4.0](https://github.com/Cratis/Showrunner/releases/tag/v1.4.0)): `AssignSeat` and `ReleaseSeat`, guarded so two assignments cannot overfill the pool, with `SeatTaken` and `SeatReleased` reported to the operator. Commands marked `RequiresSeat` are refused with `SeatRequired` for a user without a licensed seat, and a pool that shrinks keeps the oldest holders licensed. The product defines the `BoxOffice.ManageSeats` policy for who may assign seats. (#46)
- **Showrunner** ([Release v1.4.0](https://github.com/Cratis/Showrunner/releases/tag/v1.4.0)): `@cratis/showrunner.boxoffice`, the generated TypeScript proxies for the product's frontend.
- **Showrunner** ([Release v1.4.0](https://github.com/Cratis/Showrunner/releases/tag/v1.4.0)): Documentation for [Receiving and entitlements](https://github.com/Cratis/Showrunner/blob/main/Documentation/BoxOffice/entitlements.md), [Suspension](https://github.com/Cratis/Showrunner/blob/main/Documentation/BoxOffice/suspension.md) and [Seat licensing](https://github.com/Cratis/Showrunner/blob/main/Documentation/BoxOffice/seats.md).
- **Showrunner** ([Release v1.3.0](https://github.com/Cratis/Showrunner/releases/tag/v1.3.0)): `Cratis.Showrunner.BoxOffice.Catalog` NuGet package with three kinds of offer: seat plans (seats or unlimited, included modules and allowances, sales contact), modules (flat per organization or per seat, trial length, paid or preview) and compute packs (meter, quantity per period, stackable). (#50)
- **Showrunner** ([Release v1.3.0](https://github.com/Cratis/Showrunner/releases/tag/v1.3.0)): Commands `DefineSeatPlan`, `DefineModuleOffer`, `DefineComputePack`, `PriceOffer`, `IncludeModuleInOffer`, `IncludeAllowanceInOffer` and `RetireOffer`, and the `Offer` read model with observable `AllOffers` and `OffersOnSale` queries. Repeating a price, module or allowance an offer already has records nothing.
- **Showrunner** ([Release v1.3.0](https://github.com/Cratis/Showrunner/releases/tag/v1.3.0)): `Pricing.TotalFor`, `PeriodEnd` and `Prorate`, moved from Direct's Admin catalog and expressed in minor units, for monthly and yearly billing.
- **Showrunner** ([Release v1.3.0](https://github.com/Cratis/Showrunner/releases/tag/v1.3.0)): `SeatPlanOffers.From` turns an existing seat SKU and its price into the events of an identical seat plan offer.
- **Showrunner** ([Release v1.3.0](https://github.com/Cratis/Showrunner/releases/tag/v1.3.0)): `OfferPublisher` reactor that appends `OfferPublished` to the outbox when what an offer tells a product changes, and `OfferWithdrawn` when a published offer is retired. An unlimited seat plan publishes `int.MaxValue` seats, and allowances are not published because the contract has no field for them.
- **Showrunner** ([Release v1.3.0](https://github.com/Cratis/Showrunner/releases/tag/v1.3.0)): Documentation for the catalog at https://github.com/Cratis/Showrunner/blob/main/Documentation/BoxOffice/catalog.md.
- **Showrunner** ([Release v1.2.0](https://github.com/Cratis/Showrunner/releases/tag/v1.2.0)): `Cratis.Showrunner.Marquee.Contracts`, published with every release, with the public events `AnnouncementPublished`, `AnnouncementRevised`, `AnnouncementAudienceChanged` and `AnnouncementRetracted`. The active window is exact UTC times, so maintenance windows can be announced to the minute; an announcement with no end uses `ActiveUntil.Indefinitely`. (#35)
- **Showrunner** ([Release v1.2.0](https://github.com/Cratis/Showrunner/releases/tag/v1.2.0)): `Audience` with `Everyone`, `Tenants`, `HoldersOfModule` and `OnPlan`, plus `Display` (`Banner`, `DialogOnce`, `DialogEverySession`) and `Importance` (`Information`, `Warning`, `Critical`).
- **Showrunner** ([Release v1.2.0](https://github.com/Cratis/Showrunner/releases/tag/v1.2.0)): `IAudienceEntitlements` and `NoAudienceEntitlements`: module and plan audiences are resolved by an entitlement source the host plugs in, so Marquee depends on no other Showrunner part and still delivers `Everyone` and `Tenants` announcements without one.
- **Showrunner** ([Release v1.2.0](https://github.com/Cratis/Showrunner/releases/tag/v1.2.0)): An event schema snapshot guard: a schema change without regenerating the snapshot, or without a new generation for a released event, fails the build.
- **Showrunner** ([Release v1.2.0](https://github.com/Cratis/Showrunner/releases/tag/v1.2.0)): Documentation for [Marquee contracts](https://github.com/Cratis/Showrunner/blob/main/Documentation/Marquee/contracts.md).
- **Showrunner** ([Release v1.1.0](https://github.com/Cratis/Showrunner/releases/tag/v1.1.0)): `Cratis.Showrunner.BoxOffice.Contracts`, published with every release alongside the Usher packages. Operator to product: `TenantRegistered`, `TrialOpened`, `TrialEndMoved`, `TrialClosed`, `SeatCapacitySet`, `ModuleGranted`, `ModuleTrialGranted`, `ModulePreviewOpened`, `ModuleRevoked`, `AllowanceSet`, `TenantSuspended`, `TenantReinstated` and `TenantClosing`. Product-wide from the operator: `OfferPublished` and `OfferWithdrawn`. Product to operator: `OfferingDeclared`, `TenantProvisioned`, `SeatTaken`, `SeatReleased`, `ActivitySummarized`, `ComputeDayClosed`, `ComputeDayCorrected` and `AllowanceExhausted`. (#42)
- **Showrunner** ([Release v1.1.0](https://github.com/Cratis/Showrunner/releases/tag/v1.1.0)): Every contract is `[Public]`, carries `TenantId` when it concerns a tenant, and is appended under the operator's own `OrganizationId`, `ProductId` or `OfferId`, so none of them repeats an event source id in its payload.
- **Showrunner** ([Release v1.1.0](https://github.com/Cratis/Showrunner/releases/tag/v1.1.0)): An `EventSchemas.snapshot.json` guard and a `ReleasedEventSchemas.json` list of frozen generations, as in Usher.
- **Showrunner** ([Release v1.1.0](https://github.com/Cratis/Showrunner/releases/tag/v1.1.0)): Box Office documentation with the contract reference and a mapping from every v1 event, and from Direct's own seat, trial and suspension facts, to its replacement: https://github.com/Cratis/Showrunner/blob/main/Documentation/BoxOffice/contracts.md
- **Prompter** ([Release v0.4.0](https://github.com/Cratis/Prompter/releases/tag/v0.4.0)): Support explicitly scoped GitHub App deployments with a read-only private-key mount from an existing Kubernetes Secret. Issue filing remains disabled until separately enabled. (part of #49)
- **cli** ([Release v3.113.0](https://github.com/Cratis/cli/releases/tag/v3.113.0)): Add opt-in `cratis render --repository-root` to include repository CI workflows, `.editorconfig` and a README when scaffolding a fresh repository root. Existing publication protections still apply; other renders remain unchanged. (#497)
- **Prompter** ([Release v0.3.0](https://github.com/Cratis/Prompter/releases/tag/v0.3.0)): Bounded Discord conversation context and optional intent routing with graceful fallback. (part of #49)
- **Prompter** ([Release v0.3.0](https://github.com/Cratis/Prompter/releases/tag/v0.3.0)): Related GitHub issue links and issue previews bound to explicit, single-use confirmation before filing. (part of #49)
- **Prompter** ([Release v0.3.0](https://github.com/Cratis/Prompter/releases/tag/v0.3.0)): Global admission limits, abuse controls, duplicate suppression and durable daily spending budgets. (part of #50)
- **Prompter** ([Release v0.3.0](https://github.com/Cratis/Prompter/releases/tag/v0.3.0)): Opt-in encrypted PostgreSQL backups, restore verification, private aggregate metrics and operational alerts. (part of #51)
- **Prompter** ([Release v0.3.0](https://github.com/Cratis/Prompter/releases/tag/v0.3.0)): Isolated evaluation configuration that prevents unaccounted paid execution. (part of #51)
- **Fundamentals** ([Release v7.30.0](https://github.com/Cratis/Fundamentals/releases/tag/v7.30.0)): Shared OpenTelemetry setup supports opt-in metric views with configurable cardinality limits, allowed tags and histogram buckets. Enabling `EnableMetricViews` gives Cratis seconds histograms second-based buckets while preserving instrument advice and explicit policy overrides. Metric settings are captured at registration, and existing consumer views remain unchanged unless the feature is enabled. (#1174)
- **AuthProxy** ([Release v2.39.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.39.0)): A service can opt into sticky routing with `Backend.StickyRouting`. AuthProxy discovers the backend's replicas through DNS (for example a Kubernetes headless Service) and keeps each browser on the same replica with an encrypted per-service cookie. It moves the user to another replica when the pinned one goes away or turns unhealthy. The feature is off by default, and existing services route exactly as before. (part of #209)
- **AI** ([Release v7.123.0](https://github.com/Cratis/AI/releases/tag/v7.123.0)): The Screenplay discovery skill guides persona goals, a persona's position and size on the personas canvas, and sticky notes on the personas canvas. (#847)
- **Screenplay** ([Release v4.258.0](https://github.com/Cratis/Screenplay/releases/tag/v4.258.0)): Body-execution providers can now run reaction bodies through `ISemanticBodyExecutionProvider.ReactAsync`. A reaction with a single event trigger and a standalone body produces events or invokes commands from the body's result, after `where`. The whole result is validated before anything settles. Without a provider, behaviour is unchanged (part of #1099)
- **Screenplay** ([Release v4.258.0](https://github.com/Cratis/Screenplay/releases/tag/v4.258.0)): The new `PerformAsync` method on `ISemanticBodyExecutionProvider` defines the provider contract for snapshot query performers. It answers Unsupported by default, and the reference run does not call it yet (part of #1099)
- **Screenplay** ([Release v4.257.0](https://github.com/Cratis/Screenplay/releases/tag/v4.257.0)): The event model board in VS Code and the MCP App marks a slice that uses an event or read model from a slice drawn after it, showing the PLAY0516 or PLAY0517 finding on the slice header (#413)
- **Screenplay** ([Release v4.257.0](https://github.com/Cratis/Screenplay/releases/tag/v4.257.0)): Selecting a slice, feature or module on the event model board in VS Code and the MCP App highlights what it depends on and what depends on it, and draws links between the slices (#415)
- **Screenplay** ([Release v4.257.0](https://github.com/Cratis/Screenplay/releases/tag/v4.257.0)): New Information diagnostic PLAY0824 for redundant braces around composite keys, with a repair and quick fix that removes them (#953)
- **Screenplay** ([Release v4.257.0](https://github.com/Cratis/Screenplay/releases/tag/v4.257.0)): New Information diagnostic PLAY0825 for `authorize A B` without `and`, with a repair and quick fix that writes `and` (#953)
- **Screenplay** ([Release v4.257.0](https://github.com/Cratis/Screenplay/releases/tag/v4.257.0)): The semantic evaluator runs result-v2 command handlers. A handler's returned items are checked against its declared possible events, destinations and payloads, then produced in order. Typed contexts describe the handler result shape. Public binding still refuses these handlers until the next event-model schema version (part of #1102)
- **Screenplay** ([Release v4.257.0](https://github.com/Cratis/Screenplay/releases/tag/v4.257.0)): Proposed design record 0123 for store-backed sequences through a Chronicle allocator; `sequence` stays reserved (part of #619)
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): `cratis run` and sandbox specifications now execute inline and `file` rule bodies (property and concept validation rules) in an isolated body worker process, instead of skipping them. Bodies outside the supported subset are refused with an explicit diagnostic. (part of #891)
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): Rendered read-model specifications can now seed read models with composite keys, including seeds that later events update. (#874)
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): Keyed observable optional read-model lookups now render. (part of #58)
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): Documented the Stage.<Target> repository model, its naming rules and its direction dependency rules. (#787)
- **AuthProxy** ([Release v2.38.1](https://github.com/Cratis/AuthProxy/releases/tag/v2.38.1)): AuthProxy now logs a warning when the `Set-Cookie` headers on a response total more than 3.5 KB, listing each cookie by name and header size (never its value). This makes the `502 upstream sent too big header` failure behind ingress-nginx diagnosable from the proxy logs. (part of #225)
- **AuthProxy** ([Release v2.38.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.38.0)): Add an `InviteMiddleware` constructor that receives invitation staging and completion as one registered `InvitationLifecycle` service; the existing constructors keep working unchanged (#192)
- **Arc** ([Release v22.152.0](https://github.com/Cratis/Arc/releases/tag/v22.152.0)): `QueryableElementTypes`, which generated code uses to register queryable element and sort key types (part of #2855)
- **Arc** ([Release v22.152.0](https://github.com/Cratis/Arc/releases/tag/v22.152.0)): The ArcCore sample uses source-generated JSON and ships acceptance specs that run against its untrimmed, trimmed and NativeAOT published executables. (part of #2859)
- **Scene** ([Release v4.86.0](https://github.com/Cratis/Scene/releases/tag/v4.86.0)): Guards can opt in to strict operand checking for `Contains`, by setting `guards: { strictOperands: true }` on the `InteractionScope` context. In strict mode, a null or missing field evaluates to false, and the fallback runs. A collection, number, boolean, object or other non-string operand is reported as unevaluable, so neither the command nor the fallback runs. Without the setting, `Contains` behaves exactly as before. (#276)
- **AuthProxy** ([Release v2.37.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.37.0)): Set `Session:EmitIdentityDetailsCookie` to `false` (or call the Aspire helper `WithoutIdentityDetailsCookie()`) to stop AuthProxy writing the script-readable `.cratis-identity` cookie and expire any copy a browser still sends, for frontends that read identity from `/.cratis/me` (Arc 22.46 or later). Identity verification and the sealed authorization record are unchanged, and the cookie is still written by default (#178)
- **Arc** ([Release v22.151.0](https://github.com/Cratis/Arc/releases/tag/v22.151.0)): Observable queries can poll over plain HTTP: set `Globals.queryTransportMethod = QueryTransportMethod.Polling` (or the `<Arc>` `queryTransportMethod` prop) to receive updates through repeated GET requests without WebSocket or SSE, with a configurable interval (`Globals.queryPollingOptions`, or `setPollingOptions` per query), jittered backoff and support for the `Cratis-Query-Poll-After` hint. (#3449)
- **Screenplay** ([Release v4.256.0](https://github.com/Cratis/Screenplay/releases/tag/v4.256.0)): Semantic models written by a newer Screenplay version are now read without failing on unknown members. Unknown fields are preserved, known fields are decided by each document's major version, and malformed wire versions are refused with a clear contract error (#1067)
- **Screenplay** ([Release v4.256.0](https://github.com/Cratis/Screenplay/releases/tag/v4.256.0)): `CompileAdmissible` exclusions distinguish root errors from dependent exclusions and identify their immediate dependencies (#1095)
- **Screenplay** ([Release v4.256.0](https://github.com/Cratis/Screenplay/releases/tag/v4.256.0)): Live collection query performers expose a versioned binding contract for observable read-model updates (#1077)
- **Screenplay** ([Release v4.256.0](https://github.com/Cratis/Screenplay/releases/tag/v4.256.0)): Policy predicates with implementation bodies are evaluated through the host-supplied body-execution provider, with explicit allow, deny or unsupported outcomes in authored order (part of #1099)
- **Screenplay** ([Release v4.256.0](https://github.com/Cratis/Screenplay/releases/tag/v4.256.0)): Command handlers with implementation bodies run through the body-execution provider and return one payload per declared `produces` line. Execution faults are reported separately from unsupported bodies and commit no events (part of #1099)
- **Screenplay** ([Release v4.256.0](https://github.com/Cratis/Screenplay/releases/tag/v4.256.0)): Command handlers may declare a `may produce` set of possible events, each optionally routed `for <property>` or `for one of <collection>` with stream and tag metadata. The set is parsed, printed and published in the language contract; binding it is still refused with PLAY0800 until the next event-model schema version (part of #1102)
- **Arc** ([Release v22.150.0](https://github.com/Cratis/Arc/releases/tag/v22.150.0)): The Arc source generator registers the element type of every model-bound observable query that returns `ISubject<T>` or `IAsyncEnumerable<T>`, so WebSocket, Server-Sent Events and HTTP handling use statically typed operations instead of closing generic methods at runtime. Under the JIT, unregistered element types keep the cached reflection path; in ahead-of-time compiled code they fail with `MissingObservableQueryElementType`, naming the type. (part of #2855)
- **Arc** ([Release v22.149.0](https://github.com/Cratis/Arc/releases/tag/v22.149.0)): `[EndpointGroup]` on a query method puts just that query in the group on HTTP, WebSocket and SSE, in introspection and in generated proxies. (#3543)
- **Arc** ([Release v22.149.0](https://github.com/Cratis/Arc/releases/tag/v22.149.0)): Endpoint groups can have their own route prefix through `SetRoutePrefix` on `EndpointGroupsOptions`, falling back to the global prefix. (#3543)
- **cli** ([Release v3.111.0](https://github.com/Cratis/cli/releases/tag/v3.111.0)): `cratis ai profiles list` lists every available Cratis AI profile from the public and engineering catalogs, with the catalog each profile comes from, its languages and the profiles it composes. Output is a table by default; `--output json` gives the full details. (part of #147)
- **Fundamentals** ([Release v7.29.0](https://github.com/Cratis/Fundamentals/releases/tag/v7.29.0)): `GenerateValue.UuidV5(Guid @namespace, string name)` derives a deterministic, name-based RFC 9562 version 5 UUID, with shared conformance vectors that other implementations can reuse to produce identical values (#1216)
- **Fundamentals** ([Release v7.28.0](https://github.com/Cratis/Fundamentals/releases/tag/v7.28.0)): `Cratis.Observability.SourceGenerators` package: the source generator and `CRT0001` analyzer for strongly typed metrics and trace spans, published under a name that covers both (#1062)
- **Chronicle** ([Release v19.114.0](https://github.com/Cratis/Chronicle/releases/tag/v19.114.0)): `observers.maxEventsPerSubscriberCall` (default `100`): catch-up, replay and partition recovery hand gRPC client and webhook subscribers at most this many events per call. Each answered call is checkpointed, so a long partition advances call by call. Kernel-owned subscribers (projections) are unchanged. `0` restores the previous behavior. (#5444)
- **Chronicle** ([Release v19.114.0](https://github.com/Cratis/Chronicle/releases/tag/v19.114.0)): `DeliverWithinMilliseconds` on `EventsToObserve` and `ReduceOperationMessage` (additive proto fields). It tells the client how long the kernel waits for the result, counted from receipt, so a client can answer a delivery the kernel already gave up on right away instead of processing it (Cratis/Chronicle.Elixir#192).
- **Chronicle.Elixir** ([Release v3.16.0](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.16.0)): Batches for different partitions run concurrently, each in its own process, up to `:max_concurrent_partitions` (client option, default `16`). Batches for one partition run one at a time and in order. The kernel matches results by `DeliveryId`, so results can complete out of order across partitions. `max_concurrent_partitions: 1` restores the old serial behavior. (#192)
- **Chronicle.Elixir** ([Release v3.16.0](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.16.0)): Replay notifications keep their place. Begin/end replay waits for everything before it, and partition replay begin/end waits for that partition's earlier batches.
- **Chronicle.Elixir** ([Release v3.16.0](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.16.0)): A batch carrying `DeliverWithinMilliseconds` (from Cratis/Chronicle#5449) that is only reached after that window, counted from receipt, is answered as `Failed` without running. A kernel that does not send the field gets the previous behavior.
- **Chronicle.Elixir** ([Release v3.16.0](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.16.0)): Telemetry: `[:chronicle, :observer, :batch, :start | :stop | :exception]`, `[:chronicle, :observer, :batch, :expired]`, `[:chronicle, :observer, :queue]`.
- **AuthProxy** ([Release v2.36.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.36.0)): Configure service-relative `ForwardedPaths` and `DeniedPaths` to control which paths and HTTP methods AuthProxy forwards, including anonymous and bearer requests, WebSockets, and server-sent events. Deny rules take precedence, and refused requests receive a uniform, non-cacheable 404 response. (#146)
- **Chronicle.Elixir** ([Release v3.15.1](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.15.1)): The session (Connect stream and keepalive answers) runs on its own HTTP/2 connection to the same server (`Connection.session_channel/1`, client option `:dedicated_session_channel`, default `true`). Both connections are dialed and closed together. If the second dial fails, the session falls back to the main connection. (#193)
- **Chronicle.Elixir** ([Release v3.15.1](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.15.1)): `:keepalive_timeout` client option, default `5_000`, matching the kernel's `connectedClients.staleThresholdSeconds`.
- **Chronicle.Elixir** ([Release v3.15.1](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.15.1)): `[:chronicle, :observer, :result, :send_failed]` telemetry.
- **Chronicle** ([Release v19.113.0](https://github.com/Cratis/Chronicle/releases/tag/v19.113.0)): `disableTls=true` in the .NET connection string (`ChronicleConnectionString.DisableTls`, `ChronicleConnectionStringBuilder.DisableTls`). The gRPC channel and the least-connections probes connect over cleartext HTTP/2 (h2c).
- **Chronicle** ([Release v19.113.0](https://github.com/Cratis/Chronicle/releases/tag/v19.113.0)): `ClientCredentialsRequireTls`, thrown when creating a connection that combines explicit client credentials with `disableTls=true`. The message points to `auth=none` and `apiKey=`.
- **Templates** ([Release v1.8.3](https://github.com/Cratis/Templates/releases/tag/v1.8.3)): Guidance for recording resolved package versions and container image digests in scaffolded applications
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): Applications without modeled constraints gain an optional `persistent` Spring profile with JPA event and token storage and an H2 file database. Applications with constraints retain in-memory event storage and report `STAGE-AXON-PERSISTENT`. (part of #1)
- **Arc.Kotlin** ([Release v7.11.0](https://github.com/Cratis/Arc.Kotlin/releases/tag/v7.11.0)): `@AllowCallerValidationSeverity(maximum = …)` lets a command accept a higher caller-supplied validation severity than the host default (#269)
- **Arc.Kotlin** ([Release v7.11.0](https://github.com/Cratis/Arc.Kotlin/releases/tag/v7.11.0)): Host options `cratis.arc.command.maximum-caller-allowed-severity` (default `Warning`) and `cratis.arc.command.ignore-caller-allowed-severity` control how far the `X-Allowed-Severity` header can relax command validation (#269)
- **Arc** ([Release v22.148.0](https://github.com/Cratis/Arc/releases/tag/v22.148.0)): `[AllowCallerValidationSeverity]` lets a command explicitly permit callers to relax validation severities above the host default.
- **Arc** ([Release v22.148.0](https://github.com/Cratis/Arc/releases/tag/v22.148.0)): A new `Command` property on `ArcOptions` (`CommandOptions`, bound from `Cratis:Arc:Command`) configures the default maximum caller severity and lets hosts ignore the header globally, including on opted-in commands.
- **Arc** ([Release v22.148.0](https://github.com/Cratis/Arc/releases/tag/v22.148.0)): Commands can declare `[assembly: BlockOnValidationSeverity(...)]` as a fallback blocking policy. Command and inherited declarations take precedence, and generated TypeScript proxies carry the resolved policy.
- **Chronicle.TypeScript** ([Release v6.54.0](https://github.com/Cratis/Chronicle.TypeScript/releases/tag/v6.54.0)): The client logs a warning at connection start when TLS certificate validation is skipped for a host other than a local one, naming the hosts for the gRPC channel and OAuth token requests and how to enable validation with `skipTlsValidation=false` (part of #263)
- **AuthProxy** ([Release v2.35.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.35.0)): `CallerAuthorizationHeader` per service (`Default`, `Forward`, `Strip`) controls whether a caller's own `Authorization` header reaches the service.
- **AuthProxy** ([Release v2.35.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.35.0)): A warning is logged when forwarded headers arrive from a public address while no trusted proxies are configured.
- **Chronicle.Kotlin** ([Release v7.3.0](https://github.com/Cratis/Chronicle.Kotlin/releases/tag/v7.3.0)): Events, read models and schemas accept the geospatial types from Cratis Fundamentals for Kotlin and Java (`io.cratis.fundamentals.geospatial`), with the same GeoJSON and schema formats as before, and conversions between them and the Chronicle types (`toFundamentals()` and converting constructors) (#151)
- **Fundamentals.Kotlin** ([Release v0.8.0](https://github.com/Cratis/Fundamentals.Kotlin/releases/tag/v0.8.0)): Geospatial types `Point`, `LineString`, `LinearRing` and `Polygon` in `io.cratis.fundamentals.geospatial`, matching the C# Fundamentals geospatial records (part of #7)
- **Fundamentals.Kotlin** ([Release v0.8.0](https://github.com/Cratis/Fundamentals.Kotlin/releases/tag/v0.8.0)): An opt-in Jackson `GeospatialModule` that reads and writes the geospatial types as GeoJSON with the same validation messages as C# Fundamentals; register it explicitly, it is not discovered automatically (part of #7)
- **Arc** ([Release v22.147.0](https://github.com/Cratis/Arc/releases/tag/v22.147.0)): Screenplay generation recognizes a `Slice<TCommand>` specification that expects its own command to be rejected without a named reason: a slice constructed in a field initializer or `Establish()`, run once in `Because()`, asserted with `ShouldBeRejected()` and disposed in `Destroy()` becomes a `then error` scenario for that command. Any other setup, write or assertion on the slice is reported as unreadable rather than guessed. (#3519)
- **Screenplay** ([Release v4.255.0](https://github.com/Cratis/Screenplay/releases/tag/v4.255.0)): Hosts can execute command and concept code validations when running specifications, preserving every rejection message and refusing unavailable execution safely. (part of #1099)
- **Screenplay** ([Release v4.255.0](https://github.com/Cratis/Screenplay/releases/tag/v4.255.0)): Hosts can execute reducer transitions when running specifications, including ordered state updates and deletion. Specifications whose reducers cannot run keep their previous outcome. (#1098) (part of #1099)
- **AuthProxy** ([Release v2.34.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.34.0)): AuthProxy can validate lobby invitation tokens from Ante's published issuer metadata: set `Invite:TokenMetadataUrl`, `Invite:Issuer` and `Invite:Audience`, and AuthProxy checks `iss`, `aud` and the RS256 signature by `kid`, with the published keys cached and refreshed, so key rotation needs no AuthProxy configuration change. See [Invitation token keys](https://github.com/Cratis/AuthProxy/blob/main/Documentation/configuration/lobby/invitation-token-keys.md). (#142)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Generated specifications now run inline and file named validation rules, including rejections, conversions, designation patterns and receipt time from `given clock`, so commands with named rules are verified instead of skipped (part of #886)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Generated specifications now run opaque C# policy bodies, so commands and queries guarded by an inline or file policy are verified instead of skipped (part of #886)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Generated specifications now run inline and file reducer bodies, so read models built by reducers are verified instead of skipped (part of #886)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Generated specifications now run C# command handler bodies, so commands with handlers are verified instead of skipped (part of #886)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Generated specifications now run deterministic inline and file reaction bodies, so reactions are verified instead of skipped (part of #886)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Reactions can carry inline and file-based C# bodies that run natively in the rendered application, verified against the pinned Chronicle kernel (#829)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Inline code in a model is spliced verbatim into rendered output through an authenticated token, and a body cannot escape the member that contains it (part of #808)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Rendered code indents spliced handler, reaction, policy and performer bodies to the containing block (#848)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): The Stage runtime and specification executor now run models within a declared ESM range, not only exact audited versions (#821)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Source-keyed capture routes now execute in the runtime and Host, with wrong-route and redelivery behavior covered (#842)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Read models with mapping-free, key-only projections now run in the Stage runtime (#843)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Read models with optional properties now run in executor and Host per-run projections. Composite keys remain refused (part of #512)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Explicit `for item` and `for screen` action subjects on screen actions and toolbar items are rendered and run in the generated runtime (part of #855)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Added the prerelease `stage-templates/v1` template profile and helper catalogue v1, with generated reference documentation (#795)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Added the prerelease `stage-render-model/v1` render model with a generated JSON Schema and surface ledger (#793)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Added the declarative artifact render planner, which records input provenance in the render plan (#797)
- **Chronicle** ([Release v19.112.0](https://github.com/Cratis/Chronicle/releases/tag/v19.112.0)): `ReadModelScenario` can seed read models keyed by a composite key. `Given.ForKey(parts).ReadModel(instance)`, `CollectReadModelFor(parts, instance)` and `InstanceForKey(parts)` take the key's named parts, so events that later update the instance find the seeded one. Invalid, duplicate or conflicting seeds are refused with a specific exception. (#5428)
- **Screenplay** ([Release v4.254.0](https://github.com/Cratis/Screenplay/releases/tag/v4.254.0)): Hosts can compile the executable subset of a model with `CompileAdmissible`: slices, specifications, imports and policies that executable binding refuses are excluded and reported with their original diagnostics, while declarations whose security depends on an excluded or unresolved declaration are excluded too or fail the compilation, never silently widened (#1091)
- **Screenplay** ([Release v4.254.0](https://github.com/Cratis/Screenplay/releases/tag/v4.254.0)): Hosts can register a provider that evaluates named validation rule bodies, so specifications with opaque rules no longer have to stop at Unsupported (#1092)
- **Screenplay** ([Release v4.254.0](https://github.com/Cratis/Screenplay/releases/tag/v4.254.0)): Scoped projections in the reference executor can map `$eventContext.occurred` into read-model properties of `from`, `every` and `children` blocks, using each event's own occurrence time in UTC; a projection that needs an occurrence time an event does not carry now fails instead of publishing partial state (#1087)
- **Screenplay** ([Release v4.254.0](https://github.com/Cratis/Screenplay/releases/tag/v4.254.0)): Imperative `validate` on concepts and properties can now load its body from a file with `validate file <path>` (#1093)
- **Stage** ([Release v4.207.0](https://github.com/Cratis/Stage/releases/tag/v4.207.0)): Render targets can stamp every generated code file with a configured header through a new core profile input, `stage:file-header`, applied after any planner has produced its final content. Comment syntax comes from a replaceable per-extension table, non-code files are left untouched, and with no header configured the output is byte-for-byte unchanged. (#861)
- **Stage** ([Release v4.207.0](https://github.com/Cratis/Stage/releases/tag/v4.207.0)): A header that cannot be written safely refuses the plan with a stable diagnostic: `STAGE-HEADER-001` for malformed input or control, bidi, private-use or line-separator characters, and `STAGE-HEADER-002` for a line the file's comment syntax cannot carry, such as a `\u` sequence in a Java file. (#861)
- **Stage** ([Release v4.207.0](https://github.com/Cratis/Stage/releases/tag/v4.207.0)): The Cratis target now renders application-trigger reactions that invoke commands: each command runs through Arc's occurrence command executor under its own effect receipt, as system with the declared roles; an unhandled refusal fails the occurrence. Refusal branches and authorized commands without `runs as` still refuse with `STAGE-ESM-024`. (part of #343)
- **Stage** ([Release v4.207.0](https://github.com/Cratis/Stage/releases/tag/v4.207.0)): Experimental `stage-target/v1` kit manifest and kit loader: a strict manifest that rejects unknown fields, with a generated JSON schema, exact language-pack version binding and contract version checks; loading from memory or a directory that rejects path traversal, rooted paths, symbolic links, special files, case-insensitive duplicates and non-UTF-8 templates, each with its own `STAGE-KIT` code; and a deterministic kit archive whose SHA-256 is the kit digest. (#794)
- **cli** ([Release v3.107.0](https://github.com/Cratis/cli/releases/tag/v3.107.0)): Added `cratis render --target axon` (experimental). It renders a model to a Java/Spring application on Axon Framework, using the bundled `Cratis.Stage.Rendering.Axon` renderer. `cratis` stays the default target. Axon output carries one experimental warning (`CLI-RENDER-029`), renderer warnings and refusals stay visible, and errors block publication. (#476)
- **cli** ([Release v3.107.0](https://github.com/Cratis/cli/releases/tag/v3.107.0)): For Axon, `--project-name` sets the Java artifact name and `--root-namespace` sets the Java package. `--file-header`, scoped rendering, `--force`, drift detection and `--check` behave as they do for the Cratis target. Reducer rendering input, migration requests, `--package-set` and `--strict` do not apply to Java output; they are ignored with a `CLI-RENDER-030` warning. (#476)
- **cli** ([Release v3.107.0](https://github.com/Cratis/cli/releases/tag/v3.107.0)): Each target has its own admitted Screenplay version range, so a model newer than the selected target supports is refused with `CLI-RENDER-004` before anything is written. (#476)
- **Stage.Axon** ([Release v0.7.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.7.0)): Inline Java command handlers can now produce or release events covered by property-uniqueness constraints: appends are reserved and released in the same unit of work, exactly one of several concurrent claimants wins, and conflicts return 409. Previously these handlers failed with STAGE-AXON-0801. Unsupported constraint forms still fail closed (#64)
- **Stage.Axon** ([Release v0.7.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.7.0)): `unique event` constraints (once per event source, with `released by`) are now enforced at append time in memory and with the persistent JPA profile; concurrent duplicates get a 409 (#64)
- **Screenplay** ([Release v4.253.0](https://github.com/Cratis/Screenplay/releases/tag/v4.253.0)): The VS Code extension highlights `.strings` files: comments, dotted keys, the quoted value, `{placeholders}` and escapes. The editor also closes quotes and braces and toggles `//` comments in them.
- **Screenplay** ([Release v4.253.0](https://github.com/Cratis/Screenplay/releases/tag/v4.253.0)): A strings file carries the Cratis icon with a quotation badge in its lower right corner in the explorer and on its tab, so it is told apart from a `.play` file while the Cratis symbol stays visible.
- **cli** ([Release v3.106.0](https://github.com/Cratis/cli/releases/tag/v3.106.0)): `cratis render --strict` fails a render that Stage reports as degraded. The safe artifacts, removals and reports, including the completeness report, are still published, and the command then exits with the new exit code 9 (`strict_unaccepted`). Without `--strict`, a degraded render still publishes and succeeds. A refused render still exits 5 whether or not `--strict` is set. Real errors (1, 5, 10) take precedence over 9, which takes precedence over pending changes (6). With `--check`, nothing is written and a strict failure takes precedence over drift. See [Strict rendering](https://github.com/Cratis/cli/blob/main/Documentation/reference/screenplay.md#strict-rendering). (#468)
- **Chronicle.Elixir** ([Release v3.15.0](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.15.0)): `with_oauth/5` on the webhook and external-service definition builders takes an optional OAuth scope, sent to the kernel with the client-credentials authorization. Omitting it leaves the scope empty, as before. (#172)
- **Screenplay** ([Release v4.252.0](https://github.com/Cratis/Screenplay/releases/tag/v4.252.0)): Go to Definition in the VS Code extension for any name a model declares: a concept, policy, command, read model, query, screen, screen or dialog template, form, behavior, trigger and the rest, in whichever file of the folder application declares it.
- **Screenplay** ([Release v4.252.0](https://github.com/Cratis/Screenplay/releases/tag/v4.252.0)): The extension's spelling dictionary knows `stateview` and `statechange`, so `scopes slice stateview` is not flagged by Code Spell Checker.
- **Showrunner** ([Release v1.0.0](https://github.com/Cratis/Showrunner/releases/tag/v1.0.0)): `Cratis.Showrunner.Usher.Contracts` with the public events an application and a support desk exchange about issues, in both directions. See [Contracts](https://github.com/Cratis/Showrunner/blob/main/Documentation/Usher/contracts.md). (#1) (part of #8)
- **Showrunner** ([Release v1.0.0](https://github.com/Cratis/Showrunner/releases/tag/v1.0.0)): `Cratis.Showrunner.Usher`, added with `AddUsher`, with commands to report an issue or an error, share identity, add details, answer questions, reopen, withdraw, and grant or revoke support access, and the observable `ReportedIssue.MyIssues()` and `IssueConversation.ForIssue(issueId)` queries, all recorded as private events in the tenant's own namespace. See [Backend](https://github.com/Cratis/Showrunner/blob/main/Documentation/Usher/backend.md). (#2)
- **Showrunner** ([Release v1.0.0](https://github.com/Cratis/Showrunner/releases/tag/v1.0.0)): Reporters only see and act on their own issues, and everything they send is bounded by `ReportLimits` and classified as personal data of that reporter.
- **Showrunner** ([Release v1.0.0](https://github.com/Cratis/Showrunner/releases/tag/v1.0.0)): Usher publishes the reporter's facts to the outbox for the desks named in `DeskStores`, records the desk's answers as private `Support…` facts in the tenant the event names, and lapses grants of access on their exact end, in every tenant namespace. See [Exchanging events with a desk](https://github.com/Cratis/Showrunner/blob/main/Documentation/Usher/desk-exchange.md). (#3)
- **Showrunner** ([Release v1.0.0](https://github.com/Cratis/Showrunner/releases/tag/v1.0.0)): Failing commands are captured on the server with their slice location, error and stack frames, so a report of that error records what the backend saw, fingerprinted to group repeats. Configure it with the `ErrorCapture` options. (#4)
- **Showrunner** ([Release v1.0.0](https://github.com/Cratis/Showrunner/releases/tag/v1.0.0)): `@cratis/showrunner.usher` with the generated TypeScript proxies for Usher's commands and queries, carrying their slice location, and helpers that turn an error into what a report sends. It requires `@cratis/arc`, `@cratis/arc.react` and `@cratis/fundamentals`. See [Frontend proxies](https://github.com/Cratis/Showrunner/blob/main/Documentation/Usher/frontend-proxies.md). (part of #5)
- **Showrunner** ([Release v1.0.0](https://github.com/Cratis/Showrunner/releases/tag/v1.0.0)): `@cratis/showrunner.usher.react` with `UsherProvider`, `ReportButton` and `MyIssuesButton`, and the `ReportIssueDialog`, `ReportErrorDialog` and `MyIssuesDialog` built on `@cratis/components`, with replaceable texts and correlation-id tracking. See [React components](https://github.com/Cratis/Showrunner/blob/main/Documentation/Usher/react.md). (#6)
- **Showrunner** ([Release v1.0.0](https://github.com/Cratis/Showrunner/releases/tag/v1.0.0)): Slot-in report a problem, report this error and my issues dialogs that an application adds with `AddUsher`, `UsherProvider` and a button, and can open from its own menus. (#10)
- **Showrunner** ([Release v1.0.0](https://github.com/Cratis/Showrunner/releases/tag/v1.0.0)): Access grants and support sessions: a reporter grants support access to one issue for a fixed time, and `MapUsher` maps the grant check and session notification endpoints for Cratis AuthProxy's on-behalf sessions, so support can act as the reporter on that issue only while the grant is live. The reporter sees each session and what support did in it. See [Access and support ses
- **Stage.Axon** ([Release v0.6.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.6.0)): Inline `java` authorization policies in a model now run natively in generated Axon apps, including on performed queries, instead of denying all access. Each policy receives the caller's authentication and claims; any policy failure denies, and policies in other languages still degrade with a warning or a refusal under the strict profile. (#54)
- **Stage.Axon** ([Release v0.6.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.6.0)): Generated Axon applications using the persistent profile now include a test proving that live query subscriptions see committed read-model rows and receive nothing when a unit of work rolls back. (#55)
- **Stage.Axon** ([Release v0.5.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.5.0)): The Axon runtime helpers ship as the Maven package `io.cratis:stage-axon-runtime`, so generated applications stay smaller and pick up runtime fixes by raising one version (part of #17)
- **cli** ([Release v3.105.0](https://github.com/Cratis/cli/releases/tag/v3.105.0)): `cratis run`, `cratis render` and `cratis screenplay validate` admit `when` and `otherwise` alternatives on `on change`, so a board can run a different command for each column a card is moved to, with the card bound to the command's inputs (`with talkId from item.talkId`).
- **Stage** ([Release v4.205.0](https://github.com/Cratis/Stage/releases/tag/v4.205.0)): A component that lets the user change an item now runs the document's `on change` for that item. The default blueprint's `kanbanBoard` is the first: moving a card runs the bindings with `item` (the card's row), `value` (the new column) and `previous`, and a guarded `when item.status == "accepted"` chooses the command. A move that no command applied puts the card back; one the command applied stays and the figures follow.
- **Stage.Axon** ([Release v0.4.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.4.0)): Generated Axon apps can be demoed without an identity provider. Start them with the `demo` Spring profile (`--spring.profiles.active=demo`) and every request is authenticated as a `demo` user holding all modeled roles, with a startup warning. The profile is off by default; HTTP Basic and bearer apps stay fail-closed without it. (#48)
- **Screenplay** ([Release v4.251.0](https://github.com/Cratis/Screenplay/releases/tag/v4.251.0)): `on change` on a component that presents items (a board moving a card, a list changing a row) can now choose an action list by the item that changed, with block-form `when` and `otherwise`, exactly as `on click`, `on double click` and `on select` already do. `item` is the changed item with its new value in place, `value` the new value and `previous` the old one, so a command's inputs bind to the data (`with talkId from item.talkId`) the way a view binds to a view model.
- **Screenplay** ([Release v4.251.0](https://github.com/Cratis/Screenplay/releases/tag/v4.251.0)): A new "Bind an item change to a command" section in the interactions documentation.
- **Stage.Axon** ([Release v0.3.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.3.0)): The Axon renderer's `AxonRenderOptions` can select bearer-token authentication (`HttpAuthentication = BearerTokens`) for applications planned through `AxonRendering.Plan` (part of #31)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): Authored C# command handler bodies render beside the command's declared productions, with the handler's typed command values captured once per call. (part of #817)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): An authenticated C# reaction body for a reaction with a single event trigger renders as a typed reactor handler. Other reaction body shapes are reported as unsupported, and generated specifications that would drive a native reaction body are omitted. (part of #829)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): Inline bodies are spliced into the rendered code without changing their bytes, and integrity or boundary violations are refused. (part of #808)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): Every render reports whether it is rendered, degraded or refused, with a completeness report, scoped inventories and persisted diagnostics. Strict acceptance rejects degraded renders while keeping the safe generated output. (part of #807) (part of #810)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): Each target declares the ESM range it supports, and newer ESM minors inside that range render as degraded instead of failing. (part of #809)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): Applications can opt into a multi-service repository layout with per-service Source folders and shared Aspire composition, while the default single-project layout stays unchanged. (#782)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): Rendered Cratis applications get a renderer-owned `GlobalUsings.cs` and omit redundant per-file usings for its namespaces. (#783)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): New applications can render eligible flat event projections as model-bound read models, with an explicit opt-in convention for existing applications. (part of #496)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): Projections with literal `all` and `every` blocks, including `every` blocks with joins, now render natively and run in specification execution. (part of #117)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): Specifications with sourceless given or appended events render when no consumer can observe their event source. (#652)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): Specifications that use reducer observer filters now run on concrete execution routes instead of being refused. (part of #513)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): The Stage navigation tree keeps each entry's authored `id` as its identity and shows entries that share a `group` under a section heading. (part of #329)
- **Stage.Axon** ([Release v0.2.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.2.0)): A public renderer entry point, `AxonRendering.Plan`, plans an Axon application for any compiled Screenplay model, with options for the Java package, Maven artifact ID, file header and strict mode, so the `cratis` CLI can render Axon applications (#41)
- **Stage.Axon** ([Release v0.2.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.2.0)): Generated Axon apps can opt in to bearer-token authentication with `AxonRendering.WithBearerTokens`. The app becomes a Spring Security OAuth2 JWT resource server configured through the standard `spring.security.oauth2.resourceserver.jwt.*` properties, with roles read from the `roles` claim. It rejects every token until an identity provider is configured and refuses to start when a token issuer is configured without audiences. HTTP Basic stays the default. (#31)
- **Stage.Axon** ([Release v0.2.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.2.0)): A React/Scene proof host drives Scene documents through the generated TypeScript client's transport, with live query results and command outcomes, and the experimental generated TypeScript client is documented (part of #22)
- **Stage.Axon** ([Release v0.1.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.1.0)): The Axon renderer is published to NuGet as `Cratis.Stage.Rendering.Axon`, so the `cratis` CLI can render Axon applications (#39)
- **Stage** ([Release v4.203.0](https://github.com/Cratis/Stage/releases/tag/v4.203.0)): A running Stage addresses screens with regular routes (/TalkList) instead of #/TalkList; a Stage served under a prefix keeps the fragment.
- **Stage** ([Release v4.203.0](https://github.com/Cratis/Stage/releases/tag/v4.203.0)): The theme is one icon toggle under a Theme headline.
- **Arc** ([Release v22.146.0](https://github.com/Cratis/Arc/releases/tag/v22.146.0)): `useSliceContext()` in `@cratis/arc.react/slices` returns the `SliceLocation` a component is rendered in, or `SliceLocation.empty` when nothing is known. See [Slice context](https://github.com/Cratis/Arc/blob/main/Documentation/frontend/react/slice-context.md). (#3534)
- **Arc** ([Release v22.146.0](https://github.com/Cratis/Arc/releases/tag/v22.146.0)): `<Slice>` overrides the location for everything rendered within it, from `location`, `module`, `feature` or `slice`; without a location it is a boundary that keeps the commands and queries used within it from affecting the components outside it.
- **Arc** ([Release v22.146.0](https://github.com/Cratis/Arc/releases/tag/v22.146.0)): `<Arc>` provides a root slice scope, and `useCommand`, `useQuery`, `useQueryWithPaging`, `useObservableQuery`, `useObservableQueryWithPaging`, `useChangeStream` and the suspense query hooks register the slice location of their proxy on the nearest scope while mounted. When several slices are in use, the scope keeps the parts they agree on.
- **Arc** ([Release v22.146.0](https://github.com/Cratis/Arc/releases/tag/v22.146.0)): `withViewModel` in `@cratis/arc.react.mvvm` registers the slice locations of the commands and queries resolved for the view model.
- **Arc** ([Release v22.146.0](https://github.com/Cratis/Arc/releases/tag/v22.146.0)): `useRegisterSliceLocation(location)` for custom hooks that work with commands or queries without the Arc hooks, and `withSliceLocation(component, location)` to render a component within a scope for its slice folder.
- **Arc** ([Release v22.146.0](https://github.com/Cratis/Arc/releases/tag/v22.146.0)): `SliceLocationPlugin` in the new `@cratis/arc.vite/slices` entry point wraps exported components in slice folders so they render within a scope for their folder, with `roots`, `segmentsToSkip`, `include`, `exclude` and `importFrom` options. It keeps component names, refs, `memo` and React Fast Refresh working. See [Resolve from slice folders at build time](https://github.com/Cratis/Arc/blob/main/Documentation/frontend/react/slice-context.md#resolve-from-slice-folders-at-build-time).
- **Arc** ([Release v22.146.0](https://github.com/Cratis/Arc/releases/tag/v22.146.0)): `SliceLocation` in `@cratis/arc/reflection` gains `isEmpty` and `equals`, and is re-exported from `@cratis/arc.react/slices`.
- **Arc** ([Release v22.145.0](https://github.com/Cratis/Arc/releases/tag/v22.145.0)): Opt-in on-behalf forwarding through `ArcOptions.OnBehalfOf` (`Cratis:Arc:OnBehalfOf`). Arc verifies AuthProxy's signed `x-cratis-on-behalf-assertion` against the configured issuer, audience, optional service and RSA public signing keys, binds it to the forwarded identity headers, tenant and request, and refuses a replay. See [Acting on behalf of a user](https://github.com/Cratis/Arc/blob/main/Documentation/backend/csharp/asp-net-core/acting-on-behalf-of.md). (#3535)
- **Arc** ([Release v22.145.0](https://github.com/Cratis/Arc/releases/tag/v22.145.0)): A verified on-behalf forward authenticates as the represented user with the actor from `x-cratis-on-behalf-actor` as `ClaimsIdentity.Actor`, in both the ASP.NET Core Microsoft Identity Platform scheme and the `Cratis.Arc.Core` handler.
- **Arc** ([Release v22.145.0](https://github.com/Cratis/Arc/releases/tag/v22.145.0)): `ClaimsPrincipal.GetActor()` and `ClaimsPrincipal.IsActedOnBehalfOf()` in `Cratis.Arc.Identity` to read who is acting.
- **Arc** ([Release v22.145.0](https://github.com/Cratis/Arc/releases/tag/v22.145.0)): With Chronicle, an identity that has an actor is recorded as a `CausedBy` chain with the actor first and the represented user as its `OnBehalfOf`, so events report an agent acting on behalf of that user.
- **Arc** ([Release v22.145.0](https://github.com/Cratis/Arc/releases/tag/v22.145.0)): `x-ms-client-principal-id` values in the RFC 8187 `UTF-8''` form are decoded.
- **Arc** ([Release v22.145.0](https://github.com/Cratis/Arc/releases/tag/v22.145.0)): An ASP.NET Core host logs an error at startup when on-behalf forwarding is enabled with configuration it cannot use.
- **AuthProxy** ([Release v2.33.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.33.0)): On-behalf sessions, enabled by the `Cratis:AuthProxy:OnBehalf` configuration section and off by default. See [On-behalf Sessions](https://github.com/Cratis/AuthProxy/blob/main/Documentation/configuration/on-behalf-sessions.md). (#217)
- **AuthProxy** ([Release v2.33.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.33.0)): `POST /.cratis/on-behalf/start`, `POST /.cratis/on-behalf/end` and `GET /.cratis/on-behalf` to start, end and read the status of a session. Starting requires the actor to pass `OnBehalf:ActorAuthorization` on top of the deployment's own authorization, and both start and end refuse cross-origin requests.
- **AuthProxy** ([Release v2.33.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.33.0)): A grant check (`GET /.cratis/on-behalf/grants`) and session started and ended notifications (`POST /.cratis/on-behalf/sessions/started` and `/sessions/ended`) that AuthProxy calls on the application. A session starts only on a live grant and an acknowledged start, and the grant is checked again every `OnBehalf:RecheckInterval`, never past its `validUntil` or `OnBehalf:MaximumLifetime`.
- **AuthProxy** ([Release v2.33.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.33.0)): During a session, requests are forwarded as the represented user with the actor in `x-cratis-on-behalf-actor` and a signed RS256 `x-cratis-on-behalf-assertion` that binds both identities, the tenant, the session, the issue, and the request's method (`htm`), path (`htu`) and service (`svc`). Signing keys rotate through `OnBehalf:Attestation:SigningKeys` and `ActiveKeyId`.
- **AuthProxy** ([Release v2.33.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.33.0)): A session reaches only `OnBehalf:Service` and the services listed in `OnBehalf:Services`, stays pinned to the tenant its grant was confirmed for, and ends when it enters an invitation, registration or account link flow.
- **AuthProxy** ([Release v2.33.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.33.0)): AuthProxy validates the `OnBehalf` section at startup and refuses to start with an unknown service, no actor requirement, unusable signing keys or values out of range.
- **Arc** ([Release v22.144.0](https://github.com/Cratis/Arc/releases/tag/v22.144.0)): `SliceLocation` in `Cratis.Arc.Slices`, a record of `ModuleName`, `FeatureName` and `SliceName` resolved from the same namespace mapping that places generated proxies (`NamespaceRoot` items and `CratisProxiesSegmentsToSkip`). `SliceLocation.For(type)` resolves any type, and `ToString()` gives `Billing/Invoices/Pay`. See [Slice location](https://github.com/Cratis/Arc/blob/main/Documentation/backend/csharp/proxy-generation/Configuration/slice-location.md). (#3533)
- **Arc** ([Release v22.144.0](https://github.com/Cratis/Arc/releases/tag/v22.144.0)): `CommandContext.SliceLocation` and `QueryContext.SliceLocation` hold the location of the executing command or query, for model-bound and controller-based commands and queries alike.
- **Arc** ([Release v22.144.0](https://github.com/Cratis/Arc/releases/tag/v22.144.0)): The Arc build emits `[assembly: SliceNamespaceRoot(...)]` and `[assembly: SliceNamespaceSegmentsToSkip(...)]` from the project's proxy configuration, so the runtime reads the same values the proxy generator does. Projects that do not build with the Arc MSBuild targets can declare the attributes themselves.
- **Arc** ([Release v22.144.0](https://github.com/Cratis/Arc/releases/tag/v22.144.0)): Generated command and query proxies declare a `static readonly sliceLocation`, importing Arc's type under the `ArcSliceLocation` alias so an application type named `SliceLocation` does not clash.
- **Arc** ([Release v22.144.0](https://github.com/Cratis/Arc/releases/tag/v22.144.0)): `SliceLocation` in `@cratis/arc/reflection`, with `SliceLocation.of(instance)` and `SliceLocation.ofType(type)` to read the location of a proxy, returning `SliceLocation.empty` when none is declared.
- **Scene** ([Release v4.85.0](https://github.com/Cratis/Scene/releases/tag/v4.85.0)): `actionButton` takes an optional `icon`, shown as a decorative PrimeIcons icon beside the label. (part of #251)
- **Scene** ([Release v4.84.0](https://github.com/Cratis/Scene/releases/tag/v4.84.0)): Forms accept `onSubmit` interaction actions. These run once, after the native command succeeds, and never on validation, authorization or exception failures. The command is not executed a second time. Forms without `onSubmit` behave as before. See [Command responses and form continuations](https://github.com/Cratis/Scene/blob/main/Documentation/architecture/command-responses.md). (#53)
- **Scene** ([Release v4.84.0](https://github.com/Cratis/Scene/releases/tag/v4.84.0)): The `commandResponse` binding source reads the successful command response inside a continuation: the whole response with an empty path, or a member such as `projectId` or `address.street`. `false`, `0` and an empty string are valid values. A nested command's response shadows the outer one, a failed command's response is never visible, and sibling actions do not see each other's responses. (#53)
- **Scene** ([Release v4.84.0](https://github.com/Cratis/Scene/releases/tag/v4.84.0)): `validateResponseBindings` (TypeScript) and `ResponseBindings.Validate` (C#) check every response binding against producer-supplied response and destination contracts before anything runs. A reference to an unknown or void response, a missing or inherited member, an unsupported path, an incompatible destination, or a null where the contract does not allow one is rejected. At runtime, an unavailable or incompatible response value reports a finding and stops the continuation instead of acting on an undefined value. (#53)
- **Stage** ([Release v4.202.1](https://github.com/Cratis/Stage/releases/tag/v4.202.1)): The mark in the topbar and sidebar opens the landing page (the first screen).
- **Stage** ([Release v4.202.1](https://github.com/Cratis/Stage/releases/tag/v4.202.1)): The application title and icon come from the `identity` of the ui profile, so the model names its own application instead of "Cratis Stage".
- **Scene** ([Release v4.83.0](https://github.com/Cratis/Scene/releases/tag/v4.83.0)): `core:guarded-action` component: an action with ordered `when <condition> execute <Command>` alternatives runs the first alternative whose condition holds for the selected item, falls back to `otherwise execute <Command>` or hides itself, and stays hidden while nothing is selected. See [Guarded actions](https://github.com/Cratis/Scene/blob/main/Documentation/architecture/guarded-actions.md). (#68)
- **Scene** ([Release v4.83.0](https://github.com/Cratis/Scene/releases/tag/v4.83.0)): Interaction bindings can carry ordered guarded alternatives with first-match semantics, evaluated against the interaction's subject. (#68)
- **Scene** ([Release v4.83.0](https://github.com/Cratis/Scene/releases/tag/v4.83.0)): Guard conditions evaluate identically in C# and TypeScript: a condition on a missing field never matches, a field that is present and null matches only `== null`, and a condition that cannot be evaluated fails closed with diagnostic `SCENE-GUARD-001`. (#68)
- **Scene** ([Release v4.83.0](https://github.com/Cratis/Scene/releases/tag/v4.83.0)): `InteractionContext` accepts an optional `subject`, the item an interaction acts on. (#68)

## Changed

- **Prompter** ([Release v0.12.0](https://github.com/Cratis/Prompter/releases/tag/v0.12.0)): Generated answers, suggestions and issue drafts show only approved documentation links as active links, and mentions in generated text no longer notify anyone; this also applies to each message after a long answer is split
- **Prompter** ([Release v0.12.0](https://github.com/Cratis/Prompter/releases/tag/v0.12.0)): Documentation indexing stops at fixed page, size, chunk and token limits and publishes nothing from a crawl that exceeds them
- **Prompter** ([Release v0.12.0](https://github.com/Cratis/Prompter/releases/tag/v0.12.0)): Documentation fetching follows at most one redirect, and only within the documentation site, and reads responses with size limits
- **Prompter** ([Release v0.12.0](https://github.com/Cratis/Prompter/releases/tag/v0.12.0)): Suggestion buttons accept only short plain-text labels
- **Screenplay.Generation** ([Release v0.19.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.19.0)): Generation now builds on Cratis.Screenplay 5.1.0, so generated Screenplay definitions use the Screenplay 5 language (#84)
- **Stage** ([Release v4.213.0](https://github.com/Cratis/Stage/releases/tag/v4.213.0)): Specification failure text shows a structured value on one line in the words of its block: `(member = value, ...)`, `(item value, ...)`, `none` and `empty`, instead of JSON.
- **Screenplay** ([Release v5.0.0](https://github.com/Cratis/Screenplay/releases/tag/v5.0.0)): **Breaking:** `{...}` and `[...]` values are no longer accepted anywhere in a `.play` document: component properties, literal bindings, composition values, specification, `case` and `example` values, seeds, productions, reactions, captures, operation inputs, generated fixtures and exact-mode projection literals. The printer writes the block form.
- **Screenplay** ([Release v5.0.0](https://github.com/Cratis/Screenplay/releases/tag/v5.0.0)): A step header that carries one inline assignment (`given Invoice total = 1000`) takes scalars only. A structured value moves to its own line under the header.
- **Screenplay** ([Release v5.0.0](https://github.com/Cratis/Screenplay/releases/tag/v5.0.0)): The event model board shows a structured value on one line as `(member = value, ...)` or `(item value, ...)` instead of JSON.
- **AI** ([Release v7.128.0](https://github.com/Cratis/AI/releases/tag/v7.128.0)): `cratis-stage-rendering-and-sandbox` and `cratis-screenplay-authentication-and-onboarding` teach that a model's `offering` renders against Box Office and that the `signupDeclined` email is sent when a sign-up is declined, with `STAGE-ONBOARDING-008` replacing the retired `STAGE-ONBOARDING-001` and `-007`
- **AI** ([Release v7.128.0](https://github.com/Cratis/AI/releases/tag/v7.128.0)): `cratis-showrunner-herald` teaches that Herald records in the host application's event store in an `AddCratis` host
- **AI** ([Release v7.128.0](https://github.com/Cratis/AI/releases/tag/v7.128.0)): `InvitationRejected` is taught as a host configuration problem, never a message to the invitee
- **cli** ([Release v3.118.0](https://github.com/Cratis/cli/releases/tag/v3.118.0)): The CLI bundles Stage 4.212.0: `cratis render` renders a model's `offering` against Box Office and sends the `signupDeclined` email when Ante declines a reviewed sign-up, and `cratis run` uses the `cratis/stage:4.212.0` image by default
- **cli** ([Release v3.118.0](https://github.com/Cratis/cli/releases/tag/v3.118.0)): `cratis run` starts `ghcr.io/cratis/ante:1.6.0` by default for models that declare onboarding, which supports reviewing sign-ups before they complete
- **Stage** ([Release v4.212.0](https://github.com/Cratis/Stage/releases/tag/v4.212.0)): Rendered applications with onboarding use `Cratis.Ante.Contracts` 1.6.0 and Chronicle 19.115.2, and reference `Cratis.Showrunner.BoxOffice` 1.13.0 when the model names an offering
- **Ante** ([Release v1.6.0](https://github.com/Cratis/Ante/releases/tag/v1.6.0)): `InvitationRejected` is documented as a configuration problem for the host to correct, not a message to send to the invitee
- **Prompter** ([Release v0.11.0](https://github.com/Cratis/Prompter/releases/tag/v0.11.0)): Large documentation tables are split into header-repeating row groups so individual capabilities are easier to retrieve, while ordinary page chunks retain their identities (#97)
- **cli** ([Release v3.116.0](https://github.com/Cratis/cli/releases/tag/v3.116.0)): The CLI bundles Stage 4.211.0 and Screenplay 4.259.0, and `cratis run` uses the `cratis/stage:4.211.0` image by default
- **Stage** ([Release v4.211.0](https://github.com/Cratis/Stage/releases/tag/v4.211.0)): Rendered applications with onboarding use Chronicle 19.114.0, which `Cratis.Ante.Contracts` requires; other applications keep their Chronicle version
- **Stage** ([Release v4.211.0](https://github.com/Cratis/Stage/releases/tag/v4.211.0)): Stage renders with Screenplay 4.259.0
- **Prompter** ([Release v0.10.2](https://github.com/Cratis/Prompter/releases/tag/v0.10.2)): Overview answers can include the detailed sections of a page whose summary matched, such as the product table on the Cratis stack page, within the existing passage budget (#95)
- **Prompter** ([Release v0.10.2](https://github.com/Cratis/Prompter/releases/tag/v0.10.2)): Citation numbers refer to pages instead of excerpts, and the Sources line in Discord and the CLI is numbered so each `[n]` matches its source (#95)
- **Showrunner** ([Release v1.12.0](https://github.com/Cratis/Showrunner/releases/tag/v1.12.0)): The JavaScript packages require `@cratis/arc` 22.155 or later.
- **Prompter** ([Release v0.10.0](https://github.com/Cratis/Prompter/releases/tag/v0.10.0)): The bot's indexing limits are now $0.25 per run and $0.50 per day, the same as the scheduled index Job. The bot still cannot start a paid full reindex (#86)
- **Prompter** ([Release v0.10.0](https://github.com/Cratis/Prompter/releases/tag/v0.10.0)): Index spend alerts recognize a confirmed full-reindex day. On that day the usual tiers are silenced, spend above the daily limit raises a warning, and only spend above the recorded full-run ceiling pages as critical (#86)
- **cli** ([Release v3.115.0](https://github.com/Cratis/cli/releases/tag/v3.115.0)): The CLI now bundles Prologue 2.1.0, and `prologue start` prints the `cratis/prologue-extractor:2.1.0` image.
- **Prompter** ([Release v0.8.0](https://github.com/Cratis/Prompter/releases/tag/v0.8.0)): The relevance check now considers every search candidate, not just the top eight, so a strong match is no longer crowded out by keyword matches. The similarity threshold is unchanged and off-topic questions are still refused (#85)
- **Prompter** ([Release v0.8.0](https://github.com/Cratis/Prompter/releases/tag/v0.8.0)): Indexing meters actual embedding spend per batch against the run and daily ceilings instead of reserving the worst case up front. A confirmed full reindex has its own $1.00 ceiling (#84)
- **Prompter** ([Release v0.8.0](https://github.com/Cratis/Prompter/releases/tag/v0.8.0)): The index Job refuses a daily ceiling above $0.50 and a full-run ceiling above $1.00 (#84)
- **Prologue** ([Release v2.1.0](https://github.com/Cratis/Prologue/releases/tag/v2.1.0)): Observations from different services are never correlated into the same capture, however close together they happen.
- **Prologue** ([Release v2.1.0](https://github.com/Cratis/Prologue/releases/tag/v2.1.0)): Telemetry claimed by a named service is captured even when `openTelemetry.serviceNames` would exclude it; that filter now applies to the default service only.
- **Prologue** ([Release v2.1.0](https://github.com/Cratis/Prologue/releases/tag/v2.1.0)): The Extractor refuses to start when two named services claim the same reverse-proxy cluster or telemetry service name.
- **AI** ([Release v7.126.0](https://github.com/Cratis/AI/releases/tag/v7.126.0)): The specification, command, event, read-model, reducer and reactor skills follow the new table and show a plain `Handle` spec, a negative authorization scenario and a reactor called directly with substitutes (#968)
- **Arc** ([Release v22.154.3](https://github.com/Cratis/Arc/releases/tag/v22.154.3)): Tenant membership hooks (`ITenantMembership`) are now resolved once per request or observable-query subscription and reused only within it, instead of on every tenant read. The membership check itself still runs on every read, and applications without a hook are unaffected. (#3598)
- **cli** ([Release v3.114.0](https://github.com/Cratis/cli/releases/tag/v3.114.0)): `cratis init` adds `.cratis/local/` to `.gitignore` so the selected environment stays per user
- **Prompter** ([Release v0.7.0](https://github.com/Cratis/Prompter/releases/tag/v0.7.0)): The incremental reindex ceiling is raised to 4M reserved tokens and $0.25 per run (the daily $0.50 cap is unchanged), so the release-note and sample sources and ordinary documentation changes fit in one run
- **Ante** ([Release v1.5.0](https://github.com/Cratis/Ante/releases/tag/v1.5.0)): Hosts that enable persona or invitation-type restrictions must observe `InvitationRejected` generation 4 before upgrading Ante; hosts that do not use the onboarding contract see no change
- **cli** ([Release v3.113.1](https://github.com/Cratis/cli/releases/tag/v3.113.1)): The CLI bundles Stage 4.210.2, which is built against the bundled Screenplay 4.258.0, so the Stage and Screenplay pair matches Cratis Studio again. `cratis run` uses the `cratis/stage:4.210.2` image by default, and generated applications use Arc 22.146.0. (#512)
- **cli** ([Release v3.113.1](https://github.com/Cratis/cli/releases/tag/v3.113.1)): `cratis render` now renders ESM v31 policies whose whole condition is `require anonymous` as `[AllowAnonymous]` (information diagnostic `STAGE-ESM-060`) instead of refusing the model; anonymous access combined with other conditions reports `STAGE-ESM-015`.
- **Arc** ([Release v22.154.2](https://github.com/Cratis/Arc/releases/tag/v22.154.2)): Signed forwarded identity parses its configuration once per options change, reducing per-request allocation. (#3591)
- **Chronicle** ([Release v19.115.1](https://github.com/Cratis/Chronicle/releases/tag/v19.115.1)): Live delivery now writes an observer's per-partition handled-event counts in batches, on the same write-coalescing interval replay and catch-up already use, instead of once per delivery. The running totals reported for the observer stay current. This raises live throughput for observers that handle events from many interleaved event sources.
- **AI** ([Release v7.125.2](https://github.com/Cratis/AI/releases/tag/v7.125.2)): The pull-request labelling guidance now says that in Cratis/AI a skill or rule change ships to users through `@cratis/pi` and is labelled `patch` (a fix to existing guidance) or `minor` (new or changed guidance); only the `.cratis/ai/` copy inside a consumer repository counts as documentation for `no-release` (#417)
- **Stage** ([Release v4.210.1](https://github.com/Cratis/Stage/releases/tag/v4.210.1)): Stage now references Screenplay 4.258.0 and Scene 4.86.0; upgrade both packages together when pinning Stage.
- **Stage** ([Release v4.210.0](https://github.com/Cratis/Stage/releases/tag/v4.210.0)): Update Arc dependencies to 22.146.0 and Screenplay to 4.256.0 (#729)
- **Stage** ([Release v4.210.0](https://github.com/Cratis/Stage/releases/tag/v4.210.0)): The generated development scaffold probes Chronicle's HTTPS health endpoint with a Docker Compose healthcheck, and its README starts services with `docker compose up -d --wait` (#873)
- **Stage** ([Release v4.210.0](https://github.com/Cratis/Stage/releases/tag/v4.210.0)): Document sandbox discovery's secure defaults and the forwarded-identity opt-in (#710)
- **Arc** ([Release v22.154.0](https://github.com/Cratis/Arc/releases/tag/v22.154.0)): `Given.ForEventSource(...).ReadModel(...)` in `CommandScenario` now throws `PinnedPerStreamReadModelIsNotSupported` for a per-stream read model, whose route a source-only pin cannot identify. Seed such models with `Given.ForEventSource(...).OnRoute(...).Events(...)` instead.
- **Chronicle** ([Release v19.115.0](https://github.com/Cratis/Chronicle/releases/tag/v19.115.0)): Rolling upgrades are supported from 19.111 onward: replace nodes one at a time. When upgrading from a version before 19.115.0, stop all nodes, or keep public client traffic off the cluster until every node runs 19.115.0. Upgrading from an earlier 19.x release needs a stop-all upgrade: stop every node, then start the new version. See [Rolling deploys](https://github.com/Cratis/Chronicle/blob/main/Documentation/hosting/rolling-deploy.md). (#5416)
- **Chronicle** ([Release v19.115.0](https://github.com/Cratis/Chronicle/releases/tag/v19.115.0)): PostgreSQL storage now defaults to a maximum of 20 connections per
- **AI** ([Release v7.125.1](https://github.com/Cratis/AI/releases/tag/v7.125.1)): Engineering guidance now says to verify locally, not through CI: build, specification, lint and frontend gates run on the developer machine before a push, and CI is the final confirmation before merge and deploy. On a shared machine, agents cap build and spec parallelism and run one heavy phase at a time.
- **AI** ([Release v7.125.1](https://github.com/Cratis/AI/releases/tag/v7.125.1)): A pull request is opened once, when the work is verified, instead of early or kept alive with pushes. Related work goes into one PR, opened by the orchestrator rather than by each sub-agent. The ship-changes prompt and the orchestrator agent say the same.
- **AI** ([Release v7.125.1](https://github.com/Cratis/AI/releases/tag/v7.125.1)): Agents assign every pull request they open to the user they run for (`gh pr create --assignee @me`), extending the existing issue-claiming rule.
- **AI** ([Release v7.125.1](https://github.com/Cratis/AI/releases/tag/v7.125.1)): Run `cratis ai update` to receive the changed rules, prompt and agents.
- **Arc** ([Release v22.153.2](https://github.com/Cratis/Arc/releases/tag/v22.153.2)): Proxy generation now fails with an error naming the validator when its rules cannot be extracted, instead of silently generating a proxy without them. A validator that uses an injected service while declaring its rules (outside a rule predicate) now fails generation; move that use inside the rule predicates. (#3584)
- **Components** ([Release v4.38.2](https://github.com/Cratis/Components/releases/tag/v4.38.2)): Public type verification now runs against `pixi.js` 8.22.0 and Arc 22.153.1. The Canvas WebGPU declaration exception is removed, so Canvas declarations are checked strictly under TypeScript 6 and 7. The Arc React global JSX exception remains until Arc ships a fix (part of #176)
- **Fundamentals** ([Release v7.30.2](https://github.com/Cratis/Fundamentals/releases/tag/v7.30.2)): The type discovery source generator now caches what it learns from referenced assemblies across source edits and reruns discovery only for references whose relevant metadata changed. In a solution with about 176 references, a warm source edit now takes under a millisecond in the generator instead of rediscovering every referenced type. The generated output is unchanged. (#1235)
- **AI** ([Release v7.125.0](https://github.com/Cratis/AI/releases/tag/v7.125.0)): Application specification guidance now has specs supply read-model state and assert outcomes, and never configure decision reads or simulate competing appends. Arc's and Chronicle's own specifications prove those guarantees. `AppendConcurrently` is described as an advanced framework-verification API for explicit needs only.
- **AI** ([Release v7.125.0](https://github.com/Cratis/AI/releases/tag/v7.125.0)): Command guidance recommends taking the read model as a `Handle` parameter, with `[ReadProtection(On)]` where a rule must hold under concurrency, instead of reading through `IDecisionReads` in `Handle`.
- **AI** ([Release v7.125.0](https://github.com/Cratis/AI/releases/tag/v7.125.0)): Cratis code, documentation and examples always use and recommend the most idiomatic Cratis way unless something else is explicitly needed.
- **AI** ([Release v7.125.0](https://github.com/Cratis/AI/releases/tag/v7.125.0)): Fast feedback is a stated requirement. Specs share setup where safe and run in parallel. Analyzers and generators are written for speed, and CI builds the specification path without analyzers while a parallel required job enforces every analyzer.
- **AI** ([Release v7.125.0](https://github.com/Cratis/AI/releases/tag/v7.125.0)): A repository's accepted decision records and project rules are binding for AI work in that repository.
- **Showrunner** ([Release v1.7.0](https://github.com/Cratis/Showrunner/releases/tag/v1.7.0)): Register the `BoxOffice.ManageCompute` authorization policy next to `BoxOffice.ManageSeats`, to say who may set compute budgets and concurrency limits.
- **Showrunner** ([Release v1.7.0](https://github.com/Cratis/Showrunner/releases/tag/v1.7.0)): `Cratis.Showrunner.BoxOffice` now references `Cratis.Showrunner.BoxOffice.Offering`, whose declared modules and meters gating and admission read. Compute admission needs `AddBoxOfficeOffering` and `AddBoxOfficeMetering`.
- **AI** ([Release v7.124.0](https://github.com/Cratis/AI/releases/tag/v7.124.0)): Application specs for pure decisions call `Handle()` or the validator directly with supplied read-model state; `CommandScenario`, `ReadModelScenario` and `ReactorScenario` are reserved for what the pipeline, validation, authorization, constraints or projections actually contribute, with measured per-fact costs to weigh the choice. (#962)
- **AI** ([Release v7.124.0](https://github.com/Cratis/AI/releases/tag/v7.124.0)): Decision reads and read protection are invisible to application spec authors: the concurrency and guard matrix is proven in Arc and Chronicle, and an application keeps one assembly-level decision-read admission spec for its own decision models. The spec-writer agent, the add-business-rule prompt and code-review guidance say the same. (#962)
- **AI** ([Release v7.124.0](https://github.com/Cratis/AI/releases/tag/v7.124.0)): Guidance on the shared specification lifecycle, shared projection setup and running specs fast is updated, including the extended CRSPEC0008 and new CRSPEC0012 checks in Cratis Specifications 5.2.0. (#962)
- **AI** ([Release v7.124.0](https://github.com/Cratis/AI/releases/tag/v7.124.0)): Run `cratis ai update` to pick up the new guidance. (#962)
- **Showrunner** ([Release v1.6.0](https://github.com/Cratis/Showrunner/releases/tag/v1.6.0)): `AnnouncementId` is now an `EventSourceId<Guid>`, so an announcement has its own stream where it is authored, received and acknowledged. Contract events still carry it as a payload field.
- **Showrunner** ([Release v1.6.0](https://github.com/Cratis/Showrunner/releases/tag/v1.6.0)): The CI check that the committed proxies are current now covers every backend project that generates them.
- **Prompter** ([Release v0.5.0](https://github.com/Cratis/Prompter/releases/tag/v0.5.0)): Generate answers with Claude Haiku 5.5 and keep them short, leading with the direct answer and linking to the cited pages for detail. (#62)
- **Prompter** ([Release v0.5.0](https://github.com/Cratis/Prompter/releases/tag/v0.5.0)): Reindex production on a daily schedule, re-embedding only changed pages within the existing spend caps. (#67)
- **Prompter** ([Release v0.5.0](https://github.com/Cratis/Prompter/releases/tag/v0.5.0)): Build the container image faster by cross-compiling for arm64 instead of emulating it, and cache image layers between builds.
- **Specifications** ([Release v5.2.0](https://github.com/Cratis/Specifications/releases/tag/v5.2.0)): CRSPEC0008 now also reports indirect changes it can prove from the code: writes through nested members and indexers (including compound assignment and `++`/`--`), null-conditional access such as `_x?.Clear()`, `Dispose`/`DisposeAsync` on a shared field, reconfiguring a shared NSubstitute substitute (`Returns`, `Throws`, `When`, `ClearReceivedCalls`), and calls to a method in the same file that does any of these. The message names the method the change goes through. (#97)
- **Specifications** ([Release v5.2.0](https://github.com/Cratis/Specifications/releases/tag/v5.2.0)): Upgrade: CRSPEC0008 is an error, so specification projects on the shared lifecycle can get new build errors where a fact really changes shared state. Move the change into `Because`, or mark the class `[PerFactSpecificationLifecycle]`. (#97)
- **Prompter** ([Release v0.3.1](https://github.com/Cratis/Prompter/releases/tag/v0.3.1)): Use `Answering:MinSemanticSimilarity` to configure passage relevance filtering; legacy `Answering:MinScore` settings no longer control retrieval refusals.
- **Prompter** ([Release v0.3.0](https://github.com/Cratis/Prompter/releases/tag/v0.3.0)): Configure answering with Sonnet 5.5, bounded reasoning and task-specific generation settings. (part of #51)
- **Prompter** ([Release v0.3.0](https://github.com/Cratis/Prompter/releases/tag/v0.3.0)): Bound provider retries and indexing costs, serialize index runs and publish corpus updates atomically. (part of #51)
- **Prompter** ([Release v0.3.0](https://github.com/Cratis/Prompter/releases/tag/v0.3.0)): Run `cratis ai update` to receive updated AI hooks.
- **cli** ([Release v3.112.0](https://github.com/Cratis/cli/releases/tag/v3.112.0)): The CLI bundles Stage 4.209.0, and `cratis run` uses the `cratis/stage:4.209.0` image by default. Generated applications use Arc 22.143.0 and Chronicle 19.112.1.
- **cli** ([Release v3.112.0](https://github.com/Cratis/cli/releases/tag/v3.112.0)): The CLI bundles Screenplay 4.258.0, Arc source adapter 22.153.0, CritterStack source adapter 0.26.1 and Screenplay generation providers 0.18.2. The canonical Vogen compatibility baseline uses Marten 9.45.0, Wolverine 6.45.0 and Vogen 8.0.7.
- **Screenplay** ([Release v4.257.0](https://github.com/Cratis/Screenplay/releases/tag/v4.257.0)): `SemanticCommandBodyResult` and `SemanticTypedContextDescriptor` gain new init members, so record equality, hashing and `ToString` now include them (part of #1102)
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): Requires Chronicle 19.112.1 or later. Rendered applications now pin Chronicle 19.112.1 and Arc 22.143.0. (part of #874)
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): Rendered applications pin Microsoft.Extensions.Telemetry.Abstractions 10.11.0, and its Microsoft.Extensions.Compliance.Abstractions 10.11.0 dependency, to work around Cratis/Chronicle#5442.
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): Members whose implementation body is not C# are now refused with `STAGE-IMPL-LANGUAGE`, including query performers that previously became stubs. Add a C# body to render them with the Cratis target. (part of #869)
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): Generated inline command handlers and generation helpers now get readable, stable names instead of hash-based ones. (part of #850)
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): The Stage host and the legacy model loader now load models that declare `command reads protected`, and run protected decisions safely on the default engine. Engines that cannot preserve protected reads refuse such a model with STAGE-ESM-044 instead of ignoring it. (#892)
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): An event member whose type Stage can't render now degrades only the owners that depend on it, instead of refusing the whole render. Strict mode and unaudited newer ESM versions still refuse. (#832)
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): Specifications that reach Translate commands are now refused with STAGE-ESM-024. (#731)
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): The Billing sample now uses the executable model: declarative productions replace the handler escape hatches, and invoice settlement is shown through an outstanding-balance read model. (#885)
- **Arc** ([Release v22.153.0](https://github.com/Cratis/Arc/releases/tag/v22.153.0)): Arc now uses Screenplay 4.256.0 and Screenplay Generation 0.18.2. Generated screen actions state their subject explicitly (`for screen`), so Screenplay neither infers a subject nor warns about legacy row matching (#3576)
- **AuthProxy** ([Release v2.37.1](https://github.com/Cratis/AuthProxy/releases/tag/v2.37.1)): The authentication documentation now explains the `502 upstream sent too big header` failure behind ingress-nginx and recommends `proxy-buffer-size: "16k"`. (part of #225)
- **Arc** ([Release v22.152.0](https://github.com/Cratis/Arc/releases/tag/v22.152.0)): The Arc source generator now registers every model-bound read model that has a collection query, with the type of each public property. Counting, paging and sorting its `IQueryable` results then use typed operations instead of building generic methods at runtime. Sort fields, sort directions, thrown exceptions and the expressions handed to query providers stay the same. Under the JIT, element and property types without a registration keep the reflection path. In ahead-of-time compiled code they fail with `MissingQueryableElementType` or `MissingQueryableSortKey`, which name the types. (part of #2855)
- **Screenplay** ([Release v4.256.0](https://github.com/Cratis/Screenplay/releases/tag/v4.256.0)): `PLAY0800` refusals for command handlers now say which condition failed (conditional `produces`, hints, or an empty body) and how to write a handler Screenplay accepts. Reactions that read a read model and also produce directly now point to invoking a command instead (#1101)
- **Screenplay** ([Release v4.256.0](https://github.com/Cratis/Screenplay/releases/tag/v4.256.0)): Handler, implementation and diagnostic records gain new init members, so their equality, hashing, `ToString` and serialization now include those members (part of #1102)
- **Screenplay** ([Release v4.256.0](https://github.com/Cratis/Screenplay/releases/tag/v4.256.0)): The generated-values documentation now has a support matrix showing which generated-value forms each compiler, the MCP tools, Arc, Stage and Studio support (part of #614)
- **Arc** ([Release v22.149.0](https://github.com/Cratis/Arc/releases/tag/v22.149.0)): A grouped controller or controller action whose group has no port now fails startup instead of being served on no port. (#3543)
- **Arc** ([Release v22.148.2](https://github.com/Cratis/Arc/releases/tag/v22.148.2)): Updated Cratis.Fundamentals to 7.27.1 and Microsoft.Extensions.DependencyModel to 10.0.14.
- **Arc** ([Release v22.148.2](https://github.com/Cratis/Arc/releases/tag/v22.148.2)): Improved trimming metadata for Entity Framework Core observable queries. (part of #2856)
- **cli** ([Release v3.110.4](https://github.com/Cratis/cli/releases/tag/v3.110.4)): Uses Cratis.Chronicle.Connections and Cratis.Chronicle.Contracts 19.113.2.
- **Chronicle.Elixir** ([Release v3.16.1](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.16.1)): Requires `cratis_chronicle_contracts` 19.114 or later, which decodes `DeliverWithinMilliseconds` on reactor and reducer deliveries. Against a Chronicle server before 19.114, every batch is still handled.
- **Chronicle** ([Release v19.114.0](https://github.com/Cratis/Chronicle/releases/tag/v19.114.0)): An attempt that fails at a later event than the previous attempt starts a new retry budget, which also resets the backoff. Only a partition that keeps failing at the same event spends its budget and gets quarantined.
- **Chronicle** ([Release v19.113.2](https://github.com/Cratis/Chronicle/releases/tag/v19.113.2)): `IObserverSubscriber.OnNext`, `IObserverPageSubscriber.OnNextPage` and the webhook `OnNext` overload now have their own Orleans response timeout of 1 hour (`ObserverSubscriberResponseTimeout`). `observers.subscriberTimeout` is now the deadline that fires; it is no longer capped by `clustering.responseTimeout`. The attribute is not part of the method's wire identity, so `OrleansContracts.txt` is unchanged and rolling upgrades are unaffected. (#5440)
- **Chronicle** ([Release v19.113.2](https://github.com/Cratis/Chronicle/releases/tag/v19.113.2)): When Orleans itself gives up on a subscriber call, it is reported as `SubscriberResponseTimedOut` with the elapsed time and the ceiling, instead of as the configured subscriber timeout. It still classifies as `FailureKind.Timeout`.
- **Chronicle** ([Release v19.113.2](https://github.com/Cratis/Chronicle/releases/tag/v19.113.2)): The kernel logs a warning at startup when `observers.subscriberTimeout` is `0` or above the 1-hour ceiling.
- **Chronicle** ([Release v19.113.2](https://github.com/Cratis/Chronicle/releases/tag/v19.113.2)): Documented how `subscriberTimeout` relates to `clustering.responseTimeout`.
- **Chronicle.Elixir** ([Release v3.16.0](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.16.0)): Reactor and reducer results echo the delivery's `DeliveryId`.
- **Chronicle.Elixir** ([Release v3.16.0](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.16.0)): `handle/2` can now run in several processes at once. This is documented under Reactors → Concurrency.
- **cli** ([Release v3.110.3](https://github.com/Cratis/cli/releases/tag/v3.110.3)): The CLI bundles the Axon renderer 0.8.0 for rendering Kotlin and Java applications.
- **Chronicle** ([Release v19.113.0](https://github.com/Cratis/Chronicle/releases/tag/v19.113.0)): A `disableTls=true` connection string without credentials no longer falls back to the development credentials. It connects without authentication.
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): Generated Maven projects still depend on `io.cratis:stage-axon-runtime`; removing that dependency is planned as part of the idiomatic Axon work. (part of #1)
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): Read models now use typed Spring Data JPA entities and repositories, with in-memory H2 by default. Rewrite inline query performers that use `ReadModelStore` against the generated repository; affected bodies become commented stubs with diagnostics. (part of #1)
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): Composite projection keys now use JPA `@EmbeddedId`, including keyed removal. Reducers targeting composite-key models report `STAGE-AXON-0305`. (#58)
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): Views are now processed by a pooled streaming event processor with sequential ordering, so concurrent events on the same read-model row no longer conflict. Reads are eventually consistent: a query issued right after a command may not yet see its effect. (part of #1)
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): Reducers and scoped projections now render as plain `@EventHandler` components writing through typed repositories, including child collections, nested scopes and supported joins. Replace custom reducer-bean overrides with event-handler components. (part of #1)
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): Reactions now use Axon event handlers and Spring scheduled methods to send commands. New reaction processors start at the latest token, so initial startup does not replay historical commands; scheduling remains process-local. (#73) (part of #1)
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): Commands, queries and subscription opening now use native Spring Security and Axon authorization; commands, queries, subscriptions and reactions carry only the caller's name and authorities as message metadata, never credentials. Unsupported policies deny access. Endpoints authorized by a composition of inline policies (for example `IsWriter and IsFinanceStaff`) now deny every caller and are listed in `UNSUPPORTED.md`; native composition is planned (see #79). An inline policy that reads claims needs bearer JWT authentication; under HTTP Basic it denies access. (#75)
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): `UNSUPPORTED.md` now groups diagnostics by code and identifies model locations, generated Java artifacts, intended behavior and limitations.
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): Validations without a Java implementation now generate documented no-ops with diagnostics rather than preventing rendering.
- **AuthProxy** ([Release v2.35.1](https://github.com/Cratis/AuthProxy/releases/tag/v2.35.1)): Sessions record the provider they were signed in with, and accounts from providers without canonical identity are told apart by provider and subject. With more than one sign-in provider configured, sessions from such providers that were signed in before this version end once and users sign in again. See [Sessions record the sign-in provider](https://github.com/Cratis/AuthProxy/blob/main/Documentation/upgrading/sessions-record-the-sign-in-provider.md).
- **Arc.Kotlin** ([Release v7.11.0](https://github.com/Cratis/Arc.Kotlin/releases/tag/v7.11.0)): The validation severity a caller requests with `X-Allowed-Severity` on commands is now limited to warnings, so error-level validation always blocks unless the command opts in or the host raises the maximum; out-of-range or unreadable values are ignored. See https://github.com/Cratis/Arc.Kotlin/blob/main/Documentation/guides/commands.mdx (#269)
- **Arc.Kotlin** ([Release v7.11.0](https://github.com/Cratis/Arc.Kotlin/releases/tag/v7.11.0)): `@TreatWarningsAsErrors` can no longer be lowered by a caller-supplied validation severity (#269)
- **Arc** ([Release v22.148.0](https://github.com/Cratis/Arc/releases/tag/v22.148.0)): Model-bound command HTTP endpoints now cap caller-allowed validation severity at `Warning` by default. If your application intentionally allows callers to relax errors, opt in with `[AllowCallerValidationSeverity(ValidationResultSeverity.Error)]` or set `Cratis:Arc:Command:MaximumCallerAllowedSeverity` to `Error`. Set `IgnoreCallerAllowedSeverity` to ignore the header even on opted-in commands. See [validation severity filtering](https://github.com/Cratis/Arc/blob/main/Documentation/backend/csharp/commands/validation-severity-filtering.md).
- **Chronicle.TypeScript** ([Release v6.54.0](https://github.com/Cratis/Chronicle.TypeScript/releases/tag/v6.54.0)): The connection guide recommends enabling certificate validation for every server other than a local development kernel: https://github.com/Cratis/Chronicle.TypeScript/blob/main/Documentation/connecting.md (part of #263)
- **AuthProxy** ([Release v2.35.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.35.0)): The selected tenant cookie is signed and tied to the account that selected it; cookies from earlier versions are upgraded on first use.
- **AuthProxy** ([Release v2.35.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.35.0)): Tenant membership is confirmed on every request that carries a selected tenant, including anonymous, invitation and registration paths; when the tenants endpoint cannot answer, the request is not forwarded with that tenant.
- **AuthProxy** ([Release v2.35.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.35.0)): Session requests no longer forward the caller's `Authorization` header unless the service sets `CallerAuthorizationHeader: Forward`.
- **AuthProxy** ([Release v2.35.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.35.0)): AuthProxy's own cookies are no longer forwarded to services.
- **AuthProxy** ([Release v2.35.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.35.0)): Tenant identifiers from every strategy follow the bearer-route rules (letters, digits, `-._~`, at most 256 characters).
- **AuthProxy** ([Release v2.35.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.35.0)): Identity bindings for legacy principals now include the identity provider; when several providers are configured, a principal without a provider must sign in again.
- **AuthProxy** ([Release v2.34.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.34.0)): Configuring both `Invite:PublicKeyPem` and `Invite:TokenMetadataUrl` is rejected at startup; `Invite:TokenMetadataUrl` requires `Invite:Issuer` and `Invite:Audience`. (#142)
- **AI** ([Release v7.122.1](https://github.com/Cratis/AI/releases/tag/v7.122.1)): Cratis.AI now depends on KubernetesClient 21.0.8, so it works in applications that reference KubernetesClient 21; before this, every worker launch there failed with a missing-method error. Applications still on KubernetesClient 19 must upgrade to 21.
- **cli** ([Release v3.110.0](https://github.com/Cratis/cli/releases/tag/v3.110.0)): The CLI bundles Stage 4.208.0 and Screenplay 4.254.0. Generated specifications now run inline and file named rules, policies, reducers, command handlers and deterministic reaction bodies, so those slices are verified instead of skipped. In default mode, `cratis render` now renders a read model without a projection as an empty read model, and omits `$eventContext` projection mappings with a warning instead of refusing. See the [Stage 4.208.0 release](https://github.com/Cratis/Stage/releases/tag/v4.208.0) for the full list (#495)
- **cli** ([Release v3.110.0](https://github.com/Cratis/cli/releases/tag/v3.110.0)): `cratis run` uses the `cratis/stage:4.208.0` image by default (#495)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Requires Screenplay 4.254.0 or later.
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Rendered C# uses short type names, including the request localization setup in the scaffolded `Program.cs` (#819)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Reaction renderers declare only the event-property locals the authored body uses (part of #850)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): `cratis render` now refuses decimal composite key parts, which MongoDB may split on replay, until Chronicle fixes it (#872)
- **Chronicle** ([Release v19.111.1](https://github.com/Cratis/Chronicle/releases/tag/v19.111.1)): Unique constraints in a batch append are checked with one read for the whole batch and indexed with one bulk write per thousand changes, instead of two storage round trips per event. A 100-event batch with a `[Unique]` property now takes about 32 ms instead of 840 ms, and 6000 events take about 0.7 s. (part of #5429)
- **Chronicle** ([Release v19.111.1](https://github.com/Cratis/Chronicle/releases/tag/v19.111.1)): Encryption keys for new `[PII]` subjects are generated ahead of demand, in parallel on every core. A 1000-event batch introducing 100 subjects now takes about 1.2 s instead of 6.9 s. (part of #5429)
- **Stage** ([Release v4.207.0](https://github.com/Cratis/Stage/releases/tag/v4.207.0)): The Cratis render target now uses the core header. The legacy `cratis-render:file-header` input and `FileHeaderInput` keep working unchanged, and a header refusal in a caller profile now reports `STAGE-HEADER-001`. (#861)
- **Stage** ([Release v4.207.0](https://github.com/Cratis/Stage/releases/tag/v4.207.0)): Generated required-text validation now uses FluentValidation's built-in `NotEmpty()` rule, so its error code is `NotEmptyValidator`. (part of #497)
- **Stage** ([Release v4.207.0](https://github.com/Cratis/Stage/releases/tag/v4.207.0)): Generated commands rely on project-wide read protection instead of repeating per-command attributes; protected-read admission and explicit hand-written opt-outs are preserved. (#660) (#784)
- **cli** ([Release v3.109.0](https://github.com/Cratis/cli/releases/tag/v3.109.0)): `cratis render --target cratis` no longer refuses the whole render in default mode when the execution plan cannot run a slice (for example `PLAN-UNSUPPORTEDEVENTCONTEXT`). The issue is reported as a warning and the model is handed to the renderer, as `--target axon` already does. `--strict` still refuses. (#493)
- **cli** ([Release v3.108.0](https://github.com/Cratis/cli/releases/tag/v3.108.0)): `--strict` now reaches the Axon renderer: renderer errors block publication and degradation evidence returns exit `9`, instead of being ignored with a `CLI-RENDER-030` warning. Axon promotes its warnings to errors under `--strict`, so strict Axon renders of apps with warnings such as `STAGE-AXON-0308` now fail. (#489)
- **cli** ([Release v3.108.0](https://github.com/Cratis/cli/releases/tag/v3.108.0)): In default mode, execution-plan issues that belong to individual slices (for example `PLAN-UNSUPPORTEDEVENTCONTEXT`) become `PLAN-*` warnings and the Axon render continues, instead of refusing the whole render. `--strict` and the Cratis target are unchanged. (#489)
- **cli** ([Release v3.107.1](https://github.com/Cratis/cli/releases/tag/v3.107.1)): The CLI bundles Stage 4.206.0, where the theme the user chose with the toggle survives a refresh.
- **Stage.Axon** ([Release v0.7.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.7.0)): Existing persistent databases and processor tokens from earlier generated Axon applications are refused at startup and must be rebuilt, because persistent read-model processing now uses row-key sequencing (#65)
- **Chronicle.Elixir** ([Release v3.14.4](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.14.4)): Appends and unit-of-work commits now wait up to 60 seconds instead of the gRPC 10-second default, so large batches no longer fail with `deadline exceeded` after the kernel has already committed them.
- **Chronicle.Elixir** ([Release v3.14.4](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.14.4)): `append/3`, `append_many/3` and `append_many_for_event_sources/2` accept a `:timeout` option (milliseconds or `:infinity`). (#188)
- **Stage.Axon** ([Release v0.6.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.6.0)): The read-model and persistence helpers of generated Axon applications now come from `io.cratis:stage-axon-runtime` instead of being generated into each application (part of #17)
- **Stage.Axon** ([Release v0.6.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.6.0)): Existing persistent read-model databases rebuild their views once after upgrading, because the persistence fingerprint changes. (part of #17)
- **Stage.Axon** ([Release v0.6.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.6.0)): The STAGE-AXON-0308 notes in generated Axon applications now say whether the persistent profile stores each read model durably, and why persistent startup refuses the ones it does not support. (#56)
- **Stage.Axon** ([Release v0.6.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.6.0)): Generated Axon applications now report read models that nothing writes with their own STAGE-AXON-0309 note instead of STAGE-AXON-0308, and those read models no longer block persistent startup unless a query can change them. (#60)
- **Stage.Axon** ([Release v0.6.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.6.0)): An inline implementation body on a reaction that cannot be placed is now reported once, through the unplaced-body diagnostic (`STAGE-AXON-IMPL-LANGUAGE` or `STAGE-AXON-IMPL`), with its specific reason in the warning, the generated comment and `UNSUPPORTED.md`; the reaction's `STAGE-AXON-0504` "not registered" warning no longer repeats the reason (#61)
- **Stage.Axon** ([Release v0.6.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.6.0)): The Axon renderer builds against Stage Contracts 4.205.0 and Screenplay 4.251.0, the versions the `cratis` CLI 3.105.0 bundles (part of #39)
- **Stage.Axon** ([Release v0.5.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.5.0)): Generated Axon applications depend on `io.cratis:stage-axon-runtime` at the renderer's version instead of carrying the core runtime helpers inline (part of #17)
- **Stage.Axon** ([Release v0.5.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.5.0)): Generated Axon command and trigger request bodies use the modelled property name when it differs from the Java member name (for example `class` instead of `class_`), matching responses, events and read models; callers that send the Java member name must send the modelled name (#44)
- **Stage.Axon** ([Release v0.5.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.5.0)): Generated Axon applications can now keep read models with event-context values, nested targets and reducer-only models in the persistent profile. (part of #3)
- **cli** ([Release v3.105.0](https://github.com/Cratis/cli/releases/tag/v3.105.0)): The CLI bundles Screenplay 4.251.0 and the Stage 4.205.0 container, which runs a component's `on change` for the item the user changed and drops the Theme headline above the topbar theme toggle.
- **Stage** ([Release v4.205.0](https://github.com/Cratis/Stage/releases/tag/v4.205.0)): The topbar theme toggle is the icon button alone; the Theme headline is gone.
- **Stage** ([Release v4.205.0](https://github.com/Cratis/Stage/releases/tag/v4.205.0)): Stage builds on Screenplay 4.251.0, which admits alternatives on `on change`.
- **Stage.Axon** ([Release v0.4.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.4.0)): Every Axon semantic-surface member (models, metadata, concepts, events, commands, authorization, automations, views and queries, specifications and implementations) is now explicitly classified as rendered, warned or ignored, and specs verify every claim against the generator. UUID generation options the generator cannot honour, and specification fixtures with caller claims beyond the subject, now produce an unsupported-feature warning, or a refusal under the strict profile, instead of being silently dropped. (#30)
- **Stage.Axon** ([Release v0.4.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.4.0)): A Java-target inline body written in another language now names that language and the remedy in its warning, generated comment and UNSUPPORTED.md; it still degrades by default and refuses only under strict mode (part of #3)
- **Stage.Axon** ([Release v0.4.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.4.0)): The Axon renderer builds against Stage Contracts 4.204.0, the version the `cratis` CLI 3.104.0 bundles (part of #39)
- **cli** ([Release v3.104.1](https://github.com/Cratis/cli/releases/tag/v3.104.1)): When `cratis render` or `cratis run` refuses a `ui profile` because it uses a published Scene domain blueprint that has not been approved (`CLI-RENDER-007` or `CLI-RENDER-020`), the message now names the Scene package that publishes it, for example `@cratis/scene.blueprint.invoicing` for `Cratis.Blueprint.Invoicing`, and links to the steps for approving it. The new [Use a published Scene blueprint](https://github.com/Cratis/cli/blob/main/Documentation/reference/screenplay.md#use-a-published-scene-blueprint) section gives those steps: install the package, write the approved package set with one `node` command, and pass it with `--package-set`. (#483)
- **Screenplay** ([Release v4.251.0](https://github.com/Cratis/Screenplay/releases/tag/v4.251.0)): Diagnostic `PLAY0560` now names change among the triggers that admit alternatives. An opaque `where` on a change keeps working and is not deprecated (`PLAY0564` still covers click, double click and select only).
- **Stage.Axon** ([Release v0.3.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.3.0)): The generated runtime test imports `JacksonException` instead of qualifying it (part of #3)
- **cli** ([Release v3.104.0](https://github.com/Cratis/cli/releases/tag/v3.104.0)): `cratis render` bundles Stage 4.204.0, which renders inline command handler and reaction bodies written in the model, and `cratis run` starts the `cratis/stage:4.204.0` image by default. (#479)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): Stage now builds against Screenplay 4.250.0, which accepts inline bodies beside declarative `produces`.
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): Rendered C# uses short type names with matching usings; fully qualified names remain only where two types share a name. (part of #819)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): Syntax-renderer compliance details are now rendered by default. Opt out with `complianceDetails: false`; generated details require Chronicle 19.90.1 or later. (#259)
- **Stage** ([Release v4.204.0](https://github.com/Cratis/Stage/releases/tag/v4.204.0)): Generated pure-analysis code now admits compatible concept-to-concept conversions, and a positional constructor argument mismatch in a reducer body suggests
- **Stage.Axon** ([Release v0.1.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.1.0)): The Axon renderer builds against the same `Cratis.Stage.Contracts` and `Cratis.Screenplay` versions as the `cratis` CLI, and the build fails when it gets ahead of the CLI or on a different major version (#39)
- **Stage** ([Release v4.203.0](https://github.com/Cratis/Stage/releases/tag/v4.203.0)): A command form's submit says Submit and sits beside Cancel in a dialog.
- **Stage** ([Release v4.203.0](https://github.com/Cratis/Stage/releases/tag/v4.203.0)): react-dom is a peer dependency of @cratis/stage.runtime.
- **Arc** ([Release v22.145.0](https://github.com/Cratis/Arc/releases/tag/v22.145.0)): Requests carrying an `x-cratis-on-behalf-actor` or `x-cratis-on-behalf-assertion` header now fail authentication unless forwarded identity headers are trusted, on-behalf forwarding is enabled and the assertion verifies. They are never authenticated as the represented user or the actor alone.
- **Arc** ([Release v22.145.0](https://github.com/Cratis/Arc/releases/tag/v22.145.0)): Any authentication scheme that sets `ClaimsIdentity.Actor`, such as a bearer token whose `act` claim is mapped to it, now changes the identity Chronicle records: the actor becomes `causedBy`, on behalf of the principal. See [Causation](https://github.com/Cratis/Arc/blob/main/Documentation/backend/csharp/chronicle/commands/causation.md).
- **Arc** ([Release v22.144.0](https://github.com/Cratis/Arc/releases/tag/v22.144.0)): The slice location strips the `Cratis.API` namespace prefix exactly like the proxy output folder does, so the folder and the location never differ.
- **Arc** ([Release v22.144.0](https://github.com/Cratis/Arc/releases/tag/v22.144.0)): Upgrade `@cratis/arc` to the version matching the Arc NuGet packages before regenerating proxies: regenerated proxies import `SliceLocation` from `@cratis/arc/reflection` and do not compile against an older `@cratis/arc`. Proxies generated by an earlier version report `SliceLocation.empty` until regenerated.
- **Scene** ([Release v4.85.0](https://github.com/Cratis/Scene/releases/tag/v4.85.0)): The Landing, ModuleWorkspace, FeatureSection and SliceSection gallery templates are built from the blueprint's own components and no longer require PrimeReact. Their actions keep primary and secondary emphasis, icons and navigation. (part of #251)
- **Scene** ([Release v4.85.0](https://github.com/Cratis/Scene/releases/tag/v4.85.0)): Gallery previews use PrimeReact only when every PrimeReact component the gallery borrows is registered, and otherwise render with neutral components instead of placeholders. (part of #251)
- **Stage** ([Release v4.202.1](https://github.com/Cratis/Stage/releases/tag/v4.202.1)): A dark menu is now the menu just darker than the page in a dark color scheme too, instead of an inverted light surface.
- **AI** ([Release v7.122.0](https://github.com/Cratis/AI/releases/tag/v7.122.0)): Every Cratis skill and bundled worker skill description now says only when to use the skill and when not to, with no summary of its contents (part of #948)
- **AI** ([Release v7.122.0](https://github.com/Cratis/AI/releases/tag/v7.122.0)): The skill authoring rule requires trigger-only descriptions, and corpus verification rejects descriptions that summarize (part of #948)
- **AI** ([Release v7.122.0](https://github.com/Cratis/AI/releases/tag/v7.122.0)): The review-rounds skill and review report rule bound review loops to a hard round cap, with delta rounds that check earlier findings; adapted from tstack under the MIT license (part of #948)
- **Stage** ([Release v4.202.0](https://github.com/Cratis/Stage/releases/tag/v4.202.0)): Specifications that cannot be rendered are omitted with a warning and listed in the render's refusals, including under the default refusal mode, instead of stopping the application render. (#828)

## Fixed

- **Chronicle** ([Release v19.115.4](https://github.com/Cratis/Chronicle/releases/tag/v19.115.4)): Application hosts that reference Cratis.Chronicle.Testing no longer discover the kernel's commands and queries, so they start again on 19.115 instead of failing with an unknown `Chronicle.Administrator.Operations` authorization policy. No code change is needed in the application. (#5527)
- **Orleans** ([Release v1.33.1](https://github.com/Cratis/Orleans/releases/tag/v1.33.1)): `Cratis.Orleans.Chronicle` depends on Cratis.Chronicle 19.114.0 or later again, instead of 19.115.2. Applications can stay on Chronicle 19.114 while 19.115 has startup problems with hosts that never call `WithTelemetry` (Cratis/Chronicle#5492) and with integration hosts using Chronicle.Testing (Cratis/Chronicle#5527)
- **Chronicle.Kotlin** ([Release v7.3.1](https://github.com/Cratis/Chronicle.Kotlin/releases/tag/v7.3.1)): `Duration` properties on events and read models are now sent as the .NET `TimeSpan` text the `duration` schema format declares (for example `1.02:03:04.5000000`), and `ByteArray` properties as base64 text for the `byte-array` format, so they round-trip with events written by the .NET client. Reading back also accepts ISO-8601 durations and byte arrays stored as number arrays. Precision finer than 100 nanoseconds is truncated, and a `Duration` beyond the `TimeSpan` range is rejected. (#108)
- **Showrunner** ([Release v1.14.0](https://github.com/Cratis/Showrunner/releases/tag/v1.14.0)): Notes and note collecting record and read notes in the host application's event store in an ASP.NET Core host set up with `AddCratis`, instead of an unnamed second store
- **Prologue** ([Release v3.0.1](https://github.com/Cratis/Prologue/releases/tag/v3.0.1)): The Prologue NuGet packages are published again; the v3.0.0 release stopped before publishing them because the Workbench project could not be packed with the rest of the solution
- **Arc** ([Release v22.156.3](https://github.com/Cratis/Arc/releases/tag/v22.156.3)): Screenplay analysis now reads specification values held in a base context that another project declares, and places and identifies scenario events seen through a project with references of its own, instead of dropping those scenarios or reporting them as unproduced or ambiguous. (#3612)
- **Arc** ([Release v22.156.3](https://github.com/Cratis/Arc/releases/tag/v22.156.3)): Building the ProxyGenerator specifications no longer reruns the JavaScript package builds when their inputs are unchanged. (part of #3593)
- **Arc** ([Release v22.156.2](https://github.com/Cratis/Arc/releases/tag/v22.156.2)): WebSocket and SSE observable-query subscriptions no longer share root-scoped services; each subscription now owns and disposes its own service scope. (#3600)
- **Arc** ([Release v22.156.2](https://github.com/Cratis/Arc/releases/tag/v22.156.2)): `@cratis/arc.react`, `@cratis/arc.react.mvvm` and `@cratis/arc.vite` no longer publish their test-only `global.d.ts`, and the React packages now use `React.JSX.Element`, so strict consumers without vitest, chai or sinon-chai no longer get `TS2503: Cannot find namespace 'JSX'`. (#3588)
- **Showrunner** ([Release v1.13.0](https://github.com/Cratis/Showrunner/releases/tag/v1.13.0)): Herald records its emails in the host application's event store in an ASP.NET Core host set up with `AddCratis`, instead of an unnamed second store (#76)
- **Showrunner** ([Release v1.13.0](https://github.com/Cratis/Showrunner/releases/tag/v1.13.0)): Box Office offering reporting, metering, published offers and tenant stores use the host application's event store in an `AddCratis` host
- **Prompter** ([Release v0.11.0](https://github.com/Cratis/Prompter/releases/tag/v0.11.0)): Classifier contract checks no longer fall back because of wall-clock delays during busy test runs; the production classification deadline remains enforced (#92)
- **Prompter** ([Release v0.11.0](https://github.com/Cratis/Prompter/releases/tag/v0.11.0)): Concurrent feedback clicks preserve the latest persisted vote and reserve cache capacity before writes
- **Fundamentals** ([Release v7.32.0](https://github.com/Cratis/Fundamentals/releases/tag/v7.32.0)): `EnumConverterFactory` no longer throws `NotSupportedException` ("EnumConverter`1[...] is missing native code or metadata") under NativeAOT for enums declared in assemblies compiled with the TypeDiscovery generator. Assemblies must be rebuilt with this version. For enums from other assemblies, add `new EnumConverter<TEnum>()` to `JsonSerializerOptions.Converters` (#1237)
- **Arc** ([Release v22.156.1](https://github.com/Cratis/Arc/releases/tag/v22.156.1)): Screenplay analysis now recognizes aggregate command parameters and aggregate state guards when a project sees the aggregate through references of its own, so layered applications whose projects carry different references no longer lose those bindings and guards from the model. (#3594)
- **Showrunner** ([Release v1.12.1](https://github.com/Cratis/Showrunner/releases/tag/v1.12.1)): Stage Manager now points AuthProxy at the application's Service (`<name>-app`), backend and frontend alike, so signed-in users reach the application instead of no route. A published Stage application is reached on port 9090.
- **Fundamentals** ([Release v7.31.0](https://github.com/Cratis/Fundamentals/releases/tag/v7.31.0)): Disposing a `TransformingSubject` now releases its subscriptions to the source, so a live source such as a database change stream stops instead of running on. Subscribing, replay and forwarding of completion and errors to the source are unchanged. (#1238)
- **Prompter** ([Release v0.10.2](https://github.com/Cratis/Prompter/releases/tag/v0.10.2)): Follow-up suggestion, product choice, ask-a-human, maintainer forward and feature request buttons no longer reply "Component interaction not found." (#94)
- **Prompter** ([Release v0.10.2](https://github.com/Cratis/Prompter/releases/tag/v0.10.2)): Expired or unknown buttons get a short, friendly reply instead of the library's default message (#94)
- **Prompter** ([Release v0.10.2](https://github.com/Cratis/Prompter/releases/tag/v0.10.2)): Citation markers that point to no listed source are removed, and numeric brackets inside code examples are left untouched (#95)
- **Chronicle** ([Release v19.115.3](https://github.com/Cratis/Chronicle/releases/tag/v19.115.3)): A failing grain call no longer takes the whole kernel process down when the failure comes from a storage driver. A MongoDB wait-queue-full error during a start-up burst had no Orleans codec, so writing the response threw where nothing could catch it and the pod exited with code 139, repeatedly while starting. Such failures now reach the caller as an `InvalidOperationException` that names the original exception type and keeps its message.
- **Prompter** ([Release v0.10.1](https://github.com/Cratis/Prompter/releases/tag/v0.10.1)): Long answers, such as "What are all Cratis products and what do they do?", no longer turn into "I couldn't find anything in the Cratis documentation". The answer length limit is raised, and if a reply still cannot be read, the bot lists the relevant pages it found instead of claiming the docs have nothing (#85)
- **Prompter** ([Release v0.10.1](https://github.com/Cratis/Prompter/releases/tag/v0.10.1)): After choosing a product in a "which product do you mean?" reply, the narrowed search now finds the documentation pages. When nothing matches within the chosen product, the bot searches all sources before giving up (#85)
- **Prompter** ([Release v0.10.1](https://github.com/Cratis/Prompter/releases/tag/v0.10.1)): The production eval now treats `https://www.cratis.io/<page>.md` and `https://cratis.io/<page>/` as the same page when checking citations (#85)
- **Arc** ([Release v22.156.0](https://github.com/Cratis/Arc/releases/tag/v22.156.0)): Proxy generation reads XML documentation through an index built once per file, so large applications no longer spend seconds per build looking up member documentation. (#3602)
- **Arc** ([Release v22.156.0](https://github.com/Cratis/Arc/releases/tag/v22.156.0)): Introspection looks up command and query summaries through a per-file index that is safe under concurrent requests. (#3602)
- **Prompter** ([Release v0.8.0](https://github.com/Cratis/Prompter/releases/tag/v0.8.0)): The bot exits with code 1 and a redacted error message on an unhandled failure, instead of crashing with exit code 139 (#84)
- **Prompter** ([Release v0.7.0](https://github.com/Cratis/Prompter/releases/tag/v0.7.0)): Conversation context from a thread or reply is no longer dropped when the host is busy: redaction of history now runs in linear time, and if it ever times out the affected text is removed instead of the whole history (#81)
- **Prompter** ([Release v0.7.0](https://github.com/Cratis/Prompter/releases/tag/v0.7.0)): A reindex that cannot run now exits with a clear "Index failed" message instead of crashing with exit code 139 (#83)
- **Chronicle** ([Release v19.115.2](https://github.com/Cratis/Chronicle/releases/tag/v19.115.2)): The kernel server startup task no longer crashes the whole host when SQL Server/PostgreSQL database or schema provisioning times out under concurrent cold-start contention from multiple kernel nodes; that transient storage failure is now retried the same way a not-yet-reachable sibling silo already was.
- **Arc** ([Release v22.154.2](https://github.com/Cratis/Arc/releases/tag/v22.154.2)): A cached signed forwarded-identity authentication is no longer reused after its on-behalf assertion expires. (#3591)
- **Arc** ([Release v22.154.2](https://github.com/Cratis/Arc/releases/tag/v22.154.2)): Arc.Core now keeps the hosting options and the generated query methods when an application is trimmed, so NativeAOT hosts bind the configured `Cratis:Arc:Hosting:ApplicationUrl` instead of port 5001. (part of #3595)
- **Chronicle** ([Release v19.115.1](https://github.com/Cratis/Chronicle/releases/tag/v19.115.1)): A slow reactor or other observer no longer holds back the reducers, projections and reactors the kernel assigns to the same appended-events queue. Each observer now receives live events at its own pace. An observer that falls further behind than the queue capacity spills to catch-up on its own, and the others keep receiving live events. Raising the number of queues is no longer needed to keep a slow observer from delaying others. See [How observers use the queues](https://github.com/Cratis/Chronicle/blob/main/Documentation/hosting/configuration/events.md#how-observers-use-the-queues). (#5469)
- **Chronicle** ([Release v19.115.1](https://github.com/Cratis/Chronicle/releases/tag/v19.115.1)): Three or more kernel nodes started together on SQL clustering finish starting again. Since 19.115.0 they waited forever for the administrator roster, which deadlocked loading the shared Data Protection key ring on the node that hosted it. Upgrade from 19.114.4 or earlier straight to this release. (#5485)
- **Stage** ([Release v4.210.2](https://github.com/Cratis/Stage/releases/tag/v4.210.2)): Stage's frontend, the live blueprints and rendered application scaffolds now use `@cratis/scene` 4.86.0, matching the Scene 4.86.0 .NET packages, and the new Scene guard enumerations (`GuardOperator`, `GuardedActionFallbackOutcome`, `LogicalGuardOperator`) serialize with the PascalCase values the Scene engine expects. (#913)
- **Arc** ([Release v22.154.1](https://github.com/Cratis/Arc/releases/tag/v22.154.1)): Screenplay generation no longer reports an aggregate root as unused when a command in another project of the application calls it. (#3589)
- **Arc** ([Release v22.154.1](https://github.com/Cratis/Arc/releases/tag/v22.154.1)): Proxy generation now fails with a clear error when two proxies in the same output module would share a name, instead of overwriting one with the other. (#3578)
- **Stage** ([Release v4.210.0](https://github.com/Cratis/Stage/releases/tag/v4.210.0)): Accept identical duplicate string keys across scoped `.strings` files, and identify the locale, key and both files when values conflict (#895)
- **Stage** ([Release v4.210.0](https://github.com/Cratis/Stage/releases/tag/v4.210.0)): After a successful command, the screen keeps re-reading queries while a list opened right afterward is still empty, and shows loading instead of an empty list (#720)
- **Chronicle** ([Release v19.114.3](https://github.com/Cratis/Chronicle/releases/tag/v19.114.3)): Kernel startup no longer waits behind read-model client registrations merely to activate the read-model manager.
- **Chronicle** ([Release v19.114.3](https://github.com/Cratis/Chronicle/releases/tag/v19.114.3)): A reconnecting client no longer rewrites read-model definitions that are unchanged, or re-evicts their projection pipelines, after a successful registration. A registration that failed part-way is reconciled in full on retry.
- **Arc** ([Release v22.153.2](https://github.com/Cratis/Arc/releases/tag/v22.153.2)): Arc now logs a warning naming the route and both queries when two public queries resolve to the same route, instead of silently leaving one of them unreachable. (#3583)
- **Arc** ([Release v22.153.2](https://github.com/Cratis/Arc/releases/tag/v22.153.2)): Proxy generation restores validator rules by resolving the application's runtime dependencies, so validators whose assemblies depend on packages outside the build tool's own dependencies are no longer generated without rules. (#3584)
- **Prompter** ([Release v0.6.0](https://github.com/Cratis/Prompter/releases/tag/v0.6.0)): The conversation-history trust-boundary specification no longer fails intermittently under load (#70)
- **Chronicle** ([Release v19.114.2](https://github.com/Cratis/Chronicle/releases/tag/v19.114.2)): A projection registration no longer holds a store's projections manager for the whole subscribe fan-out. After 15 seconds it returns and the remaining definition and namespace pairs are subscribed in the background, so a client registering a large artifact set into a store with many namespaces no longer times out and no longer queues every other registration, including the kernel's own at startup, behind it. A retired observer the registration meant to revive is still revived.
- **Chronicle** ([Release v19.114.2](https://github.com/Cratis/Chronicle/releases/tag/v19.114.2)): The engine projection for each definition and namespace is built inside the subscribe throttle, so a large registration no longer builds thousands at once.
- **Fundamentals** ([Release v7.30.1](https://github.com/Cratis/Fundamentals/releases/tag/v7.30.1)): Type discovery builds its contract-to-implementor map in linear time. Startup is up to about 13 times faster in applications with many types, and implementor lookups no longer allocate on repeated calls (#1233)
- **Chronicle** ([Release v19.114.1](https://github.com/Cratis/Chronicle/releases/tag/v19.114.1)): An observer no longer retries catch-up in a tight loop when its catch-up job was stopped before it prepared any step. Such a job can never resume; Chronicle now removes it after the refused resume, and the next catch-up starts a new job. Jobs that did prepare steps are never removed.
- **Prompter** ([Release v0.4.1](https://github.com/Cratis/Prompter/releases/tag/v0.4.1)): Prompter now answers when someone uses Discord's Reply on one of its messages, without needing a mention, and uses the message being replied to as context. In help-forum threads Prompter has answered, the thread author can keep asking without a mention until someone else joins the conversation. (#60)
- **Prompter** ([Release v0.4.0](https://github.com/Cratis/Prompter/releases/tag/v0.4.0)): Replace repository permissions atomically when configuring a GitHub App allowlist, preventing inherited array entries from expanding access. (part of #49)
- **Prompter** ([Release v0.3.2](https://github.com/Cratis/Prompter/releases/tag/v0.3.2)): Allow deployment-specific passage relevance thresholds so production can admit useful documentation matches without changing the default retrieval policy. (part of #51)
- **Prompter** ([Release v0.3.1](https://github.com/Cratis/Prompter/releases/tag/v0.3.1)): Separate documentation relevance from hybrid search ranking so semantic-only matches can ground answers, while unrelated passages are excluded from prompts and citations. (part of #51)
- **Arc** ([Release v22.153.1](https://github.com/Cratis/Arc/releases/tag/v22.153.1)): Screenplay generation now withholds every production of a command handler whose generated-identifier event destination cannot be represented, and reports SP0051 once. Before, it kept standalone productions without their destination, which recovered a model that silently lost where those events were appended. (part of #3548)
- **Arc** ([Release v22.153.1](https://github.com/Cratis/Arc/releases/tag/v22.153.1)): Aggregate roots and read models are released without dynamic code, so they work under NativeAOT. (part of #2855)
- **Arc** ([Release v22.153.1](https://github.com/Cratis/Arc/releases/tag/v22.153.1)): MongoDB concept serializers and class maps register without dynamic code. (part of #2855)
- **Arc** ([Release v22.153.1](https://github.com/Cratis/Arc/releases/tag/v22.153.1)): Observable queries compare query ids and sort fields without dynamic code. (part of #2855)
- **Arc** ([Release v22.153.1](https://github.com/Cratis/Arc/releases/tag/v22.153.1)): Observable EF Core queries sort without dynamic code. (part of #2855)
- **Arc** ([Release v22.153.1](https://github.com/Cratis/Arc/releases/tag/v22.153.1)): MongoDB observable queries now deliver a failure or completion to a subscriber that arrives after the observation has already ended, instead of throwing ObjectDisposedException. (#3580)
- **Screenplay** ([Release v4.257.0](https://github.com/Cratis/Screenplay/releases/tag/v4.257.0)): Admissible compilation now attributes protected-read failures (PLAY0781, PLAY0784) to the reading slice when its views come from an unnamed or variant projection, and excludes that slice instead of refusing the whole model (#1094)
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): Reaction bodies that return an `EventForEventSourceId` with an unproven payload, or that modify or pass `@event` by reference, are now refused with STAGE-ESM-037 instead of being admitted. (#893)
- **Stage** ([Release v4.209.0](https://github.com/Cratis/Stage/releases/tag/v4.209.0)): Generated frontends now ignore Yarn install state (`.yarn/`) in `.gitignore`. (#741)
- **Arc** ([Release v22.153.0](https://github.com/Cratis/Arc/releases/tag/v22.153.0)): Generated Screenplay documents with command handlers no longer report SP0056 under Screenplay 4.256, where the handler attachment refusal has its own code, PLAY0800 (#3576)
- **AuthProxy** ([Release v2.37.1](https://github.com/Cratis/AuthProxy/releases/tag/v2.37.1)): OAuth providers no longer store the provider's access and refresh tokens in the session cookie, matching OIDC providers. The smaller cookie keeps the sign-in callback's response headers further below an ingress header buffer limit. (part of #225)
- **Arc** ([Release v22.152.0](https://github.com/Cratis/Arc/releases/tag/v22.152.0)): Commands no longer fail with an internal error in applications that turn off reflection-based JSON serialization, such as trimmed and NativeAOT publishes. (#3575)
- **Arc** ([Release v22.151.0](https://github.com/Cratis/Arc/releases/tag/v22.151.0)): Query renderers are now called directly instead of through reflection. Exceptions thrown by a renderer reach the query pipeline unwrapped rather than as a `TargetInvocationException` that produced a generic 500, a class implementing `IQueryRendererFor<>` for two types is now a compile error instead of an `AmbiguousMatchException` at runtime, and a renderer type that is not registered in the service provider fails with the container's missing-service error. (part of #2855)
- **Screenplay** ([Release v4.256.0](https://github.com/Cratis/Screenplay/releases/tag/v4.256.0)): A read-model member whose type names another read model now reports a consistent error at the member in the compiler, CLI, MCP and editors, with guidance to use a supported value type (#1079)
- **Arc** ([Release v22.149.0](https://github.com/Cratis/Arc/releases/tag/v22.149.0)): Screenplay generation recovers rendered single-event command specifications whose full enum event assertion is accompanied by a redundant existence check, preserving their inputs and enum values. (part of #3547)
- **Arc** ([Release v22.148.2](https://github.com/Cratis/Arc/releases/tag/v22.148.2)): Commands now return HTTP 400 when a numeric JSON value is supplied for a string concept in the command body (Cratis/Fundamentals#1224).
- **Arc** ([Release v22.148.2](https://github.com/Cratis/Arc/releases/tag/v22.148.2)): Screenplay generation keeps command identifiers and explicit event destinations, and no longer reports SP0052 for commands returning `EventForEventSourceId`. (part of #3548)
- **Arc** ([Release v22.148.2](https://github.com/Cratis/Arc/releases/tag/v22.148.2)): Screenplay generation preserves explicit event destinations and generated identifiers in supported tuple command returns. (part of #3548)
- **Arc** ([Release v22.148.2](https://github.com/Cratis/Arc/releases/tag/v22.148.2)): Screenplay generation recovers pure principal-based conditions from Arc-native authorization policies. (#3555)
- **Scene** ([Release v4.85.2](https://github.com/Cratis/Scene/releases/tag/v4.85.2)): A guarded action whose command fails now shows the command's exception and validation messages instead of only "The command did not succeed." (#275)
- **AuthProxy** ([Release v2.36.1](https://github.com/Cratis/AuthProxy/releases/tag/v2.36.1)): Refresh the readable identity cookie after account switches so it names the currently authenticated caller (#115)
- **cli** ([Release v3.110.4](https://github.com/Cratis/cli/releases/tag/v3.110.4)): `cratis chronicle` commands work against a kernel started with `tls.enabled=false` when the server string has `disableTls=true`. Combine it with `auth=none` or `apiKey=`; client credentials still need TLS, and the CLI says so instead of failing the token request. (Cratis/Chronicle#5443)
- **Chronicle** ([Release v19.113.1](https://github.com/Cratis/Chronicle/releases/tag/v19.113.1)): `Cratis.Chronicle.Testing` packs and publishes again. It carries the prerelease OpenTelemetry gRPC client instrumentation assembly inside the package instead of declaring it as a dependency, which NuGet rejects for a stable package. (#5445)
- **cli** ([Release v3.110.3](https://github.com/Cratis/cli/releases/tag/v3.110.3)): `cratis render` now publishes wrapper scripts such as `mvnw` and `gradlew` as executable, so `./mvnw` and `./gradlew` run straight after rendering instead of exiting with code 126. Re-rendering over a wrapper that lost its execute bit restores it (#490)
- **Chronicle.Elixir** ([Release v3.15.1](https://github.com/Cratis/Chronicle.Elixir/releases/tag/v3.15.1)): Reactor and reducer handlers no longer crash when sending a result fails or times out. They log the failure, reopen their stream, and the kernel redelivers the events.
- **cli** ([Release v3.110.2](https://github.com/Cratis/cli/releases/tag/v3.110.2)): A server string with `auth=none` is used as is. No development, stored or login credentials are added to it.
- **cli** ([Release v3.110.2](https://github.com/Cratis/cli/releases/tag/v3.110.2)): A server string with `disableTls=true` and no credentials no longer gets the development credentials added. Chronicle serves its token endpoint over TLS only. Stored service-account credentials and login tokens are still added as before.
- **Fundamentals** ([Release v7.27.1](https://github.com/Cratis/Fundamentals/releases/tag/v7.27.1)): Posting a JSON number for a string-backed concept now fails as a `JsonException` that names the offending property, so hosts such as Arc reject it as a bad request instead of an internal server error. `UnsupportedConceptValueType` now derives from `JsonException`. (#1224)
- **Fundamentals** ([Release v7.27.1](https://github.com/Cratis/Fundamentals/releases/tag/v7.27.1)): Assembly discovery now finds referenced projects whose package ID differs from their assembly name, by resolving their runtime assembly names. (#1111)
- **Chronicle** ([Release v19.112.5](https://github.com/Cratis/Chronicle/releases/tag/v19.112.5)): `Cratis.Chronicle.Testing` now declares the runtime dependencies required by its embedded kernel, preventing assembly-loading failures without consumer package-version pins. (#5445)
- **Templates** ([Release v1.8.3](https://github.com/Cratis/Templates/releases/tag/v1.8.3)): Application templates support dotted project names with storage-safe event store names, valid generated class names, and proxy output aligned with application routes; scaffolding with `cratis new` needs Cratis CLI 3.110.1 or later (#62)
- **Templates** ([Release v1.8.3](https://github.com/Cratis/Templates/releases/tag/v1.8.3)): C# frontend templates no longer include an `Api` alias pointing to a nonexistent directory
- **Scene** ([Release v4.85.1](https://github.com/Cratis/Scene/releases/tag/v4.85.1)): Navigation toolbar buttons now carry their title as an explicit `aria-label`, so an icon-only button in a compact topbar or slim rail is announced by name (#254)
- **cli** ([Release v3.110.1](https://github.com/Cratis/cli/releases/tag/v3.110.1)): `cratis new` now keeps the project name available to template symbols that derive values from it. Templates that build names such as an event store, database or DbContext from the project name previously received an empty value, also for dotted project names. (#498)
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): Projections that remove root rows now generate working deletion handlers; repeated scoped removals tolerate concurrent deletion. (#59) (part of #1)
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): Generated policy bodies avoid local-name collisions and ignore comments and string literals when detecting declarations.
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): Whole-number projection values now convert correctly to decimal targets; read-model identifier, decimal and text persistence mappings are corrected.
- **Arc** ([Release v22.148.1](https://github.com/Cratis/Arc/releases/tag/v22.148.1)): Mounting and unmounting query hooks no longer serializes the whole query cache for diagnostics when nothing subscribes to the diagnostics stream, which removes multi-second main-thread stalls on pages that mount many queries. Explicit diagnostics snapshots still report current ownership and sizes. (#3565)
- **Arc** ([Release v22.148.1](https://github.com/Cratis/Arc/releases/tag/v22.148.1)): Generated TypeScript proxies for queries and observable queries now compile when the read model has a property named `query`. Generated sort helpers keep their public `query` member. (#3560)
- **Arc** ([Release v22.148.1](https://github.com/Cratis/Arc/releases/tag/v22.148.1)): Command scenario specs with an explicit event source no longer depend on the order of the facts they assert. (#3567)
- **Arc** ([Release v22.148.1](https://github.com/Cratis/Arc/releases/tag/v22.148.1)): A reactor that returns both events and commands no longer fails its partition with `IdempotencyKeyConflict` when a command is refused and its refusal branch appends events: those events now get idempotency keys distinct from the directly returned events, and a redelivered refusal stays idempotent. (#3561)
- **Arc** ([Release v22.148.1](https://github.com/Cratis/Arc/releases/tag/v22.148.1)): The Screenplay generator now classifies reactor slices as automations instead of translations. (#3550)
- **AuthProxy** ([Release v2.35.2](https://github.com/Cratis/AuthProxy/releases/tag/v2.35.2)): AuthProxy now accepts Arc's default `x-cratis-microservice` query parameter for WebSocket and SSE connections, while preserving the legacy `service` alias. A matching canonical query takes precedence within the existing backend and frontend route categories, with service authorization applied to the selected destination. (#154)
- **Components** ([Release v4.38.1](https://github.com/Cratis/Components/releases/tag/v4.38.1)): `CheckboxListFilter` now shows its search box when options load after the list first rendered empty and those options overflow the filter box. Before, the overflow check ran only at mount, so a list whose options loaded later never showed search. (#469)
- **Arc** ([Release v22.148.0](https://github.com/Cratis/Arc/releases/tag/v22.148.0)): Controller command and query results and observable query errors now honor `ExposeExceptionDetails`, returning a generic error when detail is disabled while keeping full detail in server logs.
- **Arc** ([Release v22.148.0](https://github.com/Cratis/Arc/releases/tag/v22.148.0)): HttpListener-hosted endpoints now reject non-empty non-JSON request bodies when reading JSON, matching ASP.NET Core behavior for payloads. Send `application/json` or an `application/*+json` content type.
- **Templates** ([Release v1.8.2](https://github.com/Cratis/Templates/releases/tag/v1.8.2)): MongoDB scaffolds from the `cratis` template no longer contain an Entity Framework DbContext file, so deleting the sample feature no longer breaks the build (#72)
- **Templates** ([Release v1.8.2](https://github.com/Cratis/Templates/releases/tag/v1.8.2)): Template ESLint configurations ignore generated `.cratis/` files, so `yarn lint` passes after `cratis ai update` (#74)
- **Templates** ([Release v1.8.2](https://github.com/Cratis/Templates/releases/tag/v1.8.2)): Kotlin and Java scaffolds compile again against the current Arc release: the sample concepts implement `io.cratis.fundamentals.concepts.ConceptAs` instead of Arc's deprecated `ConceptAs`
- **AuthProxy** ([Release v2.35.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.35.0)): The tenant verification URL escapes the tenant identifier.
- **AuthProxy** ([Release v2.35.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.35.0)): The claim strategy reads the tenant claim from the signed-in user only.
- **AI** ([Release v7.122.2](https://github.com/Cratis/AI/releases/tag/v7.122.2)): Stage and Screenplay key guidance now says that `STAGE-ESM-048` refuses composite read-model keys with a decimal part, whether a `Decimal` primitive or a concept over `Decimal`. It explains why: a replay can split `1.0` and `1.00` into two instances. It also says when the refusal lifts. (#952)
- **AI** ([Release v7.122.2](https://github.com/Cratis/AI/releases/tag/v7.122.2)): Guarded-interaction guidance now teaches that `on change` accepts alternatives, the same way click, double click and select do. It uses the current `PLAY0560` wording and keeps the opaque `where` exemption for `change`, with a kanban example. (#951)
- **Chronicle** ([Release v19.112.4](https://github.com/Cratis/Chronicle/releases/tag/v19.112.4)): A root-level projection join now routes by its declared key expression (`UsingKey(e => e.Property)` in the fluent builder, or the key of a variant's non-entering event) instead of always by the event source id. A join event appended to another event source now updates the read model whose `On` property matches the key value. When the key property is missing or null, the join falls back to the event source id. A root join that declares a context, constant or composite key logs a warning and uses the event source id. Joins whose key equals the event source id behave as before. Existing read models built with a differing key keep their earlier state until their projection is replayed (#4165)
- **Chronicle** ([Release v19.112.4](https://github.com/Cratis/Chronicle/releases/tag/v19.112.4)): `ReadModelScenario` and `EventScenario` in `Cratis.Chronicle.Testing` route root joins the same way the kernel does, so in-process specs match production behavior.
- **Chronicle** ([Release v19.112.3](https://github.com/Cratis/Chronicle/releases/tag/v19.112.3)): The kernel no longer creates an event store with an empty or whitespace-only name. A request that names no event store is refused with `InvalidEventStoreName` and nothing is registered. Previously the empty store was registered, and the next kernel startup failed with `ArgumentException (Parameter 'primaryKey')`. (#5422)
- **Chronicle** ([Release v19.112.3](https://github.com/Cratis/Chronicle/releases/tag/v19.112.3)): A kernel whose event store registry already holds an entry with an empty name now starts, and logs a warning naming the entry to remove, instead of crashing during startup. (#5422)
- **Chronicle** ([Release v19.112.2](https://github.com/Cratis/Chronicle/releases/tag/v19.112.2)): Reading a read model by key (`GetInstanceByKey`) no longer fails on MongoDB Atlas Flex and shared tiers with `listCollections failed: can't get regex from filter doc not a regex`. (#5431)
- **Stage** ([Release v4.208.0](https://github.com/Cratis/Stage/releases/tag/v4.208.0)): Rendered validators now check concept rules before
- **Chronicle** ([Release v19.112.1](https://github.com/Cratis/Chronicle/releases/tag/v19.112.1)): `Cratis.Chronicle.Testing` now ships the `Cratis.Screenplay.Matching` and `Cratis.Screenplay.Contexts` assemblies that Screenplay needs. A project that referenced only the testing package failed with `FileNotFoundException` for `Cratis.Screenplay.Matching` on its first scenario, and the 19.111.1 and 19.112.0 NuGet packages were not published because of it. (#5435)
- **Chronicle** ([Release v19.111.1](https://github.com/Cratis/Chronicle/releases/tag/v19.111.1)): A batch of 1000 or more events on an event type with a unique constraint no longer leaves the constraint index pending, which refused the following appends with `ConstraintIndexUnavailable`. (part of #5429)
- **Stage** ([Release v4.207.1](https://github.com/Cratis/Stage/releases/tag/v4.207.1)): Rendering a model whose command handler body comes from a `file` include no longer fails with CLI-RENDER-005; the included body is rendered like an inline one. (#887) (part of #808)
- **cli** ([Release v3.108.0](https://github.com/Cratis/cli/releases/tag/v3.108.0)): An unexpected Axon renderer exception no longer crashes `cratis render`; it reports `CLI-RENDER-031` with the renderer package version, the exception type and message and a link for reporting the bug, and publishes nothing. (#489)
- **Stage.Axon** ([Release v0.7.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.7.0)): Uniqueness conflicts on the persistent profile now return 409 instead of 500 for lock timeouts, deadlocks and other databases' duplicate-key errors, and lock waits are bounded (#64)
- **Stage.Axon** ([Release v0.7.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.7.0)): Generated Axon applications using persistent read models now process all events for one read-model row in stream order, even when those events come from different event sources (#65)
- **Stage.Axon** ([Release v0.7.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.7.0)): Scoped and reducer projectors in generated Axon applications now discard their read-model writes, and the scoped projectors' join and deferred-event state, when the unit of work rolls back in the default in-memory profile, so a rolled-back event never reaches a later query or concurrent unit of work (#46)
- **Screenplay** ([Release v4.252.0](https://github.com/Cratis/Screenplay/releases/tag/v4.252.0)): The editor no longer reports `and`, `or` or `not` in an `authorize` expression as an unknown policy, and reads parenthesized and multi-line expressions the way the compiler does. `authorize IsProgramCommittee and IsInReviewWindow` compiled but showed a warning in the editor.
- **Stage.Axon** ([Release v0.6.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.6.0)): A renderer built from source warns, and comments in the generated `pom.xml`, that its applications depend on an unpublished `stage-axon-runtime` version, and names how to install it locally (#63)
- **Stage.Axon** ([Release v0.5.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.5.0)): Command validation errors in generated Axon applications name the property as it was sent in the request, so clients can show the error on the right field when a property's name had to be adjusted to be a valid Java identifier (#44)
- **Stage.Axon** ([Release v0.5.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.5.0)): Generated Axon applications no longer show projector changes from a failed or rolled-back unit of work in the default in-memory read-model store. Changes are applied only when the unit of work commits, and concurrent changes to the same read-model row wait for each other instead of overwriting each other. (#32)
- **Stage.Axon** ([Release v0.5.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.5.0)): Generated Axon applications with persistent read models no longer apply an event twice after a multi-segment rollback or restart, and live queries over persistent read models now receive their updates. (#35)
- **Stage.Axon** ([Release v0.5.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.5.0)): Inline Java reaction bodies authored in Screenplay are now placed in the generated reaction instead of being refused as unregistered (#50)
- **Stage.Axon** ([Release v0.5.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.5.0)): Generated command handlers with an inline Java body import the events they append, so bodies can use the event's simple name (#50)
- **Stage.Axon** ([Release v0.5.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.5.0)): A reaction whose inline implementation body cannot be placed now reports the specific reason (for example a foreign language or a mismatched owner) in the `STAGE-AXON-0504` "not registered" warning, the generated reaction comment and `UNSUPPORTED.md`, instead of only a generic message; strict mode still refuses the reaction (#53)
- **Stage.Axon** ([Release v0.4.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.4.0)): The boot smoke check boots every application in the rendered applications.json instead of expecting exactly 25 (#47)
- **Screenplay** ([Release v4.250.1](https://github.com/Cratis/Screenplay/releases/tag/v4.250.1)): The editor's symbol scanner only accepted `@attribute` modifiers after a concept's primitive, so `concept SpeakerEmail : String pii` (the documented form) was not recognized as a concept. Every use of it showed an unknown-type squiggle, although `cratis screenplay validate` accepted the model. The scanner now accepts the keyword modifiers (`pii`, `secret`) with or without `@`.
- **Ante** ([Release v1.4.1](https://github.com/Cratis/Ante/releases/tag/v1.4.1)): Restore the frontend build by updating the `@cratis/arc` npm packages to 22.146.0, matching the proxy generator the backend already uses, so generated query proxies compile again.
- **cli** ([Release v3.103.6](https://github.com/Cratis/cli/releases/tag/v3.103.6)): Bundle Stage 4.203.0: regular routes instead of `#/` addresses, a single theme toggle, styled command forms and dropdowns, and a Submit button beside Cancel.
- **Stage** ([Release v4.203.0](https://github.com/Cratis/Stage/releases/tag/v4.203.0)): Command form fields, dropdowns and their popup were unstyled; the Cratis Components stylesheets are now loaded.
- **Orleans** ([Release v1.32.3](https://github.com/Cratis/Orleans/releases/tag/v1.32.3)): Due step retries now wait until a job's resume hook has succeeded in the current activation, instead of running while the hook is still owed. Held retries keep their attempts and are not counted as failures; once the hook succeeds, overdue retries run immediately. Stopping or removing the job still records pending retries as failures. (#161)
- **cli** ([Release v3.103.5](https://github.com/Cratis/cli/releases/tag/v3.103.5)): Bundle Stage 4.202.1 so a running application has its settings panel on top, localized navigation titles, a working language switch, the application title from the model's identity, a logo that opens the landing page, and a dark menu that stays darker than the page.
- **Scene** ([Release v4.85.0](https://github.com/Cratis/Scene/releases/tag/v4.85.0)): A PrimeReact button now runs the interactions attached to it, so a dialog's Cancel button closes the dialog under the PrimeReact profile. (part of #251)
- **Stage** ([Release v4.202.1](https://github.com/Cratis/Stage/releases/tag/v4.202.1)): The settings panel (cogwheel) is the top-most layer: Cratis Components' design tokens were never loaded, so its portaled backdrop had no z-index and the topbar and page content painted over it.
- **Stage** ([Release v4.202.1](https://github.com/Cratis/Stage/releases/tag/v4.202.1)): Navigation titles written as `$strings.key` are resolved against the active locale; they were shown literally.
- **Stage** ([Release v4.202.1](https://github.com/Cratis/Stage/releases/tag/v4.202.1)): Switching language no longer empties the dictionary: a request cancelled by the locale change reset the dictionary after the new one had loaded, leaving `$strings.` keys in buttons.
- **cli** ([Release v3.103.4](https://github.com/Cratis/cli/releases/tag/v3.103.4)): Bundle Stage 4.202.0 so demo rendering retains supported artifacts when individual specifications cannot be rendered and includes the latest policy, performer, reducer, and concept-validation fixes. (#477)
- **Stage** ([Release v4.202.0](https://github.com/Cratis/Stage/releases/tag/v4.202.0)): Render C# policies and other pure bodies that compare `DateTimeOffset` values. Refusals for `DateTime` members now point to `DateTimeOffset`. (#825)
- **Stage** ([Release v4.202.0](https://github.com/Cratis/Stage/releases/tag/v4.202.0)): Render query performers in models that also contain typed-context bodies such as reducers or policies. (#826)
- **Stage** ([Release v4.202.0](https://github.com/Cratis/Stage/releases/tag/v4.202.0)): Render reducer bodies in models with query performers, admit `Guid.Parse(string)` for Uuid concept keys, and suggest explicit concept constructors in body errors. (#827)
- **Stage** ([Release v4.202.0](https://github.com/Cratis/Stage/releases/tag/v4.202.0)): Render concept validation bodies with `context.Value` and `context.Artifact` as the underlying primitive, matching the documented context. Replace the former `context.Value.Value` workaround with `context.Value`. (#830)

## Removed

- **Arc** ([Release v22.156.4](https://github.com/Cratis/Arc/releases/tag/v22.156.4)): The ARCCHR0039 diagnostic ("Prefer plain read-model parameters in Handle"). Handlers that take `IDecisionReads`, `DecisionRead<T>` or any other service no longer get a report, so builds that treat warnings as errors stop failing on them. The ID is retired and will not be reused. (#3618)
- **Stage** ([Release v4.212.0](https://github.com/Cratis/Stage/releases/tag/v4.212.0)): `STAGE-ONBOARDING-001` (offering not rendered) and `STAGE-ONBOARDING-007` (declined email not sent) are no longer reported; their codes are retired
- **Stage.Axon** ([Release v0.8.0](https://github.com/Cratis/Stage.Axon/releases/tag/v0.8.0)): The previous persistent runtime profile is retired. Regenerate projects a

## Security

- **Prompter** ([Release v0.12.0](https://github.com/Cratis/Prompter/releases/tag/v0.12.0)): The container runs as a non-root user with a read-only root file system, drops all Linux capabilities and does not mount a service account token
- **Arc** ([Release v22.156.2](https://github.com/Cratis/Arc/releases/tag/v22.156.2)): MongoDB trace logging no longer logs the first argument of commands that don't target a collection (such as `usersInfo` or `createUser`) as the collection name. (#3610)
- **Prompter** ([Release v0.11.0](https://github.com/Cratis/Prompter/releases/tag/v0.11.0)): Documentation indexing bounds repeated table headers, title and heading metadata, and aggregate embedding text to prevent excessive memory use from oversized pages
- **Prompter** ([Release v0.11.0](https://github.com/Cratis/Prompter/releases/tag/v0.11.0)): Inline documentation comments are removed in a single pass without repeated copying
- **AI** ([Release v7.127.0](https://github.com/Cratis/AI/releases/tag/v7.127.0)): The secrets guard hook blocks `cratis config get --show-secret`; run `cratis ai update` to get the updated hook
- **Prompter** ([Release v0.10.2](https://github.com/Cratis/Prompter/releases/tag/v0.10.2)): Every button click is checked against the configured guild and channel scope before the bot replies or acts, including clicks in threads whose parent channel is excluded or unknown
- **Arc** ([Release v22.156.0](https://github.com/Cratis/Arc/releases/tag/v22.156.0)): MongoDB trace logging no longer writes command bodies or driver failure messages, which can contain document and filter values. It now logs the command name, database, collection, duration and server error code. Set the new `LogCommandBodies` option on `MongoDBOptions` to log full commands while diagnosing. (#3607)
- **Prompter** ([Release v0.9.0](https://github.com/Cratis/Prompter/releases/tag/v0.9.0)): Sources are fetched and cited only from an allowlist of Cratis hosts and Cratis organization repositories. Redirects are refused and oversized pages are rejected. Retrieved text is passed to the model as untrusted data (#87)
- **Arc** ([Release v22.154.0](https://github.com/Cratis/Arc/releases/tag/v22.154.0)): Applications can opt in to caller-to-tenant membership verification across Arc entry points without changing existing defaults.
- **Prompter** ([Release v0.6.0](https://github.com/Cratis/Prompter/releases/tag/v0.6.0)): Secret-looking values pasted into questions or conversation context (tokens, API keys, connection-string passwords, private keys) are replaced with `[REDACTED_SECRET]` before retrieval, the model, logs and telemetry, and the user is told to rotate them without the value being repeated (#73)
- **Prompter** ([Release v0.5.0](https://github.com/Cratis/Prompter/releases/tag/v0.5.0)): Prevent answers and forwarded text from mentioning users, roles, @everyone or @here.
- **Prompter** ([Release v0.3.5](https://github.com/Cratis/Prompter/releases/tag/v0.3.5)): Require complete, validated private-routing settings and restrict classifier access to matching namespace and pod labels from bot workloads only. Missing or invalid settings retain deterministic fallback without classifier access. (part of #50)
- **Prompter** ([Release v0.3.4](https://github.com/Cratis/Prompter/releases/tag/v0.3.4)): Require explicit opt-in for scheduled indexing and enforce bounded embedding costs, disabled answer and issue-writing permissions, and validated indexing Job configuration. (part of #51)
- **Prompter** ([Release v0.3.3](https://github.com/Cratis/Prompter/releases/tag/v0.3.3)): Require an explicitly approved private collector for opt-in metrics export, block HTTP redirects and proxy delegation, and limit collector access to matching namespace and pod labels. Metrics remain disabled by default. (part of #51)
- **AuthProxy** ([Release v2.38.2](https://github.com/Cratis/AuthProxy/releases/tag/v2.38.2)): An invitation now completes only for a sign-in that started from that invitation's link. A session that signed in some other way can no longer accept a pending invitation. It is sent to the invitation's sign-in flow instead.
- **Templates** ([Release v1.8.2](https://github.com/Cratis/Templates/releases/tag/v1.8.2)): Scaffolded `docker-compose.yml` files publish Chronicle, MongoDB, Orleans, database and Aspire dashboard ports on 127.0.0.1 only, so a new application no longer exposes these development services, including the anonymous dashboard, to the local network (part of #62)
- **AuthProxy** ([Release v2.33.0](https://github.com/Cratis/AuthProxy/releases/tag/v2.33.0)): Every inbound header starting with `x-cratis-on-behalf` is removed before forwarding, so a caller cannot name an actor or present an assertion that AuthProxy did not issue for the request.

## Deprecated

- **Arc** ([Release v22.154.0](https://github.com/Cratis/Arc/releases/tag/v22.154.0)): `CommandScenario.UseDecisionReads()` is obsolete; the scenario selects decision reads from the command's declarations. Remove the call.
- **Fundamentals** ([Release v7.28.0](https://github.com/Cratis/Fundamentals/releases/tag/v7.28.0)): `Cratis.Metrics.Roslyn` now only depends on `Cratis.Observability.SourceGenerators`, so existing references keep working unchanged; switch to `Cratis.Observability.SourceGenerators`, as `Cratis.Metrics.Roslyn` will no longer be published from the next major release
- **Chronicle.Kotlin** ([Release v7.3.0](https://github.com/Cratis/Chronicle.Kotlin/releases/tag/v7.3.0)): `io.cratis.chronicle.geospatial.Point`, `LineString`, `LinearRing` and `Polygon`, and their public Gson type adapters; use the types in `io.cratis.fundamentals.geospatial` instead, which keep the same constructors (#151)
