---
title: "Release digest: August 24 - 31, 2026 (Week 35)"
description: "Cross-repository release digest for the week of August 24 - 31, 2026, ISO week 35 of 2026."
---
## Version movement

| Repository | Previous version | Current version |
| --- | --- | --- |
| [AI](https://github.com/Cratis/AI) | First release | [v0.1.1](https://github.com/Cratis/AI/releases/tag/v0.1.1) |
| [AI.Distribution](https://github.com/Cratis/AI.Distribution) | First release | [v0.2.0](https://github.com/Cratis/AI.Distribution/releases/tag/v0.2.0) |
| [Arc](https://github.com/Cratis/Arc) | [v22.1.0](https://github.com/Cratis/Arc/releases/tag/v22.1.0) | [v22.7.0](https://github.com/Cratis/Arc/releases/tag/v22.7.0) |
| [Chronicle](https://github.com/Cratis/Chronicle) | [v16.38.2](https://github.com/Cratis/Chronicle/releases/tag/v16.38.2) | [v16.42.1](https://github.com/Cratis/Chronicle/releases/tag/v16.42.1) |
| [Chronicle.TypeScript](https://github.com/Cratis/Chronicle.TypeScript) | [v3.1.0](https://github.com/Cratis/Chronicle.TypeScript/releases/tag/v3.1.0) | [v3.1.1](https://github.com/Cratis/Chronicle.TypeScript/releases/tag/v3.1.1) |
| [cli](https://github.com/Cratis/cli) | [v2.17.0](https://github.com/Cratis/cli/releases/tag/v2.17.0) | [v2.19.1](https://github.com/Cratis/cli/releases/tag/v2.19.1) |
| [Components](https://github.com/Cratis/Components) | [v3.5.0](https://github.com/Cratis/Components/releases/tag/v3.5.0) | [v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0) |
| [Fundamentals](https://github.com/Cratis/Fundamentals) | [v7.18.1](https://github.com/Cratis/Fundamentals/releases/tag/v7.18.1) | [v7.18.2](https://github.com/Cratis/Fundamentals/releases/tag/v7.18.2) |
| [Prompter](https://github.com/Cratis/Prompter) | [v0.2.1](https://github.com/Cratis/Prompter/releases/tag/v0.2.1) | [v0.2.2](https://github.com/Cratis/Prompter/releases/tag/v0.2.2) |
| [Screenplay](https://github.com/Cratis/Screenplay) | [v4.6.0](https://github.com/Cratis/Screenplay/releases/tag/v4.6.0) | [v4.11.0](https://github.com/Cratis/Screenplay/releases/tag/v4.11.0) |
| [Screenplay.CritterStack](https://github.com/Cratis/Screenplay.CritterStack) | [v0.21.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.21.0) | [v0.24.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.24.0) |
| [Screenplay.Generation](https://github.com/Cratis/Screenplay.Generation) | [v0.9.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.9.0) | [v0.18.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.18.0) |
| [Specifications](https://github.com/Cratis/Specifications) | [v4.0.0](https://github.com/Cratis/Specifications/releases/tag/v4.0.0) | [v4.0.1](https://github.com/Cratis/Specifications/releases/tag/v4.0.1) |
| [Stage](https://github.com/Cratis/Stage) | [v3.9.1](https://github.com/Cratis/Stage/releases/tag/v3.9.1) | [v3.10.1](https://github.com/Cratis/Stage/releases/tag/v3.10.1) |
| [Stagehand](https://github.com/Cratis/Stagehand) | First release | [v2.20.0](https://github.com/Cratis/Stagehand/releases/tag/v2.20.0) |
| [Studio](https://github.com/Cratis/Studio) | [v0.82.5](https://github.com/Cratis/Studio/releases/tag/v0.82.5) | [v0.85.10](https://github.com/Cratis/Studio/releases/tag/v0.85.10) |
| [Synopsis](https://github.com/Cratis/Synopsis) | [v1.1.1](https://github.com/Cratis/Synopsis/releases/tag/v1.1.1) | [v1.1.2](https://github.com/Cratis/Synopsis/releases/tag/v1.1.2) |

## Added

- **Stagehand** ([Release v2.20.0](https://github.com/Cratis/Stagehand/releases/tag/v2.20.0)): A plan can be edited by hand, on an issue or on a group, instead of standing as whatever the agent produced (#197)
- **Stagehand** ([Release v2.20.0](https://github.com/Cratis/Stagehand/releases/tag/v2.20.0)): A plan can be planned again with input describing what was wrong with it — the input travels with that run, not with the issue (#197)
- **Stagehand** ([Release v2.20.0](https://github.com/Cratis/Stagehand/releases/tag/v2.20.0)): The navigation floats behind a hamburger on a phone and can be collapsed to icons on a desktop, and the choice is remembered (#229)
- **Stagehand** ([Release v2.20.0](https://github.com/Cratis/Stagehand/releases/tag/v2.20.0)): A group is locked once its issues are scheduled: it cannot be renamed, re-prompted, replanned, rescheduled, disbanded, or have members moved in or out while an agent is acting on it
- **Stagehand** ([Release v2.20.0](https://github.com/Cratis/Stagehand/releases/tag/v2.20.0)): A group is disbanded automatically once every one of its issues is closed
- **Chronicle** ([Release v16.42.1](https://github.com/Cratis/Chronicle/releases/tag/v16.42.1)): `PatternDetection.PersistenceInterval` setting controlling how often mined behavior patterns are persisted (default 5 seconds).
- **Stagehand** ([Release v2.19.0](https://github.com/Cratis/Stagehand/releases/tag/v2.19.0)): A **SemVer** dropdown on an issue — major, minor or patch — that overrides what the Stagehand
- **Stagehand** ([Release v2.19.0](https://github.com/Cratis/Stagehand/releases/tag/v2.19.0)): The decided release shows as a tag on the issue, on its card in the Backlog, and on the Triage
- **Stagehand** ([Release v2.18.0](https://github.com/Cratis/Stagehand/releases/tag/v2.18.0)): Scheduling a group's issues now removes the group from the backlog afterwards, since its purpose
- **Stagehand** ([Release v2.18.0](https://github.com/Cratis/Stagehand/releases/tag/v2.18.0)): Renaming a group offers an AI-suggested name based on the issues it holds. (#189)
- **Stagehand** ([Release v2.18.0](https://github.com/Cratis/Stagehand/releases/tag/v2.18.0)): The work overview shows the issues a unit of work was handed - title, body, comments and GitHub
- **Stagehand** ([Release v2.18.0](https://github.com/Cratis/Stagehand/releases/tag/v2.18.0)): Agent work waiting for an answer surfaces in the Inbox marked "Needs you", and selecting it opens
- **Stagehand** ([Release v2.18.0](https://github.com/Cratis/Stagehand/releases/tag/v2.18.0)): External connection settings panels carry contextual help explaining what each one configures -
- **Studio** ([Release v0.85.10](https://github.com/Cratis/Studio/releases/tag/v0.85.10)): Add `UnknownSliceType` for unsupported slice duplication and `CatalogPricing` as the pricing query model. (Cratis/StudioIssues#301)
- **Studio** ([Release v0.85.9](https://github.com/Cratis/Studio/releases/tag/v0.85.9)): Cover present and missing state across Projects, Prologue, Admin, Lobby, modules, play sessions, AI providers, and subscriptions. (Cratis/StudioIssues#298)
- **Stagehand** ([Release v2.17.7](https://github.com/Cratis/Stagehand/releases/tag/v2.17.7)): A build-time guard that walks the IL of every reactor handler and fails when one executes a
- **Studio** ([Release v0.85.7](https://github.com/Cratis/Studio/releases/tag/v0.85.7)): Cover all 10 affected command contracts and representative append continuity for concept, comment, agent, and team streams. (Cratis/StudioIssues#297)
- **Studio** ([Release v0.85.6](https://github.com/Cratis/Studio/releases/tag/v0.85.6)): Cover all 38 affected command contracts and representative append continuity for collection, module, event-model, slice, and specification streams. (Cratis/StudioIssues#296)
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Add Components-owned typed parts, stable `data-cratis-part` values, canonical state attributes, provider messages, strict public declarations, and standalone Common controls. (#173)
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Add semantic Button `variant`, `tone`, and `shape` props and value-first `ChangeHandler<T>` callbacks.
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Add the stable nine-slot `stable-presentation/v1` renderer profile for Button, IconButton, TextInput, TextArea, Checkbox, Radio, Switch, ProgressBar, and Surface.
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Add `@cratis/components.mui`, `@cratis/components.primereact`, and `@cratis/components.primereact10` as optional presentation adapters. (#191, #192)
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Add `@cratis/components.conformance`, a development-only verification harness for renderer adapter authors covering behavior, parts, state, SSR, and accessibility. Ordinary applications do not install it.
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Add `@cratis/components.migrator`, an optional development CLI for upgrading Components 3 source imports, Button appearance props, and value-first callbacks. It uses syntax-aware codemods internally and is not an application runtime dependency.
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Add a Components ESLint configuration that prevents deprecated root imports and protects renderer-independent boundaries.
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Add a generated Components 3/4 compatibility manifest used by migration tooling and release validation.
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Add the explicit `@cratis/components/Chat` subpath with sidebar, topic, conversation, message-body, action, mention, emoji, and observable-query surfaces.
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Add Canvas region auto-membership, optional Arc messenger notifications, Canvas controls, and Canvas minimap support.
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Add `ItemAddedToRegion`, `ItemRemovedFromRegion`, `NoteTextChanged`, and `ChatMessageAdded` messaging contracts.
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Add renderer coexistence, primitive adaptation, custom composition, licensing, migration, capability-profile, Chat, and Canvas messaging documentation.
- **Studio** ([Release v0.85.5](https://github.com/Cratis/Studio/releases/tag/v0.85.5)): Cover missing values, sentinel concepts, unknown SKUs, percentage ranges, singleton identities, and exact failure messages. (Cratis/StudioIssues#299)
- **Studio** ([Release v0.85.4](https://github.com/Cratis/Studio/releases/tag/v0.85.4)): Cover all 26 affected command contracts and representative append continuity against the Brainstorming board ID. (Cratis/StudioIssues#295)
- **Studio** ([Release v0.85.3](https://github.com/Cratis/Studio/releases/tag/v0.85.3)): Cover returned events, destination streams, replay guards, no-op paths, and durable completion notification ordering. (Cratis/StudioIssues#294)
- **Arc** ([Release v22.7.0](https://github.com/Cratis/Arc/releases/tag/v22.7.0)): `RuleFor(...).IgnoreConceptRules()` on the concept-flavored `RuleFor` overload, so a validator can suppress a cross-cutting `ConceptValidator<T>` for one of its own properties.
- **Studio** ([Release v0.85.0](https://github.com/Cratis/Studio/releases/tag/v0.85.0)): Typed installation capability and required-permission contracts with approved, insufficient, suspended, revoked, rate-limit and retry coverage. (Cratis/StudioIssues#276)
- **Studio** ([Release v0.85.0](https://github.com/Cratis/Studio/releases/tag/v0.85.0)): Project-settings status for Ready, Reapproval Required and Revoked installations. (Cratis/StudioIssues#276)
- **Screenplay** ([Release v4.11.0](https://github.com/Cratis/Screenplay/releases/tag/v4.11.0)): Description-role source-map entries with exact non-zero source spans while preserving existing constructor/enum compatibility. (#138)
- **Screenplay** ([Release v4.11.0](https://github.com/Cratis/Screenplay/releases/tag/v4.11.0)): `UpdateSliceDescription` workspace operation with expected-current-value, stale-revision, unsupported-field, unknown-id and same-document ownership conflicts. (#138)
- **Screenplay** ([Release v4.11.0](https://github.com/Cratis/Screenplay/releases/tag/v4.11.0)): Exact UTF-8/BOM-preserving patch preview/apply through `ScreenplayWorkspace.Propose`, with no filesystem or raw arbitrary-text API. (#138)
- **Stagehand** ([Release v2.17.0](https://github.com/Cratis/Stagehand/releases/tag/v2.17.0)): An issue can be closed from its dialog, either straight away or with a note saying why. The Close button carries a caret beside it for the commented form. Closing here closes the issue on GitHub as well — closing only in the Stagehand would take it off the board and let the next synchronization bring it straight back. (#220)
- **Chronicle** ([Release v16.42.0](https://github.com/Cratis/Chronicle/releases/tag/v16.42.0)): `GetUsualActions` on the .NET client and the `Patterns` gRPC service — given a situation, what is usually *done* in it, ranked by confidence and at most one answer per action (#3872)
- **Chronicle** ([Release v16.42.0](https://github.com/Cratis/Chronicle/releases/tag/v16.42.0)): `FacetName.IsAction`, `FacetSet.WithoutActions()` and `BehaviorPattern.AnswersFor` — the split between the action a pattern names and the context it was taken in, which mining already relied on privately
- **Stagehand** ([Release v2.16.0](https://github.com/Cratis/Stagehand/releases/tag/v2.16.0)): Work whose container dies without reporting is picked back up automatically instead of sitting in "Running" until a duration sweep fails it a day later. The scheduler asks the runtime — the Kubernetes Job's status, or the Docker container's — whether the worker is still there, so an OOM kill or an evicted node costs one scheduling pass rather than hours of a held concurrency slot.
- **Stagehand** ([Release v2.16.0](https://github.com/Cratis/Stagehand/releases/tag/v2.16.0)): A resumed run continues rather than starting over. It keeps the same work item, so it keeps the same branch and everything the interrupted attempt had already pushed, and its prompt says so: which steps were reported finished, what the last progress note said, and to build on what is already committed.
- **Stagehand** ([Release v2.16.0](https://github.com/Cratis/Stagehand/releases/tag/v2.16.0)): `Stagehand:Scheduling:MaxResumeAttempts` (default 2) and `Stagehand:Scheduling:LivenessGrace` (default 3 minutes) bound it. Work that dies on every dispatch is failed for a person to look at rather than resumed forever, and nothing is resumed inside the window where a completion could still be in flight.
- **Screenplay** ([Release v4.10.0](https://github.com/Cratis/Screenplay/releases/tag/v4.10.0)): `ScreenplayWorkspace` aggregate with strict document/path admission, materialized identity catalogs, derived semantic compilation, and deterministic exact-byte revisions. (#137)
- **Screenplay** ([Release v4.10.0](https://github.com/Cratis/Screenplay/releases/tag/v4.10.0)): Expected workspace/catalog revision transactions for whole-document add, replace, move, stable-key rename, and remove operations. (#137)
- **Screenplay** ([Release v4.10.0](https://github.com/Cratis/Screenplay/releases/tag/v4.10.0)): Pure write plans with exact before/after documents and typed stale, collision, compilation, and identity-migration conflicts. (#137)
- **Screenplay** ([Release v4.10.0](https://github.com/Cratis/Screenplay/releases/tag/v4.10.0)): Explicit semantic and event-contract retirement for deliberate declaration removal. (#137)
- **Screenplay.CritterStack** ([Release v0.24.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.24.0)): Atomic `MartenScreenplayAdapter` with stable identity, Generation capability descriptor, source-mapping admission, and Marten-only provenance. (#44)
- **Screenplay.CritterStack** ([Release v0.24.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.24.0)): Shared Marten, Wolverine, and Wolverine–Marten API capability identities for the atomic migration. (#44)
- **Screenplay.CritterStack** ([Release v0.24.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.24.0)): Compatibility parity and Marten aggregation probe coverage. (#44)
- **Stage** ([Release v3.10.0](https://github.com/Cratis/Stage/releases/tag/v3.10.0)): Deterministic backend-only Cratis application scaffold with exact dependency and Chronicle image pins. (#71)
- **Stage** ([Release v3.10.0](https://github.com/Cratis/Stage/releases/tag/v3.10.0)): `CratisRendering` facade owning target identity, scaffold profile creation, admission, and artifact planning. (#11)
- **Stage** ([Release v3.10.0](https://github.com/Cratis/Stage/releases/tag/v3.10.0)): Standalone generated-application verification for Debug build/specs, Release build, hostile parent MSBuild files, and Docker health when available. (#71)
- **Screenplay.Generation** ([Release v0.18.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.18.0)): Canonical producer-scoped fact links on generation diagnostics, with fail-closed admission validation. (#24)
- **Screenplay.Generation** ([Release v0.18.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.18.0)): Ordered `Files` and `ImplementationFiles` collections retaining every realization of one semantic artifact or validation rule. (#24)
- **Chronicle** ([Release v16.41.0](https://github.com/Cratis/Chronicle/releases/tag/v16.41.0)): Behavior pattern mining across every event flowing through an event store, using a bounded streaming sketch so storage scales with distinct recurring behavior rather than event volume (#3857)
- **Chronicle** ([Release v16.41.0](https://github.com/Cratis/Chronicle/releases/tag/v16.41.0)): `IPatterns.GetPatternsAt` on the .NET client — a scope plus an optional moment defaulting to now, with the day and the part of the day derived using the same rule the engine bucketed events with when it mined them. `GetPatterns` remains underneath for a context that is not a moment.
- **Chronicle** ([Release v16.41.0](https://github.com/Cratis/Chronicle/releases/tag/v16.41.0)): `ToTimeBucket()` on `DateTimeOffset`, the engine's own bucketing rule, so an application asking about a moment does not have to carry a second copy of it — a copy that would drift silently, returning nothing rather than failing
- **Chronicle** ([Release v16.41.0](https://github.com/Cratis/Chronicle/releases/tag/v16.41.0)): `IPatterns.GetScopes` on the .NET client and the `Patterns` gRPC service, listing the scopes that hold established patterns — what a browsing surface needs before it can offer one
- **Chronicle** ([Release v16.41.0](https://github.com/Cratis/Chronicle/releases/tag/v16.41.0)): **Behavior patterns** in the Workbench: a pivot over everything established, across scope, command, initiator, day, time of day, aggregate, cause and specificity, with a confidence bar on each card
- **Chronicle** ([Release v16.41.0](https://github.com/Cratis/Chronicle/releases/tag/v16.41.0)): **Pattern heatmap** in the Workbench: a day-by-time-of-day grid shaded by activity on a perceptual color scale, with a panel naming what a scope usually does at a given moment
- **Chronicle** ([Release v16.41.0](https://github.com/Cratis/Chronicle/releases/tag/v16.41.0)): **Backoffice** sample generating half a year of backdated internal business activity — accounts payable, the ledger, procurement, HR and payroll — where everybody holds three or four different jobs at different points in the week, and one actor deliberately has no routine at all
- **Screenplay** ([Release v4.9.0](https://github.com/Cratis/Screenplay/releases/tag/v4.9.0)): Explicit `for <value>` syntax for specification event sources and command destinations, with parser, printer, walker, grammar, and diagnostics coverage. (#167)
- **Screenplay** ([Release v4.9.0](https://github.com/Cratis/Screenplay/releases/tag/v4.9.0)): Additive typed destination, occurrence-context, and event-context expression contracts reserved for ESM v2. (#167)
- **Screenplay** ([Release v4.8.0](https://github.com/Cratis/Screenplay/releases/tag/v4.8.0)): Portable source paths, immutable UTF-8 workspace documents, and deterministic workspace revisions. (#137)
- **Screenplay** ([Release v4.8.0](https://github.com/Cratis/Screenplay/releases/tag/v4.8.0)): Lossless source tokens with exact UTF-16 and UTF-8 spans, comments, trivia, and parser-faithful line boundaries. (#137)
- **Screenplay** ([Release v4.7.0](https://github.com/Cratis/Screenplay/releases/tag/v4.7.0)): Canonical RegisterProject single-file and folder source forms with pinned identities, ESM bytes, revision, and normalized specification outcomes. (#168)
- **Screenplay** ([Release v4.7.0](https://github.com/Cratis/Screenplay/releases/tag/v4.7.0)): Test-framework-free corpus API for deterministic cross-host conformance. (#168)
- **Chronicle** ([Release v16.40.0](https://github.com/Cratis/Chronicle/releases/tag/v16.40.0)): `ChronicleOptions.RegistrationRetry` — registering a client's artifacts is now retried with an exponential backoff instead of failing host startup when the Kernel is busy. Five attempts by default, 2s growing to 30s, all configurable (#3869)
- **Chronicle** ([Release v16.40.0](https://github.com/Cratis/Chronicle/releases/tag/v16.40.0)): Failed partition attempts carry what kind of failure they were — `Handling`, `Timeout`, `Disconnected` or `Unknown` — surfaced through the client SDK and the Workbench API (#3869)
- **Stagehand** ([Release v2.15.4](https://github.com/Cratis/Stagehand/releases/tag/v2.15.4)): `Deployment/scripts/purge-runaway-work-scheduling.js` removes the wreckage left by the work-scheduling runaway of 27–28 August: 91,043 duplicate scheduling events, the read-model documents projected from them, and the scheduler's failed partitions, which were Orleans subscriber timeouts caused by the storm rather than a defect in that reactor. It surveys by default and needs `APPLY=yes` to act, and it re-derives what to keep on every run — the original request, and every stream carrying evidence of a real run.
- **Studio** ([Release v0.84.3](https://github.com/Cratis/Studio/releases/tag/v0.84.3)): The cluster-health watchdog now calls the authenticated tenant-selection endpoint directly against every `core` pod IP, bypassing the round-robin Service entirely. The prior anonymous public-URL check never exercised the code path that actually wedged, and even an authenticated check through the Service would only catch a single wedged replica about half the time.
- **Stagehand** ([Release v2.15.0](https://github.com/Cratis/Stagehand/releases/tag/v2.15.0)): The Triage card names the pull request its work produced: `Cratis/Stagehand #199, Pull Request #204`.
- **Stagehand** ([Release v2.14.0](https://github.com/Cratis/Stagehand/releases/tag/v2.14.0)): Pull requests for agent implementation work are opened by Stagehand itself, from the commits that were actually pushed.
- **Stagehand** ([Release v2.14.0](https://github.com/Cratis/Stagehand/releases/tag/v2.14.0)): Descriptions are written by Scribe from the diff and the covered issues, against instructions the organization configures.
- **Stagehand** ([Release v2.14.0](https://github.com/Cratis/Stagehand/releases/tag/v2.14.0)): A **Settings → Pull requests** page for those instructions, opening on the text actually in force rather than an empty box.
- **Stagehand** ([Release v2.14.0](https://github.com/Cratis/Stagehand/releases/tag/v2.14.0)): A **What changed** tab on an issue, showing the diff of the pull request the work produced without leaving the application.
- **Stagehand** ([Release v2.13.0](https://github.com/Cratis/Stagehand/releases/tag/v2.13.0)): A single issue's recorded plan is now fed into the prompt for its own future implementation work, and posted back as a comment on the original GitHub issue - mirroring how investigation findings are already reported.
- **Stagehand** ([Release v2.13.0](https://github.com/Cratis/Stagehand/releases/tag/v2.13.0)): Once a group has a recorded plan, its Plan button becomes a View plan button that opens the plan in a popup dialog.
- **Stagehand** ([Release v2.12.0](https://github.com/Cratis/Stagehand/releases/tag/v2.12.0)): A **Plan** button on issue details and on group cards that dispatches a new kind of agent work - Planning - which researches the issue(s) and produces a concrete implementation plan without writing any code, distinct from Investigate (which judges whether the work is already done). (#186)
- **Stagehand** ([Release v2.12.0](https://github.com/Cratis/Stagehand/releases/tag/v2.12.0)): The recorded plan is shown on the issue (a Plan section, next to Investigation), on the group card (an expandable section, plus a "plan ready" tag), and as a dedicated Plan tab on the Agent work details for planning-purpose work. (#186)
- **Stagehand** ([Release v2.12.0](https://github.com/Cratis/Stagehand/releases/tag/v2.12.0)): A group's recorded plan now feeds into the prompt built for that group's eventual implementation work, so work scheduled from a planned group starts from the plan rather than re-deriving one. (#180)
- **Stagehand** ([Release v2.12.0](https://github.com/Cratis/Stagehand/releases/tag/v2.12.0)): An `onStopped` callback fires after a Stop command succeeds, clearing the selection on the Agents view immediately instead of only waiting for the active-work list to catch up. (#187)
- **Arc** ([Release v22.6.0](https://github.com/Cratis/Arc/releases/tag/v22.6.0)): Events appended by a command now carry a `Command` causation naming that command. The chain already said how the work arrived — an HTTP request, a reactor — but not what was asked for, so an appended event could be traced back to a request path and no further. A command executed from another command stacks its link on the outer one's, which is what makes "the command one level up" answerable.
- **Stagehand** ([Release v2.11.0](https://github.com/Cratis/Stagehand/releases/tag/v2.11.0)): A vision names the person who answers for it, required when creating one. An issue an agent judges
- **Stagehand** ([Release v2.11.0](https://github.com/Cratis/Stagehand/releases/tag/v2.11.0)): The vision guardian's verdict is now a recorded fact rather than a passing comment, and the
- **Stagehand** ([Release v2.11.0](https://github.com/Cratis/Stagehand/releases/tag/v2.11.0)): A retry on work that failed, was stopped, or is sitting scheduled behind a configuration problem.
- **Stagehand** ([Release v2.11.0](https://github.com/Cratis/Stagehand/releases/tag/v2.11.0)): A board bar on the brainstorming canvas naming the board you are looking at and opening the board
- **Stagehand** ([Release v2.11.0](https://github.com/Cratis/Stagehand/releases/tag/v2.11.0)): Documentation for the notifications setup: the VAPID key pair, the three secrets, and what happens
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): The repository cache is on: agents and terminal sessions read from a shared mirror instead of cloning fresh every time
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): The weekly digest draws closed issues and versioned releases from separately configured repositories - the repositories where work is tracked are rarely the ones that publish versions
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): Tasks can recur on a schedule - daily, weekly, monthly or every N hours - instead of being run by hand each time (#147)
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): Anything the Stagehand missed while it was down is reconciled from GitHub every quarter hour, so a deploy or a restart no longer silently loses issues and comments (#156)
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): Browser notifications for the three things nothing else resolves: an agent that tried and could not fix something operational, somebody outside the team opening an issue, and an agent stopped and waiting for an answer. Installed as an app, the icon carries the inbox count (#157)
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): Scheduling work says how much the agent may decide for itself - carry on, or stop and ask when the work admits more than one reading (#162)
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): A failed-partition tile in the topbar and on the dashboard whenever a Chronicle connection is configured, showing zero when nothing is stuck rather than appearing only once something is wrong (#164)
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): The new-issue dialog can hand a rough note to the content agent and get a title, body, type and labels back to edit and file (#166)
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): Any file can be pasted or dropped into a markdown editor as an attachment, not only images, with a placeholder in the editor while it uploads (#165)
- **Chronicle** ([Release v16.39.0](https://github.com/Cratis/Chronicle/releases/tag/v16.39.0)): Behavior pattern detection in the kernel: contextual facets are read off each event, mined into recurring combinations with a bounded Lossy Counting sketch, and only combinations clearing the support and confidence thresholds are persisted. Storage scales with distinct recurring behavior rather than with event volume. (#3857)
- **Chronicle** ([Release v16.39.0](https://github.com/Cratis/Chronicle/releases/tag/v16.39.0)): `Patterns` gRPC service with `GetPatterns`, which answers a partial context ranked by specificity and then confidence, and `GetPatternsForScope`, which lists everything a scope has established. (#3857)
- **Chronicle** ([Release v16.39.0](https://github.com/Cratis/Chronicle/releases/tag/v16.39.0)): `IEventStore.Patterns` on the .NET client for asking what a scope usually does in a context, and for browsing everything it has established. Nothing clearing the confidence bar returns nothing rather than the best of a bad set. (#3857)
- **Chronicle** ([Release v16.39.0](https://github.com/Cratis/Chronicle/releases/tag/v16.39.0)): `Cratis:Chronicle:PatternDetection` configuration for which facets participate, the largest combination size, the Lossy Counting error parameter, the support and confidence thresholds, and the daily decay factor. (#3857)
- **Chronicle** ([Release v16.39.0](https://github.com/Cratis/Chronicle/releases/tag/v16.39.0)): `ICausationManager.BeginScope`, which puts a causation on the chain and takes it off again when disposed. `Add` is append-only, which is right for a link describing how work arrived and wrong for one describing a bounded piece of work — two such pieces done one after the other would leave the second reading as caused by the first. (#3857)
- **Chronicle** ([Release v16.39.0](https://github.com/Cratis/Chronicle/releases/tag/v16.39.0)): Documentation for behavior patterns and for the .NET pattern API.
- **Stagehand** ([Release v2.9.0](https://github.com/Cratis/Stagehand/releases/tag/v2.9.0)): A Content Creation page in the sidebar, listing the issues that are work on content - full width and dense like the Backlog, with a dialog on click (#138)
- **Stagehand** ([Release v2.9.0](https://github.com/Cratis/Stagehand/releases/tag/v2.9.0)): A Content creation settings page: the tone everything written here holds, what each kind of content (blog, LinkedIn, documentation) takes, and which repositories hold content (#138)
- **Stagehand** ([Release v2.9.0](https://github.com/Cratis/Stagehand/releases/tag/v2.9.0)): Repositories can be marked as holding content, and an issue registered against one is directed to the content backlog as it arrives (#138)
- **Stagehand** ([Release v2.9.0](https://github.com/Cratis/Stagehand/releases/tag/v2.9.0)): Scribe, the agent that writes content - work covering an issue directed to content creation carries the tone and the skill for its kind into the session (#138)
- **Stagehand** ([Release v2.8.0](https://github.com/Cratis/Stagehand/releases/tag/v2.8.0)): Outlets - somewhere to publish to, with a name, a kind (Discord or LinkedIn) and a webhook URL. Several of a kind are allowed, and anything that publishes picks from the list by name (#148)
- **Stagehand** ([Release v2.8.0](https://github.com/Cratis/Stagehand/releases/tag/v2.8.0)): An Outlets settings page holding the outlets, the LinkedIn account posts go out as, and the Discord bot that watches channels (#148)
- **Stagehand** ([Release v2.8.0](https://github.com/Cratis/Stagehand/releases/tag/v2.8.0)): The weekly digest is assembled in the Stagehand from the releases and closed issues of the repositories it is configured for, on a weekly cadence or on demand (#148)
- **Stagehand** ([Release v2.8.0](https://github.com/Cratis/Stagehand/releases/tag/v2.8.0)): Aggregated release notes are committed to a chosen repository and folder, named for the week they cover (#148)
- **Stagehand** ([Release v2.8.0](https://github.com/Cratis/Stagehand/releases/tag/v2.8.0)): A digest can be told things beyond the week's own facts - a campaign to mention, a tone to hold - which are carried into the prompt that drafts the post (#148)
- **Stagehand** ([Release v2.8.0](https://github.com/Cratis/Stagehand/releases/tag/v2.8.0)): A repository's recently closed issues can be backfilled, so a digest covering weeks that predate the Stagehand watching has something to draw on (#148)
- **Stagehand** ([Release v2.7.0](https://github.com/Cratis/Stagehand/releases/tag/v2.7.0)): Brainstorming boards - create boards, file them under folders, and associate each with one or more repositories or a repository group (#141)
- **Stagehand** ([Release v2.7.0](https://github.com/Cratis/Stagehand/releases/tag/v2.7.0)): A boards drawer that slides in beside the brainstorming canvas, grouping boards by folder and filtering them by repository with the same filter button the Backlog uses (#141)
- **Stagehand** ([Release v2.7.0](https://github.com/Cratis/Stagehand/releases/tag/v2.7.0)): Opening a board narrows the canvas to the notes, cards, regions and chat threads placed on it; anything added while it is open is placed on it (#141)
- **Stagehand** ([Release v2.6.0](https://github.com/Cratis/Stagehand/releases/tag/v2.6.0)): The Operations page is a tab per section, each with an indicator light beside its name showing whether that system is connected. Three states rather than two: not configured is not a fault, and showing it red would train people to ignore the one light that matters. (#145)
- **Stagehand** ([Release v2.6.0](https://github.com/Cratis/Stagehand/releases/tag/v2.6.0)): A tile on Operations and on the Dashboard shows Chronicle's failed-partition count, refreshed every ten seconds, and the Dashboard graphs it over the last day - the shape answers "is this getting worse, and did what we did help", which a single number cannot. (#145)
- **Stagehand** ([Release v2.6.0](https://github.com/Cratis/Stagehand/releases/tag/v2.6.0)): Multiple Kubernetes clusters can be configured, each by address and client certificate and key rather than a whole kubeconfig. The kubeconfig an agent gets is generated from them with a context per cluster, so an investigation moves between them with `kubectl config use-context`. (#146)
- **Stagehand** ([Release v2.6.0](https://github.com/Cratis/Stagehand/releases/tag/v2.6.0)): Once a cluster answers, the namespaces worth watching are picked from the list the cluster itself reports. (#146)
- **Stagehand** ([Release v2.5.0](https://github.com/Cratis/Stagehand/releases/tag/v2.5.0)): An issue that says `Depends on #12` (or `Blocked by`, or a cross-repository `owner/repo#12`) waits for it rather than being scheduled, and starts as soon as what it waited on is closed. The backlog shows what a waiting issue is held back by. (#143)
- **Stagehand** ([Release v2.5.0](https://github.com/Cratis/Stagehand/releases/tag/v2.5.0)): Chat topics can be archived. The conversation stays in the log; only the read model goes, so an archived topic can be brought back rather than being lost. (#142)
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): The terminal drawer can be resized by dragging its top edge.
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): The terminal runs zsh with a profile: completion, history, a prompt showing the repository and branch, and git aliases.
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): The agent base image carries the Cratis CLI, for inspecting a running Chronicle store (#131).
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): Warden and Steward have their own avatars instead of falling back to initials.
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): Creating a GitHub issue can carry labels and an issue type.
- **Stagehand** ([Release v2.3.0](https://github.com/Cratis/Stagehand/releases/tag/v2.3.0)): Security page: inbound issues and comments flagged as unsafe for an agent to act on, with the finding, an excerpt of the text, and the action worth taking. (#122)
- **Stagehand** ([Release v2.3.0](https://github.com/Cratis/Stagehand/releases/tag/v2.3.0)): Content Moderation page: the same review surface for sales pitches, spam, and breaches of the [code of conduct](https://github.com/Cratis/.github/blob/main/CODE_OF_CONDUCT.md). (#122)
- **Stagehand** ([Release v2.3.0](https://github.com/Cratis/Stagehand/releases/tag/v2.3.0)): Two agents behind them - Warden for security, Steward for content. Both are ordinary configurable agents: point them at an AI provider in Settings → Agents to turn screening on. (#122)
- **Stagehand** ([Release v2.3.0](https://github.com/Cratis/Stagehand/releases/tag/v2.3.0)): Settings → Security, for editing what each pass looks for. Ships with default instructions covering prompt injection, requests that quietly weaken security, supplied code and redirected dependencies, hidden text, sales pitches, and conduct. (#122)
- **Stagehand** ([Release v2.3.0](https://github.com/Cratis/Stagehand/releases/tag/v2.3.0)): An issue the security pass judges blocking does not get an investigation scheduled. Advisory findings are flagged without stopping anything. (#122)
- **Stagehand** ([Release v2.2.0](https://github.com/Cratis/Stagehand/releases/tag/v2.2.0)): Tasks page: a grid of task tiles, each with play and configure. A tile shows what the task covers right now, how its last run went, and glows while a run is in flight. (#120)
- **Stagehand** ([Release v2.2.0](https://github.com/Cratis/Stagehand/releases/tag/v2.2.0)): Tasks are defined with a name, instructions, and either a set of repositories or a repository group. A task pointed at a group covers whatever the group holds at the moment it runs, so adding a repository to the group is enough — no task that draws from it needs editing too. (#120)
- **Stagehand** ([Release v2.2.0](https://github.com/Cratis/Stagehand/releases/tag/v2.2.0)): A task runs either as one agent per repository or as a single agent across all of them. Per-repository runs are independent units of work, so one repository failing does not take the others with it. (#120)
- **Stagehand** ([Release v2.2.0](https://github.com/Cratis/Stagehand/releases/tag/v2.2.0)): Task runs appear in Agents alongside every other kind of work, with their own purpose and their instructions carried on the run. (#120)
- **Stagehand** ([Release v2.1.0](https://github.com/Cratis/Stagehand/releases/tag/v2.1.0)): A read-only terminal over the tenant's repositories, opened from the console icon in the sidebar. The icon only appears where a session can actually run, so a deployment that cannot host one shows no button rather than one that fails on click
- **Stagehand** ([Release v1.7.0](https://github.com/Cratis/Stagehand/releases/tag/v1.7.0)): An AI provider can now be given a limit on how many units of work run on it at once, set from its new concurrency action in Settings. Zero, the default, means no limit, so nothing changes until a limit is set (#119)
- **Screenplay.Generation** ([Release v0.17.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.17.0)): Add source-neutral artifact, member, type-use, binding, and identifier-role facts with fixed-snapshot derivation lineage. (#19)
- **Screenplay.Generation** ([Release v0.17.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.17.0)): Add exact nested .NET type-use fact emission for independently composed adapters. (#19)
- **Stagehand** ([Release v1.5.0](https://github.com/Cratis/Stagehand/releases/tag/v1.5.0)): A dedicated **Agents** page (master/detail) showing every unit of work an agent is running or has recently run - Overview, Steps, and Log (live console) tabs per item. The "workers" stat in the top bar and the Dashboard now link to it. (#108)
- **Stagehand** ([Release v1.5.0](https://github.com/Cratis/Stagehand/releases/tag/v1.5.0)): Optional Kubernetes node-pool placement for worker Jobs (`ContainerRuntime:NodePoolWorkload`), so worker Jobs can be pinned to a tainted CI node pool instead of landing on any node in the cluster. Unset (the default) applies no constraint. (#108)
- **Stagehand** ([Release v1.5.0](https://github.com/Cratis/Stagehand/releases/tag/v1.5.0)): Backlog filtering: a single filter button replaces the always-visible repo-pill row and quick-filter pills, opening a dropdown with repository, status, and label facets - every prior filtering capability is preserved. (#102)
- **Studio** ([Release v0.84.0](https://github.com/Cratis/Studio/releases/tag/v0.84.0)): Every call to the LLM now records how many input/output tokens it consumed as an event appended to the calling organization's own event store, so token usage can be tracked and later aggregated per organization (Cratis/StudioIssues#254)
- **AI** ([Release v0.1.1](https://github.com/Cratis/AI/releases/tag/v0.1.1)): Include version-pinned Pi usage instructions in `@cratis/ai-fundamentals`. (#181)
- **AI** ([Release v0.1.0](https://github.com/Cratis/AI/releases/tag/v0.1.0)): Validate release intent through the shared pinned Cratis workflow. (#181)
- **Screenplay.Generation** ([Release v0.16.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.16.0)): Add source-neutral adapter descriptors, capabilities, structured probes, immutable run snapshots, and atomic contribution admission. (#23)
- **Screenplay.Generation** ([Release v0.16.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.16.0)): Add an exactly-once deterministic .NET adapter runner with modern and legacy registrations, source authority, version and capability enforcement, and isolated failures. (#23)
- **Screenplay.Generation** ([Release v0.16.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.16.0)): Add snapshot-aware generation with per-fact lowered, provenance-only, omitted, conflicted, or fail-closed dispositions. (#23)
- **Stagehand** ([Release v1.4.0](https://github.com/Cratis/Stagehand/releases/tag/v1.4.0)): A landing **Dashboard** at `/` with actionable tiles (workers running, awaiting your review, alerts, red builds, open issues), a 7/30-day trend strip, and jobs-executed / token-usage-over-time charts with a last-week/last-month toggle. **Triage** moves to `/triage`. (#96)
- **Stagehand** ([Release v1.4.0](https://github.com/Cratis/Stagehand/releases/tag/v1.4.0)): Inbox redesigned as a mailbox-style master/detail view: a compact list of every mention/assignment next to a detail pane with the full conversation, a sticky toolbar (Open on GitHub, Reply, Mark as done), and per-item dismissal that reappears automatically on fresh activity. (#88)
- **Stagehand** ([Release v1.4.0](https://github.com/Cratis/Stagehand/releases/tag/v1.4.0)): **Visions**: create, rename, describe, and associate/disassociate repositories with named vision groups (a repository belongs to at most one vision). Replaces the single, deployment-wide vision. (#77)
- **Stagehand** ([Release v1.4.0](https://github.com/Cratis/Stagehand/releases/tag/v1.4.0)): LinkedIn publisher: OAuth 2.0 connection flow and a Settings → LinkedIn page to publish text posts through LinkedIn's REST Posts API. (#77)
- **Stagehand** ([Release v1.4.0](https://github.com/Cratis/Stagehand/releases/tag/v1.4.0)): Per-provider AI concurrency bounding (`Stagehand:AIProviders:MaxConcurrency`, `Stagehand:AIProviders:MaxConcurrencyWaitTimeout`) so one busy provider can no longer stall an unrelated, idle one. (#84)
- **Stagehand** ([Release v1.4.0](https://github.com/Cratis/Stagehand/releases/tag/v1.4.0)): Agents on the Pi harness can now be assigned to an Azure OpenAI or OpenAI-compatible provider, in addition to Anthropic and OpenAI. (#56)
- **Stagehand** ([Release v1.4.0](https://github.com/Cratis/Stagehand/releases/tag/v1.4.0)): Deployment wiring for a shared, NFS-backed repository cache volume for worker Jobs — added but left dormant (config values intentionally unset) until deliberately activated. (#94)
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): **Stagehand user tracking**: every resolved identity is recorded on first sight; issues filed directly on GitHub by a known Stagehand user are now treated the same as ones the App filed itself - no "thanks for opening this" acknowledgment, since they already know Stagehand exists. Still classified and labeled as before. (#76)
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): **A managed Team roster** in Settings → Team (add/remove members), replacing the old "anyone who ever touched a tracked issue" heuristic for who can be reached in chat. Chat mentions are now scoped to the roster plus agents; the signed-in user is always implicitly included so a fresh deployment can never lock itself out of its own chat. (#79)
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): **A dedicated Builds page**, split out of Operations - clicking a build now opens the same centered dialog Triage/Backlog use for issues, instead of a fullscreen slide-in panel. (#80)
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): **Editable issue type** (dropdown) and an **add-label picker** (existing labels + free text for new ones) on issue details. (#81)
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): Specific, actionable logging for every way AI provider/pool resolution can fail to reach a vendor call, instead of silently collapsing into one misleading legacy-fallback message. (#83)
- **Arc** ([Release v22.4.0](https://github.com/Cratis/Arc/releases/tag/v22.4.0)): Recover generated command success and appended-event expectations with exact predicate values. (Cratis/Screenplay.Generation#25)
- **Arc** ([Release v22.4.0](https://github.com/Cratis/Arc/releases/tag/v22.4.0)): Recover generated read-model scenarios, inherited properties, and application-proven event placement. (Cratis/Screenplay.Generation#25)
- **Arc** ([Release v22.4.0](https://github.com/Cratis/Arc/releases/tag/v22.4.0)): Recover Stage-generated query specifications as query/read-model artifacts, `Returns`, StateView placement, and ordered argument/result values. (Cratis/Screenplay.Generation#25)
- **Stagehand** ([Release v1.2.0](https://github.com/Cratis/Stagehand/releases/tag/v1.2.0)): `IssueDetailDialog`, a reusable popup component shared by Triage and Backlog for showing issue details.
- **Stagehand** ([Release v1.2.0](https://github.com/Cratis/Stagehand/releases/tag/v1.2.0)): Backlog columns: involvement (assigned/mentioned), registered date, and last-activity date, each sortable.
- **Stagehand** ([Release v1.2.0](https://github.com/Cratis/Stagehand/releases/tag/v1.2.0)): A label/tag filter on the Backlog page, built on the same facet-filter component used elsewhere in the Cratis component library.
- **Stagehand** ([Release v1.2.0](https://github.com/Cratis/Stagehand/releases/tag/v1.2.0)): The `Issue` read model now tracks `lastActivityAt` - the most recent GitHub-observable change (rename, close/reopen, body/label/assignee/milestone change, comment added/removed).
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): A default **System agent** (`AgentPurposes.Conversation`), wearing the System avatar ported from Studio - the default conversational agent other automation reaches for when nothing more specific applies.
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): A new `MessageReplying` reactor: mentioning any chat-mode agent (`@System`, `@Scout`, ...) in a chat message now gets a reply from that agent's own language model, appended back into the same topic and rendered with the agent's real name and avatar.
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): A typing indicator while a mentioned agent is composing its reply, with a 3-minute timeout backstop if no reply ever lands.
- **Stagehand** ([Release v1.0.0](https://github.com/Cratis/Stagehand/releases/tag/v1.0.0)): **The chat sidebar is live** - topics, LLM-named on the first message, @-mentions of people and agents, and message actions to associate with or create a GitHub issue. (#52)
- **Stagehand** ([Release v1.0.0](https://github.com/Cratis/Stagehand/releases/tag/v1.0.0)): **Canvas regions remember what's inside them** - dragging a note, card or chat window into a region on the Brainstorming canvas persists that membership; leaving one removes it. (#64)
- **Stagehand** ([Release v1.0.0](https://github.com/Cratis/Stagehand/releases/tag/v1.0.0)): A rollout script that drops the superseded Stagehand databases as part of this release - see Deployment/README.md.
- **Screenplay.CritterStack** ([Release v0.23.1](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.23.1)): Characterize generated-source exclusion, receiver boundaries, payload admission, saga filtering, and authored unresolved-write ordering. (Cratis/Screenplay.Generation#18)
- **Components** ([Release v3.6.0](https://github.com/Cratis/Components/releases/tag/v3.6.0)): Topic-based `Chat` component family — `ChatSidebar` (PrimeReact Drawer opening next to the view), `ChatTopicList` and `ChatConversation` — with topics and messages handed in as live arrays, a `ChatMessage`/`ChatTopic` interface contract the components are generic over, host-side topic auto-naming through `onRequestTopicName` with a pending placeholder until the name arrives, host-resolved authors with `renderAvatar`/`renderAuthorName` overrides, and extensible per-message action descriptors; exported as `@cratis/components/Chat` (Cratis/Stagehand#52)
- **Components** ([Release v3.6.0](https://github.com/Cratis/Components/releases/tag/v3.6.0)): `ChatSidebarForObservableQueries` — the sidebar bound to two Cratis Arc observable queries for real-time topics and messages (Cratis/Stagehand#52)
- **Components** ([Release v3.6.0](https://github.com/Cratis/Components/releases/tag/v3.6.0)): `@`-mention candidates from a host-supplied `resolveMentionCandidates` provider (sync or async) on the composer and conversation, mentions reported on send, and mentions rendered distinctly in message bodies (Cratis/Stagehand#52)
- **Components** ([Release v3.6.0](https://github.com/Cratis/Components/releases/tag/v3.6.0)): Mention helpers `findMentionRanges`, `extractMentions` and `mentionSegments`, generic over anything with a name (Cratis/Stagehand#52)
- **Stagehand** ([Release v0.3.0](https://github.com/Cratis/Stagehand/releases/tag/v0.3.0)): **Agents run the show** - each agent is configured with a harness (Claude or Pi), an AI provider or provider pool, and a model picked from the provider's live model catalog instead of free text. Agents carry **skills** (named markdown instructions, added and edited like in Studio) that travel with every job's prompt, and their artwork is now fixed to their identity. Work is dispatched through the acting agent: its harness picks the worker image, its provider or pool supplies the API key - revealed from the vault at the moment of dispatch, never stored in work state. (#56, #57, #58)
- **Stagehand** ([Release v0.3.0](https://github.com/Cratis/Stagehand/releases/tag/v0.3.0)): **Pi harness** - the worker image is now a common base with Claude and Pi derivatives, published as `stagehand-worker-claude` and `stagehand-worker-pi`. (#56)
- **Stagehand** ([Release v0.3.0](https://github.com/Cratis/Stagehand/releases/tag/v0.3.0)): **Organization encryption keys in Vault** - every tenant gets its own encryption key, created on first use and living only in HashiCorp Vault. Secrets are encrypted before they land on events and decrypted at the moment they are used: AI provider API keys, the Chronicle client secret, operations credentials (kubeconfig, Loki password, Grafana token) and the weekly-digest webhook token. Existing stored values keep working and are re-protected on next save. Local development gets a dev-mode Vault in both Aspire and docker-compose. (#54, #60, #61)
- **Stagehand** ([Release v0.3.0](https://github.com/Cratis/Stagehand/releases/tag/v0.3.0)): **Operations settings, grouped** - one dialog per concern (cluster access, logs, dashboards, investigation context, issue routing), each field with a **?** tooltip explaining what the value is and how to obtain it. (#60)
- **Stagehand** ([Release v0.3.0](https://github.com/Cratis/Stagehand/releases/tag/v0.3.0)): **Weekly digest outlets by type** - add and remove Discord and LinkedIn outlets individually instead of editing one all-outlets form; the event log records each change explicitly. (#59)
- **Stagehand** ([Release v0.3.0](https://github.com/Cratis/Stagehand/releases/tag/v0.3.0)): **Chat backend** - topics that name themselves from the first message (the LLM picks the title), messages with @-mentions of people and agents, and message actions for associating with or creating a GitHub issue. The chat UI arrives with the next @cratis/components release. (#52)
- **Stagehand** ([Release v0.3.0](https://github.com/Cratis/Stagehand/releases/tag/v0.3.0)): **Tenant selection is live** - sign-in now runs the real tenant-selection mechanism; every user currently belongs to the single Cratis tenant, selected automatically.
- **Screenplay.Generation** ([Release v0.15.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.15.0)): Add authoritative authored invocation and assignment enumeration, exact normalized method signatures, and typed bounded constant, type, payload, and collection extraction. (#18)
- **Screenplay.Generation** ([Release v0.15.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.15.0)): Add atomic fail-closed diagnostics with immutable snapshots, exact child locations, and comprehensive negative coverage. (#18)
- **Stagehand** ([Release v0.2.0](https://github.com/Cratis/Stagehand/releases/tag/v0.2.0)): **Background jobs engine** - long-running background work now runs as restart-safe jobs (ported from Studio's grain-based Jobs engine): a job plans its steps, performs them with event-sourced state, and picks up unfinished steps after a restart instead of forgetting where it was. Job identity carries the tenant from day one. Provisioning the default agents' artwork is the first job converted - each agent is a step, and a failure is recorded per step in the job's history rather than swallowed.
- **Stagehand** ([Release v0.2.0](https://github.com/Cratis/Stagehand/releases/tag/v0.2.0)): **Tenant model (groundwork)** - Stagehand's tenant directory is in place: tenants as named workspaces, each with its own isolated data namespace, membership per GitHub identity, and automatic seeding of the six default agents and their artwork into every newly created tenant. **Nothing changes at sign-in yet** - production deliberately stays on the single shared workspace until first-tenant bootstrap, data continuity and per-tenant webhook routing land in a follow-up release.
- **Stagehand** ([Release v0.2.0](https://github.com/Cratis/Stagehand/releases/tag/v0.2.0)): **The GitHub App, plainly** - a short, no-plumbing documentation page on the mental model: one App published once by the operator, installed by every organization through GitHub's own picker. (#50)
- **Stagehand** ([Release v0.1.0](https://github.com/Cratis/Stagehand/releases/tag/v0.1.0)): **AI providers** - configure any number of AI providers under Settings → AI: Anthropic, OpenAI, Azure OpenAI, and OpenAI-compatible endpoints (Ollama, LocalAI, self-hosted gateways). Keys are encrypted at rest and never leave the server; per-provider token usage (jobs and tokens, this week and lifetime) shows on each provider's row. (#47)
- **Stagehand** ([Release v0.1.0](https://github.com/Cratis/Stagehand/releases/tag/v0.1.0)): **Provider pools** - group providers into named pools, choosing the model per provider in the pool. An agent that draws from a pool is dispatched to the member with the least tokens burnt over the trailing week, so work spreads to the most available provider automatically. (#47)
- **Stagehand** ([Release v0.1.0](https://github.com/Cratis/Stagehand/releases/tag/v0.1.0)): **Agents** - the six reasoning agents (Scout, Sentinel, Cartographer, Mechanic, Chronicler, Gatekeeper) are now first-class: seeded with their names, descriptions and their own artwork on every deployment, shown with their faces on Settings → Agents, and each configurable to run on a single provider (with its model) or draw from a pool. (#47)
- **Stagehand** ([Release v0.1.0](https://github.com/Cratis/Stagehand/releases/tag/v0.1.0)): **Account profile** - the sidebar avatar is now a real button: it opens your profile with your GitHub name and login, and lets you upload an avatar (stored in multiple renditions and served at the size each surface needs). Uploaded images and avatars now persist across deployments. (#47)
- **Stagehand** ([Release v0.1.0](https://github.com/Cratis/Stagehand/releases/tag/v0.1.0)): **Settings navigation** - Settings is now an indented sub-area with one page per concern (GitHub, AI, Agents, Alert sources, Chronicle, Operations, Weekly digest, Discord) instead of one long page. GitHub connection and git identity moved into Settings → GitHub; repositories and organizations stay on the GitHub page. (#47)
- **Stagehand** ([Release v0.1.0](https://github.com/Cratis/Stagehand/releases/tag/v0.1.0)): Development: Arc Lens support - `/.cratis/users` and `/.cratis/tenants` serve dev users (with GitHub-shaped claims) and tenants, so a developer can become any seeded user from the Lens extension. (#47)
- **cli** ([Release v2.18.0](https://github.com/Cratis/cli/releases/tag/v2.18.0)): Add deterministic project-aware Screenplay generation for direct project closures, explicit target frameworks, trusted workspace boundaries, and source-structure options. (#111)
- **Screenplay.CritterStack** ([Release v0.23.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.23.0)): Add optional feature-root placement policy and deterministic strict/compatibility provenance. (#57)
- **Arc** ([Release v22.3.0](https://github.com/Cratis/Arc/releases/tag/v22.3.0)): Add project-aware Screenplay generator overloads without changing compatibility output.
- **Screenplay.Generation** ([Release v0.13.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.13.0)): Add fail-closed flat-source compatibility placement, exact alternate source ownership, and deterministic policy provenance. (#26)
- **Arc** ([Release v22.2.0](https://github.com/Cratis/Arc/releases/tag/v22.2.0)): Add an independent Arc specification-fact adapter with exact scenario, step, value, artifact, placement, and source evidence. (Cratis/Screenplay.Generation#25)
- **Arc** ([Release v22.2.0](https://github.com/Cratis/Arc/releases/tag/v22.2.0)): Add fail-closed atomic contribution for unsupported computed values, read-model assertions, and event predicates. (Cratis/Screenplay.Generation#25)
- **Screenplay.Generation** ([Release v0.12.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.12.0)): Public invocation, receiver-root, and overload-safe method identity APIs for .NET source adapters. (#18)
- **Screenplay.Generation** ([Release v0.12.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.12.0)): Canonical source-adapter guidance for authored-source authority, neutral facts, deterministic composition, and verification. (#18)
- **Screenplay.Generation** ([Release v0.12.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.12.0)): A versioned realization-report design that preserves semantic and technical provenance as separate future work. (#24)
- **Screenplay.CritterStack** ([Release v0.22.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.22.0)): Recover batched handlers, storage-action persistence, bound document reads, compound stages, projection publications, wire settings, listeners, and convention-alteration evidence.
- **Screenplay.CritterStack** ([Release v0.22.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.22.0)): Add focused positive and negative specifications plus a maintainer case study for extending source adapters safely.
- **Screenplay.Generation** ([Release v0.11.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.11.0)): Add reusable Roslyn helpers for collection elements, typed attribute arguments, and exact companion-method families.
- **Screenplay.Generation** ([Release v0.11.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.11.0)): Add declared concept nomination with neutral concept and primitive-representation facts.
- **Screenplay.Generation** ([Release v0.10.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.10.0)): Add framework-neutral scenario, ordered step, typed value, outcome, and target-artifact fact contracts. (#25)
- **Screenplay.Generation** ([Release v0.10.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.10.0)): Add fail-closed discriminator validation, deterministic resolution, atomic whole-scenario admission, exact placement attachment, and Screenplay lowering. (#25)

## Changed

- **Stagehand** ([Release v2.20.0](https://github.com/Cratis/Stagehand/releases/tag/v2.20.0)): Triage suggests at most three labels, each a single word, and reuses a label the repository already has over coining a new one that differs only in casing
- **Stagehand** ([Release v2.20.0](https://github.com/Cratis/Stagehand/releases/tag/v2.20.0)): The Weekly Digest page shows the digest itself, not only the language model's few-hundred-character description of it — and any previous digest can be selected and read (#240)
- **Stagehand** ([Release v2.20.0](https://github.com/Cratis/Stagehand/releases/tag/v2.20.0)): Chronicle upgraded to 16.42.1, with the local development kernel image pinned to the same version instead of a floating `latest` tag
- **Stagehand** ([Release v2.19.0](https://github.com/Cratis/Stagehand/releases/tag/v2.19.0)): Merging a pull request now names its merge method explicitly instead of taking the repository's
- **Stagehand** ([Release v2.18.0](https://github.com/Cratis/Stagehand/releases/tag/v2.18.0)): Approving asks GitHub to merge each pull request once, rather than once per issue the card covers.
- **Stagehand** ([Release v2.18.0](https://github.com/Cratis/Stagehand/releases/tag/v2.18.0)): Comments on issues read oldest-first everywhere they appear.
- **Stagehand** ([Release v2.18.0](https://github.com/Cratis/Stagehand/releases/tag/v2.18.0)): The repository cache is borrowed with `git clone --shared` rather than `git worktree add`, so
- **Studio** ([Release v0.85.10](https://github.com/Cratis/Studio/releases/tag/v0.85.10)): Return the Catalog pricing table through its declaring read model while preserving route and payload compatibility. (Cratis/StudioIssues#301)
- **Studio** ([Release v0.85.9](https://github.com/Cratis/Studio/releases/tag/v0.85.9)): Make all 30 command-scoped read-model parameters accurately nullable while preserving documented idempotent behavior. (Cratis/StudioIssues#298)
- **Stagehand** ([Release v2.17.7](https://github.com/Cratis/Stagehand/releases/tag/v2.17.7)): Work waiting for an answer reads as "Waiting for an answer" instead of "Queued", shows the
- **Studio** ([Release v0.85.8](https://github.com/Cratis/Studio/releases/tag/v0.85.8)): Normalize imports, argument layout, LINQ expressions, method groups, conditional access, casts, defaults, and spacing to current analyzer conventions. (Cratis/StudioIssues#300)
- **Studio** ([Release v0.85.7](https://github.com/Cratis/Studio/releases/tag/v0.85.7)): Declare explicit event-source identities for remaining Chat, concepts, and settings commands without changing behavior or schemas. (Cratis/StudioIssues#297)
- **Studio** ([Release v0.85.6](https://github.com/Cratis/Studio/releases/tag/v0.85.6)): Declare explicit event-source identities for affected event-model commands without changing command or event schemas. (Cratis/StudioIssues#296)
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Make the package root setup-only; import components from explicit `@cratis/components/*` subpaths. (#162)
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Replace PrimeReact provider/theme/pass-through contracts with Components-owned configuration, tokens, typed parts, and semantic state. (#163, #170)
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Keep React Aria as an internal dependency behind Components-owned public contracts.
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Move `pixi.js` to an optional peer used only by Canvas and PivotViewer.
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Rebuild ChatSidebar without PrimeReact dependencies or public PrimeReact contracts.
- **Components** ([Release v4.0.0](https://github.com/Cratis/Components/releases/tag/v4.0.0)): Move the generic Pixi-free Chat Ki
- **Studio** ([Release v0.85.4](https://github.com/Cratis/Studio/releases/tag/v0.85.4)): Declare `BrainstormingId` as the event-source identity for affected chat, event, region, and sticky-note commands. (Cratis/StudioIssues#295)
- **Studio** ([Release v0.85.3](https://github.com/Cratis/Studio/releases/tag/v0.85.3)): Return Admin and Lobby reactor events through Chronicle's replay-safe side-effect pipeline instead of appending directly. (Cratis/StudioIssues#294)
- **Studio** ([Release v0.85.0](https://github.com/Cratis/Studio/releases/tag/v0.85.0)): GitHub App permissions now request `contents: write`, `pull_requests: write` and `metadata: read`, removing unrelated issue write access. (Cratis/StudioIssues#276)
- **Studio** ([Release v0.85.0](https://github.com/Cratis/Studio/releases/tag/v0.85.0)): Secondary GitHub rate limits use bounded retry for exhausted quota or `Retry-After`. (Cratis/StudioIssues#276)
- **Screenplay** ([Release v4.11.0](https://github.com/Cratis/Screenplay/releases/tag/v4.11.0)): Workspace documentation now demonstrates stable-identity slice-description patch preview/apply and its admitted limitations. (#138)
- **cli** ([Release v2.19.0](https://github.com/Cratis/cli/releases/tag/v2.19.0)): Upgraded Stage Contracts and Rendering.Cratis to 3.10.0 and delegated application planning to `CratisRendering`. (#124)
- **cli** ([Release v2.19.0](https://github.com/Cratis/cli/releases/tag/v2.19.0)): Removed CLI-owned Cratis versions and hand-authored scaffold files. (#124)
- **cli** ([Release v2.19.0](https://github.com/Cratis/cli/releases/tag/v2.19.0)): Added parity and fail-closed specs proving facade-identical plans and zero artifacts for unsupported semantics. (Cratis/Screenplay#173)
- **Stage** ([Release v3.10.1](https://github.com/Cratis/Stage/releases/tag/v3.10.1)): Aligned Stage with the coherent Screenplay and CanonicalCorpus 4.10.0 package set. (Cratis/Screenplay#168)
- **Stage** ([Release v3.10.1](https://github.com/Cratis/Stage/releases/tag/v3.10.1)): Loaded RegisterProject source and identity catalogs through `RegisterProjectCorpus.LegacyV1` and the real serializers. (Cratis/Screenplay#168)
- **Stage** ([Release v3.10.1](https://github.com/Cratis/Stage/releases/tag/v3.10.1)): Proved both physical source forms produce identical artifact paths, bytes and hashes. (Cratis/Screenplay#173)
- **Chronicle** ([Release v16.42.0](https://github.com/Cratis/Chronicle/releases/tag/v16.42.0)): `GetPatternsAt` answers with commands rather than with the moment it was handed. It is built on `GetUsualActions` now, which is what its name and its documentation already promised.
- **Chronicle** ([Release v16.42.0](https://github.com/Cratis/Chronicle/releases/tag/v16.42.0)): `GetPatterns` is unchanged and stays the call for the opposite question — given a situation you can describe completely, including the command, which established patterns cover it. That is the check to make before flagging an action as unusual, and it is the only one of the two answerable from a keyed candidate lookup.
- **Screenplay** ([Release v4.10.0](https://github.com/Cratis/Screenplay/releases/tag/v4.10.0)): Identity migration now distinguishes internal, explicit retirement from unexplained stale assignments without changing the existing public rename-only contract. (#137)
- **Screenplay** ([Release v4.10.0](https://github.com/Cratis/Screenplay/releases/tag/v4.10.0)): Folder documentation now shows revision-safe, destination-independent workspace proposals. (#137)
- **Stagehand** ([Release v2.15.5](https://github.com/Cratis/Stagehand/releases/tag/v2.15.5)): `Cratis.Arc` updated to 22.6.2 and the `Cratis.Chronicle` client packages to 16.41.0. **This requires the Chronicle kernel to be on 16.41.0 as well** — the client verifies compatibility when it connects, and an older server missing a service the client expects fails the handshake and stops the host from starting rather than degrading a feature.
- **Screenplay.CritterStack** ([Release v0.24.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.24.0)): Adopted the Screenplay Generation 0.17 contract family in lockstep. (#44)
- **Screenplay.CritterStack** ([Release v0.24.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.24.0)): Marten document discovery can exclude Wolverine–Marten integration APIs without changing the existing compatibility adapter default. (#44)
- **Stage** ([Release v3.10.0](https://github.com/Cratis/Stage/releases/tag/v3.10.0)): Generated Debug applications now keep the host active beside inline specifications while containing the expected entry-point warning locally. (#71)
- **Stage** ([Release v3.10.0](https://github.com/Cratis/Stage/releases/tag/v3.10.0)): Profiles with changed identities, versions, inputs, bytes, or hashes are rejected before rendering. (#11)
- **Stage** ([Release v3.10.0](https://github.com/Cratis/Stage/releases/tag/v3.10.0)): Plans with unsupported reachable semantics now return blocking diagnostics and zero candidate artifacts. (#13)
- **Screenplay.Generation** ([Release v0.18.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.18.0)): Diagnostic disposition now follows typed fact links instead of parsing human-readable messages. (#24)
- **Screenplay.Generation** ([Release v0.18.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.18.0)): Definitions differing only by source or implementation file now resolve as one semantic variant while preserving a canonical compatibility file. (#24)
- **Screenplay** ([Release v4.9.0](https://github.com/Cratis/Screenplay/releases/tag/v4.9.0)): ESM v1 binding now blocks specification event-source assertions with `PLAY0268` until their typed ESM v2 semantics are implemented. (#167)
- **Screenplay** ([Release v4.9.0](https://github.com/Cratis/Screenplay/releases/tag/v4.9.0)): ESM v1 validation rejects populated v2-only context fields before canonical serialization. (#167)
- **Chronicle** ([Release v16.40.0](https://github.com/Cratis/Chronicle/releases/tag/v16.40.0)): When several methods on a reactor or reducer match the same event type, the public one now wins, then the one with the richest signature. A private helper extracted from a handler can no longer take that handler's place (#3870)
- **Chronicle** ([Release v16.40.0](https://github.com/Cratis/Chronicle/releases/tag/v16.40.0)): A projection catches up through a single job step walking the sequence in global order, rather than one step per event source (#3869)
- **Chronicle** ([Release v16.40.0](https://github.com/Cratis/Chronicle/releases/tag/v16.40.0)): Catch-up and replay bring their job steps up after subscribing has returned, so registering a projection no longer waits for them (#3869)
- **Chronicle** ([Release v16.40.0](https://github.com/Cratis/Chronicle/releases/tag/v16.40.0)): `Observers.SubscriberTimeout` is now applied to subscriber calls — it previously had no effect at all. The default is raised from 5 to 30 seconds to match the bound the transport already imposes, so nothing changes for anyone who has not set it, and `0` now means waiting indefinitely rather than falling back to five seconds (#3869)
- **Chronicle** ([Release v16.40.0](https://github.com/Cratis/Chronicle/releases/tag/v16.40.0)): A partition whose last attempt timed out no longer counts toward the observer quarantine thresholds, so a congested period cannot take an otherwise healthy observer out of service (#3869)
- **Stagehand** ([Release v2.15.4](https://github.com/Cratis/Stagehand/releases/tag/v2.15.4)): `Cratis.Arc` updated to 22.6.1, and the `Cratis.Chronicle` client packages to 16.39.2 — the release Arc 22.6.x requires.
- **Stagehand** ([Release v2.15.3](https://github.com/Cratis/Stagehand/releases/tag/v2.15.3)): Scheduling a unit of work now triggers dispatch of the queue rather than a full scheduling pass. Events that genuinely free a concurrency slot — completion, failure, a stop, a question — still run the full pass.
- **Stagehand** ([Release v2.15.3](https://github.com/Cratis/Stagehand/releases/tag/v2.15.3)): New `Stagehand:Scheduling:ProjectionGrace` setting (default 10 minutes) bounds how long the scheduler waits for the work read model to confirm something it scheduled before allowing that issue to be scheduled again.
- **Stagehand** ([Release v2.15.0](https://github.com/Cratis/Stagehand/releases/tag/v2.15.0)): A run reports its steps as its first action, and builds them from the plan an earlier planning or investigation run already produced when there is one. The instruction previously asked for this "near the start" and then called it a courtesy update that was harmless to lose, so it routinely was — leaving runs on screen with no steps at all.
- **Stagehand** ([Release v2.14.0](https://github.com/Cratis/Stagehand/releases/tag/v2.14.0)): Implementation work is asked to commit and stop. Pushing, opening the pull request and writing its description are no longer the agent's to remember. Ad-hoc and task runs still open their own, because they can span several repositories at once.
- **Stagehand** ([Release v2.14.0](https://github.com/Cratis/Stagehand/releases/tag/v2.14.0)): The work console shows a readable transcript: prose as prose, a tool call paired with whether it worked, a progress report showing what it says, and a closing line reporting what the run cost. Stored output is unchanged — this is presentation only.
- **Chronicle** ([Release v16.39.2](https://github.com/Cratis/Chronicle/releases/tag/v16.39.2)): `Cratis.Arc` updated to 22.6.0. Events appended through an Arc command now carry the command that produced them, and a command executed from another command carries the one above it.
- **Chronicle** ([Release v16.39.2](https://github.com/Cratis/Chronicle/releases/tag/v16.39.2)): Every `[Command]` declares a public instance `Handle()` rather than an internal one, which is the contract Arc documents and now enforces.
- **Arc** ([Release v22.6.0](https://github.com/Cratis/Arc/releases/tag/v22.6.0)): Every dependency updated to its latest version, including `Cratis.Chronicle` 16.39.1 and the `Cratis.Fundamentals` 7.18.2 / `Cratis.Metrics.Roslyn` 7.18.2 it requires.
- **Stagehand** ([Release v2.11.0](https://github.com/Cratis/Stagehand/releases/tag/v2.11.0)): `ContentKind.LinkedIn` is now `ContentKind.Social` - it named a kind of content after the one
- **Stagehand** ([Release v2.11.0](https://github.com/Cratis/Stagehand/releases/tag/v2.11.0)): The content-creation settings page says whether the tone and each skill are described rather than
- **Stagehand** ([Release v2.11.0](https://github.com/Cratis/Stagehand/releases/tag/v2.11.0)): Scribe has its artwork instead of falling back to initials
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): LinkedIn outlets publish through the LinkedIn API as the connected account. Discord outlets keep their channel webhook, which is Discord's own way of posting to a channel, so a webhook URL is now something only a Discord outlet carries
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): Picking several repositories at once is a bounded list of checkboxes rather than a dropdown that covered the page and hid what was already picked
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): One markdown editor and one markdown viewer across the whole application, so writing an issue, a vision, an agent instruction or a digest is the same act - including surfaces that were still plain text areas (#163)
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): A vision's repositories are picked from that same checkbox list, showing every tracked repository with the vision's own ones ticked (#167)
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): Item actions sit in the corner of their own row rather than in a menu above the list (#161)
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): The Operations page says the Chronicle status once, on its own tab, where failed partitions are now a master/detail list
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): Every package updated, including the analyzers whose newer rules the weekly update job could not get past (#155)
- **Chronicle** ([Release v16.39.0](https://github.com/Cratis/Chronicle/releases/tag/v16.39.0)): Pattern mining reads a causation that carries a `commandType` property by that name rather than by its causation type, so commands are distinguishable from each other instead of sharing one value.
- **Stagehand** ([Release v2.9.0](https://github.com/Cratis/Stagehand/releases/tag/v2.9.0)): The Backlog's dense issue row and column header are now shared components, so the Backlog and Content Creation stay the same surface rather than drifting apart (#138)
- **Stagehand** ([Release v2.8.0](https://github.com/Cratis/Stagehand/releases/tag/v2.8.0)): A published digest posts to the outlets it was configured with; a deployment that has chosen none keeps publishing through the webhook URLs it always had (#148)
- **Stagehand** ([Release v2.8.0](https://github.com/Cratis/Stagehand/releases/tag/v2.8.0)): The LinkedIn and Discord settings pages are gone - what they configured now lives on the Outlets page (#148)
- **Stagehand** ([Release v2.3.1](https://github.com/Cratis/Stagehand/releases/tag/v2.3.1)): A worker's worktree names its start point explicitly, so work provably begins from the default branch as it stands at that moment rather than relying on `-B` defaulting to `HEAD`. (#94)
- **Stagehand** ([Release v2.3.0](https://github.com/Cratis/Stagehand/releases/tag/v2.3.0)): Issue comments are now screened too, not just issues. A comment on a three-week-old issue is the easier way in, because nobody is reading it. (#122)
- **Stagehand** ([Release v2.2.0](https://github.com/Cratis/Stagehand/releases/tag/v2.2.0)): Work items now record when they were scheduled, distinct from when they started. Work waiting for a free worker previously had no timestamp at all, so it could not be shown or ordered until a worker picked it up. (#120)
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): Arc analyzers and generators now require the .NET SDK declared by `global.json` (`10.0.400` or later in that SDK band) because they target Roslyn 5.9.
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.CodeAnalysis` is a dependency-only umbrella over the ARC and ARCCHR analyzer packages.
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.Chronicle`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.Chronicle.CodeAnalysis`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.Chronicle.Testing`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.Core`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.Core.CodeAnalysis`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.EntityFrameworkCore`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.MongoDB`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.OpenApi`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.ProxyGenerator`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.ProxyGenerator.Build`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.ProxyGenerator.Specs.CommandResponseHandlerDependency`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.ProxyGenerator.Specs.FakeCommandResponseHandlerDependency`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.Screenplay`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.Swagger`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Arc.Testing`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.CodeAnalysis`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `Cratis.Testing`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `@cratis/arc`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `@cratis/arc.react`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `@cratis/arc.react.mvvm`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `@cratis/arc.vite`
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): `@cratis/eslint-plugin-arc`
- **Stagehand** ([Release v2.0.1](https://github.com/Cratis/Stagehand/releases/tag/v2.0.1)): The harness a newly configured agent defaults to now lives only where it belongs — on the configure command and the agent read model — where it decides what an agent gets when nothing was recorded, and re-seeds nothing
- **Stagehand** ([Release v2.0.1](https://github.com/Cratis/Stagehand/releases/tag/v2.0.1)): The Harness field in agent settings now explains what it does and why only the agent that runs work in a container has one
- **Stagehand** ([Release v2.0.0](https://github.com/Cratis/Stagehand/releases/tag/v2.0.0)): A completion that has nothing to run on now fails with a reason naming the agent and pointing at Settings, instead of degrading into an error about configuration the deployment never had. This is the rule work dispatch has always applied
- **Stagehand** ([Release v2.0.0](https://github.com/Cratis/Stagehand/releases/tag/v2.0.0)): An agent's "Runs on" setting now offers "Not configured - this agent will not run" where it used to offer "Global default", because that is what choosing it now means
- **Stagehand** ([Release v2.0.0](https://github.com/Cratis/Stagehand/releases/tag/v2.0.0)): Auto-investigation of externally reported issues decides whether triage can classify by asking the triage agent whether it has a provider, rather than asking the removed global configuration
- **Studio** ([Release v0.84.1](https://github.com/Cratis/Studio/releases/tag/v0.84.1)): The Chronicle kernel deployed to production, and the kernel used by local development through Aspire and docker-compose, all run 16.38.5. The local pins had drifted to 16.15.0 and 16.32.0 respectively, so local development was not exercising anything close to what production runs.
- **Stagehand** ([Release v1.7.0](https://github.com/Cratis/Stagehand/releases/tag/v1.7.0)): Work that arrives while its provider is at that limit stays queued and starts on its own as soon as capacity frees up, rather than being dispatched or refused (#119)
- **Stagehand** ([Release v1.7.0](https://github.com/Cratis/Stagehand/releases/tag/v1.7.0)): An agent drawing from a provider pool now skips a member that is at its limit and picks the next one with room (#119)
- **Stagehand** ([Release v1.7.0](https://github.com/Cratis/Stagehand/releases/tag/v1.7.0)): The Agents page shows a running/queued tally, and work waiting for capacity now reads as "Queued" rather than "Scheduled" (#119)
- **Stagehand** ([Release v1.6.0](https://github.com/Cratis/Stagehand/releases/tag/v1.6.0)): All text renders 10% larger. The root size every rem-based size derives from was raised, and the hardcoded pixel sizes in the components were raised by the same amount so the ratio between them is unchanged (#117)
- **Stagehand** ([Release v1.6.0](https://github.com/Cratis/Stagehand/releases/tag/v1.6.0)): The merge policy is now set where the rest of a repository's configuration lives, on the GitHub page, instead of in a separate Settings list that repeated every repository a second time. That surface also sets the auto-merge path patterns alongside the policy, which the Settings panel could not (#121)
- **Stagehand** ([Release v1.5.4](https://github.com/Cratis/Stagehand/releases/tag/v1.5.4)): A new agent's harness now defaults to Pi rather than Claude Code, for its broader vendor reach — Anthropic, OpenAI, Azure OpenAI and OpenAI-compatible gateways. Agents that already have a harness recorded keep it
- **Stagehand** ([Release v1.5.4](https://github.com/Cratis/Stagehand/releases/tag/v1.5.4)): Work for an agent combining the Pi harness with an Anthropic OAuth token is now left scheduled with an explanatory log line, instead of launching a container that cannot authenticate — Pi has no bearer-token mode for Anthropic
- **Chronicle** ([Release v16.38.5](https://github.com/Cratis/Chronicle/releases/tag/v16.38.5)): Documented on `SetFromContextAttribute<TEvent>` and `ChildrenFromAttribute<TEvent>` that referencing an event type gives AutoMap access to its entire payload, even when the attribute itself never reads it. (#3843)
- **Chronicle** ([Release v16.38.5](https://github.com/Cratis/Chronicle/releases/tag/v16.38.5)): Bumped `Cratis.Fundamentals` to a prerelease that hardens JSON deserialization of concept values to fail loudly instead of silently producing `null` for an unrecognized underlying value type, found while investigating #3847.
- **Screenplay.Generation** ([Release v0.17.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.17.0)): Resolve exact member bindings by complete artifact key and fail closed on conflicting, malformed, or unrepresentable evidence while preserving existing aggregate and legacy adapter APIs. (#19)
- **Stagehand** ([Release v1.5.0](https://github.com/Cratis/Stagehand/releases/tag/v1.5.0)): Renamed the `Source/Claude` folder to `Source/AgentHarnesses`, since it holds the worker images for every harness Stagehand supports (Claude Code and Pi), not just Claude.
- **AI** ([Release v0.1.0](https://github.com/Cratis/AI/releases/tag/v0.1.0)): Publish normal `0.x.y` Fundamentals packages to npm `latest` from labeled merges. (#181)
- **AI** ([Release v0.1.0](https://github.com/Cratis/AI/releases/tag/v0.1.0)): Keep exact source, checksum, lifecycle, provenance, and no-support controls without a recurring manual deployment gate. (#181)
- **Screenplay.Generation** ([Release v0.16.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.16.0)): Add a modern Vogen descriptor and structured probe while preserving legacy contribution bytes. (#23)
- **Screenplay.Generation** ([Release v0.16.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.16.0)): Document explicit adapter rosters, migration guidance, and the boundaries with derivation lineage and realization reports. (#23)
- **Screenplay.Generation** ([Release v0.16.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.16.0)): Verify the complete surface through candidate-only consumers and unchanged legacy binaries. (#23)
- **Stagehand** ([Release v1.4.0](https://github.com/Cratis/Stagehand/releases/tag/v1.4.0)): `VisionGuardian` now checks a newly registered issue against the vision its own repository is associated with, instead of one global vision.
- **Stagehand** ([Release v1.4.0](https://github.com/Cratis/Stagehand/releases/tag/v1.4.0)): Plan generation and worker environment setup ground their prompt in the vision associated with the issue's repository.
- **Arc** ([Release v22.4.0](https://github.com/Cratis/Arc/releases/tag/v22.4.0)): Adopt the verified Generation `0.15.0` bounded-source evidence release. (Cratis/Screenplay.Generation#25)
- **Arc** ([Release v22.4.0](https://github.com/Cratis/Arc/releases/tag/v22.4.0)): Reject computed, conditional, repeated, ambiguous, incomplete, lookalike, or unsupported scenario shapes atomically with no partial facts. (Cratis/Screenplay.Generation#25)
- **Stagehand** ([Release v1.2.0](https://github.com/Cratis/Stagehand/releases/tag/v1.2.0)): Triage's issue details now open in a dialog rather than a side panel that pushes the board out of view.
- **Stagehand** ([Release v1.2.0](https://github.com/Cratis/Stagehand/releases/tag/v1.2.0)): Backlog's filter selections now persist across visits instead of resetting on every page load.
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): The standalone "set the language model directly" panel in Settings is removed - every purpose, including the System agent, already has a full provider/pool/model control under Settings → Agents, so a second configuration surface for the same thing was confusing. What that panel showed and isn't duplicated (usage by purpose, including the legacy fallback) survives as a read-only usage panel.
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): The backend's legacy `Stagehand:LanguageModel` fallback chain (`AnthropicLanguageModel`, `SetLanguageModel`) is untouched - it's a deliberate safety net for a deployment with no providers configured, not dead code, only its Settings UI surface was removed.
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): A real AI provider with a working API key is still required for any of this to produce an actual reply in production - that's a separate operator/credential issue, not something this PR can fix in code.
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): Filed [#73](https://github.com/Cratis/Stagehand/issues/73) for three more reactors found with the identical purpose-resolution gap - deliberately out of scope for this PR.
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): [x] `dotnet build` (Debug) - zero warnings, zero errors
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): [x] `dotnet build` (Release) - zero warnings, zero errors
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): [x] `dotnet test` - 1259/1259 passing
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): [x] `yarn lint` - zero errors
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): [x] `npx tsc -b` (app + specs) - zero errors
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): [x] `yarn test` - 166/166 passing
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): [x] `yarn build` - clean
- **Stagehand** ([Release v1.0.0](https://github.com/Cratis/Stagehand/releases/tag/v1.0.0)): **The store is named Stagehand, not Planner** - the last trace of the pre-rebrand name is gone from the event store, the read-model database, the Vault key paths and every document. Production data is dropped and reseeded on this rollout (see the deploy notes below) - the name is now what it should always have been.
- **Stagehand** ([Release v1.0.0](https://github.com/Cratis/Stagehand/releases/tag/v1.0.0)): **Build status is three honest facts instead of one with derived state** - a raw recording, a failure recording, and a failure-start transition; occurrence counts and first/last-failed timestamps are projected, not carried on the event.
- **Stagehand** ([Release v1.0.0](https://github.com/Cratis/Stagehand/releases/tag/v1.0.0)): **Event timestamps come from Chronicle, not a second wall-clock field** - build reruns, language-model usage and alert-source registration read their time from `EventContext.Occurred`.
- **Stagehand** ([Release v1.0.0](https://github.com/Cratis/Stagehand/releases/tag/v1.0.0)): **`WorkNeedsAnswer` renamed to `WorkQuestionAsked`** - the event now states what happened, not what's needed.
- **Stagehand** ([Release v1.0.0](https://github.com/Cratis/Stagehand/releases/tag/v1.0.0)): **Issue, pull request and work history lists page server-side** instead of returning everything at once.
- **Screenplay.CritterStack** ([Release v0.23.1](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.23.1)): Upgrade all four Generation dependencies to the verified `0.15.0` release. (Cratis/Screenplay.Generation#18)
- **Screenplay.CritterStack** ([Release v0.23.1](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.23.1)): Migrate Marten document and Wolverine event-stream readers to shared authored enumeration, exact method signatures, and receiver binding. (Cratis/Screenplay.Generation#18)
- **Components** ([Release v3.6.0](https://github.com/Cratis/Components/releases/tag/v3.6.0)): Every color in the chat kit — panel, bubbles, composer, mention suggestions, emoji and reaction pickers, typing indicator, failure line — now resolves through the `--cratis-*` token seam, so the chat follows the host's PrimeReact theme instead of a hardcoded dark palette (Cratis/Stagehand#64)
- **Screenplay.Generation** ([Release v0.15.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.15.0)): Migrate Vogen validation-message discovery to shared authored invocation, signature, formal-argument, and bounded-value helpers while preserving fact, diagnostic, and generated-source bytes. (#18)
- **Screenplay.Generation** ([Release v0.15.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.15.0)): Document the complete .NET source evidence API and verify it through current and legacy package consumers. (#18)
- **Screenplay.Generation** ([Release v0.14.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.14.0)): Allow complete read-model and query specification scenarios to resolve and lower without a command step while preserving ordered phases and atomic rejection of multiple command steps. (#25)
- **Stagehand** ([Release v0.2.0](https://github.com/Cratis/Stagehand/releases/tag/v0.2.0)): The `/github-app/manifest` endpoint and its anonymous route are gone - the registration script was its only consumer and no longer needs it.
- **cli** ([Release v2.18.0](https://github.com/Cratis/cli/releases/tag/v2.18.0)): Preserve typed placement diagnostics and relocation-safe provenance while keeping generated document standard output isolated. (#111)
- **cli** ([Release v2.17.1](https://github.com/Cratis/cli/releases/tag/v2.17.1)): Replace output-size multipliers with exact-version/workload guidance.
- **cli** ([Release v2.17.1](https://github.com/Cratis/cli/releases/tag/v2.17.1)): Replace the all-observers replay pipeline with a bounded read-only identifier sample.
- **cli** ([Release v2.17.1](https://github.com/Cratis/cli/releases/tag/v2.17.1)): Require exact target, authorization, current state, and recovery procedure before confirmation bypass.
- **cli** ([Release v2.17.1](https://github.com/Cratis/cli/releases/tag/v2.17.1)): Describe replay/retry as state-changing reprocessing rather than generically “destructive.”
- **cli** ([Release v2.17.1](https://github.com/Cratis/cli/releases/tag/v2.17.1)): Narrow output auto-detection and tool-context wording to current observable behavior rather than named-tool compatibility.
- **cli** ([Release v2.17.1](https://github.com/Cratis/cli/releases/tag/v2.17.1)): Regenerate `CHRONICLE.md` through `cratis init --refresh`; do not hand-edit generated output.
- **cli** ([Release v2.17.1](https://github.com/Cratis/cli/releases/tag/v2.17.1)): Align the sentinel package-closure expectation with the current `0.10.1` Generation package manifest.
- **cli** ([Release v2.17.1](https://github.com/Cratis/cli/releases/tag/v2.17.1)): `dotnet build Cli.slnx -c Release`: 5 projects, 0 errors, 0 warnings.
- **cli** ([Release v2.17.1](https://github.com/Cratis/cli/releases/tag/v2.17.1)): `dotnet test Source/Cli.Specs/Cli.Specs.csproj -c Release`: 890 tests passed, 0 warnings.
- **cli** ([Release v2.17.1](https://github.com/Cratis/cli/releases/tag/v2.17.1)): Regression specs deny the replay-all pipeline, unversioned multiplier, and generic safeguard wording while requiring bounded confirmation guidance.
- **cli** ([Release v2.17.1](https://github.com/Cratis/cli/releases/tag/v2.17.1)): Generated `CHRONICLE.md`, generator source, and `llm-context` contain no replay-all/xargs example or removed size multipliers.
- **Screenplay.CritterStack** ([Release v0.23.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.23.0)): Resolve placement and cross-project subjects through Generation 0.13.2 with atomic fail-closed behavior. (#57)
- **Arc** ([Release v22.3.0](https://github.com/Cratis/Arc/releases/tag/v22.3.0)): Derive neutral Arc specification placement through Generation 0.12.0 with typed, atomic fail-closed behavior. (Cratis/Screenplay.Generation#26)
- **Screenplay.Generation** ([Release v0.13.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.13.0)): Validate candidate packages against the released 0.12.0 public API and exercise the new contract through current and legacy consumers. (#26)
- **Arc** ([Release v22.2.0](https://github.com/Cratis/Arc/releases/tag/v22.2.0)): Take Screenplay 4.6.0 and Screenplay.Generation 0.10.x, raising the Roslyn host floor to 5.9/.NET SDK 10.0.400. (Cratis/Screenplay.Generation#25)
- **Screenplay.Generation** ([Release v0.12.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.12.0)): Candidate packages now verify clean consumers, shared source placement, compatibility ancestry, and deterministic generation before publication. (#26)
- **Screenplay.Generation** ([Release v0.12.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.12.0)): Source-placement adoption and compatibility follow-up guidance now records the remaining Arc, Critter Stack, and CLI work. (#26)
- **Screenplay.CritterStack** ([Release v0.22.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.22.0)): Classify diagnostic outcomes explicitly as unknown, conflicting, or unsupported.
- **Screenplay.CritterStack** ([Release v0.22.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.22.0)): Validate candidate packages against the 0.21.0 API baseline and run every retained canonical fixture twice for deterministic output.
- **Screenplay.Generation** ([Release v0.11.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.11.0)): Use shared concept fact emission for Vogen declarations without changing recovered behavior.
- **Screenplay.Generation** ([Release v0.11.0](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.11.0)): Document and verify syntax-resilient adapter discovery and bounded convention-extension diagnostics.

## Fixed

- **cli** ([Release v2.19.1](https://github.com/Cratis/cli/releases/tag/v2.19.1)): Prevent Screenplay generation from reporting CLI0017 when NuGet content files are compiled through `buildTransitive` while package metadata marks them `buildAction=None`. ([#104](https://github.com/Cratis/cli/issues/104))
- **Stagehand** ([Release v2.20.0](https://github.com/Cratis/Stagehand/releases/tag/v2.20.0)): The Agents master list showed initials instead of the agent's picture, because the avatar was addressed by the work item's own agent reference rather than the roster agent's id, and the two do not always agree on casing
- **Stagehand** ([Release v2.20.0](https://github.com/Cratis/Stagehand/releases/tag/v2.20.0)): The Overview tab stopped part-way down its pane instead of filling it
- **Chronicle** ([Release v16.42.1](https://github.com/Cratis/Chronicle/releases/tag/v16.42.1)): Bulk event ingestion no longer overwhelms pattern capture: observing only mines in memory, and the scopes an interval touched are persisted on a cadence — eliminating the subscriber timeouts, failed partitions, and retry-job storms high-rate appends previously caused.
- **Chronicle** ([Release v16.42.1](https://github.com/Cratis/Chronicle/releases/tag/v16.42.1)): Behavior patterns are isolated per event store and per namespace — the same scope name in two stores, or in two tenants' namespaces, no longer counts into one sketch and contaminates both sides' persisted patterns.
- **Chronicle** ([Release v16.42.1](https://github.com/Cratis/Chronicle/releases/tag/v16.42.1)): Established behavior patterns survive a server restart: a scope's persisted patterns are restored into the miner before its first event after a restart is mined, instead of being wiped in favor of whatever happened to occur first.
- **Chronicle** ([Release v16.42.1](https://github.com/Cratis/Chronicle/releases/tag/v16.42.1)): A namespace added while the server is running is subscribed for pattern capture immediately, instead of only after the next restart or event type registration.
- **Chronicle** ([Release v16.42.1](https://github.com/Cratis/Chronicle/releases/tag/v16.42.1)): The Backoffice sample's `generate` is genuinely re-runnable: its history marker now lands on a well-known event source so the guarding uniqueness constraint actually turns a second run away.
- **Stagehand** ([Release v2.19.1](https://github.com/Cratis/Stagehand/releases/tag/v2.19.1)): Newly registered issues are triaged again — classified, labelled and picked up for investigation.
- **Stagehand** ([Release v2.18.0](https://github.com/Cratis/Stagehand/releases/tag/v2.18.0)): Merging a pull request that covers several issues no longer comments on every covered issue once
- **Stagehand** ([Release v2.18.0](https://github.com/Cratis/Stagehand/releases/tag/v2.18.0)): Stored XSS in markdown rendering: markdown from untrusted sources - GitHub issues, agent findings,
- **Stagehand** ([Release v2.18.0](https://github.com/Cratis/Stagehand/releases/tag/v2.18.0)): A worker container that is stopped, swept as stuck or evicted now pushes whatever commits the
- **Studio** ([Release v0.85.10](https://github.com/Cratis/Studio/releases/tag/v0.85.10)): Eliminate the remaining isolated `ARC0012` and `ARC0001` findings without suppression. (Cratis/StudioIssues#301)
- **Studio** ([Release v0.85.9](https://github.com/Cratis/Studio/releases/tag/v0.85.9)): Eliminate ARC0006 and nullable substitute cascades without suppression or nullable DI services. (Cratis/StudioIssues#298)
- **Stagehand** ([Release v2.17.8](https://github.com/Cratis/Stagehand/releases/tag/v2.17.8)): Releases reach the cluster again. The worker image build no longer fails when a Pi extension
- **Stagehand** ([Release v2.17.7](https://github.com/Cratis/Stagehand/releases/tag/v2.17.7)): An agent that stops to ask a question now actually marks its issues as waiting, so answering it -
- **Stagehand** ([Release v2.17.7](https://github.com/Cratis/Stagehand/releases/tag/v2.17.7)): Disbanding a group now releases every member issue. The membership was taken from the caller, and
- **Stagehand** ([Release v2.17.7](https://github.com/Cratis/Stagehand/releases/tag/v2.17.7)): Triage no longer shows a group card in the wrong column. A card took its column from one arbitrary
- **Stagehand** ([Release v2.17.7](https://github.com/Cratis/Stagehand/releases/tag/v2.17.7)): Approve is offered on any card with a pull request to merge, not only in "Needs you" - a card sits
- **Stagehand** ([Release v2.17.7](https://github.com/Cratis/Stagehand/releases/tag/v2.17.7)): Issues left pointing at a group that no longer exists are shown as the issues they are, rather
- **Stagehand** ([Release v2.17.6](https://github.com/Cratis/Stagehand/releases/tag/v2.17.6)): The scheduler trigger no longer stalls behind a replay backlog. Every one of its handlers asks the scheduler to look at the world as it is *now*, so a replayed event is not just useless to it but expensive: the scheduler grain is single-threaded and a pass reads read models and asks the container runtime about workers, so a backlog becomes that many queued passes. After the observer subsystem was knocked over this reactor sat active and nearly fifteen thousand events behind, falling further behind every minute, while nothing it would have poked about was still true. The reminder tick and events arriving live are what actually drive scheduling, so skipping history costs nothing.
- **Studio** ([Release v0.85.8](https://github.com/Cratis/Studio/releases/tag/v0.85.8)): Eliminate all 40 scoped style diagnostics across 29 files without suppression or generated-file edits. (Cratis/StudioIssues#300)
- **Studio** ([Release v0.85.5](https://github.com/Cratis/Studio/releases/tag/v0.85.5)): Make 23 concept validation rules null-safe while preserving their existing domain checks and client-facing messages. (Cratis/StudioIssues#299)
- **Studio** ([Release v0.85.2](https://github.com/Cratis/Studio/releases/tag/v0.85.2)): Applied `[OnceOnly]` to the five chat/topic `Post` handlers that lexically call `ICommandPipeline.Execute`. (Cratis/StudioIssues#293)
- **Studio** ([Release v0.85.2](https://github.com/Cratis/Studio/releases/tag/v0.85.2)): Preserved every first-delivery command type, payload, scope, and existing public handler behavior. (Cratis/StudioIssues#293)
- **Studio** ([Release v0.85.2](https://github.com/Cratis/Studio/releases/tag/v0.85.2)): Added replay-side specs proving no service scope opens and no command executes during replay for all five patterns. (Cratis/StudioIssues#293)
- **Studio** ([Release v0.85.1](https://github.com/Cratis/Studio/releases/tag/v0.85.1)): Removed direct `IEventLog` injection and appends from add, move, and remove region-item commands. (Cratis/StudioIssues#292)
- **Studio** ([Release v0.85.1](https://github.com/Cratis/Studio/releases/tag/v0.85.1)): Returned the same ordered events on the implicit `BrainstormingId` event source. (Cratis/StudioIssues#292)
- **Studio** ([Release v0.85.1](https://github.com/Cratis/Studio/releases/tag/v0.85.1)): Added CommandScenario coverage for empty and multi-item add/move/remove behavior, exact payloads, order, and event-source ids. (Cratis/StudioIssues#292)
- **Stagehand** ([Release v2.17.3](https://github.com/Cratis/Stagehand/releases/tag/v2.17.3)): Re-dispatching a unit of work no longer fails on the previous attempt's leftovers. The Kubernetes job and its secret are named from the work id, and a resumed unit of work keeps its id deliberately — that is what preserves its branch and any commits already pushed to it — so the launch collided with what the dead attempt left behind and failed with `secrets "stagehand-work-<id>" already exists`. The work was then still not running, so the next pass found it abandoned and resumed it again, round after round, without ever starting. Only scheduled work is dispatched and scheduled work has no live container, so clearing what is there is safe.
- **Stagehand** ([Release v2.17.2](https://github.com/Cratis/Stagehand/releases/tag/v2.17.2)): A malformed push-notification subject no longer takes the observer subsystem down. VAPID requires a contact URI; the setting reads like a contact, so production had `oss@cratis.io`, and `IsConfigured` only checked that it was non-empty. Push therefore counted as configured, the push library threw while constructing the notifier, and the reactor depending on it could not be activated — and an observer that cannot be activated fails every partition it touches. That single setting produced **162 failed partitions**, and the congestion from retrying them dragged other observers down with it, including the two that open a pull request and record its description. A subject the library would refuse now means notifications are off, which is a quiet no-op, and a bare email address is accepted by turning it into `mailto:`.
- **Stagehand** ([Release v2.17.1](https://github.com/Cratis/Stagehand/releases/tag/v2.17.1)): A worker can commit again. The checkout was a `git worktree` of the shared repository cache, and a worktree shares the repository it came from — including its object database. That cache lives on a volume owned by root while the container runs as `agent`, so every commit was refused with `insufficient permission for adding an object to repository database`. A run could read, build and test perfectly and then not commit a single line: that is how the end-to-end verification issue finished green with the fix correct on disk, nothing committed, no branch pushed and no pull request. The checkout now borrows the cache's objects through `alternates` and keeps its own writable object store, which is as cheap as a worktree and never writes to the shared volume.
- **Stagehand** ([Release v2.17.1](https://github.com/Cratis/Stagehand/releases/tag/v2.17.1)): Approve is no longer offered when there is nothing to approve. It was shown for anything in "needs you" whether or not a pull request existed, and pressing it ran an empty list of commands or reported that the issue has no associated pull request. A run that produced nothing to review needs another attempt, so Retry is what remains.
- **Stagehand** ([Release v2.16.1](https://github.com/Cratis/Stagehand/releases/tag/v2.16.1)): The scheduler now reports when a resume it logged did not actually happen. Detection of a dead worker worked on its first production run, but the `ResumeWork` command was refused and its result discarded — so the log claimed a resume while the work stayed "Running" and kept its concurrency slot. The reason is now logged. This is the same discard the worker callback had, repeated in the code written to fix it.
- **Stagehand** ([Release v2.16.0](https://github.com/Cratis/Stagehand/releases/tag/v2.16.0)): A worker whose outcome could not be recorded no longer reports success. The callback endpoint executed a command for every terminal outcome and discarded the result, so a rejected command was indistinguishable from a successful one: the worker got a `200` and exited reporting done, nothing was logged, no event was appended, and the unit of work sat in "Running" forever with its last step unchecked. Group planning failed this way on every run it ever had — nine plans recorded for single issues, none for a group, and no trace anywhere of why. The reason is now logged, and the endpoint answers 500 so the harness retries and then prints the failure in the console.
- **Stagehand** ([Release v2.15.5](https://github.com/Cratis/Stagehand/releases/tag/v2.15.5)): The application no longer goes blank when the signed-in user's details are missing. Arc's `useIdentity` declares that it returns details, and every call site dereferences them unguarded because of that promise — but it substitutes the supplied default only when the identity is explicitly *unset*, so an identity that resolved while carrying no details handed back `null` and the first property read threw. The page flickered and went white with only a `TypeError` in the console. Reading the signed-in user now goes through one hook that always has details to give. (Also fixed upstream in Cratis/Arc#2619.)
- **Stagehand** ([Release v2.15.5](https://github.com/Cratis/Stagehand/releases/tag/v2.15.5)): A thrown error while rendering now shows what broke, with a reload button, instead of unmounting the whole application and leaving an empty page. There was no error boundary anywhere, so any single failure took everything down and left nothing on screen to report.
- **Stagehand** ([Release v2.15.5](https://github.com/Cratis/Stagehand/releases/tag/v2.15.5)): The Agents and Triage boards drop a unit of work as soon as it finishes, instead of keeping it on screen until the page is reloaded. Arc's observable queries never delivered the change that moves a document *out* of a filtered result set, so the lists could only ever grow. (Cratis/Arc#2617, fixed in Cratis/Arc#2618.)
- **Chronicle** ([Release v16.41.0](https://github.com/Cratis/Chronicle/releases/tag/v16.41.0)): A constraint registered while its event sequence was already active was ignored for up to a second afterwards, so appends landing in that window bypassed it silently. The sequence now re-reads constraints on its first append after activation. This reaches any application that appends immediately after registering a constraint, not only the observer case it was found through. (#3868)
- **Chronicle** ([Release v16.41.0](https://github.com/Cratis/Chronicle/releases/tag/v16.41.0)): Pattern capture subscribed only at server startup, so an event store whose clients connected afterwards mined nothing at all until the next restart. Capture now also subscribes when event types are registered. (#3867)
- **Chronicle** ([Release v16.41.0](https://github.com/Cratis/Chronicle/releases/tag/v16.41.0)): `CHR0024` reported a read-model mapping written as `[property: SetFrom<T>]` as having no mapping source. Both that spelling and the bare attribute on the parameter are honored at runtime; the analyzer read only the parameter.
- **Chronicle** ([Release v16.41.0](https://github.com/Cratis/Chronicle/releases/tag/v16.41.0)): The Workbench pattern scope selector showed its placeholder instead of the selected scope, while the views below it were already showing that scope's patterns.
- **Chronicle** ([Release v16.40.0](https://github.com/Cratis/Chronicle/releases/tag/v16.40.0)): Adding a projection to an event store with a large event log could take the application down. Registration awaited one job-step grain being created, prepared and started per event source, exceeded its response timeout, failed host startup, and the restart re-registered into the queue it was waiting on (#3869)
- **Chronicle** ([Release v16.40.0](https://github.com/Cratis/Chronicle/releases/tag/v16.40.0)): A reactor's handler was silently never invoked when the reactor also had a private helper whose first parameter was the same event type. Nothing was thrown and nothing was logged; only the missing side effects showed it (#3870)
- **Studio** ([Release v0.84.4](https://github.com/Cratis/Studio/releases/tag/v0.84.4)): Status pills with an icon (Users, Prologue, organization seat/billing pills, GitHub issue state) now render the icon correctly instead of the raw PrimeIcons class name as text, by passing an `<i className="pi pi-x" />` element instead of a bare string — a workaround until the wrapper itself is fixed (Cratis/Components#220).
- **Arc** ([Release v22.6.2](https://github.com/Cratis/Arc/releases/tag/v22.6.2)): `useIdentity` now hands back the details it promises. The default details were substituted only when the identity was explicitly unset, so an identity that resolved while carrying no details — `isSet` is true — passed `null` through to callers, even though the declared return type says `details` is a `TDetails`. That is exactly why call sites dereference it unguarded, and one `null` reaching one of them takes the whole page down: a signed-in user got a blank screen with a `TypeError` on the first property read after their backend restarted. The default now stands in whenever there are no details to give, without displacing real ones.
- **Stagehand** ([Release v2.15.4](https://github.com/Cratis/Stagehand/releases/tag/v2.15.4)): The Agents and Triage boards now drop a unit of work as soon as it finishes, instead of keeping it on screen until the page is reloaded. Arc's observable queries never delivered the change that moves a document *out* of a filtered result set, so the lists could only ever grow (Cratis/Arc#2617, fixed in Cratis/Arc#2618 and picked up here).
- **Arc** ([Release v22.6.1](https://github.com/Cratis/Arc/releases/tag/v22.6.1)): An observable query now removes documents that stop matching its filter. The change-stream `$match` narrowed every operation type by the observed filter, but that filter is rendered against `fullDocument` — the document *after* the change — so an update that moved a document out of the result set produced an event the pipeline discarded. `HandleChange` compounded it by only ever calling `Add` on an update. The result was an observable that could only grow: an observer watching "orders still open" was told when each order opened and never when it closed, and the stale rows survived until the client reconnected. (#2617)
- **Arc** ([Release v22.6.1](https://github.com/Cratis/Arc/releases/tag/v22.6.1)): `QueryContext.TotalItems` stays correct when a document moves across the observed filter, rather than counting only inserts and deletes.
- **Stagehand** ([Release v2.15.3](https://github.com/Cratis/Stagehand/releases/tag/v2.15.3)): Work is no longer scheduled repeatedly for the same issue. The scheduler decided whether an issue already had open work by reading the work read model, which lags the event log, so between appending the work and seeing it projected the issue looked untouched and was scheduled again — and because scheduling work poked the scheduler, each duplicate immediately triggered the next. The loop produced 91,053 units of work for a single issue, 88% of the entire event log, which saturated the event store and left its observers days behind.
- **Stagehand** ([Release v2.15.3](https://github.com/Cratis/Stagehand/releases/tag/v2.15.3)): A run that finished successfully no longer shows an unfinished checklist. A worker reports each step as it completes it, so the step it is doing while it wraps up was never reported and every completed run ended with its last step unchecked. Work that failed, was stopped, or is waiting for an answer still shows exactly the progress it reported.
- **Studio** ([Release v0.84.2](https://github.com/Cratis/Studio/releases/tag/v0.84.2)): Status/label pills across Studio (Users, Billing, Prologue, Organizations, seat grants, announcements, pricing) and the GitHub integration (issues, pull requests, repositories) now render their label text again, by using `Tag` from `@cratis/components/Display` instead of the raw `primereact/tag` import — the same fix already applied to `Button` for the same v11 behavior change. (Cratis/StudioIssues#267)
- **Studio** ([Release v0.84.2](https://github.com/Cratis/Studio/releases/tag/v0.84.2)): Fixed an invalid `severity='warning'` in the GitHub Repositories pill (never a valid `Tag` severity; corrected to `'warn'`).
- **Stagehand** ([Release v2.15.2](https://github.com/Cratis/Stagehand/releases/tag/v2.15.2)): Agent runs no longer silently lose their work to a repository cache they cannot write to. A mirror cloned before `core.sharedRepository` was introduced keeps directories only the backend can write, so a worker - a different, non-root user - fails to add its worktree and gets a checkout without the history it was told it had branched from. The run commits onto no ancestry, pushes a branch with no common ancestor, and no pull request can be opened for it. Existing mirrors are repaired once, on the next refresh.
- **Stagehand** ([Release v2.15.1](https://github.com/Cratis/Stagehand/releases/tag/v2.15.1)): Commits made by an agent are pushed when its workspace is a worktree of the shared repository cache, which is every run on Kubernetes. The cache is a `--mirror` clone and a worktree inherits its configuration, so the push failed with `--mirror can't be combined with refspecs` and the run's work was destroyed with the container - the same loss the push was added to prevent. Pushing to the URL with an explicit refspec works for both the cached and the plain-clone checkout.
- **Stagehand** ([Release v2.15.0](https://github.com/Cratis/Stagehand/releases/tag/v2.15.0)): Issues are closed when their pull request is merged on GitHub. The bookkeeping — clearing the status, commenting, closing, deleting the branch — only ever ran for a merge done through the Approve button, so a pull request merged in GitHub's own UI left its issues open and its branch behind indefinitely. A merge accepted here and then reported back over the webhook is not processed twice.
- **Stagehand** ([Release v2.15.0](https://github.com/Cratis/Stagehand/releases/tag/v2.15.0)): An issue closed while the Stagehand was carrying it no longer keeps its place on the board, and any session still queued for it is stopped rather than eventually run. Work already under way is left to finish.
- **Stagehand** ([Release v2.15.0](https://github.com/Cratis/Stagehand/releases/tag/v2.15.0)): An issue closed while triage was still classifying it is no longer investigated anyway.
- **Stagehand** ([Release v2.14.0](https://github.com/Cratis/Stagehand/releases/tag/v2.14.0)): Commits made by an agent are no longer destroyed when its container exits. The branch is pushed by the harness on every exit path, including failure; previously a run that committed without pushing lost its work and still reported success.
- **Stagehand** ([Release v2.14.0](https://github.com/Cratis/Stagehand/releases/tag/v2.14.0)): Work that ends by asking a question keeps its pull request. Asking and having produced something worth reviewing were mutually exclusive, so a run that pushed commits and then asked recorded no pull request at all and went unreviewed. It now opens a draft.
- **Stagehand** ([Release v2.14.0](https://github.com/Cratis/Stagehand/releases/tag/v2.14.0)): A pull request is recorded only when one was actually opened. The number was previously recovered by scanning the agent's closing message for the last GitHub pull request URL it happened to contain, which could not tell a pull request the run opened apart from one it merely mentioned.
- **Stagehand** ([Release v2.14.0](https://github.com/Cratis/Stagehand/releases/tag/v2.14.0)): Descriptions can no longer close issues by accident. Closing keywords are removed from generated descriptions before publishing, and agents are no longer instructed to write them.
- **Stagehand** ([Release v2.14.0](https://github.com/Cratis/Stagehand/releases/tag/v2.14.0)): The work console renders each line once. It replayed the stored transcript and then followed the container from the beginning, so every line appeared twice — and kept doing so for an hour after a run finished.
- **Stagehand** ([Release v2.14.0](https://github.com/Cratis/Stagehand/releases/tag/v2.14.0)): Reading a pull request that cannot be reached now says so, instead of showing an empty change list as though nothing had changed.
- **Stagehand** ([Release v2.13.0](https://github.com/Cratis/Stagehand/releases/tag/v2.13.0)): Newly-scheduled or newly-ready work dispatches promptly; freed concurrency slots (work completing, failing, being stopped, or needing an answer) are now picked up immediately instead of waiting up to a minute for the scheduler's reminder tick.
- **Stagehand** ([Release v2.13.0](https://github.com/Cratis/Stagehand/releases/tag/v2.13.0)): A worker's completion/failure callback now retries with backoff instead of giving up on the first transient failure, so a brief connectivity gap (e.g. during a deploy) no longer leaves finished work stuck showing as "Running" until the 24-hour stuck-work sweep.
- **Stagehand** ([Release v2.12.2](https://github.com/Cratis/Stagehand/releases/tag/v2.12.2)): Agent work that touches the shared repository cache no longer fails with `Permission denied` / `unable to create directory` errors. New cached repository mirrors are created shared (`core.sharedRepository=all`) so a worker container's `git fetch` and `git worktree add` can write to them, since they run as a different, non-root user than the backend that populates the cache.
- **Stagehand** ([Release v2.12.1](https://github.com/Cratis/Stagehand/releases/tag/v2.12.1)): The Plan button on a backlog group now works — it previously failed every click with a "Trust is required" validation error because the command never set the required `trust` property, defaulting it to the same autonomous level the backend already uses when nothing else is specified.
- **Stagehand** ([Release v2.12.0](https://github.com/Cratis/Stagehand/releases/tag/v2.12.0)): The Stop button had no in-flight guard, unlike the existing Retry button next to it - a user who clicked Stop twice in quick succession could send the second click after the first had already succeeded, and see a confusing "The work has already finished" for a click that had actually worked. It is now guarded the same way Retry is. (#187)
- **Stagehand** ([Release v2.12.0](https://github.com/Cratis/Stagehand/releases/tag/v2.12.0)): `dotnet build` (Debug and Release) - zero errors. Release could not be verified for zero *warnings* from this worktree specifically: it is nested inside the main checkout, and Roslyn's analyzer-config discovery walks up and picks up both the outer repo's `.globalconfig` and the worktree's own, colliding on shared keys (`MultipleGlobalAnalyzerKeys`) and un-suppressing thousands of pre-existing, repo-wide analyzer warnings that have nothing to do with this change - reproduced identically on files never touched by this PR, and absent entirely when building the plain (non-nested) checkout at the same commit. CI checks out the branch fresh, so this should not reproduce there; verifying that is exactly what CI will confirm below.
- **Stagehand** ([Release v2.12.0](https://github.com/Cratis/Stagehand/releases/tag/v2.12.0)): `dotnet test` - 1794 passed, 0 failed (7 new specs covering `RecordPlan`, the new projections, and the already-queued Stop path).
- **Stagehand** ([Release v2.12.0](https://github.com/Cratis/Stagehand/releases/tag/v2.12.0)): `yarn lint`, `npx tsc -b` (via `yarn compile`), `yarn test` (366 passed, including 2 new specs for the Stop button's extracted success/failure handling), `yarn build` - all clean.
- **Stagehand** ([Release v2.11.3](https://github.com/Cratis/Stagehand/releases/tag/v2.11.3)): Worker containers no longer fail every unit of work with `fatal: detected dubious ownership in repository at '/repos/...'` when fetching or adding a worktree against the shared repository cache. The cache's bare mirrors are populated by the Stagehand backend process running as a different user, and git's ownership check rejected every worker operating on them since PR #174 started actually populating the cache.
- **Arc** ([Release v22.6.0](https://github.com/Cratis/Arc/releases/tag/v22.6.0)): The `Chronicle Published` automation retried a version conflict for ten minutes and then reported it as a NuGet indexing timeout. A conflict is a decision the workflow cannot make — the new Chronicle wants a dependency newer than the version pinned here — so it now fails immediately with the conflicting pins instead of blaming NuGet. This is what made the 16.39.1 update fail.
- **Arc** ([Release v22.6.0](https://github.com/Cratis/Arc/releases/tag/v22.6.0)): The same automation merged its update with `--squash`, which collapses the branch's commits into a new one and leaves the originals unreachable. It now merges with a real merge commit.
- **Stagehand** ([Release v2.11.2](https://github.com/Cratis/Stagehand/releases/tag/v2.11.2)): The Stagehand image carries `git`, so the repository cache can actually be populated
- **Stagehand** ([Release v2.11.2](https://github.com/Cratis/Stagehand/releases/tag/v2.11.2)): Repositories tracked before the cache was switched on now get mirrored. The cache is filled when a
- **Stagehand** ([Release v2.11.1](https://github.com/Cratis/Stagehand/releases/tag/v2.11.1)): The terminal image builds again, and its shell starts clean: verified by running it exactly as a
- **Stagehand** ([Release v2.11.0](https://github.com/Cratis/Stagehand/releases/tag/v2.11.0)): The read-only terminal works. Its sandbox staged zsh's binary and nothing else it needs - the
- **Stagehand** ([Release v2.11.0](https://github.com/Cratis/Stagehand/releases/tag/v2.11.0)): Terminal output no longer loses a byte per fragment. The Kubernetes channel byte leads a message,
- **Stagehand** ([Release v2.11.0](https://github.com/Cratis/Stagehand/releases/tag/v2.11.0)): The terminal tells the pty how big it is, so wrapped and redrawn lines are computed against the
- **Stagehand** ([Release v2.11.0](https://github.com/Cratis/Stagehand/releases/tag/v2.11.0)): Saving a tone of voice sticks. It always saved - the page re-read a snapshot that raced the
- **Chronicle** ([Release v16.39.1](https://github.com/Cratis/Chronicle/releases/tag/v16.39.1)): An application installing Chronicle 16.39.0 alongside the current Arc packages failed on startup in `AddCratisArcCore` with a `TypeLoadException` for a missing `get_Patterns`. `IEventStore.Patterns` is now a default interface member, so an existing implementation of the interface keeps compiling and loading unchanged. An implementation that does not support behavior patterns throws `PatternsNotSupported` rather than answering with something that looks like an absence of behavior.
- **Stagehand** ([Release v2.10.1](https://github.com/Cratis/Stagehand/releases/tag/v2.10.1)): The production deploy no longer fails on a cross-namespace Service read. The repository cache is
- **Stagehand** ([Release v2.10.0](https://github.com/Cratis/Stagehand/releases/tag/v2.10.0)): Work status no longer rewrites issues when an observer is replayed
- **Stagehand** ([Release v2.9.0](https://github.com/Cratis/Stagehand/releases/tag/v2.9.0)): The Backlog's date column headers no longer overlap the column beside them - they were sized for four characters of relative date, and "Active" plus a sort arrow does not fit that (#138)
- **Stagehand** ([Release v2.5.0](https://github.com/Cratis/Stagehand/releases/tag/v2.5.0)): Release notes in the What's new dialog render their bullet lists as lists again, instead of unindented run-on lines.
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): Agents no longer lose a finished unit of work when the Stagehand restarts. The per-work callback token lived only in the process that issued it, so any restart left every in-flight worker's callback rejected — the container kept working, reported into a 401, and the work stayed `Running` with the agent's output discarded.
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): A terminal session starts at all: the runtime could not create the pod it runs in, so every session failed immediately and reported that the terminal could not be reached.
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): A terminal session cannot leave the repositories directory. The shell runs inside a chroot holding only the repository mount and the tools to read it, so paths outside it are unnameable rather than merely discouraged.
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): Terminal sessions and observable queries are no longer closed after 60 seconds of quiet by the ingress' default proxy timeout.
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): The repository cache is mounted, so sessions have repositories to look at and workers build a worktree instead of cloning from scratch.
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): "Show finished work" lists work that actually finished, ordered by when it ended, instead of every work item there has ever been ordered by a start time that unstarted work does not have (#133).
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): The console output of a unit of work survives the run, so a finished job shows what it did rather than an empty console (#133).
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): Work waiting for an answer appears on the Agents board instead of being absent from both the active and finished views.
- **Stagehand** ([Release v2.4.0](https://github.com/Cratis/Stagehand/releases/tag/v2.4.0)): A change confined to the deployment project triggers a deploy, rather than never deploying itself.
- **Stagehand** ([Release v2.3.1](https://github.com/Cratis/Stagehand/releases/tag/v2.3.1)): The cache now prunes on fetch. A `--mirror` clone's refspec is `+refs/*:refs/*`, so without `--prune` a branch deleted upstream stayed in the cache forever — including the `stagehand/work-*` branch this system creates for every job and deletes after merge. Those deletions never reached the shared volume, so it only ever grew. (#94)
- **Stagehand** ([Release v2.3.1](https://github.com/Cratis/Stagehand/releases/tag/v2.3.1)): A repository is cached the moment it starts being tracked, rather than waiting for someone to push to it. The first job on a newly tracked repository previously fell back to a full clone, and a repository nobody pushes to was never cached at all. (#94)
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): Prevent duplicate Arc source-generator execution when applications reference `Cratis.Arc`, `Cratis`, or combine those packages with `Cratis.CodeAnalysis`.
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): Preserve ARC and ARCCHR analyzer/code-fix delivery through the existing standalone analyzer package IDs.
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): Keep Workspaces and Composition dependencies in the IDE/tool host rather than application output.
- **Arc** ([Release v22.5.0](https://github.com/Cratis/Arc/releases/tag/v22.5.0)): Keep proxy generation working when project package identities differ from assembly names or include analyzer-only dependencies.
- **Stagehand** ([Release v2.0.1](https://github.com/Cratis/Stagehand/releases/tag/v2.0.1)): Default agents no longer lose their configured AI provider, model and harness when the built-in agent catalog changes. The seeded content is pinned by a spec, so any future edit fails during development instead of silently at the next deploy
- **Stagehand** ([Release v2.0.0](https://github.com/Cratis/Stagehand/releases/tag/v2.0.0)): Chronicle failed-partition analysis, Discord conversation classification and pull-request review evaluation now actually work. All three asked for a reasoning purpose that had no agent behind it, so every call landed on the unconfigured fallback and failed silently — on every deployment, since the feature shipped. Each now runs on the agent whose job it already matches: Mechanic diagnoses the failing partition, Gatekeeper judges the review, and System handles conversation
- **Studio** ([Release v0.84.1](https://github.com/Cratis/Studio/releases/tag/v0.84.1)): Signing in no longer hangs and fails with a blank page after the identity-provider selector when a Studio service has been running across a Chronicle restart. (Cratis/Chronicle#3848)
- **Studio** ([Release v0.84.1](https://github.com/Cratis/Studio/releases/tag/v0.84.1)): Read models keyed by a `ConceptAs<string>` no longer freeze their partition with "Unrecognized Guid format", which had left organization legal acceptance stuck and unprocessed since 2026-08-26. (Cratis/StudioIssues#265, Cratis/StudioIssues#247)
- **Studio** ([Release v0.84.1](https://github.com/Cratis/Studio/releases/tag/v0.84.1)): Querying a `[Passive]` read model by id before any event of its kind has been observed now returns nothing instead of failing with `ProjectionDefinitionNotSet`. (Cratis/Chronicle#3846)
- **Stagehand** ([Release v1.7.1](https://github.com/Cratis/Stagehand/releases/tag/v1.7.1)): Chat replies and chat topic auto-naming now reach the AI provider configured on the agent, instead of falling back to the legacy global language model configuration and failing (#103)
- **Stagehand** ([Release v1.7.1](https://github.com/Cratis/Stagehand/releases/tag/v1.7.1)): A completion that falls back to the legacy configuration now always says why in the log. The case where an agent names neither a provider nor a pool was the one route that reported nothing, which is what made a provider that failed to resolve look identical to one that was never configured (#103)
- **Stagehand** ([Release v1.5.4](https://github.com/Cratis/Stagehand/releases/tag/v1.5.4)): Worker sessions no longer fail with `401 authentication_failed` when the acting agent's Anthropic provider is configured with an OAuth token from `claude setup-token` — the token is handed to the container as `CLAUDE_CODE_OAUTH_TOKEN` rather than `ANTHROPIC_API_KEY` (#103)
- **Stagehand** ([Release v1.5.4](https://github.com/Cratis/Stagehand/releases/tag/v1.5.4)): Chat replies from an agent whose Anthropic provider holds an OAuth token now authenticate, sending it as a bearer token with the required `oauth-2025-04-20` beta header instead of as an `x-api-key` (#103)
- **Chronicle** ([Release v16.38.5](https://github.com/Cratis/Chronicle/releases/tag/v16.38.5)): String-keyed (`ConceptAs<string>`) read-model partition keys no longer raise "Unrecognized Guid format" and freeze the partition when the schema reports a Guid-shaped format that the actual key value does not match. (#3844)
- **Chronicle** ([Release v16.38.5](https://github.com/Cratis/Chronicle/releases/tag/v16.38.5)): A `[Passive]` read model's `GetInstanceById` now resolves to `null` instead of throwing `ProjectionDefinitionNotSet` when its projection definition has not been registered yet (the first-ever query before any event of its kind has been observed). (#3846)
- **Chronicle** ([Release v16.38.5](https://github.com/Cratis/Chronicle/releases/tag/v16.38.5)): `IProjectionsManager.Ensure()` no longer queues behind unrelated work on its grain, preventing the silo's own startup path from timing out and crashing the host during a rolling redeploy. (#3848)
- **Stagehand** ([Release v1.5.3](https://github.com/Cratis/Stagehand/releases/tag/v1.5.3)): **The worker's own credentials were never actually loaded, silently.** The secret volume was mounted `DefaultMode: 0400` (owner-only), but Kubernetes always owns a mounted Secret's files as `root:root` regardless of the container's `runAsUser` - and the worker container runs as the non-root `agent` user (`Dockerfile.base`), with no `PodSecurityContext.FsGroup` to bridge the gap. So the secrets file was readable by nobody the container could actually run as: `entrypoint.sh` got `Permission denied` sourcing it, then unconditionally logged `"Credentials loaded"` regardless of whether the source succeeded - masking the failure. Every dispatched worker ran with no callback token, no GitHub token, and no AI provider key.
- **Stagehand** ([Release v1.5.3](https://github.com/Cratis/Stagehand/releases/tag/v1.5.3)): Before this fix: pod logs showed `Permission denied` sourcing the secrets file, immediately followed by the misleading `"Credentials loaded"`; both the `started` and `failed` callbacks returned HTTP 401.
- **Stagehand** ([Release v1.5.3](https://github.com/Cratis/Stagehand/releases/tag/v1.5.3)): This fix widens the mount to `0444` (readable by the container's own user) and makes `load_secrets()` report and bail loudly if sourcing ever fails again, instead of claiming success regardless.
- **Stagehand** ([Release v1.5.2](https://github.com/Cratis/Stagehand/releases/tag/v1.5.2)): Worker containers can now successfully report status (`started`/`completed`/`failed`), progress, and everything else that goes through the callback token.
- **Stagehand** ([Release v1.5.2](https://github.com/Cratis/Stagehand/releases/tag/v1.5.2)): After the RBAC and secrets-ready fixes (#114) let a worker finally start with real credentials, its first callback still 401'd in under 2ms - consistent with an in-memory lookup against an empty collection, not a network or credential problem.
- **Stagehand** ([Release v1.5.2](https://github.com/Cratis/Stagehand/releases/tag/v1.5.2)): `dotnet build -c Debug` - zero errors, `dotnet test` - 1458 passed, 0 failed.
- **Stagehand** ([Release v1.5.1](https://github.com/Cratis/Stagehand/releases/tag/v1.5.1)): The `stagehand-worker-runtime` ServiceAccount's Role never granted permission on `secrets`, only `jobs`/`pods`/`pods/log`/`pods/attach` - every dispatch attempt failed immediately with a `403 Forbidden` trying to create the worker's credentials Secret.
- **Stagehand** ([Release v1.5.1](https://github.com/Cratis/Stagehand/releases/tag/v1.5.1)): `KubernetesWorkerRuntime` only wrote the `secrets.env` key into that Secret, never the `secrets.ready` readiness marker `entrypoint.sh` actually waits for (a Docker-runtime concern - the container can observe a half-copied file there - that doesn't apply to a Kubernetes Secret volume, which is mounted atomically before the container starts, but the entrypoint is shared across both runtimes and only knows the one wait). Every worker timed out after 3 seconds and started with no credentials at all.
- **Stagehand** ([Release v1.5.1](https://github.com/Cratis/Stagehand/releases/tag/v1.5.1)): Granted the missing RBAC permission directly against the production cluster (`kubectl patch role`) and re-triggered a real dispatch: a Kubernetes Job launched for the first time in this platform's history.
- **Stagehand** ([Release v1.5.1](https://github.com/Cratis/Stagehand/releases/tag/v1.5.1)): The worker ran but failed immediately with `[stagehand-worker] Secrets file did not arrive at /run/stagehand-secrets/secrets.env - running without credentials` - confirmed the Secret itself was created correctly with the right content, pointing straight at the missing readiness marker as the second bug.
- **Stagehand** ([Release v1.5.1](https://github.com/Cratis/Stagehand/releases/tag/v1.5.1)): `dotnet build -c Debug` - zero errors, `dotnet test` - 1458 passed, 0 failed.
- **Stagehand** ([Release v1.5.0](https://github.com/Cratis/Stagehand/releases/tag/v1.5.0)): **No unit of work had ever actually been dispatched.** `WorkItem.Status` was never persisted to MongoDB for a freshly-scheduled item (only *transitions* were, not the initial `Scheduled` state), so the dispatcher's direct MongoDB queries for pending work always came back empty - both for finding work to dispatch and for recognizing already-open work, causing an affected issue to be rescheduled every minute forever with nothing ever actually starting. (#106)
- **Stagehand** ([Release v1.5.0](https://github.com/Cratis/Stagehand/releases/tag/v1.5.0)): **Chat replies from a correctly-configured agent always failed.** `Agent.ProviderId`/`PoolId` read as `null` through Chronicle's live read path even when correctly stored, due to a Chronicle client bug with defaulted `[ReadModel]` constructor parameters - every chat reply silently fell back to the unconfigured legacy path and failed. (#103)
- **Stagehand** ([Release v1.5.0](https://github.com/Cratis/Stagehand/releases/tag/v1.5.0)): Long issue/PR titles no longer overflow the detail dialog - they wrap instead. (#101)
- **Stagehand** ([Release v1.4.1](https://github.com/Cratis/Stagehand/releases/tag/v1.4.1)): Settings → LinkedIn no longer 500s before the app has ever been configured.
- **Stagehand** ([Release v1.4.1](https://github.com/Cratis/Stagehand/releases/tag/v1.4.1)): [x] `dotnet build -c Debug` - zero errors, zero warnings
- **Stagehand** ([Release v1.4.1](https://github.com/Cratis/Stagehand/releases/tag/v1.4.1)): [x] `dotnet test --filter LinkedInOptionsProvider` - 6 passed
- **Stagehand** ([Release v1.4.1](https://github.com/Cratis/Stagehand/releases/tag/v1.4.1)): [ ] Re-verify live against production (same port-forward + injected-identity technique that found the bug) once this deploys
- **Stagehand** ([Release v1.4.0](https://github.com/Cratis/Stagehand/releases/tag/v1.4.0)): Two independently configured AI providers no longer share one global concurrency limit — previously all provider dispatch was throttled by a single legacy semaphore. (#84)
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): The chat drawer's fixed positioning (and backdrop) painted over the left nav sidebar instead of staying beside it; the nav is now a positioned stacking context above any overlay, with a shadow cast to the right. (#78)
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): The GitHub Organizations/Repositories tables were not actually scrollable - `DataTableForObservableQuery`'s `scrollHeight='100%'` never resolved against an unsized ancestor. Filed upstream as Cratis/Components#196. (#82)
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): The chat typing indicator showed a mentioned agent's name twice ("System and System are typing") when mentioned again before its first reply landed. (#83)
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): The AI-provider-resolution logging (#83) is an observability improvement, not a confirmed fix for the underlying "@System/@Scout not replying" report - no structural code defect was reproducible against the deployed build (verified directly against production: a live Chronicle read-model query and a diagnostic probe run inside the production pod both confirm correct provider/client resolution). The leading theory is an eventual-consistency race between a provider/role configuration change and the read model this code queries; the new logging will make the next occurrence immediately diagnosable.
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): [x] `dotnet build` (Debug) - zero warnings/errors, proxies regenerated
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): [x] `dotnet build` (Release) - zero warnings/errors
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): [x] `dotnet test` - 1315/1315 passing
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): [x] `yarn lint` - zero errors
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): [x] `npx tsc -b` (app + specs) - zero errors
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): [x] `yarn test` - 215/215 passing
- **Stagehand** ([Release v1.3.0](https://github.com/Cratis/Stagehand/releases/tag/v1.3.0)): [x] `yarn build` - clean
- **Stagehand** ([Release v1.1.0](https://github.com/Cratis/Stagehand/releases/tag/v1.1.0)): Chat topics never got auto-named in production ("No language model is configured") even with a working AI provider configured, because `TopicAutoNaming` asked for a language-model purpose (`nameof(TopicAutoNaming)`) that had no seeded agent behind it and so always fell through to an empty legacy configuration. Topic naming now resolves through the seeded System agent.
- **Stagehand** ([Release v1.0.4](https://github.com/Cratis/Stagehand/releases/tag/v1.0.4)): The GitHub page's Organizations, Repositories and Repository groups tabs now stretch to fill the available viewport height, with each table's header frozen and only the row body scrolling beneath it - previously the whole tab scrolled as one page-length blob and long lists ran off the bottom of the screen.
- **Stagehand** ([Release v1.0.4](https://github.com/Cratis/Stagehand/releases/tag/v1.0.4)): [x] `yarn lint` - zero errors
- **Stagehand** ([Release v1.0.4](https://github.com/Cratis/Stagehand/releases/tag/v1.0.4)): [x] `npx tsc -b` (`yarn compile`) - zero errors
- **Stagehand** ([Release v1.0.4](https://github.com/Cratis/Stagehand/releases/tag/v1.0.4)): [x] `yarn test` - 146/146 passing
- **Stagehand** ([Release v1.0.4](https://github.com/Cratis/Stagehand/releases/tag/v1.0.4)): [x] `yarn build` - builds clean
- **Stagehand** ([Release v1.0.4](https://github.com/Cratis/Stagehand/releases/tag/v1.0.4)): [x] Visual check via Vite dev server + Playwright screenshots at 1440x800 and a constrained 1440x500 viewport across all three tabs - panel fills to the bottom, action bar/tab bar stay fixed, no page-level scroll, no overflow breakage at a short viewport.
- **Stagehand** ([Release v1.0.2](https://github.com/Cratis/Stagehand/releases/tag/v1.0.2)): **The GitHub App connection status showed twice** - once on the top-level GitHub page, once in Settings → GitHub. GitHub is now organizations/repositories/groups only; connection status and git identity live in Settings alone, as intended.
- **Stagehand** ([Release v1.0.2](https://github.com/Cratis/Stagehand/releases/tag/v1.0.2)): **The git identity email validation message did not say what a valid address looks like** - it required an `@users.noreply.github.com` suffix but only said "use a noreply GitHub email," so a plausible `noreply@your-domain` address still failed with no explanation.
- **Stagehand** ([Release v1.0.2](https://github.com/Cratis/Stagehand/releases/tag/v1.0.2)): **The git identity email field let you type a domain that can never pass validation** - since the domain is always fixed, the field now only edits the part before `@`; the required domain is shown alongside and can't be mistyped.
- **Stagehand** ([Release v1.0.2](https://github.com/Cratis/Stagehand/releases/tag/v1.0.2)): **The dark theme was low-contrast in places** - the faint text tier and borders were dim warm browns running under WCAG AA contrast against the page background. Surfaces, text and borders now use VS Code's own Dark+ neutrals; the amber accent is unchanged.
- **Stagehand** ([Release v1.0.1](https://github.com/Cratis/Stagehand/releases/tag/v1.0.1)): **Background jobs run to completion** - the job grain detached its work with `Task.Run`, which escapes Orleans' grain-context scheduler; the first access to the grain's own persistent state then threw an activation access violation and every job failed at its first step. Observed live right after v1.0.0 rolled out: avatar provisioning for the seeded agents never completed. Jobs now run correctly.
- **Components** ([Release v3.6.0](https://github.com/Cratis/Components/releases/tag/v3.6.0)): Pressing Enter right after picking a mention now sends the message instead of re-picking the same suggestion
- **Components** ([Release v3.6.0](https://github.com/Cratis/Components/releases/tag/v3.6.0)): **Region auto-membership events** - regions detect items entering and leaving them and publish ItemAddedToRegion/ItemRemovedFromRegion (plus NoteTextChanged and ChatMessageAdded) over the Arc messenger, opt-in and silent without an ArcContext. Merged as #189 and released together with this pull request. (Cratis/Stagehand#49, Cratis/Stagehand#64)
- **Stagehand** ([Release v0.3.0](https://github.com/Cratis/Stagehand/releases/tag/v0.3.0)): **Alert source tokens never authenticated** - the webhook read credentials from a store that was never written; registered sources silently fell back to the shared secret. Bearer tokens now match.
- **Stagehand** ([Release v0.3.0](https://github.com/Cratis/Stagehand/releases/tag/v0.3.0)): **The repository cache only refreshed on the first push, ever** - an inverted replay guard; every push now refreshes the mirror worker containers clone from.
- **Stagehand** ([Release v0.3.0](https://github.com/Cratis/Stagehand/releases/tag/v0.3.0)): **Roadmap plans no longer fail permanently on timing** - plan generation and application retried into consistency instead of recording "no issues left to group" when a projection was milliseconds behind; the same class of fix covers investigation reporting, auto-merge classification, review evaluation and ad-hoc issue filing.
- **Stagehand** ([Release v0.3.0](https://github.com/Cratis/Stagehand/releases/tag/v0.3.0)): **Background jobs could not start** - the job engine resolved an empty event store name and Chronicle refused the app
- **Stagehand** ([Release v0.2.0](https://github.com/Cratis/Stagehand/releases/tag/v0.2.0)): **GitHub App registration needs nothing running** - `scripts/create-github-app.sh` no longer fetches the App manifest from a running Stagehand (which failed with a 401 behind the sign-in proxy): the manifest is embedded in the script, so registration works from a fresh clone with zero setup. A spec keeps the embedded copy identical to what the code asks GitHub for - drift now fails the build. (#50)
- **Stagehand** ([Release v0.1.0](https://github.com/Cratis/Stagehand/releases/tag/v0.1.0)): **Sign-in is now recognized** - the AuthProxy GitHub provider never mapped GitHub's user info into identity claims, so everyone showed as "Not signed in" and the Inbox said "Sign in to see what needs you" despite a valid session. Login, display name and the stable GitHub user id now flow through, and "assigned to me" works. (#47)
- **Stagehand** ([Release v0.1.0](https://github.com/Cratis/Stagehand/releases/tag/v0.1.0)): **Theming** - PrimeReact and @cratis/components now render Stagehand's own warm charcoal + amber palette everywhere, instead of the component library's default blue-on-gray light scheme leaking through dialogs, tabs, dropdowns and focus rings. (#48)
- **Stagehand** ([Release v0.1.0](https://github.com/Cratis/Stagehand/releases/tag/v0.1.0)): **Brainstorming canvas** - fills the browser height, the tool buttons are a rounded icon-only rail centered on the left edge, the zoom controls sit bottom-right, and opening a chat thread anchors the conversation next to its bubble with the messages actually visible. (#49)
- **Stagehand** ([Release v0.1.0](https://github.com/Cratis/Stagehand/releases/tag/v0.1.0)): **GitHub App connection** - the Connect button no longer registers a brand-new GitHub App every time: registration is a one-time operator action, and Connect now installs the one authoritative App on the organization you pick in GitHub's own installer. (#50)
- **Stagehand** ([Release v0.1.0](https://github.com/Cratis/Stagehand/releases/tag/v0.1.0)): The What's new dialog keeps a stable height while paging b
- **cli** ([Release v2.18.0](https://github.com/Cratis/cli/releases/tag/v2.18.0)): Prevent invalid source placement and workspace diagnostics from overwriting output or disclosing physical checkout paths. (#111)
- **Studio** ([Release v0.83.6](https://github.com/Cratis/Studio/releases/tag/v0.83.6)): Buttons across the app (avatar upload, credential removal, and many others) rendered with no visible label or icon.
- **Studio** ([Release v0.83.6](https://github.com/Cratis/Studio/releases/tag/v0.83.6)): Toolbars and dialogs lost their rounded, translucent acrylic background.
- **Screenplay.Generation** ([Release v0.13.2](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.13.2)): Match referenced source ownership by exact assembly identity and source module. (#39)
- **Screenplay.Generation** ([Release v0.13.1](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.13.1)): Resolve source-declared types only through their exact owning project source module. (#39)
- **Screenplay.CritterStack** ([Release v0.22.0](https://github.com/Cratis/Screenplay.CritterStack/releases/tag/v0.22.0)): Keep overloaded Wolverine handler subjects signature-stable and collision-free.
- **Screenplay.Generation** ([Release v0.10.1](https://github.com/Cratis/Screenplay.Generation/releases/tag/v0.10.1)): Admit exact bare specification rejections that intentionally assert no code or presentation message. (#29)

## Removed

- **Studio** ([Release v0.84.3](https://github.com/Cratis/Studio/releases/tag/v0.84.3)): The in-repo Planner deployment, ingress, and config — fully superseded by Cratis/Stagehand's own deployment at `stagehand.cratis.io`, which has been verified working in production. `planner.cratis.io`'s DNS no longer resolves; the cluster-health watchdog was still probing it every 5 minutes and alerting on a domain that was never coming back.
- **Stagehand** ([Release v2.0.0](https://github.com/Cratis/Stagehand/releases/tag/v2.0.0)): The global language model configuration section and everything behind it. What an agent reasons with is configured per agent, in Settings under Agents, and nowhere else
- **Stagehand** ([Release v1.4.0](https://github.com/Cratis/Stagehand/releases/tag/v1.4.0)): The single, deployment-wide vision (`SetVision`) — superseded by Visions. Per this repository's beta-phase policy, no event migration was written; anything set under the old model needs re-entering through the new UI.

## Security

- **Stagehand** ([Release v2.18.0](https://github.com/Cratis/Stagehand/releases/tag/v2.18.0)): Content Security Policy and related security headers, so injected markup cannot execute code or
- **Stagehand** ([Release v2.18.0](https://github.com/Cratis/Stagehand/releases/tag/v2.18.0)): Poking the scheduler is now judged by how old the event is rather than by how it arrived. The
- **Studio** ([Release v0.85.0](https://github.com/Cratis/Studio/releases/tag/v0.85.0)): Only project writers can initiate connection or reapproval actions; capability status remains visible to readers. (Cratis/StudioIssues#276)

## Deprecated

- No updates
