Release v0.10.0
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, sopublic-specificationsstops resolving with zero skills of its own — naming, thefor_/when_/and_sentence path, layeredgiven/contexts, what not to specify, observable outcomes, and completion. Grounded in theCRSPEC0001–CRSPEC0007analyzers, which make the same rules machine-enforced in C# (#174) cratis-application-slice-specifications,cratis-chronicle-event-specificationsandcratis-chronicle-read-model-specifications— the in-process scenario family, migrated fromwrite-specs,write-specs-eventsandwrite-specs-readmodels(#174)cratis-code-review,cratis-performance-reviewandcratis-security-review, migrated from the three legacy review skills (#174)cratis-fundamentals-type-discovery, migrated fromdiscover-implementations(#174)cratis-arc-command-validationandcratis-chronicle-event-constraints— the two halves ofadd-business-rule, each with its own source file (#175, #177)public-reviewandpublic-fundamentals-type-discoveryprofiles (#174)
Changed
public-specificationscarries a skill of its own for the first time;public-specifications-dotnetgains the application scenario family;public-arcgains command validation;public-chroniclegains event constraints (#174)cratis-chronicle-event-constraintsnow 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 aGivenbuilder, fromCratis.Arc.Chronicle.Testing. The legacy skill and the already-shippedcratis-specifications-csharpreference both stated the opposite, which documented seeding a read model for a concurrency-sensitive rule as impossible (#174)EventScenariodisables 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 inCratis.DependencyInjection, notCratis(#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 fromstring, so the wrong order compiles and silently swaps them (#177)ConstraintScopeis a record of three optional dimensions, not an enum; scope is selected withPerEventSourceType(),PerEventStreamType()andPerEventStreamId()(#177)- A
[Projection]id is optional, so "a stable GUID that never changes" was only ever true once one is given (#174)