@cratis/pi 7.2.2 → 7.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/package/corpus/agents/slice-implementer.md +1 -1
  2. package/package/corpus/prompts/add-business-rule.prompt.md +1 -1
  3. package/package/corpus/prompts/add-concept.prompt.md +1 -1
  4. package/package/corpus/prompts/add-ef-migration.prompt.md +1 -1
  5. package/package/corpus/prompts/add-projection.prompt.md +1 -1
  6. package/package/corpus/prompts/add-reactor.prompt.md +1 -1
  7. package/package/corpus/prompts/add-reducer.prompt.md +1 -1
  8. package/package/corpus/prompts/new-vertical-slice.prompt.md +2 -2
  9. package/package/corpus/prompts/scaffold-feature.prompt.md +2 -2
  10. package/package/corpus/prompts/write-specs.prompt.md +1 -1
  11. package/package/corpus/rules/application-profile.md +1 -1
  12. package/package/corpus/rules/framework.md +1 -1
  13. package/package/corpus/rules/frontend-testing.md +1 -1
  14. package/package/corpus/rules/profiles.md +23 -0
  15. package/package/corpus/rules/specs.csharp.md +2 -2
  16. package/package/corpus/rules/specs.scenarios.csharp.md +1 -1
  17. package/package/corpus/rules/vertical-slices.md +9 -9
  18. package/package/corpus/skills/cratis-arc-command-typescript/LICENSE +2 -0
  19. package/package/corpus/skills/cratis-arc-command-typescript/SKILL.md +495 -0
  20. package/package/corpus/skills/cratis-arc-command-typescript/references/chronicle-events.md +141 -0
  21. package/package/corpus/skills/cratis-arc-command-typescript/references/hosting-and-storage.md +183 -0
  22. package/package/corpus/skills/cratis-arc-command-typescript/verification.json +15 -0
  23. package/package/corpus/skills/cratis-arc-query-typescript/LICENSE +2 -0
  24. package/package/corpus/skills/cratis-arc-query-typescript/SKILL.md +350 -0
  25. package/package/corpus/skills/cratis-arc-query-typescript/verification.json +14 -0
  26. package/package/corpus/skills/cratis-arc-validation-typescript/LICENSE +2 -0
  27. package/package/corpus/skills/cratis-arc-validation-typescript/SKILL.md +320 -0
  28. package/package/corpus/skills/cratis-arc-validation-typescript/verification.json +14 -0
  29. package/package/profile-catalog.json +24 -0
  30. package/package.json +1 -1
@@ -38,7 +38,7 @@ A new vertical slice (State Change, State View, Automation, Translation), or a n
38
38
  ## Workflow — phase gates; don't start the next until the current passes
39
39
 
40
40
  ### Phase 1 — Plan
41
- For new behavior, unclear event names/stream boundaries, or multi-slice flows, run the `event-modeling` skill first. Confirm Module/Feature/slice name + type, the behavior in one sentence, whether a UI surface is needed, and the event/read-model/scenario outline. Ask only when a real product/domain choice can't be answered from the repo.
41
+ For new behavior, unclear event names/stream boundaries, or multi-slice flows, run the **cratis-chronicle-event-modeling** skill first. Confirm Module/Feature/slice name + type, the behavior in one sentence, whether a UI surface is needed, and the event/read-model/scenario outline. Ask only when a real product/domain choice can't be answered from the repo.
42
42
 
43
43
  ### Phase 2 — Backend
44
44
  Write `<Module>/<Feature>/<Slice>/<Slice>.cs` with all backend artifacts (declaration order per `general.md`). **Gate:** build clean in **Debug and Release** (zero errors/warnings — Debug validates `#if DEBUG` spec code and regenerates the TypeScript proxies; build Release with `-p:CratisProxiesOutputPath=` to skip re-running proxy generation).
@@ -5,7 +5,7 @@ description: Add a business rule or event-store constraint to an existing comman
5
5
 
6
6
  # Add a Business Rule or Constraint
7
7
 
8
- Enforce a new rule on an existing command. Invoke the **add-business-rule** skill and follow `.cratis/ai/rules/vertical-slices.md` (the decision matrix).
8
+ Enforce a new rule on an existing command. Invoke the **cratis-arc-command-validation** skill, or the **cratis-chronicle-event-constraints** skill for uniqueness and other append-time constraints, and follow `.cratis/ai/rules/vertical-slices.md` (the decision matrix).
9
9
 
10
10
  ## Confirm first
11
11
 
@@ -5,7 +5,7 @@ description: Create a strongly-typed Concept for a primitive domain value or an
5
5
 
6
6
  # Add a Concept
7
7
 
8
- Create a strongly-typed concept to replace a raw primitive. Invoke the **add-concept** skill and follow `.cratis/ai/rules/concepts.md`.
8
+ Create a strongly-typed concept to replace a raw primitive. Invoke the **cratis-fundamentals-concept** skill and follow `.cratis/ai/rules/concepts.md`.
9
9
 
10
10
  ## Confirm first
11
11
 
@@ -5,7 +5,7 @@ description: Add or update an Entity Framework Core DbContext, table column, or
5
5
 
6
6
  # Add an EF Core Migration
7
7
 
8
- Make a database schema change via EF Core. Invoke the **add-ef-migration** skill and follow `.cratis/ai/rules/efcore.md` (+ `.cratis/ai/rules/efcore.specs.md`).
8
+ Make a database schema change via EF Core. Invoke the **cratis-arc-ef-core-migration** skill and follow `.cratis/ai/rules/efcore.md` (+ `.cratis/ai/rules/efcore.specs.md`).
9
9
 
10
10
  > Applies only to projects that use EF Core.
11
11
 
@@ -5,7 +5,7 @@ description: Add a Chronicle projection to an existing read model slice.
5
5
 
6
6
  # Add a Projection
7
7
 
8
- Add a Chronicle projection that populates a read model from events. Invoke the **add-projection** skill and follow `.cratis/ai/rules/vertical-slices.md` (projections). For reactors, use the **add-reactor** prompt instead.
8
+ Add a Chronicle projection that populates a read model from events. Invoke the **cratis-chronicle-projection** skill and follow `.cratis/ai/rules/vertical-slices.md` (projections). For reactors, use the **add-reactor** prompt instead.
9
9
 
10
10
  ## Confirm first
11
11
 
@@ -5,7 +5,7 @@ description: Add a Chronicle reactor (automation or translation) that reacts to
5
5
 
6
6
  # Add a Reactor
7
7
 
8
- Add a reactor that observes events and produces side effects. Invoke the **add-reactor** skill and follow `.cratis/ai/rules/reactors.md`.
8
+ Add a reactor that observes events and produces side effects. Invoke the **cratis-chronicle-reactor** skill and follow `.cratis/ai/rules/reactors.md`.
9
9
 
10
10
  ## Confirm first
11
11
 
@@ -5,7 +5,7 @@ description: Add a Chronicle reducer to a read model when model-bound and fluent
5
5
 
6
6
  # Add a Reducer
7
7
 
8
- Add an `IReducerFor<T>` reducer — the last-resort escape hatch for a "current state + event → next state" transition that model-bound projection attributes and fluent `IProjectionFor<T>` cannot express. Invoke the **add-reducer** skill and follow `.cratis/ai/rules/vertical-slices.md`. For ordinary projections, use the **add-projection** prompt instead.
8
+ Add an `IReducerFor<T>` reducer — the last-resort escape hatch for a "current state + event → next state" transition that model-bound projection attributes and fluent `IProjectionFor<T>` cannot express. Invoke the **cratis-chronicle-reducer** skill and follow `.cratis/ai/rules/vertical-slices.md`. For ordinary projections, use the **add-projection** prompt instead.
9
9
 
10
10
  ## Confirm first
11
11
 
@@ -5,7 +5,7 @@ description: Scaffold a complete vertical slice (backend + specs + frontend) for
5
5
 
6
6
  # New Vertical Slice
7
7
 
8
- Implement a complete **vertical slice** end-to-end. Invoke the **new-vertical-slice** skill and follow it exactly; for a full backend + specs + frontend slice you may hand the work to the **Slice Implementer** agent.
8
+ Implement a complete **vertical slice** end-to-end. Follow the Implementation Workflow in `.cratis/ai/rules/application-profile.md` exactly; for a full backend + specs + frontend slice you may hand the work to the **Slice Implementer** agent.
9
9
 
10
10
  ## Confirm first
11
11
 
@@ -15,4 +15,4 @@ Implement a complete **vertical slice** end-to-end. Invoke the **new-vertical-sl
15
15
 
16
16
  ## How it runs
17
17
 
18
- Backend → build (Debug + Release) → specs (the in-process `*Scenario` family) → frontend → compose/route, with each quality gate green before the next phase. The authoritative rules are `.cratis/ai/rules/general.md` and `.cratis/ai/rules/vertical-slices.md`; the skill carries the step-by-step detail. Do not duplicate that detail here.
18
+ Backend → build (Debug + Release) → specs (the in-process `*Scenario` family) → frontend → compose/route, with each quality gate green before the next phase. The authoritative rules are `.cratis/ai/rules/general.md` and `.cratis/ai/rules/vertical-slices.md`; the rules carry the step-by-step detail. Do not duplicate that detail here.
@@ -5,7 +5,7 @@ description: Scaffold a new feature — folder structure, composition page, rout
5
5
 
6
6
  # Scaffold a Feature
7
7
 
8
- Scaffold a brand-new feature folder (composition page, routing, navigation) — ready for slices. Invoke the **scaffold-feature** skill and follow it exactly.
8
+ Scaffold a brand-new feature folder (composition page, routing, navigation) — ready for slices. Follow the Project Layout in `.cratis/ai/rules/application-profile.md` exactly, and Phase 3 of its Implementation Workflow plus the Composition section of `.cratis/ai/rules/react.md` for the composition page and routing. Invoke the **cratis-arc-react-page** skill for the page itself.
9
9
 
10
10
  ## Confirm first
11
11
 
@@ -13,4 +13,4 @@ Scaffold a brand-new feature folder (composition page, routing, navigation) —
13
13
  - **Route path** — kebab-case (e.g. `/projects`)
14
14
  - **Navigation label** and **icon** (from `react-icons/md`)
15
15
 
16
- The feature folder lives directly under the app source root (or under an optional `<Module>/`) — there is no top-level `Features/` wrapper. After scaffolding, add behavior with the **new-vertical-slice** prompt/skill. The skill carries the step-by-step detail; don't duplicate it here.
16
+ The feature folder lives directly under the app source root (or under an optional `<Module>/`) — there is no top-level `Features/` wrapper. After scaffolding, add behavior with the **new-vertical-slice** prompt. The rules carry the step-by-step detail; don't duplicate it here.
@@ -5,7 +5,7 @@ description: Write comprehensive BDD specs for an existing vertical slice comman
5
5
 
6
6
  # Write Specs
7
7
 
8
- Write **comprehensive specs** for an existing slice. Invoke the **write-specs** skill (and `write-specs-events` / `write-specs-readmodels` for constraints and projections); follow `.cratis/ai/rules/specs.md` and `.cratis/ai/rules/specs.csharp.md`.
8
+ Write **comprehensive specs** for an existing slice. Invoke the **cratis-application-slice-specifications** skill (and **cratis-chronicle-event-specifications** / **cratis-chronicle-read-model-specifications** for constraints and projections); follow `.cratis/ai/rules/specs.md` and `.cratis/ai/rules/specs.csharp.md`.
9
9
 
10
10
  ## What to provide
11
11
 
@@ -50,7 +50,7 @@ Tagged **[contract]** (framework-enforced) or **[convention]** (house default).
50
50
 
51
51
  ## Implementation Workflow
52
52
 
53
- - **Phase 0 — Model.** Confirm Module/Feature, slice name, slice type, domain rules; for new behavior or unclear event vocabulary run the **event-modeling** skill first.
53
+ - **Phase 0 — Model.** Confirm Module/Feature, slice name, slice type, domain rules; for new behavior or unclear event vocabulary run the **cratis-chronicle-event-modeling** skill first.
54
54
  - **Phase 1 — Backend.** Implement a coherent slice change. **Gate:** incremental Debug build of the affected project (regenerates proxies, compiles `#if DEBUG` spec code).
55
55
  - **Phase 2 — Specs.** Mandatory for every slice type, in-process scenario family first (`CommandScenario<T>`, `EventScenario`, `ReadModelScenario<T>`, `ReactorScenario<T>`). **Gate:** tests pass.
56
56
  - **Phase 3 — Frontend.** Build from the generated proxies, register in the composition page, wire routing. **Gate:** lint, conditional test, build.
@@ -11,7 +11,7 @@ The framework repos are **libraries**, not event-sourced applications. The appli
11
11
 
12
12
  ## What still applies (universal rules)
13
13
 
14
- Everything tagged `profile: universal` holds in framework repos exactly as in apps: **C# conventions** (`csharp.md`), **TypeScript conventions** (`typescript.md`), **code quality** (`code-quality*.md`), **specs** (`specs.md` / `specs.csharp.md` / `specs.typescript.md` — `Cratis.Specifications` is how the framework tests itself, using the plain `Specification` base + NSubstitute against the classes under test — this is the dominant mode in framework repos. The in-process `*Scenario` family lives in `specs.scenarios.csharp.md` (`profile: application`); it is the *application* default, and a framework repo reaches for it only to test the very engine it provides — Arc → `CommandScenario`, Chronicle → `EventScenario`/`ReadModelScenario`/`ReactorScenario` — not as a general testing mode. The **write-specs** skill is application-oriented), **documentation**, **git-commits**, **pull-requests**, **concepts** (`ConceptAs<T>` / `EventSourceId<T>` are Fundamentals/Chronicle primitives the framework defines and uses), and **American English**.
14
+ Everything tagged `profile: universal` holds in framework repos exactly as in apps: **C# conventions** (`csharp.md`), **TypeScript conventions** (`typescript.md`), **code quality** (`code-quality*.md`), **specs** (`specs.md` / `specs.csharp.md` / `specs.typescript.md` — `Cratis.Specifications` is how the framework tests itself, using the plain `Specification` base + NSubstitute against the classes under test — this is the dominant mode in framework repos. The in-process `*Scenario` family lives in `specs.scenarios.csharp.md` (`profile: application`); it is the *application* default, and a framework repo reaches for it only to test the very engine it provides — Arc → `CommandScenario`, Chronicle → `EventScenario`/`ReadModelScenario`/`ReactorScenario` — not as a general testing mode. The **cratis-application-slice-specifications** skill is application-oriented), **documentation**, **git-commits**, **pull-requests**, **concepts** (`ConceptAs<T>` / `EventSourceId<T>` are Fundamentals/Chronicle primitives the framework defines and uses), and **American English**.
15
15
 
16
16
  ## What does NOT apply
17
17
 
@@ -123,4 +123,4 @@ Run the project's frontend test gate (e.g. `yarn test`) for frontend changes; it
123
123
  - [react.md](./react.md) — MVVM, view-model testability, Arc hooks.
124
124
  - [frontend-quality.md](./frontend-quality.md) — the engineering bar these specs serve.
125
125
  - [specs.md](./specs.md) — the backend BDD language this mirrors.
126
- - skill: **write-specs-frontend** — the step-by-step workflow that applies these conventions.
126
+ - skill: **cratis-application-react-specifications** — the step-by-step workflow that applies these conventions.
@@ -110,6 +110,29 @@ Standalone Chronicle client usage (no Arc) for Kotlin and Java is
110
110
  `cratis-chronicle-client-kotlin`, reused by `cratis/chronicle/client-java`.
111
111
  JVM language conventions are `kotlin.md` and `java.md`.
112
112
 
113
+ ### Arc for TypeScript on Node.js
114
+
115
+ Arc for TypeScript (`@cratis/arc.core` with the Express, Fastify, Hono,
116
+ MongoDB, Drizzle, testing and experimental Chronicle packages) brings the same
117
+ model-bound command/query shape to a Node.js server. Its packages are a source
118
+ preview and are not published to npm. It is separate from `@cratis/arc`, the
119
+ published client runtime that generated proxies import in a frontend.
120
+ `cratis/arc/server-typescript` carries the skills; `cratis/arc/typescript` adds
121
+ the TypeScript language conventions, and `cratis/full/typescript` composes it.
122
+ The server skills are opt-in: `cratis/arc`, `cratis/application` and
123
+ `cratis/application/typescript` do not load them, because they target a
124
+ Node.js server and a C# or React-frontend project has no use for them. Select
125
+ `cratis/arc/typescript` (or `cratis/full/typescript`) for a Node.js Arc server.
126
+
127
+ | Skill | Covers |
128
+ | --- | --- |
129
+ | `cratis-arc-command-typescript` | Project setup from the source preview, `ArcApplication.createBuilder()`, `@command()` with `handle()`/`provide()`, outcomes, authorization, returned Chronicle events, generated metadata and proxies, hosts, `CommandScenario` |
130
+ | `cratis-arc-query-typescript` | `@readModel()` with static `@query()` methods, argument binding, GET and HTTP `QUERY`, paging, RxJS observable queries, MongoDB/Drizzle/Chronicle read models, `QueryScenario`/`ObservableQueryScenario` |
131
+ | `cratis-arc-validation-typescript` | `CommandValidator`/`QueryValidator`/`ConceptValidator`/`ModelValidator`, `readModelForValidation`, `validation()` with `rejected`/`denied`, severity filtering |
132
+
133
+ Standalone Chronicle client usage (no Arc) in TypeScript is
134
+ `cratis-chronicle-client-typescript`.
135
+
113
136
  ### Specialized Profiles
114
137
 
115
138
  | Profile ID | Description |
@@ -10,8 +10,8 @@ paths:
10
10
  Extends the base [specs.md](./specs.md) (folder structure, naming, philosophy) with C#-specific conventions. This file is the **universal foundation** used in **both** profiles — the `Cratis.Specifications` pattern (`Establish → Because → should_`) with NSubstitute.
11
11
 
12
12
  > **Which spec surface?**
13
- > - **Framework / library code** (Chronicle kernel, Arc pipeline, source generators, Fundamentals): the `Specification` base + NSubstitute in this file is the dominant mode — unit-test the classes under test in isolation. Reach for a `*Scenario` helper (in [specs.scenarios.csharp.md](./specs.scenarios.csharp.md)) **only** when testing the very engine your repo provides — Arc → `CommandScenario`, Chronicle → the event/projection/reactor scenarios. The **write-specs** skill is application-oriented, not for general framework specs.
14
- > - **Event-sourced applications on Cratis** (commands, projections, reducers, reactors, constraints): use this base **plus** the in-process scenario family — see **[specs.scenarios.csharp.md](./specs.scenarios.csharp.md)** (`profile: application`) and the **write-specs** skill.
13
+ > - **Framework / library code** (Chronicle kernel, Arc pipeline, source generators, Fundamentals): the `Specification` base + NSubstitute in this file is the dominant mode — unit-test the classes under test in isolation. Reach for a `*Scenario` helper (in [specs.scenarios.csharp.md](./specs.scenarios.csharp.md)) **only** when testing the very engine your repo provides — Arc → `CommandScenario`, Chronicle → the event/projection/reactor scenarios. The **cratis-application-slice-specifications** skill is application-oriented, not for general framework specs.
14
+ > - **Event-sourced applications on Cratis** (commands, projections, reducers, reactors, constraints): use this base **plus** the in-process scenario family — see **[specs.scenarios.csharp.md](./specs.scenarios.csharp.md)** (`profile: application`) and the **cratis-application-slice-specifications** skill.
15
15
 
16
16
  `Cratis.Specifications` keeps the approach of Machine.Specifications (MSpec): `Establish → Because → should_` maps to "Given → When → Then" and keeps each spec focused on *one setup, one action, one set of assertions*.
17
17
 
@@ -184,4 +184,4 @@ These supplement the universal conventions in [specs.csharp.md](./specs.csharp.m
184
184
  - [specs.csharp.md](./specs.csharp.md) — the universal `Specification` + NSubstitute base this builds on (and what framework specs use).
185
185
  - [vertical-slices.md](./vertical-slices.md) — what each artifact promises (the contract under spec).
186
186
  - [efcore.specs.md](./efcore.specs.md) — `DbContext` specs with SQLite in-memory.
187
- - skills: **write-specs**, **write-specs-events**, **write-specs-readmodels**.
187
+ - skills: **cratis-application-slice-specifications**, **cratis-chronicle-event-specifications**, **cratis-chronicle-read-model-specifications**.
@@ -65,11 +65,11 @@ public record AuthorName(string Value) : ConceptAs<string>(Value)
65
65
  }
66
66
  ```
67
67
 
68
- **[convention] Placement:** slice-specific concept → in the slice file; feature-shared → feature folder; module-shared → module folder; app-wide → `Common/`. Scan `Common/` and the feature folder before creating a new concept. See [concepts.md](./concepts.md) for full patterns, or invoke the **add-concept** skill.
68
+ **[convention] Placement:** slice-specific concept → in the slice file; feature-shared → feature folder; module-shared → module folder; app-wide → `Common/`. Scan `Common/` and the feature folder before creating a new concept. See [concepts.md](./concepts.md) for full patterns, or invoke the **cratis-fundamentals-concept** skill.
69
69
 
70
70
  ## Commands
71
71
 
72
- The command carries input from the caller. `Handle()` is defined directly on the record — never a separate handler class. For step-by-step creation, invoke the **cratis-command** skill.
72
+ The command carries input from the caller. `Handle()` is defined directly on the record — never a separate handler class. For step-by-step creation, invoke the **cratis-arc-command** skill.
73
73
 
74
74
  > This application is event-sourced, so the guidance below assumes a command's `Handle()` returns event(s) that Arc+Chronicle appends. Arc itself is a standalone CQRS framework (see [general.md](./general.md)) — a command may legitimately return a response or `void` and do its work through injected services when a slice isn't event-sourced; the return-shape and "never inject `IEventLog`" rules are the event-sourced default, not universal Arc laws.
75
75
 
@@ -86,7 +86,7 @@ The command carries input from the caller. `Handle()` is defined directly on the
86
86
  | Uniqueness | Chronicle `[Unique]` / `IConstraint` (race-safe) — not a read-model pre-check |
87
87
  | Genuinely exceptional failure (bug, missing infra) | `throw` a domain exception |
88
88
 
89
- **Do not throw for normal business rejection.** A thrown exception (from `Provide()` or `Handle()`) surfaces as an exception/HTTP 500, *not* a validation result. Recoverable, user-facing rejections are validation: `ValidationResult.Error(...)` via a validator or `Result<,>`. (For step-by-step business-rule placement, invoke the **add-business-rule** skill.)
89
+ **Do not throw for normal business rejection.** A thrown exception (from `Provide()` or `Handle()`) surfaces as an exception/HTTP 500, *not* a validation result. Recoverable, user-facing rejections are validation: `ValidationResult.Error(...)` via a validator or `Result<,>`. (For step-by-step business-rule placement, invoke the **cratis-arc-command-validation** skill.)
90
90
 
91
91
  ### Causation — what a command records **[contract]**
92
92
 
@@ -185,7 +185,7 @@ Apply authorization attributes on the `[Command]` record or query method. **[con
185
185
 
186
186
  `[EventType]` records are the schema-bound truth of the system.
187
187
 
188
- - **[contract] No arguments for new events** — the type name is the identifier. Use `generation:`/id only when evolving an existing contract (invoke the **event-type-migrations** skill).
188
+ - **[contract] No arguments for new events** — the type name is the identifier. Use `generation:`/id only when evolving an existing contract (invoke the **cratis-chronicle-event-type-migration** skill).
189
189
  - **[contract] Past-tense, one-purpose names** (`AuthorRegistered`, not `Updated`/`FormSubmitted`) — Chronicle requires past-tense, single-purpose facts. Self-describing without slice context.
190
190
  - **[contract] Avoid nullable properties** — Chronicle's analyzer warns on nullable event members; model optional facts as a separate event, or resolve a nullable command input to a non-null sentinel before constructing the event.
191
191
  - **[contract] Never carry the event-source id** — it's implicit in the event context.
@@ -210,13 +210,13 @@ public record AuthorRegistered(AuthorName Name);
210
210
 
211
211
  ## Read Models and Queries
212
212
 
213
- **[contract]** `[ReadModel]` records expose queries as `public static` methods; dependencies are plain method parameters (no `[FromServices]`). Default to model-bound projection shape; drop to fluent only when needed. For step-by-step creation, invoke the **cratis-readmodel** skill.
213
+ **[contract]** `[ReadModel]` records expose queries as `public static` methods; dependencies are plain method parameters (no `[FromServices]`). Default to model-bound projection shape; drop to fluent only when needed. For step-by-step creation, invoke the **cratis-chronicle-read-model** skill.
214
214
 
215
215
  ### Query return shapes **[contract]**
216
216
 
217
217
  Stay within analyzer-supported shapes: the read model, `T?`, a collection/array/`IQueryable<T>` of it, `Task<...>` of those, `IAsyncEnumerable<T>`, or `ISubject<...>` of read model/collection.
218
218
 
219
- - **`IQueryable<TReadModel>`** → automatic server-side paging/sorting (frontend `useWithPaging` — see the **query-paging** skill). Use it whenever a list can grow.
219
+ - **`IQueryable<TReadModel>`** → automatic server-side paging/sorting (frontend `useWithPaging` — see the **cratis-arc-query-paging** skill). Use it whenever a list can grow.
220
220
  - **`ISubject<...>`** → live/observable queries. Return it directly — **never** `Task<ISubject<...>>`.
221
221
  - **[contract] Custom paths use `[Path("...")]`** (`PathAttribute`), not ASP.NET `[Route]`. Reserve `[Route]` for controller endpoints (which this convention avoids).
222
222
 
@@ -257,7 +257,7 @@ Ladder, first that fits: (1) direct read-model (DCB) injection — only when key
257
257
 
258
258
  ## Projections **[contract]**
259
259
 
260
- Projections build read models from **events** (never from other read models). Use the ladder — for adding one to an existing model, invoke the **add-projection** skill:
260
+ Projections build read models from **events** (never from other read models). Use the ladder — for adding one to an existing model, invoke the **cratis-chronicle-projection** skill:
261
261
 
262
262
  1. **Model-bound attributes** on the `[ReadModel]`: `[FromEvent<T>]`, `[SetFrom<T>]`, `[SetFromContext<T>]`, `[ChildrenFrom<T>]`, `[RemovedWith<T>]`, `[Nested]`, `[ClearWith<T>]`, counters, `[FromAll]`.
263
263
  2. **Fluent `IProjectionFor<T>`** for joins, composite/constant keys, parent-key extraction, context mapping, `.NotRewindable()`, or supported conditional setters. Declarative metadata only — no DI side effects, no imperative `Define()` body, builder lambdas are member access only.
@@ -280,7 +280,7 @@ Group multi-event constraints under a shared name constant (`<Module>ConstraintN
280
280
 
281
281
  ## Reactors **[contract]**
282
282
 
283
- `IReactor` is a marker interface; dispatch is by the first parameter type. Reactors live only in Automation/Translation slices. See [reactors.md](./reactors.md) for full rules, or invoke the **add-reactor** skill.
283
+ `IReactor` is a marker interface; dispatch is by the first parameter type. Reactors live only in Automation/Translation slices. See [reactors.md](./reactors.md) for full rules, or invoke the **cratis-chronicle-reactor** skill.
284
284
 
285
285
  ```csharp
286
286
  public Task AuthorRegistered(AuthorRegistered @event, EventContext context) => ...
@@ -340,4 +340,4 @@ Frontend commands run through the Cratis dialogs — never a vendor or hand-roll
340
340
  - [concepts.md](./concepts.md) — `ConceptAs<T>` / `EventSourceId<T>` full patterns.
341
341
  - [reactors.md](./reactors.md) — reactor signatures and side-effect rules.
342
342
  - [specs.md](./specs.md) — `CommandScenario` / `EventScenario` / `ReadModelScenario` / `ReactorScenario`.
343
- - skills: **event-modeling**, **new-vertical-slice**, **scaffold-feature**, **cratis-command**, **cratis-readmodel**, **add-concept**, **add-projection**, **add-reactor**, **add-business-rule**, **event-type-migrations**, **call-command-from-code**, **query-paging**, **cross-cutting-properties**, **multi-tenancy**.
343
+ - skills: **cratis-chronicle-event-modeling**, **cratis-arc-command**, **cratis-chronicle-read-model**, **cratis-fundamentals-concept**, **cratis-chronicle-projection**, **cratis-chronicle-reactor**, **cratis-arc-command-validation**, **cratis-chronicle-event-type-migration**, **cratis-arc-command-execution**, **cratis-arc-query-paging**, **cratis-chronicle-multi-tenancy**.
@@ -0,0 +1,2 @@
1
+ Copyright (c) Cratis. All rights reserved.
2
+ Licensed under the MIT license. See LICENSE file in the project root for full license information.