Repository navigation
Release v4.204.0
Summary
Stage now carries authored C# command handler, reaction and policy bodies into rendered applications verbatim, refuses files that would escape the output folder, and reports whether each render is complete, degraded or refused. It also adds the multi-service repository layout and model-bound read models, and renders more projection and specification shapes.
Added
- Authored C# command handler bodies render beside the command's declared productions, with the handler's typed command values captured once per call. (part of #817)
- An authenticated C# reaction body for a reaction with a single event trigger renders as a typed reactor handler. Other reaction body shapes are reported as unsupported, and generated specifications that would drive a native reaction body are omitted. (part of #829)
- Inline bodies are spliced into the rendered code without changing their bytes, and integrity or boundary violations are refused. (part of #808)
- Every render reports whether it is rendered, degraded or refused, with a completeness report, scoped inventories and persisted diagnostics. Strict acceptance rejects degraded renders while keeping the safe generated output. (part of #807) (part of #810)
- Each target declares the ESM range it supports, and newer ESM minors inside that range render as degraded instead of failing. (part of #809)
- Applications can opt into a multi-service repository layout with per-service Source folders and shared Aspire composition, while the default single-project layout stays unchanged. (#782)
- Rendered Cratis applications get a renderer-owned
GlobalUsings.csand omit redundant per-file usings for its namespaces. (#783) - New applications can render eligible flat event projections as model-bound read models, with an explicit opt-in convention for existing applications. (part of #496)
- Projections with literal
allandeveryblocks, includingeveryblocks with joins, now render natively and run in specification execution. (part of #117) - Specifications with sourceless given or appended events render when no consumer can observe their event source. (#652)
- Specifications that use reducer observer filters now run on concrete execution routes instead of being refused. (part of #513)
- The Stage navigation tree keeps each entry's authored
idas its identity and shows entries that share agroupunder a section heading. (part of #329)
Changed
- Stage now builds against Screenplay 4.250.0, which accepts inline bodies beside declarative
produces. - Rendered C# uses short type names with matching usings; fully qualified names remain only where two types share a name. (part of #819)
- Syntax-renderer compliance details are now rendered by default. Opt out with
complianceDetails: false; generated details require Chronicle 19.90.1 or later. (#259) - Generated pure-analysis code now admits compatible concept-to-concept conversions, and a positional constructor argument mismatch in a reducer body suggests named arguments. (#833) (#836)
- Screens that name a screen template now render only that template, without an outer template or its placeholder content, so master/detail screens no longer show an empty "Nothing here yet" panel. (#713)
- A body whose SHA-256 hash does not match its verified envelope is reported with its own integrity code,
STAGE-ESM-056. (#818) - Code bodies whose implementation role this Stage version does not know are refused instead of rendering without a typed context. (#835)
- Inline handlers reject mixing value and valueless returns, and returns inside nested functions no longer affect handler return inference. (#694)
- Concept, constraint and authorization refusals identify the construct that prevents rendering. (part of #514)
- An ambiguous bare inline return type, or one whose name collides with a framework contract, is now refused with a diagnostic instead of binding silently to one of the candidates.
- Screen and toolbar actions with an explicit subject are refused with
STAGE-ESM-058until Stage can render them. (part of #855) - The refusal for a decision read whose key property is not an id now names the affected read model and the change needed. (part of #638)
Fixed
-
A rendered application with a performer-bodied query failed to build: the performer was a non-public static method on the read model, which Arc's analyzer reports as ARC0029 (a query that was not made public). The performer now lives in a nested static class of its own.
-
Semantic run admission now finds reducers declared in nested features, so specifications of reducer-backed read models there are no longer refused as unsupported. (#860)
-
Rendering refuses generated files whose path would land outside the output folder, including through
..segments, absolute paths or symbolic links, and reports a blocking rendering failure instead of writing the file. (#815) -
Navigation links to external routes open only http and https addresses; other schemes are no longer rendered as links, and refused entries are disabled. (#814)
-
Generated Scene modules import commands by their generated PascalCase export, so models with lowercase command names produce a frontend that compiles. (#816)
-
In the live Host, a screen action uses only the selected row of a table on its own screen; other tables, outlets and dialogs can no longer supply a selection. (#774)
-
Generated frontend scaffolds resolve a single copy of
@cratis/fundamentals. (#757) -
State-change slices keep their declared read models, projections and queries, so generated specifications compile. (part of #823)
-
Generated state-change handlers compile when a command maps one identifier concept onto another compatible concept, such as an order id onto a movement id. (#822)
-
Commands that feed projections Stage cannot render are refused, and the Host keeps running the rest of the world. (#554)
-
Semantic specification runs report an overflowing whole-number product as unsupported instead of an error, including in projections reached by command appends. (#763)
-
DateTime read-model assertions compare Screenplay ISO instants without losing the authored offset spelling. (#742)
-
Rendering a model with duplicate declaration identities, unavailable analysis references or an unhandled event property type reports a diagnostic attributed to the declaring construct instead of crashing the render. (part of #806)
-
Generated applications with an inline snapshot query performer build again: the performer body no longer sits on the read model, where Arc reported ARC0029, and no longer carries
#linedirectives that failed with CS1504. -
Semantic specification runs of version 1 models keep a command's explicitly declared event-source identity.
-
In the multi-service layout, the completeness and unsupported-construct reports are written inside their service folder.
-
Generated multi-service Composition projects build without ASPIRE010 warnings. (#838)
-
Command operations and external systems are refused with
STAGE-ESM-057instead of being rendered as event appends or dropped from specifications. (part of #176)
Security
- Update vite to 8.3.5 and undici to 8.12.3 to fix high-severity advisories in the frontend toolchain. (#854)