Skip to content

Release v0.10.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 00:32
7d9873b

Summary

Closes the remainder of #174 and the piece #175 and #177 both deferred: ten skills into the canonical trees, and the add-business-rule split executed rather than left pending.

Framework claims re-verified against Arc 22.10.4, Chronicle 16.45.2, Fundamentals 7.18.2 and Cratis.Specifications. Every new target stays honestly unclassified — capability kind, source-contract state and trust assessment all need owner-signed evidence this pull request does not have.

Added

  • Language-agnostic cratis-specification-by-example, so public-specifications stops resolving with zero skills of its own — naming, the for_/when_/and_ sentence path, layered given/ contexts, what not to specify, observable outcomes, and completion. Grounded in the CRSPEC0001–CRSPEC0007 analyzers, which make the same rules machine-enforced in C# (#174)
  • cratis-application-slice-specifications, cratis-chronicle-event-specifications and cratis-chronicle-read-model-specifications — the in-process scenario family, migrated from write-specs, write-specs-events and write-specs-readmodels (#174)
  • cratis-code-review, cratis-performance-review and cratis-security-review, migrated from the three legacy review skills (#174)
  • cratis-fundamentals-type-discovery, migrated from discover-implementations (#174)
  • cratis-arc-command-validation and cratis-chronicle-event-constraints — the two halves of add-business-rule, each with its own source file (#175, #177)
  • public-review and public-fundamentals-type-discovery profiles (#174)

Changed

  • public-specifications carries a skill of its own for the first time; public-specifications-dotnet gains the application scenario family; public-arc gains command validation; public-chronicle gains event constraints (#174)
  • cratis-chronicle-event-constraints now reports Chronicle rather than Arc products, because it no longer inherits them from the shared Arc-scoped legacy source (#177)

Fixed

  • CommandScenario<TCommand> does carry a Given builder, from Cratis.Arc.Chronicle.Testing. The legacy skill and the already-shipped cratis-specifications-csharp reference both stated the opposite, which documented seeding a read model for a concurrency-sensitive rule as impossible (#174)
  • EventScenario disables concurrency checking, so a concurrency specification written against it passes vacuously. Both the legacy skill and the shipped reference listed the assertions without saying so (#174)
  • [Singleton] is in Cratis.DependencyInjection, not Cratis (#174)
  • Command-side read-model injection is not keyed off [ReadModel], and has no slice or feature restriction — registration is global and comes from the backing projection, reducer, DbSet<T> or collection (#175)
  • IConstraintBuilder.Unique<TEvent> takes the message first and the name second, the reverse of the [Unique] attribute. Both convert implicitly from string, so the wrong order compiles and silently swaps them (#177)
  • ConstraintScope is a record of three optional dimensions, not an enum; scope is selected with PerEventSourceType(), PerEventStreamType() and PerEventStreamId() (#177)
  • A [Projection] id is optional, so "a stable GUID that never changes" was only ever true once one is given (#174)