@cratis/pi 7.34.0 → 7.35.0

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 (241) hide show
  1. package/package/corpus/agents/security-reviewer.md +1 -0
  2. package/package/corpus/agents/spec-writer.md +1 -1
  3. package/package/corpus/harnesses/pi/extensions/shared/rules.ts +3 -1
  4. package/package/corpus/hooks/scripts/cratis-nuget-pins.txt +7 -6
  5. package/package/corpus/hooks/scripts/cratis-release-notes-reviewed.cjs +7 -6
  6. package/package/corpus/hooks/scripts/cratis-store-mutations.json +7 -3
  7. package/package/corpus/product-sync.json +896 -0
  8. package/package/corpus/prompts/add-business-rule.prompt.md +1 -1
  9. package/package/corpus/prompts/ship-changes.prompt.md +2 -2
  10. package/package/corpus/rules/ai-distribution.md +31 -3
  11. package/package/corpus/rules/application-profile.md +2 -1
  12. package/package/corpus/rules/components.md +66 -7
  13. package/package/corpus/rules/concepts.md +11 -3
  14. package/package/corpus/rules/csharp.md +3 -1
  15. package/package/corpus/rules/dialogs.md +9 -0
  16. package/package/corpus/rules/efcore.md +1 -1
  17. package/package/corpus/rules/elixir.md +49 -0
  18. package/package/corpus/rules/framework.md +5 -3
  19. package/package/corpus/rules/general.md +1 -0
  20. package/package/corpus/rules/glossary.md +4 -4
  21. package/package/corpus/rules/go-engineering.md +60 -0
  22. package/package/corpus/rules/go.md +115 -0
  23. package/package/corpus/rules/java.md +5 -2
  24. package/package/corpus/rules/kotlin.md +7 -5
  25. package/package/corpus/rules/orleans.md +65 -9
  26. package/package/corpus/rules/profiles.md +43 -6
  27. package/package/corpus/rules/pull-requests.md +3 -3
  28. package/package/corpus/rules/react.md +8 -1
  29. package/package/corpus/rules/reactors.md +27 -3
  30. package/package/corpus/rules/specs.csharp.md +11 -4
  31. package/package/corpus/rules/specs.scenarios.csharp.md +35 -4
  32. package/package/corpus/rules/specs.typescript.md +2 -1
  33. package/package/corpus/rules/storybook.md +1 -1
  34. package/package/corpus/rules/typescript.md +1 -1
  35. package/package/corpus/rules/vertical-slices.md +37 -5
  36. package/package/corpus/skills/cratis-application-react-specifications/SKILL.md +4 -2
  37. package/package/corpus/skills/cratis-application-slice-specifications/SKILL.md +18 -8
  38. package/package/corpus/skills/cratis-application-slice-specifications/references/query-and-decision-scenarios.md +65 -0
  39. package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/SKILL.md +53 -57
  40. package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/references/authentication.md +38 -42
  41. package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/references/authorization.md +18 -7
  42. package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/references/authproxy.md +30 -0
  43. package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/references/frontend.md +12 -9
  44. package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/references/local-development.md +9 -9
  45. package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/references/observable-emission-guards.md +8 -5
  46. package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/references/tenancy.md +20 -4
  47. package/package/corpus/skills/cratis-arc-command/SKILL.md +32 -10
  48. package/package/corpus/skills/cratis-arc-command/references/command-result.md +12 -5
  49. package/package/corpus/skills/cratis-arc-command/references/decisions-and-routing.md +95 -0
  50. package/package/corpus/skills/cratis-arc-command/references/generated-values.md +3 -2
  51. package/package/corpus/skills/cratis-arc-command/references/handler-shapes.md +8 -8
  52. package/package/corpus/skills/cratis-arc-command/references/proxy-generation.md +22 -3
  53. package/package/corpus/skills/cratis-arc-command/references/read-model-injection.md +13 -1
  54. package/package/corpus/skills/cratis-arc-command-execution/SKILL.md +19 -9
  55. package/package/corpus/skills/cratis-arc-command-kotlin/SKILL.md +44 -18
  56. package/package/corpus/skills/cratis-arc-command-kotlin/references/read-model-naming.md +29 -0
  57. package/package/corpus/skills/cratis-arc-command-operation/SKILL.md +10 -9
  58. package/package/corpus/skills/cratis-arc-command-operation/references/execution-and-recovery.md +2 -2
  59. package/package/corpus/skills/cratis-arc-command-operation/references/testing.md +4 -3
  60. package/package/corpus/skills/cratis-arc-command-typescript/SKILL.md +42 -22
  61. package/package/corpus/skills/cratis-arc-command-typescript/references/chronicle-events.md +36 -5
  62. package/package/corpus/skills/cratis-arc-command-typescript/references/command-operations.md +114 -0
  63. package/package/corpus/skills/cratis-arc-command-typescript/references/hosting-and-storage.md +37 -16
  64. package/package/corpus/skills/cratis-arc-command-typescript/references/identity-and-introspection.md +88 -0
  65. package/package/corpus/skills/cratis-arc-command-typescript/references/observability-and-host-scopes.md +25 -0
  66. package/package/corpus/skills/cratis-arc-command-typescript/references/proxy-generation.md +35 -4
  67. package/package/corpus/skills/cratis-arc-command-typescript/references/slice-layout.md +11 -0
  68. package/package/corpus/skills/cratis-arc-command-typescript/verification.json +8 -1
  69. package/package/corpus/skills/cratis-arc-command-validation/SKILL.md +49 -19
  70. package/package/corpus/skills/cratis-arc-ef-core-migration/SKILL.md +12 -6
  71. package/package/corpus/skills/cratis-arc-go/SKILL.md +148 -0
  72. package/package/corpus/skills/cratis-arc-go/references/queries.md +80 -0
  73. package/package/corpus/skills/cratis-arc-hosting/SKILL.md +96 -0
  74. package/package/corpus/skills/cratis-arc-hosting/references/integrations-and-publish.md +80 -0
  75. package/package/corpus/skills/cratis-arc-identity-and-tenancy-kotlin/SKILL.md +137 -0
  76. package/package/corpus/skills/cratis-arc-observable-query-http/SKILL.md +20 -2
  77. package/package/corpus/skills/cratis-arc-query-kotlin/SKILL.md +26 -6
  78. package/package/corpus/skills/cratis-arc-query-paging/SKILL.md +25 -20
  79. package/package/corpus/skills/cratis-arc-query-typescript/SKILL.md +32 -6
  80. package/package/corpus/skills/cratis-arc-query-typescript/references/storage-observation-and-compliance.md +66 -0
  81. package/package/corpus/skills/cratis-arc-query-typescript/verification.json +5 -1
  82. package/package/corpus/skills/cratis-arc-react-page/SKILL.md +24 -13
  83. package/package/corpus/skills/cratis-arc-react-page/references/data-page.md +20 -10
  84. package/package/corpus/skills/cratis-arc-react-page/references/data-tables.md +17 -3
  85. package/package/corpus/skills/cratis-arc-react-page/references/dialogs.md +14 -3
  86. package/package/corpus/skills/cratis-arc-react-page/references/from-screenplay.md +6 -1
  87. package/package/corpus/skills/cratis-arc-react-page/references/provenance.md +1 -1
  88. package/package/corpus/skills/cratis-arc-react-page/references/queries-and-commands.md +11 -1
  89. package/package/corpus/skills/cratis-arc-react-page/verification.json +6 -1
  90. package/package/corpus/skills/cratis-arc-spring-data-kotlin/SKILL.md +163 -0
  91. package/package/corpus/skills/cratis-arc-testing-kotlin/SKILL.md +131 -0
  92. package/package/corpus/skills/cratis-arc-validation-kotlin/SKILL.md +44 -11
  93. package/package/corpus/skills/cratis-arc-validation-typescript/SKILL.md +5 -3
  94. package/package/corpus/skills/cratis-chronicle-cli-operations/SKILL.md +79 -25
  95. package/package/corpus/skills/cratis-chronicle-cli-operations/references/command-effects.md +57 -0
  96. package/package/corpus/skills/cratis-chronicle-client-dotnet/SKILL.md +87 -99
  97. package/package/corpus/skills/cratis-chronicle-client-dotnet/references/additional-surfaces.md +65 -0
  98. package/package/corpus/skills/cratis-chronicle-client-dotnet/references/client-construction.md +42 -0
  99. package/package/corpus/skills/cratis-chronicle-client-dotnet/references/compatibility-check.md +12 -0
  100. package/package/corpus/skills/cratis-chronicle-client-dotnet/references/discovery.md +43 -19
  101. package/package/corpus/skills/cratis-chronicle-client-dotnet/references/hosting.md +29 -1
  102. package/package/corpus/skills/cratis-chronicle-client-elixir/SKILL.md +158 -162
  103. package/package/corpus/skills/cratis-chronicle-client-elixir/references/append-api.md +36 -15
  104. package/package/corpus/skills/cratis-chronicle-client-elixir/references/compliance.md +32 -0
  105. package/package/corpus/skills/cratis-chronicle-client-elixir/references/connections.md +56 -0
  106. package/package/corpus/skills/cratis-chronicle-client-elixir/references/event-sources.md +64 -0
  107. package/package/corpus/skills/cratis-chronicle-client-elixir/references/pitfalls.md +25 -0
  108. package/package/corpus/skills/cratis-chronicle-client-elixir/references/projections.md +48 -0
  109. package/package/corpus/skills/cratis-chronicle-client-elixir/references/upgrading.md +34 -0
  110. package/package/corpus/skills/cratis-chronicle-client-elixir/references/variants.md +13 -5
  111. package/package/corpus/skills/cratis-chronicle-client-elixir/verification.json +23 -0
  112. package/package/corpus/skills/cratis-chronicle-client-go/SKILL.md +162 -0
  113. package/package/corpus/skills/cratis-chronicle-client-go/references/projections.md +73 -0
  114. package/package/corpus/skills/cratis-chronicle-client-kotlin/SKILL.md +87 -88
  115. package/package/corpus/skills/cratis-chronicle-client-kotlin/references/connection-lifecycle.md +13 -0
  116. package/package/corpus/skills/cratis-chronicle-client-kotlin/references/discovery-and-registration.md +14 -4
  117. package/package/corpus/skills/cratis-chronicle-client-kotlin/references/event-sources.md +65 -0
  118. package/package/corpus/skills/cratis-chronicle-client-kotlin/references/options.md +29 -0
  119. package/package/corpus/skills/cratis-chronicle-client-kotlin/references/spring-boot.md +13 -0
  120. package/package/corpus/skills/cratis-chronicle-client-kotlin/references/variants.md +5 -4
  121. package/package/corpus/skills/cratis-chronicle-client-typescript/SKILL.md +165 -156
  122. package/package/corpus/skills/cratis-chronicle-client-typescript/references/read-models-and-projections.md +54 -11
  123. package/package/corpus/skills/cratis-chronicle-client-typescript/references/testing.md +126 -0
  124. package/package/corpus/skills/cratis-chronicle-client-typescript/references/variants.md +3 -5
  125. package/package/corpus/skills/cratis-chronicle-client-typescript/verification.json +19 -0
  126. package/package/corpus/skills/cratis-chronicle-compliance/SKILL.md +36 -13
  127. package/package/corpus/skills/cratis-chronicle-decision-reads/SKILL.md +110 -0
  128. package/package/corpus/skills/cratis-chronicle-decision-reads/references/admission-and-ownership.md +57 -0
  129. package/package/corpus/skills/cratis-chronicle-decision-reads/verification.json +12 -0
  130. package/package/corpus/skills/cratis-chronicle-event-constraints/SKILL.md +58 -19
  131. package/package/corpus/skills/cratis-chronicle-event-constraints/references/closing-streams.md +73 -0
  132. package/package/corpus/skills/cratis-chronicle-event-modeling/SKILL.md +32 -3
  133. package/package/corpus/skills/cratis-chronicle-event-specifications/SKILL.md +18 -5
  134. package/package/corpus/skills/cratis-chronicle-event-type-migration/SKILL.md +32 -2
  135. package/package/corpus/skills/cratis-chronicle-hosting/SKILL.md +134 -0
  136. package/package/corpus/skills/cratis-chronicle-hosting/references/operations.md +89 -0
  137. package/package/corpus/skills/cratis-chronicle-hosting/verification.json +14 -0
  138. package/package/corpus/skills/cratis-chronicle-mcp-inspection/SKILL.md +93 -66
  139. package/package/corpus/skills/cratis-chronicle-mcp-inspection/references/blocked-tools.md +21 -7
  140. package/package/corpus/skills/cratis-chronicle-mcp-inspection/references/deployment.md +77 -0
  141. package/package/corpus/skills/cratis-chronicle-mcp-inspection/references/observational-tools.md +46 -4
  142. package/package/corpus/skills/cratis-chronicle-multi-tenancy/SKILL.md +15 -1
  143. package/package/corpus/skills/cratis-chronicle-projection/SKILL.md +44 -10
  144. package/package/corpus/skills/cratis-chronicle-projection/references/fluent-builder.md +7 -1
  145. package/package/corpus/skills/cratis-chronicle-projection/references/model-bound-attributes.md +8 -0
  146. package/package/corpus/skills/cratis-chronicle-reactor/SKILL.md +85 -105
  147. package/package/corpus/skills/cratis-chronicle-reactor/references/slice-delivery-checklist.md +1 -1
  148. package/package/corpus/skills/cratis-chronicle-reactor/references/specifications.md +20 -1
  149. package/package/corpus/skills/cratis-chronicle-read-model/SKILL.md +2 -2
  150. package/package/corpus/skills/cratis-chronicle-read-model/references/queries.md +35 -16
  151. package/package/corpus/skills/cratis-chronicle-read-model-specifications/SKILL.md +15 -3
  152. package/package/corpus/skills/cratis-chronicle-reducer/SKILL.md +23 -4
  153. package/package/corpus/skills/cratis-chronicle-web-workbench/SKILL.md +40 -15
  154. package/package/corpus/skills/cratis-cli-terminal-workbench/SKILL.md +20 -6
  155. package/package/corpus/skills/cratis-code-review/SKILL.md +25 -3
  156. package/package/corpus/skills/cratis-components-accessibility/SKILL.md +20 -4
  157. package/package/corpus/skills/cratis-components-schema-editor/SKILL.md +40 -28
  158. package/package/corpus/skills/cratis-components-schema-editor/references/tree-layout.md +62 -0
  159. package/package/corpus/skills/cratis-components-schema-editor/verification.json +14 -0
  160. package/package/corpus/skills/cratis-components-stepper-command-dialog/SKILL.md +16 -8
  161. package/package/corpus/skills/cratis-components-styling/SKILL.md +57 -20
  162. package/package/corpus/skills/cratis-components-styling/verification.json +13 -0
  163. package/package/corpus/skills/cratis-components-toolbar/SKILL.md +37 -7
  164. package/package/corpus/skills/cratis-components-toolbar/verification.json +12 -0
  165. package/package/corpus/skills/cratis-engineering-csharp-conventions/SKILL.md +6 -0
  166. package/package/corpus/skills/cratis-engineering-csharp-conventions/references/exceptions-logging-and-di.md +5 -3
  167. package/package/corpus/skills/cratis-fundamentals-concept/SKILL.md +19 -6
  168. package/package/corpus/skills/cratis-fundamentals-concept/references/typescript-concepts.md +97 -0
  169. package/package/corpus/skills/cratis-fundamentals-concept/verification.json +4 -1
  170. package/package/corpus/skills/cratis-fundamentals-concept-go/SKILL.md +112 -0
  171. package/package/corpus/skills/cratis-fundamentals-type-discovery/SKILL.md +54 -17
  172. package/package/corpus/skills/cratis-fundamentals-type-discovery/verification.json +14 -0
  173. package/package/corpus/skills/cratis-lens-browser-extension/SKILL.md +55 -28
  174. package/package/corpus/skills/cratis-performance-review/SKILL.md +5 -2
  175. package/package/corpus/skills/cratis-release-notes/SKILL.md +3 -1
  176. package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +5 -4
  177. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +1 -1
  178. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +1 -1
  179. package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +5 -6
  180. package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +25 -7
  181. package/package/corpus/skills/cratis-screenplay-command-surface/references/enum-numbers.md +4 -2
  182. package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +4 -1
  183. package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +4 -3
  184. package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +1 -1
  185. package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +2 -2
  186. package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +3 -2
  187. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +34 -4
  188. package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +5 -3
  189. package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +1 -1
  190. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +4 -2
  191. package/package/corpus/skills/cratis-screenplay-model-authoring/references/property-links.md +42 -3
  192. package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +3 -1
  193. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +2 -2
  194. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +6 -6
  195. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/drift-and-ledger.md +1 -1
  196. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +6 -4
  197. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +1 -1
  198. package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +3 -1
  199. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +1 -1
  200. package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +1 -1
  201. package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +2 -2
  202. package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +1 -1
  203. package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +48 -0
  204. package/package/corpus/skills/cratis-screenplay-specifications/verification.json +3 -1
  205. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +7 -5
  206. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/chronicle-boundaries.md +2 -2
  207. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +2 -2
  208. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +5 -4
  209. package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +8 -6
  210. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +2 -2
  211. package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +4 -2
  212. package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +1 -1
  213. package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +16 -11
  214. package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +8 -5
  215. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +1329 -32
  216. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
  217. package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +2 -2
  218. package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +23 -7
  219. package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +1 -1
  220. package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +2 -0
  221. package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +27 -9
  222. package/package/corpus/skills/cratis-security-review/SKILL.md +9 -3
  223. package/package/corpus/skills/cratis-security-review/references/arc-boundaries.md +59 -0
  224. package/package/corpus/skills/cratis-specification-by-example/SKILL.md +7 -0
  225. package/package/corpus/skills/cratis-specifications-csharp/SKILL.md +43 -11
  226. package/package/corpus/skills/cratis-specifications-csharp/references/application-scenarios.md +16 -4
  227. package/package/corpus/skills/cratis-specifications-csharp/references/csharp-patterns.md +18 -5
  228. package/package/corpus/skills/cratis-specifications-csharp/references/integration-specs.md +21 -0
  229. package/package/corpus/skills/cratis-specifications-csharp/references/shared-lifecycle.md +34 -0
  230. package/package/corpus/skills/cratis-specifications-csharp/verification.json +13 -0
  231. package/package/corpus/skills/cratis-specifications-typescript/SKILL.md +14 -5
  232. package/package/corpus/skills/cratis-specifications-typescript/verification.json +12 -0
  233. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +11 -5
  234. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +7 -4
  235. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +10 -1
  236. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/scene-runtime.md +75 -0
  237. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +6 -1
  238. package/package/corpus/skills/cratis-studio-mcp-safety-guidance/SKILL.md +14 -1
  239. package/package/profile-catalog.json +68 -1
  240. package/package.json +1 -1
  241. package/src/index.ts +3 -1
@@ -13,40 +13,32 @@ you construct a client, ask it for an event store, and append or observe.
13
13
 
14
14
  ## Verified product sources
15
15
 
16
- This skill was written against `Chronicle.Kotlin` at tag `v4.0.0` (commit
17
- `63ff629`) and re-verified at **`v5.1.0`**: every class, function, option and
18
- Spring bean this skill names exists there. The `4→5` major is the Chronicle 17/18
19
- wire migration (gRPC request/response shapes and `ensureSuccess` result
20
- envelopes — internal to the client); `5.0.0` also adds a `ChronicleCommandRejected`
21
- exception for a rejected server-side command. The `file:line` citations below
22
- were taken at `v4.0.0` and may have shifted.
16
+ Verified against `Chronicle.Kotlin` at tag **`v6.13.0`** by source symbols and
17
+ signatures. Historical line citations below are locators, not current line numbers.
23
18
 
24
19
  | Artifact | Version | Verified from |
25
20
  | --- | --- | --- |
26
- | `io.cratis:chronicle` | `5.1.0` | `Chronicle.Kotlin` at tag `v5.1.0` |
27
- | `io.cratis:chronicle-spring-boot-starter` | `5.1.0` | same tag, `Integrations/SpringBoot` |
28
- | `io.cratis:chronicle-testing` | `5.1.0` | same tag, `Testing` |
29
- | `io.cratis:chronicle-contracts` | `18.2.0` | `Source/build.gradle.kts` (`chronicleContractsVersion`) |
21
+ | `io.cratis:chronicle` | `6.13.0` | `Chronicle.Kotlin` at tag `v6.13.0` |
22
+ | `io.cratis:chronicle-spring-boot-starter` | `6.13.0` | same tag, `Integrations/SpringBoot` |
23
+ | `io.cratis:chronicle-testing` | `6.13.0` | same tag, `Testing` |
24
+ | `io.cratis:chronicle-contracts` | `19.30.0` | `Source/build.gradle.kts` (`chronicleContractsVersion`) |
30
25
 
31
- All three artifacts are published to Maven Central under `io.cratis`
32
- (`Source/build.gradle.kts:54`, `Testing/build.gradle.kts:32`,
33
- `Integrations/SpringBoot/build.gradle.kts:48`). The JVM toolchain is **17**
34
- (`Source/build.gradle.kts:43`).
26
+ All three artifacts are published to Maven Central under `io.cratis` (their
27
+ `build.gradle.kts` publishing blocks). The JVM toolchain is **17**.
35
28
 
36
29
  > **Do not copy a version number out of the repository's README or docs.** At
37
- > `v4.0.0` the README still says `2.1.1` (`README.md:186`) and the documentation
38
- > says `2.1.2` (`Documentation/get-started/index.md:24`). The version comes from
39
- > a Gradle property injected at release time — `Source/build.gradle.kts:8` reads
30
+ > `v6.13.0` the README and getting-started documentation still say `6.5.0`.
31
+ > The version comes from a Gradle property injected at release time —
32
+ > `Source/build.gradle.kts` reads
40
33
  > `providers.gradleProperty("version")` and defaults to `0.0.0-SNAPSHOT` — so
41
34
  > the checked-in source never carries the real number. Take it from Maven
42
35
  > Central.
43
36
 
44
- > **The client and the kernel version independently.** Client `5.1.0` is built
45
- > against `chronicle-contracts` `18.2.0` (the `4.x` line was built against
46
- > `16.44.1` and does not speak the 17/18 wire shapes); the Chronicle server is
47
- > on `18.x`. Confirm the client/server pair you intend to run is
48
- > supported before relying on it — do not infer compatibility from the fact that
49
- > both are "latest".
37
+ > **The client and the kernel version independently.** Client `6.13.0` requires
38
+ > kernel `19.30.0` or later. Historically, client `6.5.0` was verified on kernel
39
+ > `19.6.1`, while `19.4.8` rejects it. `CompatibilityPreflight` checks contracts
40
+ > at connect and throws `ChronicleServerIncompatible`; do not infer a supported
41
+ > pair just because both products are "latest".
50
42
 
51
43
  ## Common pitfalls
52
44
 
@@ -55,10 +47,11 @@ All three artifacts are published to Maven Central under `io.cratis`
55
47
  | Naming a reactor method after the event | The name is ignored; **the first parameter's type** is the subscription (`EventHandlerMethod.kt:61-74`) |
56
48
  | Two `@EventType` classes sharing a simple name | The id defaults to the simple name, so they collide on the wire (`EventTypesService.kt:67`) |
57
49
  | Shipping the default connection string to production | `skipTlsValidation` defaults to **true**; certificate validation is off (`ChronicleConnectionString.kt:28`) |
58
- | Copying a version from the README or docs | Both are stale at `v4.0.0`; the real version comes from the release, not the source |
50
+ | Copying a version from the README or docs | Both still say `6.5.0` at `v6.13.0`; use the release version |
51
+ | Supplying `apiKey` in the connection string | Client construction rejects it with `IllegalArgumentException`; use `user:password@` |
59
52
  | Expecting `getEventStore` to suspend | It does not — the client already connected in its constructor (`ChronicleClient.kt:12`) |
60
- | Expecting `awaitRegistration()` to mean "registered" | It completes in a `finally`, so it also returns after a failed pass (`ArtifactRegistrations.kt:47-57`) |
61
- | Expecting a registration failure to throw | Failures are printed to `System.err`, not raised (`EventStore.kt:244`) |
53
+ | Expecting `awaitRegistration()` to prove all artifacts registered | The initial gate completes in `finally` even after failure; connection rejection still throws `ChronicleConnectionFailed` |
54
+ | Treating automatic and explicit registration alike | The automatic pass logs failures; explicit `registerAll()` throws `ArtifactRegistrationFailed` for failed observers, and rejected event-type registration throws `ChronicleCommandRejected` |
62
55
  | Expecting read model reactors to be discovered | `IReadModelReactor` is absent from the scan and from `IEventStore`; construct `ReadModelReactors(...)` yourself |
63
56
  | Leaving the default classpath scan on in a large app | Use `withArtifactsFrom(...)` or `artifact-packages` to narrow it (`ChronicleOptions.kt:58`) |
64
57
  | Expecting WebFlux support from the starter | The web auto-configuration is `SERVLET`-only (`ChronicleWebAutoConfiguration.kt:29`) |
@@ -97,46 +90,19 @@ fun main() = runBlocking {
97
90
  }
98
91
  ```
99
92
 
100
- `IChronicleClient` is small and complete —
101
- `Source/src/main/kotlin/io/cratis/chronicle/IChronicleClient.kt`:
102
-
103
- | Member | Line | Note |
104
- | --- | --- | --- |
105
- | `fun getEventStore(name: String, namespace: String = EventStoreNamespaceName.default.value): EventStore` | `:17-20` | **not** suspending; returns the concrete `EventStore` |
106
- | `suspend fun getEventStores(): List<String>` | `:27` | asks the kernel |
107
- | `fun evictEventStores()` | `:36` | drops the local cache, keeps the client |
108
- | `fun dispose()` | `:39` | `IChronicleClient : AutoCloseable`, `close()` delegates to it (`:41`) |
109
-
110
- **The client connects in its constructor.** `ChronicleClient.kt:12` is
111
- `ChronicleConnection(options.connectionString).also { it.connect() }` — there is
112
- no separate `connect()` step to call, and constructing the client is the
113
- connecting act. Event stores are cached per `"$name/$namespace"`
114
- (`ChronicleClient.kt:21`), so repeated `getEventStore` calls return the same
115
- instance.
116
-
117
- The default namespace is the literal `"Default"` —
118
- `EventStoreNamespaceName.kt:13`.
93
+ **The client connects in its constructor.** `getEventStore(name, namespace)`
94
+ is not suspending and returns the cached concrete `EventStore` for that pair.
95
+ The default namespace is `"Default"`. `getEventStores()` suspends;
96
+ `evictEventStores()` drops the cache without closing the client.
97
+ `IChronicleClient` is `AutoCloseable`; `close()` delegates to `dispose()`.
119
98
 
120
99
  ### Options
121
100
 
122
- `ChronicleOptions` is a `data class` with `@JvmOverloads`
123
- (`ChronicleOptions.kt:35`):
124
-
125
- | Property | Default | Line |
126
- | --- | --- | --- |
127
- | `connectionString` | required | `:36` |
128
- | `programIdentifier` | `"Unknown"` | `:37` |
129
- | `defaultSinkTypeId` | `CHRONICLE_SINK_TYPE` env var, else `WellKnownSinkTypes.MONGODB` | `:38` |
130
- | `autoDiscoverAndRegister` | `true` | `:39` |
131
- | `artifacts` | `ClientArtifacts.default` (scans the classpath) | `:40` |
132
- | `artifactActivator` | `ArtifactActivator` | `:41` |
133
- | `openTelemetry` | `null` (uses the globally registered one) | `:42` |
134
-
135
- Two `@JvmStatic` factories: `ChronicleOptions.fromConnectionString(String)`
136
- (`:69`) and `ChronicleOptions.development()` (`:78`). Two instance helpers:
137
- `withoutAutoRegistration()` (`:48`) and `withArtifactsFrom(vararg packages)`
138
- (`:58`) — the second is worth using in any large application, because the
139
- default scan walks the whole classpath.
101
+ Use `ChronicleOptions.development()` locally or
102
+ `ChronicleOptions.fromConnectionString(String)` for a configured connection.
103
+ Narrow discovery with `withArtifactsFrom(vararg packages)` in a large app.
104
+ Read [references/options.md](references/options.md) when setting naming policy,
105
+ registration, artifact activation, sink type or OpenTelemetry options.
140
106
 
141
107
  ### The connection string
142
108
 
@@ -149,19 +115,19 @@ chronicle+srv://<host>[:<port>][?<options>]
149
115
  ```
150
116
 
151
117
  Default port is `35000` (`:39`). Recognized query keys, lowercased at parse time
152
- (`:111-115`): `disabletls`, `skiptlsvalidation`, `apikey`, `loadbalancer`,
153
- `srvnameserver`. `ChronicleConnectionString.parse(String)` is on the companion
118
+ (`ChronicleConnectionString` parser): `disabletls`, `skiptlsvalidation`,
119
+ `loadbalancer`, `srvnameserver`. `apiKey` is parsed but rejected at client
120
+ creation with `IllegalArgumentException`: the kernel has no API-key authentication.
121
+ Use `user:password@`. Omitting credentials selects `chronicle-dev-client` /
122
+ `chronicle-dev-secret`; these are development credentials, not a production setup. `ChronicleConnectionString.parse(String)` is on the companion
154
123
  (`:63`), and `ChronicleConnectionString.DEVELOPMENT` (`:51`) points at
155
124
  `localhost:35000` with the `chronicle-dev-client` / `chronicle-dev-secret`
156
125
  credentials (`:42-43`).
157
126
 
158
- > **TLS is on, certificate validation is off, by default.** `disableTls = false`
159
- > but `skipTlsValidation = true` — `ChronicleConnectionString.kt:27-28`, and the
160
- > credential selection at `:180-181` installs an `InsecureTrustManager` in that
161
- > case. That default exists because a development kernel serves a self-signed
162
- > certificate. **A production connection string must carry
163
- > `?skipTlsValidation=false`**, which is the only way to get chain validation
164
- > against the platform trust store (`:174-176`).
127
+ > **TLS is on, certificate validation is off by default** (`disableTls = false`,
128
+ > `skipTlsValidation = true`), for a self-signed development kernel.
129
+ > **Production must set `?skipTlsValidation=false`** for platform trust-store
130
+ > chain validation (`ChronicleConnectionString.createCredentials`).
165
131
 
166
132
  ### Spring Boot
167
133
 
@@ -196,13 +162,19 @@ annotation class EventType(
196
162
  Two event classes with the same simple name in different packages therefore
197
163
  collide on the wire. Give one an explicit `id`.
198
164
 
199
- The house shape is a Kotlin `data class` with defaulted properties
200
- (`Samples/Kotlin/SpringBoot/.../Events.kt:9-14`) or a Java `record`
201
- (`Samples/Java/SpringBoot/.../EmployeeHired.java:9-10`). Property-level
165
+ The house shape is a Kotlin `data class` with defaulted properties or a Java
166
+ `record` (the Spring Boot samples). Property-level
202
167
  annotations that travel with the event: `@io.cratis.chronicle.keys.Key`,
203
168
  `@io.cratis.chronicle.compliance.Pii`, `@io.cratis.chronicle.Subject`,
204
169
  `@io.cratis.chronicle.schemas.JsonSchemaType`.
205
170
 
171
+ `@Pii` on a `ConceptAs` type is declared once and cascades to its uses.
172
+ For operational secrets (API keys, partner credentials), use
173
+ `@io.cratis.chronicle.confidentiality.Encrypted(scope = EncryptionScope.Subject)`;
174
+ `EncryptionScope` also offers `Namespace` and `Global`. Encryption at rest is
175
+ not right-to-erasure: use `@Pii` for personal data. A value cannot combine
176
+ `@Pii` and `@Encrypted`, and neither is supported on an `EventSourceId` concept.
177
+
206
178
  Evolving a schema is `IEventTypeMigration<TTarget, TSource>` with `upcast` and
207
179
  `downcast` — `events/migrations/IEventTypeMigration.kt:18-37`. Migrations
208
180
  register in the same call as event types
@@ -244,9 +216,27 @@ if (!result.isSuccess) {
244
216
  batch must go to different streams — the single-source overloads cannot
245
217
  express that.
246
218
 
247
- `AppendOptions` (`eventSequences/AppendOptions.kt:41-51`, `@JvmOverloads`)
248
- carries `correlationId`, `concurrencyScope`, `eventSourceType`,
249
- `eventStreamType`, `eventStreamId`, `subject`, `tags`, `occurred`, `causation`.
219
+ `AppendOptions` (`eventSequences/AppendOptions.kt`) carries `correlationId`,
220
+ `concurrencyScope`, `eventSourceType`, `eventStreamType`, `eventStreamId`,
221
+ `subject`, `tags`, `occurred`, `causation`, `eventSource`, `eventStream`.
222
+
223
+ Since `6.0.0`, omitted/empty routing resolves **in the kernel** to
224
+ `Default` / `All` / `Default` (source type / stream type / stream id).
225
+ The client no longer substitutes the event source id as stream id. Preserve a
226
+ legacy route by passing all three explicitly. Reads narrow only by supplied
227
+ filters; single-source `appendMany` applies the routing options to every event.
228
+ See the product's `Documentation/guides/migrate-append-routing.md` at `v6.13.0`.
229
+
230
+ For an idempotent create, narrow the concurrency scope and use
231
+ `ConcurrencyScopeBuilder.withExpectsNoMatchingEvent()`. The equivalent is
232
+ `ConcurrencyScope(EventSequenceNumber.unavailable, eventSourceId = true,
233
+ expectsNoMatchingEvent = true)`; a concrete sequence number and this flag are
234
+ mutually exclusive (package `eventSequences.concurrency`).
235
+
236
+ Event-source definitions and their named streams are optional, discovered
237
+ artifacts requiring kernel `19.30.0` or later.
238
+ Read [references/event-sources.md](references/event-sources.md) when declaring
239
+ `@EventSource`/`@EventStream` or appending through a definition.
250
240
 
251
241
  A unit of work spans several appends:
252
242
 
@@ -283,19 +273,18 @@ class <ReactorName>(private val <dependency>: <Dependency>) {
283
273
  }
284
274
  ```
285
275
 
286
- That shape is the shipped sample verbatim
287
- (`Samples/Kotlin/SpringBoot/.../WelcomePackageReactor.kt:16-22`).
288
-
289
276
  **A returned event is appended as a side effect.** `null`, `Unit`, and any value
290
277
  whose type is not annotated `@EventType` are ignored; a single event, an
291
278
  `EventForEventSourceId`, or a `List` mixing both is appended, defaulting to the
292
- triggering event source — `observation/ReactorSideEffects.kt:26-39`, `:48-59`.
279
+ triggering event source. A returned `List` is one atomic batch: one rejected
280
+ event rejects all — `observation/ReactorSideEffects.kt:26-39`, `:48-59`.
293
281
  This is how a reactor appends without ever touching the event log.
294
282
 
295
283
  `EventContext` is a data class with `sequenceNumber: Long`, `eventSourceId`,
296
284
  `eventType`, `occurred`, `correlationId`, `causedBy`, `eventSourceType`,
297
285
  `eventStreamType`, `eventStreamId`, `eventStore`, `namespace`, `causation`,
298
- `tags`, `hash`, `observationState` — `events/EventContext.kt:31-47`.
286
+ `tags`, `hash`, `observationState`, `subject`, `eventSource` —
287
+ `events/EventContext.kt`. The constructor changed in `6.0.0`; recompile on upgrade.
299
288
 
300
289
  ### The annotations
301
290
 
@@ -335,10 +324,18 @@ A model-bound projection puts the projection on the read model with `@FromEvent`
335
324
  `DecrementFromAll`, `Nested`, `NoAutoMap`, `NoAutoMapProperties`,
336
325
  `NotRewindable`. The declarative
337
326
  alternative is a class implementing `IProjectionFor<TReadModel>`.
327
+ Use fluent `set(...).toValue(...)` for a constant, or `toProperty(...)` for an
328
+ event property. `set(...).to { }` is deprecated: it never evaluated the lambda.
329
+ `noAutoMap()` is honored; composite key parts can use
330
+ `toEventContextProperty(targetPropertyName, contextProperty)`.
331
+
332
+ `@io.cratis.chronicle.readModels.Passive` and `@Reducer(isActive = false)`
333
+ compute a passive model from its events on read, so a read immediately after an
334
+ append includes that event rather than waiting for a materialized observer.
338
335
 
339
336
  ### Variants — mutually exclusive read models for one entity's lifecycle
340
337
 
341
- Variants let several read models share one identity and be mutually exclusive; each variant must declare an `@EntersOn`/`entersOn(...)` event or registration throws `VariantMustDeclareEntersOnEvent`. Requires `io.cratis:chronicle` `6.3.0` or later.
338
+ Variants let several read models share one identity and be mutually exclusive; each variant must declare an `@EntersOn`/`entersOn(...)` event or registration throws `VariantMustDeclareEntersOnEvent`. Annotations require `6.3.0`; use `6.5.0` or later for end-to-end key support and replay once when upgrading from an earlier version.
342
339
 
343
340
  Read [references/variants.md](references/variants.md) when an entity changes shape over its lifecycle and you need `@VariantOf`, `@EntersOn`, `@GlobalFor` or the declarative `variantOf`/`entersOn` builder.
344
341
 
@@ -368,7 +365,8 @@ Read [references/connection-lifecycle.md](references/connection-lifecycle.md) wh
368
365
  folds a reducer through the same handler-shape rules as production
369
366
  (`ReadModelScenario.kt:139-150`). Its scope is small — appends and reducer folds
370
367
  only; there is no in-process reactor, projection, or constraint scenario
371
- (`Testing/api/Testing.api` is 57 lines).
368
+ (`Testing/api/Testing.api`). Since `6.5.0`, `EventScenario` assertions and
369
+ `eventsOf` count only events appended after the last `given`.
372
370
 
373
371
  ## Verify
374
372
 
@@ -380,8 +378,9 @@ only; there is no in-process reactor, projection, or constraint scenario
380
378
  - Every `@EventType` class has a unique simple name, or an explicit `id`.
381
379
  - Every reactor and reducer handler's **first parameter** is an `@EventType`
382
380
  class.
383
- - `awaitRegistration()` is followed by a check that registration actually
384
- succeeded, not treated as proof on its own.
381
+ - Handle `ChronicleConnectionFailed` from `awaitRegistration()`/appends and
382
+ Spring startup; inspect automatic registration diagnostics, or handle explicit
383
+ `registerAll()` failures. The initial gate alone is not proof of full registration.
385
384
  - Every variant group has at least one `@EntersOn`/`entersOn(...)` per variant,
386
385
  and every `@GlobalFor` member exists on every variant it targets.
387
386
  - The build is clean and the specifications pass against the verified artifact
@@ -1,5 +1,18 @@
1
1
  ## Connection lifecycle
2
2
 
3
+ Verified at `Chronicle.Kotlin v6.13.0`: `CompatibilityPreflight`,
4
+ `ConnectionManager`, `ChronicleConnection` and `EventStore.awaitRegistration`.
5
+
6
+ - Connect checks kernel contract compatibility with a 10-second deadline;
7
+ incompatibility raises `ChronicleServerIncompatible`.
8
+ - Credentials are not validated when constructing the client. A rejected
9
+ connection is surfaced by `awaitRegistration()` and the first append as
10
+ `ChronicleConnectionFailed`. The client keeps retrying and can recover.
11
+ - Since `6.11.0`, GUIDs use .NET byte order on the wire. New correlation ids
12
+ round-trip; older events return the first three UUID groups byte-reversed
13
+ relative to what the application originally supplied. Earlier capture ids
14
+ remain stored as-is; supply your original id and the client resolves both.
15
+
3
16
  - **Keepalive is two-way.** The kernel pushes a keep-alive down the `Connect`
4
17
  stream and the client answers with a separate unary `connectionKeepAlive` RPC
5
18
  (`connection/ConnectionManager.kt:30`). A watchdog checks every
@@ -1,5 +1,8 @@
1
1
  ## Discovery and registration
2
2
 
3
+ Verified at `Chronicle.Kotlin v6.13.0`: `ClientArtifacts`,
4
+ `ArtifactRegistrations.registerAll` and `EventStore`.
5
+
3
6
  `ClientArtifacts` scans the classpath with ClassGraph
4
7
  (`artifacts/ClientArtifacts.kt:66-98`), and `ClientArtifacts.default` is a
5
8
  process-wide lazy singleton (`:156`). What it looks for (`:66-98`):
@@ -7,6 +10,7 @@ process-wide lazy singleton (`:156`). What it looks for (`:66-98`):
7
10
  | Kind | Rule |
8
11
  | --- | --- |
9
12
  | event types | `@EventType` |
13
+ | event-source definitions | `@EventSource` |
10
14
  | event type migrations | implements `IEventTypeMigration` |
11
15
  | read models | `@ReadModel` |
12
16
  | declarative projections | implements `IProjectionFor` |
@@ -27,10 +31,14 @@ process-wide lazy singleton (`:156`). What it looks for (`:66-98`):
27
31
  > projection.
28
32
 
29
33
  Registration order is fixed and matters
30
- (`artifacts/ArtifactRegistrations.kt:59-91`): event types and migrations →
31
- unowned read models → constraints → model-bound constraints → projections →
34
+ (`ArtifactRegistrations.register`): event types and migrations →
35
+ event-source definitions → unowned read models → constraints → model-bound constraints → projections →
32
36
  webhooks → reactors → reducers → captures → seeders. Reactors and reducers are
33
- started only on the first pass (`:78-82`).
37
+ started once successfully; failed observers are retried on the next pass.
38
+ An automatic pass logs each failure to stderr and continues reconnecting.
39
+ Explicit `registerAll()` starts the remaining observers then throws
40
+ `ArtifactRegistrationFailed` listing failures. A kernel-rejected event-type
41
+ registration throws `ChronicleCommandRejected`.
34
42
 
35
43
  **Registration re-runs on every reconnect.** `EventStore.kt:226-241` launches a
36
44
  coroutine on `Dispatchers.IO` collecting the connection lifecycle and
@@ -39,6 +47,8 @@ the kernel keys observer subscriptions by it
39
47
  (`connection/ConnectionLifecycle.kt:24-32`), so observers must re-register — and
40
48
  they do.
41
49
 
42
- `store.awaitRegistration()` (`IEventStore.kt:92`) waits for the first pass.
50
+ `store.awaitRegistration()` waits for the first attempted pass; its gate
51
+ completes in `finally` even on failure. It throws `ChronicleConnectionFailed`
52
+ when the kernel rejects the connection, as do gated appends.
43
53
  `store.registerAll()` (`:83`) runs it by hand when
44
54
  `autoDiscoverAndRegister = false`.
@@ -0,0 +1,65 @@
1
+ <!-- Copyright (c) Cratis. All rights reserved. -->
2
+ <!-- Licensed under the MIT license. See LICENSE file in the project root for full license information. -->
3
+
4
+ # Event-source definitions and streams
5
+
6
+ Verified at `Chronicle.Kotlin v6.13.0`: `eventSources/EventSource.kt`,
7
+ `EventStream.kt`, `ConcurrencyDimension.kt`, `EventSources.kt` and
8
+ `eventSequences/EventSequenceEventSources.kt`. Requires kernel `19.30.0` or later.
9
+
10
+ Definitions are optional: an append without one keeps the ordinary routing
11
+ contract. A definition is a carrier class, never instantiated, discovered with
12
+ other client artifacts and registered after event types by `ArtifactRegistrations`.
13
+
14
+ ```kotlin
15
+ // Copyright (c) Cratis. All rights reserved.
16
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
17
+
18
+ import io.cratis.chronicle.eventSources.ConcurrencyDimension
19
+ import io.cratis.chronicle.eventSources.EventSource
20
+ import io.cratis.chronicle.eventSources.EventStream
21
+
22
+ @EventSource(
23
+ name = "Account",
24
+ description = "A customer account",
25
+ concurrency = [ConcurrencyDimension.EventSourceId],
26
+ streams = [EventStream("Transactions", "Money in and out")]
27
+ )
28
+ class AccountEventSource
29
+ ```
30
+
31
+ Excerpt inside a suspending function with an `IEventSequence` named `eventLog`,
32
+ a string `accountId` and a registered event `deposited`:
33
+
34
+ ```kotlin
35
+ // Copyright (c) Cratis. All rights reserved.
36
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
37
+
38
+ import io.cratis.chronicle.eventSequences.appendThroughEventSource
39
+
40
+ eventLog.appendThroughEventSource(
41
+ AccountEventSource::class, accountId, deposited, eventStream = "Transactions"
42
+ )
43
+ ```
44
+
45
+ `appendThroughEventSource` extends `IEventSequence` and takes the definition
46
+ `KClass`, event-source id, event, optional stream name, then `AppendOptions`.
47
+ `appendManyThroughEventSource` takes a `List<Any>` in the event position and
48
+ commits one atomic single-source batch. Alternatively set
49
+ `AppendOptions(eventSource = AccountEventSource::class, eventStream = "Transactions")`.
50
+ Java can use `AppendOptionsBuilder.throughEventSource` on its blocking append path.
51
+
52
+ The definition resolves source type, validates the named stream and records its
53
+ name in `EventContext.eventSource` (empty for events without a definition,
54
+ including older stored events). Its concurrency dimensions apply unless an
55
+ explicit scope is supplied. Explicit routing must agree with the definition;
56
+ this is not a way to silently override another route.
57
+
58
+ - `UnknownEventSource`: definition was not discovered.
59
+ - `EventStreamDoesNotBelongToEventSource`: stream name is not declared.
60
+ - `EventRoutingContradictsEventSource`: explicit route contradicts the definition.
61
+ - `ConflictingEventSourceConcurrency`: incompatible declared concurrency.
62
+
63
+ Verify discovery and registration against the target kernel, then specify both
64
+ successful routing and rejected contradictory options. Do not treat an initial
65
+ registration gate as proof every artifact registered.
@@ -0,0 +1,29 @@
1
+ <!-- Copyright (c) Cratis. All rights reserved. -->
2
+ <!-- Licensed under the MIT license. See LICENSE file in the project root for full license information. -->
3
+
4
+ # Chronicle options
5
+
6
+ Verified at `Chronicle.Kotlin v6.13.0`: `ChronicleOptions.kt` and
7
+ `readModels/DefaultReadModelNamingPolicy.kt`. `ChronicleOptions` is a data class
8
+ with `@JvmOverloads` constructors.
9
+
10
+ | Property | Default |
11
+ | --- | --- |
12
+ | `connectionString` | required |
13
+ | `programIdentifier` | `"Unknown"` |
14
+ | `defaultSinkTypeId` | `CHRONICLE_SINK_TYPE` env var, else `WellKnownSinkTypes.MONGODB` |
15
+ | `autoDiscoverAndRegister` | `true` |
16
+ | `artifacts` | `ClientArtifacts.default` (scans the classpath) |
17
+ | `artifactActivator` | `ArtifactActivator` |
18
+ | `openTelemetry` | `null` (uses globally registered API) |
19
+ | `readModelNamingPolicy` | `DefaultReadModelNamingPolicy`: `@ReadModel(id)` or simple name |
20
+
21
+ Set `readModelNamingPolicy` with `withReadModelNamingPolicy(policy)`, **not a
22
+ constructor argument**. It names the storage collection/table, not the
23
+ read-model identifier. `copy()` drops it: set it again afterward.
24
+ `withoutAutoRegistration()` and `withArtifactsFrom(...)` preserve it.
25
+
26
+ Two `@JvmStatic` factories: `ChronicleOptions.fromConnectionString(String)`
27
+ and `ChronicleOptions.development()`. Use `withoutAutoRegistration()` for
28
+ explicit registration or `withArtifactsFrom(vararg packages)` to avoid scanning
29
+ the entire classpath in a large application.
@@ -1,5 +1,8 @@
1
1
  ## Spring Boot
2
2
 
3
+ Verified at `Chronicle.Kotlin v6.13.0`: `ChronicleProperties`,
4
+ `ChronicleAutoConfiguration`, `ChronicleStartup` and `ChronicleWebAutoConfiguration`.
5
+
3
6
  The starter registers exactly two auto-configurations —
4
7
  `Integrations/SpringBoot/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports`:
5
8
 
@@ -31,6 +34,16 @@ Everything else has a default (`ChronicleProperties.kt:44-55`):
31
34
  | `namespace-resolution.strategy` | `FIXED` | `:65` |
32
35
  | `namespace-resolution.http-header` | `"x-cratis-tenant-id"` | `:66` |
33
36
  | `namespace-resolution.claim` | `"tenant_id"` | `:67` |
37
+ | `unit-of-work.enabled` | `true` | `ChronicleProperties.UnitOfWork` |
38
+ | `causation.enabled` | `true` | `ChronicleProperties.Causation` |
39
+ | `identity.enabled` | `true` | `ChronicleProperties.Identity` |
40
+
41
+ The starter selects a unique `ReadModelNamingPolicy` bean. With none or an
42
+ ambiguous set, it retains identifier-based naming. A rejected connection at
43
+ startup propagates `ChronicleConnectionFailed` and fails the application;
44
+ an unreachable kernel only logs after `registration-timeout` and keeps retrying.
45
+ Chronicle uses kotlinx-coroutines `1.10.2`; remove an older
46
+ `kotlin-coroutines.version` override to `1.11.0`.
34
47
 
35
48
  `NamespaceResolution.Strategy` is `FIXED`, `HTTP_HEADER`, `SUBDOMAIN`,
36
49
  `AUTHENTICATION` (`ChronicleProperties.kt:70-82`).
@@ -1,9 +1,10 @@
1
1
  ## Variants — mutually exclusive read models for one entity's lifecycle
2
2
 
3
- > Requires `io.cratis:chronicle` `6.3.0` or later — newer than this skill's
4
- > `5.1.0` baseline (`Source/src/main/kotlin/io/cratis/chronicle/projections/VariantOf.kt`
5
- > and siblings). Reverify before claiming support; take the version from Maven
6
- > Central, not the checked-in source.
3
+ > Verified at `Chronicle.Kotlin v6.13.0` (`projections/VariantOf.kt`,
4
+ > `EntersOn.kt`, `GlobalFor.kt`, `ProjectionsService.kt`). Annotations shipped in
5
+ > `6.3.0`; end-to-end support requires `6.5.0` or later. Earlier definitions
6
+ > stored `$eventSourceId` keys empty: replay affected projections once on upgrade.
7
+ > Take the version from Maven Central, not the checked-in source.
7
8
 
8
9
  Some entities do not have one shape for their whole lifetime — a work item is a
9
10
  backlog entry until a pull request exists for it, then it is a pull request