@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
@@ -0,0 +1,73 @@
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
+ # Closing scope and recovery
5
+
6
+ Verified at **Cratis/Chronicle v19.50.0**:
7
+ `Source/Clients/DotNET/EventSequences/{IEventSequence,ClosedStreamScope,CompleteStreamError}.cs`,
8
+ `Events/Constraints/ClosesStreamAttribute.cs`,
9
+ `Documentation/closing-streams/` and `Documentation/scenarios/close-the-books.mdx`.
10
+
11
+ ## Choose the scope before closing
12
+
13
+ `ClosedStreamScope` has optional `EventSourceId`, `EventSourceType`,
14
+ `EventStreamType`, `EventStreamId`. Unset dimensions are wildcards. All set
15
+ values must match for an append to be refused.
16
+
17
+ - Source id alone closes **all** its streams.
18
+ - Stream type/id alone closes that pair for **all** sources.
19
+ - Source id plus type/id closes just that source's stream.
20
+ - Source type alone closes every source of that type.
21
+
22
+ `ForEventSource(id)` and `ForStream(type, id)` are convenience factories.
23
+ `All` / `Default` are real stream values, not unset dimensions. Closing the
24
+ catch-all default without a specific source or other specific dimension returns
25
+ `DefaultStreamCannotBeCompleted`. Empty scope returns `EmptyScope`.
26
+
27
+ Pass `expectedTailSequenceNumber` when a manual close must refuse if another
28
+ event landed after the last fact you read. Mismatch returns `ExpectedTailMismatch`.
29
+ Manual coverage returns `AlreadyCompleted`, before the expected-tail check:
30
+ retrying does not duplicate the closure. Coverage by an event-owned closure
31
+ alone still writes a manual closure; a later reopening event cannot undo it.
32
+ Use a kernel that supports scoped closing; an older server must not be allowed
33
+ to ignore dimensions and close a wider scope.
34
+
35
+ ## Close the books with a fact
36
+
37
+ For a completed accounting period, carry the period identifier in the closing
38
+ fact and bind it with `ClosesStreamAttribute.EventStreamIdFrom`. Explicitly
39
+ choose `Dimensions`: decide whether the closure is one account's period or all
40
+ accounts' period. Route normal appends to that same period stream. The closing
41
+ event is accepted; later matching appends get `StreamClosed`. Continue new work
42
+ in the next period, rather than blindly retrying into the closed one.
43
+
44
+ `ReopenedBy` names domain events that remove **that constraint's exact closure**.
45
+ They never remove manual closures. Closing/reopening run in the append's grain
46
+ turn, not crash-atomically with durable append. Constraint reindex repairs
47
+ missing event-owned closures and never changes manual ones. Registration or
48
+ removal of a declaration does not automatically reindex historical facts.
49
+ Redacted property-sourced closing/reopening facts can leave the owning index
50
+ untouched because their scope is unrecoverable; inspect the warning rather than
51
+ assuming a complete rebuild. Read the appended generation when evolving a
52
+ property-sourced scope.
53
+
54
+ ## Inspect and repair
55
+
56
+ `IsStreamCompleted(scope)` checks coverage; `GetClosedStreams(within)` lists
57
+ matching persisted scopes. Workbench's namespace **Closed streams** view shows
58
+ source/type/stream, origin, closing owner, sequence number and time; it is
59
+ read-only, not a reopen button.
60
+
61
+ Kernel `ReopenStreamScope` is an administrator repair path for a mistaken manual
62
+ close, not a normal business transition. Name exact scope, reason and target;
63
+ get authorization, re-read, then act. It appends `StreamScopeReopened` before
64
+ removing the manual closure; failed audit append leaves it closed. It refuses
65
+ an event-owned closure (`ClosedByEvent`); use the modeled reopening event there.
66
+
67
+ ## Specify both sides
68
+
69
+ Use `EventScenario` for completing a scope and asserting a later append's
70
+ `StreamClosed` constraint violation. Include an unrelated source/period still
71
+ open, expected-tail mismatch, repeated completion and, where declared, reopening.
72
+ Keep integration proof for client/kernel compatibility and recovery. Closing
73
+ preserves history: observers and projection replay still consume prior events.
@@ -37,8 +37,11 @@ and the request is wiring or a narrow fix.
37
37
 
38
38
  ## Verified product sources
39
39
 
40
- This skill was originally verified against Chronicle 18.3.0 and re-read against Chronicle 19.50.0
41
- (`Source/Clients/DotNET.CodeAnalysis/DiagnosticIds.cs`, `ProtectedValues/EncryptedAttribute.cs`).
40
+ Verified against **Cratis/Chronicle v19.50.1**:
41
+ `Source/Clients/DotNET.CodeAnalysis/DiagnosticIds.cs`,
42
+ `ProtectedValues/EncryptedAttribute.cs`, `EventSources/`, `Events/PublicAttribute.cs`,
43
+ `Sinks/PublishToAttribute.cs`, and `Events/Constraints/ClosesStreamAttribute.cs`
44
+ (paths under `Source/Clients/DotNET/` unless otherwise stated).
42
45
  Current version pins: `cratis-screenplay-toolchain` `references/versions.md`.
43
46
 
44
47
  | Package | Purpose |
@@ -90,6 +93,29 @@ Do not append an event for derived or aggregate state. Project it from the sourc
90
93
  events instead; an event that records a total is a fact that can disagree with
91
94
  its own inputs.
92
95
 
96
+ ## Public facts and streams that end
97
+
98
+ Declare source vocabulary with `IEventSource`, `[EventSource]` and `[EventStream]`;
99
+ use **cratis-chronicle-client-dotnet** for append routing and
100
+ **cratis-chronicle-reactor** for `[FromEventSource<T>]` filters. A stream that
101
+ ends needs an explicit lifetime and scope: does closing cover one source, a
102
+ period across sources, or every stream of a source type? Prefer a past-tense
103
+ closing fact with `[ClosesStream]`; use **cratis-chronicle-event-constraints** for
104
+ manual scope completion, reopening and its crash/reindex limits. Closing refuses
105
+ new appends; it does not erase history or stop projection replay. Specify a
106
+ late append refusal and an unrelated scope remaining open.
107
+
108
+ `[Public]` permits an event type to leave the event log; `[PublishTo("sequence")]`
109
+ selects publication for projection/reducer output. Private types cannot go to
110
+ outbox, and the event log is not a publication target. Translate inbox facts
111
+ into local facts at the boundary rather than treating external contracts as
112
+ local commands. Named tags are plaintext, indexed metadata: never personal data.
113
+
114
+ State-dependent decisions need **cratis-chronicle-decision-reads** when their
115
+ read facts must remain valid at append; an ordinary passive read alone does not
116
+ close the read/append race. Arc command integration belongs to
117
+ **cratis-arc-command-validation**.
118
+
93
119
  ## Information completeness — trace every field to an event
94
120
 
95
121
  This is the check that pays for itself, and it belongs at modeling time rather
@@ -109,7 +135,10 @@ Chronicle is allowed where the rule needs it (an injected read model read by
109
135
  explicit key, or a `[Passive]` projection for a command-side decision); see
110
136
  Cross-slice patterns in `rules/vertical-slices.md`. Make such a read deliberate
111
137
  and name it in the brief, with the consistency it needs: a rule that must hold
112
- under concurrency uses the DCB pattern rather than a stale materialized read.
138
+ under concurrency needs enrolled guarded reads, not plain injection or a stale
139
+ materialized snapshot. In Arc v22.75.0 use `IStreamReads`/`StreamDecision` for one
140
+ stream or `[ProtectedDecision]` + admitted `DecisionRead<T>` for projected state;
141
+ `Result<,>` alone supplies rejection, not a concurrency guard.
113
142
 
114
143
  ## Compliance modeling
115
144
 
@@ -14,10 +14,11 @@ application's constraints discovered and active.
14
14
 
15
15
  | Package | Version | Purpose |
16
16
  | --- | --- | --- |
17
- | `Cratis.Chronicle.Testing` | `18.3.0` | `EventScenario`, its `Given`/`When` builders, the `IAppendResult` `Should*` assertions |
18
- | `Cratis.Chronicle` | `18.3.0` | `IEventSequence.Append`/`AppendMany`, `IAppendResult`, `ConstraintViolation` |
17
+ | `Cratis.Chronicle.Testing` | `19.50.1` | `EventScenario`, its `Given`/`When` builders, the `IAppendResult` `Should*` assertions |
18
+ | `Cratis.Chronicle` | `19.50.1` | `IEventSequence.Append`/`AppendMany`, `IAppendResult`, `ConstraintViolation` |
19
19
 
20
- > Re-verified at the versions above by **symbol and signature**: every type, attribute and member this skill names exists at that tag, and the public surface it describes is unchanged since the previous verification (Chronicle 16.45.x / Arc 22.10.4 — the Chronicle 16→18 client diff is converters, options and doc comments; no type was removed or renamed). Behavior claims were verified at the earlier tag unless a section says otherwise.
20
+ Sources: `Source/Clients/Testing/EventSequences/`, `TestingEventStore.cs`,
21
+ and `Source/Clients/DotNET/EventSequences/` at **v19.50.0**.
21
22
 
22
23
  ```bash
23
24
  dotnet add package Cratis.Chronicle.Testing
@@ -70,6 +71,16 @@ in the loaded assemblies — which is what makes a constraint specification work
70
71
  without wiring. Pass an `ICanProvideConstraints` to the single-argument
71
72
  constructor when the specification needs a narrower set.
72
73
 
74
+ At v19.50.0 it implements `IDisposable`: dispose in `Destroy()`.
75
+ `new EventScenario(sequenceId, eventStore, @namespace)` selects identifiers;
76
+ constructors also accept per-run `Defaults`. One scenario shares production
77
+ in-memory storage across its sequences and uses the kernel append grain,
78
+ serialization, migrations and compliance. Older-generation appends migrate;
79
+ undiscovered schemas fail with `EventSchemaNotDiscovered`. Appends to one
80
+ sequence serialize, so racing claims of the same unique value cannot both win.
81
+ Seeding can specify source/stream routing through the `ForEventSource`,
82
+ `For<TEvent>` and `ForEvents` overloads.
83
+
73
84
  ## Step 2 — Seed prior state through `Given`
74
85
 
75
86
  ```csharp
@@ -195,8 +206,10 @@ assert the value can be claimed again.
195
206
  - **`ShouldHaveConstraintViolationFor` fails with an empty violation list on a
196
207
  batch append.** `When…Events` short-circuits, so the conflict may be on an
197
208
  event the append never reached.
198
- - **A concurrency specification is always green.** It is vacuous — the scenario
199
- disables the check. Delete it or move it out-of-process.
209
+ - **A concurrency specification is always green.** Without an explicit checked
210
+ scope, the default client strategy answers `ConcurrencyScope.None` and proves
211
+ nothing. The kernel validator is present; explicit-scope violations have not
212
+ been proven end to end here. Prove the application's strategy with integration.
200
213
  - **The specification passes alone and fails in the suite.** A hard-coded unique
201
214
  value collided with another specification's claim.
202
215
 
@@ -35,8 +35,8 @@ This skill is verified against these exact sources:
35
35
 
36
36
  | Package | Version | Purpose |
37
37
  | --- | --- | --- |
38
- | `Cratis.Chronicle` | `18.3.0` | `Cratis.Chronicle.Events` and `Cratis.Chronicle.Events.Migrations` |
39
- | `Cratis.Chronicle.CodeAnalysis` | `18.3.0` | `CHR0012`, `CHR0037`, `CHR0049`, `CHR0050` |
38
+ | `Cratis.Chronicle` | `19.50.1` | `Cratis.Chronicle.Events` and `Cratis.Chronicle.Events.Migrations` |
39
+ | `Cratis.Chronicle.CodeAnalysis` | `19.50.1` | `CHR0012`, `CHR0037`, `CHR0049`, `CHR0050` |
40
40
 
41
41
  Reverify product sources before claiming support for another version.
42
42
 
@@ -161,6 +161,26 @@ public override void Downcast(IEventMigrationBuilder<<EventName>V1, <EventName>>
161
161
  source => source.<FirstPart>, source => source.<SecondPart>));
162
162
  ```
163
163
 
164
+ ## Nested paths and compatible schema metadata
165
+
166
+ Property expressions traverse nested CLR members:
167
+ `DefaultValue(m => m.Price.Description, "x")` and
168
+ `RenamedFrom(m => m.Price.Amount, e => e.Amount)` address the nested target.
169
+ `JsonPropertyName` wins over the client's naming policy; raw string paths are
170
+ already JSON paths and are not renamed. An undeclared `DefaultValue` target in
171
+ a nonempty target schema is rejected with `InvalidMigrationPropertyForEventType`
172
+ (`Source/Kernel/Core/EventTypes/EventTypeRegistrar.cs`, `ValidatePropertyKeys`);
173
+ an empty auto-generated target schema is the exception.
174
+
175
+ Adding/removing an **optional** property at any depth still needs a migration
176
+ class to complete the new generation chain, but no property operations: the
177
+ target schema supplies absence/drops undeclared properties. That is a migration
178
+ fact, not a reason to put nullable facts on newly authored events. Schema `title`
179
+ is ignored, so renaming a CLR record with a pinned `[EventType("id")]` does not
180
+ raise `EventTypeSchemaChanged`. A property described only by `default` may gain
181
+ `type`/`format` without that error. Source at v19.50.0:
182
+ `Documentation/migrations/dotnet-client.mdx` and the kernel event-type schema comparison.
183
+
164
184
  ## Step 3 — When the values changed meaning, declare a value map
165
185
 
166
186
  The operations above move values between properties. When a *value itself* means
@@ -213,6 +233,16 @@ Migrations are discovered by convention — nothing is registered. They are
213
233
  activated through the service provider, so a migration may take constructor
214
234
  dependencies.
215
235
 
236
+ ## Backfill scope and rollout
237
+
238
+ At v19.50.0 (`Documentation/migrations/index.md:62-74`), registering a new
239
+ generation starts **add-only** backfill in the **default namespace's event log
240
+ only**. Other namespaces and sequences are not covered. Existing stored
241
+ representations remain unchanged; changing a migration alone does not launch
242
+ another backfill. Older backfills may already have overwritten originals:
243
+ upgrading cannot recover those. Register new generations **only after every
244
+ kernel silo is upgraded**; an old worker can still overwrite content mid-rollout.
245
+
216
246
  ## Choose the generation an observer receives
217
247
 
218
248
  `Compatibility` remains the default. With
@@ -0,0 +1,134 @@
1
+ ---
2
+ name: cratis-chronicle-hosting
3
+ description: Run the Chronicle kernel with production storage, certificates, TLS or a private h2c proxy, health probes, clustering and observer recovery configuration. Use when deploying the kernel, moving from development images to production, configuring trusted proxies, or diagnosing kernel startup and topology. Do not use for wiring a .NET application client, implementing Orleans grains, or mutating a live store.
4
+ license: MIT
5
+ ---
6
+
7
+ <!-- Copyright (c) Cratis. All rights reserved. -->
8
+ <!-- Licensed under the MIT license. See LICENSE file in the project root for full license information. -->
9
+
10
+ # Host the Chronicle kernel
11
+
12
+ A working development Compose file is not a production deployment. The kernel's
13
+ build, storage, certificates and network topology determine whether it starts
14
+ and whether several nodes actually form one cluster. Inspect configuration
15
+ without exposing secrets; a hosting request does not authorize deleting data,
16
+ rotating keys, clearing quarantine or deploying to an unnamed environment.
17
+
18
+ ## Verified product sources
19
+
20
+ Verified at **Cratis/Chronicle v19.50.1**:
21
+
22
+ | Source | Contract |
23
+ | --- | --- |
24
+ | `Documentation/hosting/production.md` | images, DEVELOPMENT, prerequisites, replica sets, ports, backup order, clustering |
25
+ | `Documentation/hosting/configuration/tls.md` | TLS/h2c, authentication limits, immediate proxy trust |
26
+ | `Documentation/hosting/configuration/health-endpoint.md` | dedicated probe port and exclusive routing |
27
+ | `Documentation/hosting/configuration/observers.md` | retries, quarantine, definition evolution |
28
+ | `Source/Kernel/Core/Configuration/{Events,Alerts}.cs` | causation retention and incident metrics |
29
+ | `Source/Kernel/Core/Setup/Authentication/AuthenticationService.cs:170-208` | persisted development application |
30
+
31
+ Reverify these sources before recommending another kernel version. This is the
32
+ operator/kernel surface, not an application-profile layout rule.
33
+
34
+ ## Choose the build and storage
35
+
36
+ - `cratis/chronicle:latest` is production; pin a tested release for deployment.
37
+ `latest-development` bundles MongoDB; `latest-development-slim` does not.
38
+ - **`DEVELOPMENT` is a compile-time symbol defined for Debug builds**, not
39
+ `ASPNETCORE_ENVIRONMENT` or `DOTNET_ENVIRONMENT`. Environment variables cannot
40
+ turn the Release image into a development kernel.
41
+ - Production storage defaults to MongoDB but its connection string is empty.
42
+ Set `Cratis__Chronicle__Storage__ConnectionDetails`, and `__Storage__Type` for
43
+ a different backend. Configuration mounts at `/app/chronicle.json`; environment
44
+ keys use the `Cratis__Chronicle__` prefix. `storage.databaseNamePrefix` changes
45
+ database naming; it is not a migration of existing data.
46
+ - MongoDB **must be a replica set**, including single-node development: appends
47
+ use transactions. The current Compose/Aspire default is MongoDB 8.2. Publish
48
+ development database ports on loopback only; a host application needing MongoDB
49
+ must be able to reach port 27017. Do not expose unauthenticated MongoDB.
50
+
51
+ ## Supply certificates before starting production
52
+
53
+ Default TLS needs a PFX certificate with a private key:
54
+ `Tls__CertificatePath` / `Tls__CertificatePassword`. Missing/invalid certificates
55
+ fail startup; there is no silent HTTP downgrade. Development generates an
56
+ in-memory self-signed TLS certificate.
57
+
58
+ `EncryptionCertificate__CertificatePath` / `__CertificatePassword` protect the
59
+ internal OAuth authority's keys. Production requires this unless `oAuthAuthority`
60
+ is disabled or an external authority replaces it. Value encryption is separate
61
+ and still requires a certificate on first use. Development falls back to
62
+ ephemeral OAuth keys. Supply passwords from the approved secret mechanism,
63
+ never commit them. Every cluster node needs the same certificate ring.
64
+
65
+ The .NET client uses known development credentials when ClientCredentials has
66
+ both username and password absent (`ChronicleClient.cs:334-345`,
67
+ `Connections/ServiceCollectionExtensions.cs:57-68` at **v19.50.0**). The development
68
+ kernel creates the application **directly in persistent storage**
69
+ (`AuthenticationService.cs:170-208` at **v19.50.0**). Changing to a production
70
+ image does not revoke it. Remove the application and any configuration declaration
71
+ that recreates it before reusing that storage. See **cratis-chronicle-client-dotnet**.
72
+
73
+ ## Pick a network topology
74
+
75
+ Default main port **35000** serves gRPC HTTP/2 plus Workbench, REST, OAuth and
76
+ health HTTP/1.1 over TLS using ALPN. Orleans silo **11111** and gateway **30000**
77
+ are internal cluster ports, not public browser endpoints.
78
+
79
+ Explicit `Tls.Enabled=false` is only for a **private HTTP/2-only h2c backend**
80
+ behind an HTTPS-terminating proxy. The kernel warns at startup. Forward **all**
81
+ traffic over h2c; HTTP/1.1 upstream fails. Restrict direct access. With auth enabled,
82
+ use an external HTTPS `authentication.authority`: the internal authority and
83
+ `/connect/token` are unavailable; .NET SDK ClientCredentials cannot use the
84
+ external authority. Independently obtained bearer tokens and Workbench cookie
85
+ login are supported. These claims are at **v19.50.0**,
86
+ `Documentation/hosting/configuration/tls.md`, "Configuration file"/"TLS behavior".
87
+
88
+ At **v19.50.0**, the same file's "Trusted reverse proxies" section specifies:
89
+
90
+ - `X-Forwarded-For/Proto` is trusted from loopback only by default. Add the
91
+ **immediate proxy** IP to `forwardedHeaders.knownProxies` or a restricted
92
+ infrastructure CIDR to `knownNetworks`; env arrays use
93
+ `Cratis__Chronicle__ForwardedHeaders__KnownProxies__0` / `__KnownNetworks__0`.
94
+ - `ASPNETCORE_FORWARDEDHEADERS_ENABLED=true` does **not** widen trust. Never
95
+ configure a wildcard CIDR or client networks as trusted proxy networks.
96
+ - The proxy must **replace**, not relay, client-supplied forwarded headers.
97
+ Forward public HTTPS for HTTPS-sensitive middleware. Do not trust a public
98
+ HTTP scheme while fronting a TLS listener: cookie mutations fail antiforgery.
99
+
100
+ ## Probe without opening another API entrance
101
+
102
+ Set `health.port` for a dedicated HTTP/1.1 probe listener. `health.tls=false`
103
+ removes TLS only there; `health.exclusive=true` restricts it to the configured
104
+ health path (`/health` by default). Exclusive is **false by default**, so an
105
+ ordinary plaintext probe port also exposes other HTTP/1.1 endpoints. Keep it
106
+ internal. `health.tls=true` needs the top-level TLS certificate even when main
107
+ TLS is disabled. The production chiseled container has no shell/curl: use an
108
+ orchestrator/external probe, not an in-container shell healthcheck.
109
+
110
+ ## Form one cluster, not several over shared data
111
+
112
+ Every node must explicitly set `clustering.type=MongoDB` and share the cluster
113
+ and service ids and MongoDB storage. Default `Localhost` forms isolated
114
+ single-node clusters: sharing a database does not join them. Only MongoDB
115
+ supports multi-node storage; PostgreSQL, SQL Server and SQLite are single-node.
116
+ `Clustering:ResponseTimeout` bounds Orleans transport waiting; increasing observer
117
+ subscriber timeout cannot exceed that transport deadline.
118
+
119
+ Read [recovery and upgrades](references/operations.md) when changing observer
120
+ retry/quarantine settings, definition evolution, retention, alerts, or restoring
121
+ and upgrading a cluster. See **cratis-chronicle-web-workbench** for browser
122
+ exposure and **cratis-chronicle-cli-operations** for authorized live operations.
123
+
124
+ ## Verify
125
+
126
+ - The build/image and intended environment agree; no default development
127
+ application remains in reused production storage.
128
+ - Storage is reachable and MongoDB is a replica set; multiple nodes share MongoDB
129
+ membership, cluster id, service id and certificate ring.
130
+ - Certificates load; clients validate production TLS (`skipTlsValidation=false`).
131
+ - A probe observes health without publishing a plaintext Workbench/API port.
132
+ - Proxy upstream protocol and trust are tested from the actual immediate peer.
133
+ - Registration, observer progress and known protected data are checked separately
134
+ from process startup. Report skipped runtime checks; a config review is not a deployment.
@@ -0,0 +1,89 @@
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
+ # Recovery, retention and upgrades
5
+
6
+ Verified at **Cratis/Chronicle v19.50.1**:
7
+ `Documentation/hosting/configuration/{observers,events,clustering}.md`,
8
+ `Documentation/hosting/production.md`,
9
+ `Source/Kernel/Core/Configuration/Alerts.cs`, and
10
+ `Source/Kernel/Core/Alerts/`.
11
+
12
+ ## Observer behavior
13
+
14
+ `observers.maxRetryAttempts` defaults to 10 per budget (0 is infinite).
15
+ `backoffDelay`, `exponentialBackoffDelayFactor` and `maximumBackoffDelay` bound
16
+ retries. Clearing a partition quarantine starts a new budget and preserves its
17
+ attempt history. Observer quarantine and partition quarantine are separate;
18
+ clearing one does not clear the other. Inspect the cause before authorizing clear
19
+ or retry. Subscriber timeout abandons waiting, not subscriber work: redelivery
20
+ can overlap work that still runs, so side effects must remain idempotent.
21
+
22
+ Quarantine persists through grain deactivation. Watchdog ticks and catch-up/replay
23
+ completion do not end it. An operator clear or a fresh subscription does;
24
+ a kernel restart only helps observers that actually receive a fresh subscription.
25
+ Event-store subscriptions remain quarantined until operator clear. Recovery can
26
+ quarantine again if the cause remains.
27
+
28
+ Projection replay and catch-up each use a **single globally ordered job step**;
29
+ a new catch-up failure stops that step rather than letting other sources proceed.
30
+ Full replay is inactive until completion, then routes to catch-up/live unless
31
+ quarantined. Partition quarantine stops that partition's automatic retries;
32
+ observer quarantine suppresses automatic recovery for the whole observer.
33
+ Sources at v19.50.1: `Documentation/concepts/observers.mdx`,
34
+ `Documentation/projections/registration-lifecycle.md`, and
35
+ `Source/Kernel/Core/Observation/Jobs/{CatchUpObserver,ReplayObserver}.cs`.
36
+
37
+ ### Next-event lookup failures
38
+
39
+ At **v19.50.1**, Routing keeps the saved position and defers observation when
40
+ `GetNextSequenceNumberGreaterOrEqualTo` returns a storage error. A watchdog tick
41
+ retries that deferred routing only while subscribed and not quarantined. Its
42
+ active-observer lookup also leaves the cursor unchanged on error. Only
43
+ `GetSequenceNumberError.NotFound` proves there is no relevant event and permits
44
+ fast-forward. Read failures are not "nothing to handle"; preserve and investigate
45
+ the warning. Sources: `Source/Kernel/Core/Observation/States/Routing.cs` and
46
+ `Observer.Watchdog.cs`. This fixes #4770, not the proposed Ordered Lanes design
47
+ or all historical delivery/completion limitations. Do not claim past omissions
48
+ were repaired automatically.
49
+
50
+ `observers.definitionEvolution` governs projection/reducer changes:
51
+
52
+ | Policy | Result |
53
+ | --- | --- |
54
+ | Automatic (default) | applies no-action, partial or full replay classification |
55
+ | PartialOnly | applies no-action/partial, recommends full replay |
56
+ | Manual | recommends both replay kinds; no-action creates no recommendation |
57
+
58
+ Changed mappings, key, join, children, filters or reducer fingerprints require
59
+ full replay when independence cannot be proved. Deploying a corrected counter
60
+ or join does not repair historical state without replay. Reactor/webhook replay
61
+ uses `replayOnDefinitionChange` instead; do not confuse the policies.
62
+
63
+ ## Causation values and incidents
64
+
65
+ `events.causationPropertyRetention` defaults to `Retain`. `Omit` keeps causation
66
+ type/time but no property values on **new** appends, forwarded events, revisions
67
+ and redactions. It does not rewrite earlier chains. Subject erasure does not
68
+ remove those values: they are not encrypted under the subject key. Assess
69
+ historical chains separately, with **cratis-chronicle-compliance**.
70
+
71
+ Kernel `Alerts.IncidentMetricsEnabled` defaults to true. Open incidents and
72
+ observer failure/quarantine counters support alerting without dumping event
73
+ payloads. Inspect the configured metrics endpoint and incident queries; counters
74
+ are operational evidence, not proof that a failed partition recovered. Do not
75
+ reintroduce high-cardinality partition labels into exported failure metrics.
76
+
77
+ ## Upgrade and restore
78
+
79
+ Upgrade every silo together before registering new event generations. Add-only
80
+ generation backfill covers only the default namespace's event log; older workers
81
+ can still overwrite content during rollout, and upgrading cannot recover content
82
+ previously overwritten. See **cratis-chronicle-event-type-migration**.
83
+
84
+ Restore the certificate ring first, then storage (including Data Protection keys),
85
+ then the compliance key store at the storage's point in time. The erasure fence
86
+ is inside the key store: an older key backup can resurrect erased data, or miss
87
+ new keys. Retain retired certificates as long as a backup needs them. Confirm a
88
+ known protected subject remains readable and an erased subject remains erased
89
+ before reopening traffic; see **cratis-chronicle-compliance**.
@@ -0,0 +1,14 @@
1
+ {
2
+ "skill": "cratis-chronicle-hosting",
3
+ "input": "Review a Chronicle production kernel topology without deploying it.",
4
+ "fixtures": [],
5
+ "assertions": [
6
+ { "kind": "skill-contains", "value": "DEVELOPMENT" },
7
+ { "kind": "skill-contains", "value": "does **not** widen trust" },
8
+ { "kind": "skill-contains", "value": "health.exclusive=true" },
9
+ { "kind": "skill-contains", "value": "clustering.type=MongoDB" },
10
+ { "kind": "skill-contains", "value": "directly in persistent storage" },
11
+ { "kind": "skill-contains", "file": "references/operations.md", "value": "single globally ordered job step" },
12
+ { "kind": "skill-contains", "file": "references/operations.md", "value": "GetSequenceNumberError.NotFound" }
13
+ ]
14
+ }