Releases: Cratis/Stage
Release list
Release v1.1.0
Summary
A play session accepted commands and echoed the payload back, but never appended anything — so the event log stayed empty, the read models could never populate, and there was nothing to inspect in the Workbench. Commands now append the events their produces declarations describe.
Added
- Commands append the events their
producesdeclarations describe. The guardingwhencondition is evaluated against the incoming payload, and each event property is resolved from a command property, a constant, the occurred time, the calling identity, an environment variable, or an interpolated template. - The event model intermediate format carries a command's
producesdeclarations, so any consumer of the format — not just the host — can see which events a command appends and under what condition. - The model's event types are registered with Chronicle at startup, so a play session's event types are listed in the Workbench and the projections reference types the kernel knows about.
Fixed
- Read models populate again. The sink the read models project into was identified by an invented GUID; Chronicle identifies sink types by well-known name, so every projection write was rejected as an unknown sink — surfacing as a failed observer partition rather than a registration error.
Changed
- Each command execution appends to its own event source. Screenplay does not declare which command value identifies the event source, so events cannot yet be correlated across commands; that needs the language to say which property is the identity.
Release v1.0.8
Changed
- Upgraded
Cratis.Chronicle.Contractsfrom 16.10.0 to 16.11.1.
Test plan
-
dotnet build Stage.slnx(Debug) — 0 warnings, 0 errors -
dotnet build Stage.slnx -c Release(Release) — 0 warnings, 0 errors -
dotnet test Stage.slnx— all tests pass (68/68 in Contracts)
Release v1.0.7
Summary
Opening the Chronicle Workbench as http://localhost:35000 returns nothing — ERR_EMPTY_RESPONSE in a browser, curl: (52) Empty reply from server — which reads as a broken Workbench. The port is HTTPS only, and nothing said so.
Changed
- The startup banner and the documentation now state that the Workbench port is HTTPS only, and name the empty-response symptom you get from using
http://. The kernel multiplexes HTTP/1.1 and HTTP/2 on that port through ALPN, which requires TLS, so there is no plaintext mode for it —https://localhost:35000is the address.
Release v1.0.6
Added
- The Chronicle Workbench is now exposed from the Stage image on port
35000, so a play session's events, observers and read models can be inspected while it runs. Publish the port and browsehttps://localhost:35000— the kernel's API and OAuth authority are served there too. - The container prints the session's URLs — Stage API, API reference and Workbench — when it starts.
- Documentation for both images and for a running session: what is inside them, how they boot, their ports, mount points and configuration, and every URL a session exposes.
Fixed
- The specification runner container no longer fails when run without arguments. Its default
--modelpointed at/model/event-model.json, but a model is a folder of.playfiles, so the default is now the/modelfolder itself.
Release v1.0.5
Summary
Running an event model that projects the causing identity or uses a composite key crashed Stage at startup — Chronicle's projection engine rejected the expressions Stage emitted, and no projections were registered. Stage now translates Screenplay expressions to the forms the engine's resolvers actually support, verified end to end with the Screenplay invoicing sample. The Docker publish pipeline also moves to prebuilt binaries, matching how Chronicle publishes its images.
Fixed
$causedBy.name/$causedBy.userName/$causedBy.subjectmappings in projections no longer fail registration withUnknown read model property expression '$causedBy(name)'— they now resolve through the event context's causing identity.- Composite projection keys (
key <Name>with parts) no longer fail registration — the Screenplay key type name is no longer emitted into the$composite(...)expression. - A package-version-only bump (
Directory.Packages.props/Directory.Build.props) now triggers the publish workflow, so dependency updates can cut a release.
Changed
cratis/stageandcratis/stage-specrunnerare now built from host-built, framework-dependent binaries and copied into the images, instead of compiling inside the Docker build — no more .NET compilation under QEMU emulation for the arm64 leg of the multi-arch publish.dockerize.shmoves to the repository root and publishes both apps before building both images.
🤖 Generated with Claude Code
Release v1.0.4
Release v1.0.3
Fixed
cratis/stage-specrunnerfailed to build in Release withCS0246: FactAttribute could not be found. The Dockerfile never copiedSource/Directory.Build.targets, the file that strips inline spec folders (for_*/,when_*/,given/) from Release builds, so the Screenplay event-model-loader specs were compiled without a test framework reference.
Release v1.0.2
Fixed
cratis/stageandcratis/stage-specrunnerare now built and pushed for bothlinux/amd64andlinux/arm64, fixingno matching manifest for linux/arm64/v8when pulling on arm64 hosts.
Changed
- The publish pipeline now also cuts a release when
.github/workflows/publish.ymlitself changes, so pipeline-only fixes (like this one) can ship without an unrelatedSource/change.