@cratis/pi 7.32.0 → 7.34.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 (176) hide show
  1. package/package/corpus/agents/screenplay-modeler.md +1 -1
  2. package/package/corpus/agents/screenplay-renderer.md +1 -1
  3. package/package/corpus/agents/screenplay-reviewer.md +1 -1
  4. package/package/corpus/agents/slice-implementer.md +1 -1
  5. package/package/corpus/rules/profiles.md +1 -0
  6. package/package/corpus/skills/cratis-application-slice-conformance/LICENSE +2 -2
  7. package/package/corpus/skills/cratis-application-slice-conformance/SKILL.md +5 -0
  8. package/package/corpus/skills/cratis-application-slice-conformance/references/checklists.md +12 -0
  9. package/package/corpus/skills/cratis-application-slice-conformance/references/provenance.md +3 -4
  10. package/package/corpus/skills/cratis-application-slice-specifications/LICENSE +2 -2
  11. package/package/corpus/skills/cratis-application-slice-specifications/references/provenance.md +2 -3
  12. package/package/corpus/skills/cratis-arc-react-page/LICENSE +2 -2
  13. package/package/corpus/skills/cratis-arc-react-page/references/provenance.md +2 -3
  14. package/package/corpus/skills/cratis-chronicle-event-modeling/SKILL.md +12 -6
  15. package/package/corpus/skills/cratis-chronicle-reactor/LICENSE +2 -2
  16. package/package/corpus/skills/cratis-chronicle-reactor/SKILL.md +5 -2
  17. package/package/corpus/skills/cratis-chronicle-reactor/references/provenance.md +3 -3
  18. package/package/corpus/skills/cratis-chronicle-reactor/references/slice-delivery-checklist.md +93 -0
  19. package/package/corpus/skills/cratis-chronicle-read-model-specifications/LICENSE +2 -2
  20. package/package/corpus/skills/cratis-chronicle-read-model-specifications/SKILL.md +1 -1
  21. package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/provenance.md +3 -3
  22. package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/view-lifecycle-checks.md +79 -0
  23. package/package/corpus/skills/cratis-event-model-diagram/LICENSE +7 -0
  24. package/package/corpus/skills/cratis-event-model-diagram/SKILL.md +26 -2
  25. package/package/corpus/skills/cratis-event-model-diagram/references/provenance.md +19 -0
  26. package/package/corpus/skills/cratis-screenplay-automations-and-translations/LICENSE +2 -2
  27. package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +16 -11
  28. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +1 -1
  29. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +7 -7
  30. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +1 -1
  31. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/provenance.md +5 -6
  32. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/public-events-and-direction.md +2 -3
  33. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +9 -5
  34. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +6 -6
  35. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translate-example.md +1 -1
  36. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +16 -15
  37. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/invocation-identity.md +2 -2
  38. package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +20 -19
  39. package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +3 -1
  40. package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +1 -1
  41. package/package/corpus/skills/cratis-screenplay-command-surface/references/enum-numbers.md +93 -0
  42. package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +5 -6
  43. package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +4 -2
  44. package/package/corpus/skills/cratis-screenplay-delivery-planning/LICENSE +9 -0
  45. package/package/corpus/skills/cratis-screenplay-delivery-planning/SKILL.md +118 -0
  46. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/parallel-delivery.md +45 -0
  47. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/provenance.md +29 -0
  48. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/slice-counting.md +43 -0
  49. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/velocity-and-capacity.md +48 -0
  50. package/package/corpus/skills/cratis-screenplay-delivery-planning/verification.json +16 -0
  51. package/package/corpus/skills/cratis-screenplay-discovery/LICENSE +2 -2
  52. package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +6 -5
  53. package/package/corpus/skills/cratis-screenplay-discovery/references/divergent-sweep.md +1 -0
  54. package/package/corpus/skills/cratis-screenplay-discovery/references/domain-analysis-template.md +92 -0
  55. package/package/corpus/skills/cratis-screenplay-discovery/references/personas-and-causes.md +2 -2
  56. package/package/corpus/skills/cratis-screenplay-discovery/references/provenance.md +4 -3
  57. package/package/corpus/skills/cratis-screenplay-discovery/verification.json +1 -1
  58. package/package/corpus/skills/cratis-screenplay-event-modeling/LICENSE +2 -2
  59. package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +30 -29
  60. package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +7 -5
  61. package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +13 -10
  62. package/package/corpus/skills/cratis-screenplay-event-modeling/references/provenance.md +2 -3
  63. package/package/corpus/skills/cratis-screenplay-legacy-extraction/LICENSE +2 -2
  64. package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +26 -13
  65. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/candidate-inventory.md +6 -1
  66. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +7 -0
  67. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/prologue-safety.md +22 -17
  68. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/provenance.md +2 -3
  69. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md +2 -2
  70. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/side-car-migration.md +1 -0
  71. package/package/corpus/skills/cratis-screenplay-legacy-extraction/verification.json +1 -1
  72. package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +25 -25
  73. package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +8 -2
  74. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +8 -3
  75. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +38 -8
  76. package/package/corpus/skills/cratis-screenplay-model-authoring/references/property-links.md +126 -0
  77. package/package/corpus/skills/cratis-screenplay-model-authoring/references/screen-authoring-workflow.md +3 -4
  78. package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +1 -1
  79. package/package/corpus/skills/cratis-screenplay-model-review/LICENSE +2 -2
  80. package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +8 -8
  81. package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +2 -2
  82. package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +4 -4
  83. package/package/corpus/skills/cratis-screenplay-model-review/references/model-inventory-report.md +75 -0
  84. package/package/corpus/skills/cratis-screenplay-model-review/references/provenance.md +3 -4
  85. package/package/corpus/skills/cratis-screenplay-model-review/references/public-keys-and-routes.md +1 -1
  86. package/package/corpus/skills/cratis-screenplay-model-review/references/worked-example.md +4 -3
  87. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/LICENSE +2 -2
  88. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +7 -5
  89. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/core-rules-digest.md +131 -0
  90. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/phases.md +1 -1
  91. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/provenance.md +25 -4
  92. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/reasoning-notes.md +2 -2
  93. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/verdicts-and-modes.md +1 -1
  94. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +5 -4
  95. package/package/corpus/skills/cratis-screenplay-projections/SKILL.md +9 -5
  96. package/package/corpus/skills/cratis-screenplay-projections/references/pdl-grammar.md +4 -2
  97. package/package/corpus/skills/cratis-screenplay-read-surface/LICENSE +7 -0
  98. package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +16 -8
  99. package/package/corpus/skills/cratis-screenplay-read-surface/references/provenance.md +21 -0
  100. package/package/corpus/skills/cratis-screenplay-read-surface/references/screen-patterns.md +130 -0
  101. package/package/corpus/skills/cratis-screenplay-read-surface/verification.json +1 -1
  102. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/LICENSE +2 -2
  103. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +60 -47
  104. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/delivery-protocol.md +17 -2
  105. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/drift-and-ledger.md +19 -2
  106. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +24 -6
  107. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/provenance.md +2 -3
  108. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +21 -16
  109. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/worked-example.md +34 -29
  110. package/package/corpus/skills/cratis-screenplay-scenario-coverage/LICENSE +2 -2
  111. package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +5 -4
  112. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +1 -1
  113. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +5 -4
  114. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-example.md +32 -3
  115. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/provenance.md +3 -4
  116. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-catalogue.md +7 -6
  117. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md +3 -3
  118. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-workshop.md +15 -7
  119. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +11 -10
  120. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/view-and-story-specs.md +6 -4
  121. package/package/corpus/skills/cratis-screenplay-slice-design/LICENSE +2 -2
  122. package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +4 -3
  123. package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +2 -2
  124. package/package/corpus/skills/cratis-screenplay-slice-design/references/derived-condition-events.md +68 -0
  125. package/package/corpus/skills/cratis-screenplay-slice-design/references/field-lineage.md +1 -1
  126. package/package/corpus/skills/cratis-screenplay-slice-design/references/provenance.md +5 -5
  127. package/package/corpus/skills/cratis-screenplay-slice-design/references/read-model-design.md +17 -0
  128. package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +6 -6
  129. package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +3 -3
  130. package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +7 -5
  131. package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +4 -3
  132. package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md +3 -2
  133. package/package/corpus/skills/cratis-screenplay-specifications/references/persona-callers-and-cases.md +3 -0
  134. package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +3 -2
  135. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/LICENSE +2 -2
  136. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +14 -11
  137. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +31 -3
  138. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/chronicle-boundaries.md +6 -6
  139. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +12 -11
  140. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/evolution.md +18 -1
  141. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/provenance.md +4 -4
  142. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +1 -1
  143. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +1 -1
  144. package/package/corpus/skills/cratis-screenplay-toolchain/LICENSE +2 -2
  145. package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +29 -18
  146. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +3 -3
  147. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +7 -4
  148. package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +21 -2
  149. package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +5 -3
  150. package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +32 -18
  151. package/package/corpus/skills/cratis-screenplay-toolchain/references/production-routes-and-filters.md +1 -1
  152. package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +3 -4
  153. package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +46 -16
  154. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract-exceptions.json +1 -1
  155. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +1092 -17
  156. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
  157. package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +1 -1
  158. package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +8 -8
  159. package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +18 -13
  160. package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +41 -20
  161. package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +7 -2
  162. package/package/corpus/skills/cratis-screenplay-ui-composition/LICENSE +2 -2
  163. package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +10 -10
  164. package/package/corpus/skills/cratis-screenplay-ui-composition/references/flow-review.md +1 -1
  165. package/package/corpus/skills/cratis-screenplay-ui-composition/references/provenance.md +2 -3
  166. package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +41 -16
  167. package/package/corpus/skills/cratis-screenplay-ui-composition/references/worked-flow.md +17 -9
  168. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +85 -77
  169. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +65 -16
  170. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/case-tables-and-whole-numbers.md +2 -2
  171. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/render-example.md +3 -1
  172. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +30 -15
  173. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +21 -1
  174. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +9 -4
  175. package/package/profile-catalog.json +1 -0
  176. package/package.json +1 -1
@@ -62,4 +62,4 @@ Write `.ai-work/screenplay/<model-slug>/STATE.md` (overwrite, untracked) only wh
62
62
 
63
63
  ## Lineage
64
64
 
65
- The per-run protocol and the corner-cutting self-check (both by pointer to the lifecycle skill) adapt agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their agreement.
65
+ The per-run protocol and the corner-cutting self-check (both by pointer to the lifecycle skill) adapt agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their explicit consent.
@@ -52,4 +52,4 @@ First line: `Outcome: done | partial (...) | blocked (Qn) | out-of-scope (why)`.
52
52
 
53
53
  ## Lineage
54
54
 
55
- The delivery discipline adapts the build prompts of agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their agreement.
55
+ The delivery discipline adapts the build prompts of agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their explicit consent.
@@ -52,4 +52,4 @@ First line: `Outcome: done | partial (...) | blocked (Qn) | out-of-scope (why)`.
52
52
 
53
53
  ## Lineage
54
54
 
55
- The business-question lens adapts the "what do you think" (wdyt) skill of agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their agreement.
55
+ The business-question lens adapts the "what do you think" (wdyt) skill of agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their explicit consent.
@@ -102,4 +102,4 @@ Proxies now exist. Build React components from the generated proxies (`react.md`
102
102
 
103
103
  ## Lineage
104
104
 
105
- The re-delivery, specification-oracle and working-discipline items adapt the build prompts of agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their agreement.
105
+ The re-delivery, specification-oracle and working-discipline items adapt the build prompts of agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their explicit consent.
@@ -205,6 +205,7 @@ and one phase skill, then the construct skill needed for syntax.
205
205
  | `cratis-screenplay-legacy-extraction` | Evidence-led extraction, expert verification and loss report |
206
206
  | `cratis-screenplay-toolchain` | Compiler and CLI versions, verdict commands, diagnostics and executable subsets |
207
207
  | `cratis-screenplay-render-and-gap-fill` | Admission, publication, target verification and contract-led hand-written delivery |
208
+ | `cratis-screenplay-delivery-planning` | Slice counts by type, dependency waves, issue tracking and estimates from the team's own history |
208
209
 
209
210
  #### Language
210
211
 
@@ -5,5 +5,5 @@ Third-party notices
5
5
 
6
6
  This skill adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
7
7
  (https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
8
- https://nebulit.de), used with the agreement of Martin Dilger and Nebulit GmbH. That repository
9
- carries no licence file; the adapted material remains credited to Martin Dilger and Nebulit GmbH.
8
+ https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
9
+ material remains credited to Martin Dilger and Nebulit GmbH.
@@ -115,6 +115,11 @@ one covers the slice, otherwise the agreed outline).
115
115
  Change the code, or return an edit request. Do not touch test files outside the slice unless
116
116
  told to.
117
117
 
118
+ Where the model is a `.play` and the code is Arc, Marten or Critter Stack, `cratis screenplay
119
+ conform <model-root> --project <path>` (CLI 3.42.0 or later; exit 0/1/2) adds structural drift
120
+ evidence: exact-address comparison of recovered declarations, never behavior or equivalence. It
121
+ runs MSBuild on the project (trusted clone only). It supplements, and never replaces, steps 2 to 4.
122
+
118
123
  ### 5. Delta delivery
119
124
  After a model or outline change, the work list is every element and specification that
120
125
  changed since the last delivery, including a delivery of only added specifications. Then run
@@ -8,6 +8,7 @@
8
8
  - Automation and Translation
9
9
  - Chronicle runtime guarantees
10
10
  - Evidence
11
+ - Final verification: does the code match the contract?
11
12
 
12
13
  Reconcile in both directions with each list. Moved here from the render workflow; it gives
13
14
  the renderer no right to browse managed output or implement rejected semantics.
@@ -105,3 +106,14 @@ none of these. Unsupported semantics remain gap-fill scope, never hidden customi
105
106
  route with real configuration. Report runner, configuration and per-specification outcomes
106
107
  apart from integration results; skipped and unexecuted cases stay visible.
107
108
  - Record deliberate divergences and their approval; never call them equivalent behaviour.
109
+
110
+ ## Final verification: does the code match the contract?
111
+ The last pass before you report a slice done, as a short tick-list. It repeats the checks above in
112
+ the form a closing review uses; every item must hold, and the one that does not is the finding.
113
+ - [ ] Every contracted command field has a field in the code's command, and the command has no other: none invented, none missing
114
+ - [ ] Every contracted event exists with its modeled name, and every payload field is present with the modeled type
115
+ - [ ] Every contracted read-model property exists in the code's read model (and its storage mapping where persisted), and no other does
116
+ - [ ] Every contracted specification maps to an executed specification or specification family
117
+ - [ ] No business rule, default, filter or constraint exists in code that the contract (its documentation or specifications) does not state
118
+ - [ ] No field name was assumed or guessed: a name that is not in the contract is not in the code
119
+ - [ ] Where the contract has a specification family for the lifecycle of one view or one command, each step maps to a specification (no storyline syntax at Screenplay 4.139.0)
@@ -5,15 +5,14 @@
5
5
  State Change, State View, Chronicle runtime guarantees, evidence. Now `references/checklists.md`;
6
6
  the render workflow links here and keeps no second copy. References renamed to the corpus skills.
7
7
 
8
- ## Adapted closely (Martin Dilger and Nebulit GmbH, with agreement)
8
+ ## Adapted closely (Martin Dilger and Nebulit GmbH)
9
9
 
10
10
  Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
11
- by Martin Dilger and Nebulit GmbH (https://nebulit.de). The repository carries no licence file; this material
12
- is adapted with the agreement of Martin Dilger and Nebulit GmbH.
11
+ by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
13
12
 
14
13
  | Source file | Used in | How |
15
14
  |---|---|---|
16
- | `.claude/skills/build-state-change/SKILL.md`: final verification checklist (commands, events, specifications, nothing invented) | `references/checklists.md` "State Change"; `SKILL.md` steps 2-3 and "Gate" | Adapted closely; slice.json becomes the `.play` slice or agreed outline, emmett types become Arc commands and Chronicle events |
15
+ | `.claude/skills/build-state-change/SKILL.md`: final verification checklist (commands, events, specifications, nothing invented) | `references/checklists.md` "State Change"; `SKILL.md` steps 2-3 and "Gate" | Adapted closely; slice.json becomes the `.play` slice or agreed outline, emmett types become Arc commands and Chronicle events; the six checks are kept as the closing "Final verification" tick-list in `references/checklists.md`. Not adopted: the Emmett decide/evolve structure, `routes.ts` and the state complexity guide |
17
16
  | `.claude/skills/build-state-view/SKILL.md`: final checklist (every field has a source, subscribed events equal modeled events, no extra columns, one test per specification) | `references/checklists.md` "State View" | Adapted closely; migration, `canHandle` and Knex items translated to read-model properties, projection sources and storage mapping; Knex connection items not adopted (Emmett specific) |
18
17
  | `.claude/skills/build-automation/SKILL.md`: checklist (every processor implemented, command fields map only from the trigger, no invented conditions, idempotency specified, no routes, processor registered in startup and event store bootstrap verified) | `references/checklists.md` "Automation and Translation" including "Real startup participation" | Adapted closely; processor/DLQ items translated to the Chronicle reactor and its failure behavior; startup registration translated to discovery, event store and event sequence checks; `start()`/`stop()`, processor-id and `schema.migrate()` not adopted (Emmett specific) |
19
18
  | `.build-kit/lib/backend-prompt.md`: one slice per iteration, planned can be only added specifications, the slice is always true, done criteria, escalating ambiguity, progress report, consolidated patterns, learnings filter | `references/build-prompts.md` sections 3-5; `SKILL.md` steps 4-6 and "Gate" | Restored from #493 and adapted closely; `index.json`, `progress.txt`, board status, `<promise>` sentinels, per-step progress appends, commit and merge steps, and the slice-only done gate not adopted (replaced by the result packet, the completion gate and separate git authorization) |
@@ -5,5 +5,5 @@ Third-party notices
5
5
 
6
6
  This skill adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
7
7
  (https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
8
- https://nebulit.de), used with the agreement of Martin Dilger and Nebulit GmbH. That repository
9
- carries no licence file; the adapted material remains credited to Martin Dilger and Nebulit GmbH.
8
+ https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
9
+ material remains credited to Martin Dilger and Nebulit GmbH.
@@ -2,11 +2,10 @@
2
2
 
3
3
  Lineage of the #493 additions to `cratis-application-slice-specifications`. No TrogonStack material was adapted. Nebulit material is credited below.
4
4
 
5
- ## Adapted closely (Martin Dilger and Nebulit GmbH, with agreement)
5
+ ## Adapted closely (Martin Dilger and Nebulit GmbH)
6
6
 
7
7
  Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
8
- by Martin Dilger and Nebulit GmbH (https://nebulit.de). The repository carries no licence file; this material
9
- is adapted with the agreement of Martin Dilger and Nebulit GmbH.
8
+ by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
10
9
 
11
10
  | Source file | Used in | How |
12
11
  |---|---|---|
@@ -5,5 +5,5 @@ Third-party notices
5
5
 
6
6
  This skill adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
7
7
  (https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
8
- https://nebulit.de), used with the agreement of Martin Dilger and Nebulit GmbH. That repository
9
- carries no licence file; the adapted material remains credited to Martin Dilger and Nebulit GmbH.
8
+ https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
9
+ material remains credited to Martin Dilger and Nebulit GmbH.
@@ -7,11 +7,10 @@ No TrogonStack text is adapted in this skill. Nebulit material is credited in th
7
7
  | Component APIs, props and hooks | Cratis Components 4.6.0 and Arc, see *Verified product sources* | MIT | original | SKILL.md, references/ |
8
8
  | Screenplay and Stage facts in the screen mapping | Cratis/Screenplay v4.66.0 and Cratis/Stage v4.24.0 documentation and source | MIT | original | references/from-screenplay.md |
9
9
 
10
- ## Adapted closely (Martin Dilger and Nebulit GmbH, with agreement)
10
+ ## Adapted closely (Martin Dilger and Nebulit GmbH)
11
11
 
12
12
  Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
13
- by Martin Dilger and Nebulit GmbH (https://nebulit.de). The repository carries no licence file; this material
14
- is adapted with the agreement of Martin Dilger and Nebulit GmbH.
13
+ by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
15
14
 
16
15
  | Source file | Used in | How |
17
16
  |---|---|---|
@@ -37,12 +37,14 @@ and the request is wiring or a narrow fix.
37
37
 
38
38
  ## Verified product sources
39
39
 
40
- This skill is verified against these exact sources:
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`).
42
+ Current version pins: `cratis-screenplay-toolchain` `references/versions.md`.
41
43
 
42
- | Package | Version | Purpose |
43
- | --- | --- | --- |
44
- | `Cratis.Chronicle` | `18.3.0` | event types, event-source identities, subjects, `[PII]` |
45
- | `Cratis.Chronicle.CodeAnalysis` | `18.3.0` | `CHR0012`, `CHR0026`, `CHR0034`, `CHR0035` |
44
+ | Package | Purpose |
45
+ | --- | --- |
46
+ | `Cratis.Chronicle` | event types, event-source identities, subjects, `[PII]`, `[Encrypted]` |
47
+ | `Cratis.Chronicle.CodeAnalysis` | `CHR0012`, `CHR0026`, `CHR0034`, `CHR0035`, `CHR0052` |
46
48
 
47
49
  Reverify product sources before claiming support for another version.
48
50
 
@@ -132,7 +134,11 @@ operates on the subject and the subject follows the stream.
132
134
  already both, and analyzer `CHR0026` says so.
133
135
  - Bearer tokens, magic links, and signed URLs are not durable facts. Model a
134
136
  keyed hash or an opaque reference, never the secret. Chronicle has no attribute
135
- that withholds a value from the log.
137
+ that withholds a value from the log. Where an operational secret must genuinely be
138
+ retained (an API key, a signing secret), mark it `[Encrypted]` (encrypted at rest,
139
+ recoverable, not a PII erasure subject; never on a `[PII]` value or an event-source id)
140
+ and keep it out of the causation chain with Arc's `[NotAudited]`; see `cratis-arc-command`
141
+ and `cratis-chronicle-compliance`.
136
142
 
137
143
  If a subject boundary cannot be made person-level without changing product
138
144
  behavior, **stop and surface that trade-off** before implementing.
@@ -5,5 +5,5 @@ Third-party notices
5
5
 
6
6
  This skill adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
7
7
  (https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
8
- https://nebulit.de), used with the agreement of Martin Dilger and Nebulit GmbH. That repository
9
- carries no licence file; the adapted material remains credited to Martin Dilger and Nebulit GmbH.
8
+ https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
9
+ material remains credited to Martin Dilger and Nebulit GmbH.
@@ -322,7 +322,9 @@ public class <ReactorName> : IReactor
322
322
 
323
323
  A reactor runs with **no principal**; `[ExecuteCommandsAsSystem]` (class-level,
324
324
  `Cratis.Arc.Chronicle.Reactors`) supplies one for the **returned** commands only.
325
- A collection return is executed as commands when every element is a command.
325
+ A collection return is executed as commands when every element is a command. A stable collection mixing registered events and commands (Arc 22.72.0+; Arc 22.68.0's handler needs every element to be a command) appends the events
326
+ first as one batch, then runs the commands in order, with no transaction across them; a retry can
327
+ repeat both. `[ExecuteCommandsAsSystem]` covers only the commands.
326
328
  A reactor retry can execute the command's operations again; inline operations
327
329
  are not a substitute for reactor/outbox durability (see
328
330
  `cratis-arc-command-operation`, verified at Arc v22.48.1).
@@ -408,4 +410,5 @@ scope of these scenario-only guards.
408
410
 
409
411
  ## Lineage
410
412
 
411
- The specification checklist (field lineage, contract-authorized filtering, repeated delivery) follows an idea from Martin Dilger and Nebulit GmbH's reactor build checklist, credited in `references/provenance.md`. Read `references/provenance.md` when checking checklist attribution or the verification sources for scenario behavior.
413
+ Attribution and verification sources: `references/provenance.md`.
414
+ Read `references/slice-delivery-checklist.md` when delivering a reactor from a slice contract: build order, handler patterns, closing checklist.
@@ -1,13 +1,13 @@
1
1
  # Provenance
2
2
 
3
- ## Adapted closely (Martin Dilger and Nebulit GmbH, with agreement)
3
+ ## Adapted closely (Martin Dilger and Nebulit GmbH)
4
4
 
5
5
  Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
6
- by Martin Dilger and Nebulit GmbH (https://nebulit.de). The repository carries no licence file; this material
7
- is adapted with the agreement of Martin Dilger and Nebulit GmbH.
6
+ by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
8
7
 
9
8
  | Source file | Used in | How |
10
9
  |---|---|---|
11
10
  | `.claude/skills/build-automation/SKILL.md`: reactor checklist: output fields traced to a stated source, skip conditions stated in the contract, repeated-input cases | `SKILL.md` "Specifications" and "Verify" | idea; our own wording kept |
11
+ | `.claude/skills/build-automation/SKILL.md`: read the slice definition first as the source of truth, build the command handler before the processor, single / conditional / multiple-command processor patterns, no route for an automation, closing checklist (no invented mappings, no invented filters, no guessed fields, idempotency of the command) | `references/slice-delivery-checklist.md` | Adapted closely as an `IReactor` delivery checklist: processors became reactor handlers returning commands or events, the storyline-derived test note became a separate reactor mapping specification. Not adopted: the Emmett reactor, `processor.ts`, processor id, lock and retry configuration, the dead-letter store, `schema.migrate()`, Postgres event store bootstrap, and "no dedicated reactor test" (the field mapping is the contract here) |
12
12
 
13
13
  The `WithStrictEventSubscription()` scope statement and the scenario sequence-number behavior are verified against Chronicle `v19.32.0` source (`Source/Clients/Testing/ReadModels/ReadModelScenario.cs`, `Source/Clients/Testing/Reactors/ReactorScenario.cs`).
@@ -0,0 +1,93 @@
1
+ # Automation slice delivery checklist
2
+
3
+ ## Contents
4
+
5
+ - Start from the contract
6
+ - Build order
7
+ - Handler patterns
8
+ - What no longer applies
9
+ - Checklist
10
+ - Specifications
11
+
12
+ Use this when you implement a reactor from an existing contract: an accepted `.play`
13
+ `Automation` slice (a `reaction` with its `when`, `where`, `invokes` or `produces`), or an agreed
14
+ slice outline in a code-first repository. It is the delivery checklist for the code, and it adds
15
+ to the Verify list in `SKILL.md`; it does not replace it. Adapted from Martin Dilger and Nebulit
16
+ GmbH's build-automation (see `provenance.md`), with the event-store, processor and storage
17
+ mechanics replaced by Chronicle and Arc.
18
+
19
+ ## Start from the contract
20
+ Read the slice first. It is the source of truth for three things and nothing else is assumed:
21
+ - which event (or clock or trigger) sets the automation off;
22
+ - which command it invokes, or which events it produces, and from which trigger fields each
23
+ input is filled;
24
+ - which conditions narrow it (`where`).
25
+
26
+ If an item the reactor needs is not in the contract, it is not in the code. Ask or record an open
27
+ question; do not guess a mapping or add a filter. Notes in the slice `description` and
28
+ `documentation` are implementation hints: carry them into code comments, validation or
29
+ specifications where they add value, and do not treat them as new requirements.
30
+
31
+ ## Build order
32
+ This checklist covers event-triggered reactions only. Clock and application triggers are not
33
+ `[EventType]`s and do not run through `IReactor` (Chronicle 19.50.0 discovers handlers only for
34
+ registered event types). Route them first to a scheduler or host-signal implementation as
35
+ `cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md` describes, then apply the
36
+ remaining steps where they fit.
37
+
38
+ An automation is a state-change with a trigger in front of it. Build the command side first, then
39
+ wire the reactor.
40
+ 1. The command (and its event) exists and works: `cratis-arc-command`, and its specifications
41
+ (`cratis-application-slice-specifications`). If the automation produces events directly, the
42
+ `[EventType]` records exist instead.
43
+ 2. The trigger event is defined as an `[EventType]` in the contracts project that owns it. A
44
+ trigger from another module or store is consumed through its public contract, never copied
45
+ (the cross-service rules in `SKILL.md`).
46
+ 3. Write the reactor: one class implementing `IReactor`, one handler per trigger event, no
47
+ state. It is discovered by the interface; there is no registration step to add.
48
+ 4. Add the specifications (below) and run the slice's gate.
49
+
50
+ The reactor has no route of its own. The invoked model-bound `[Command]` keeps its generated Arc
51
+ HTTP endpoint, so if only the automation should run it, gate it with `[Roles]` or `[Authorize]` and
52
+ give the reactor `[ExecuteCommandsAsSystem]` naming that role.
53
+
54
+ ## Handler patterns
55
+ | Contract says | Handler |
56
+ |---|---|
57
+ | One trigger event, one command | One handler whose first parameter is the trigger event, returning the command built from the trigger's fields. Add `[ExecuteCommandsAsSystem]` only when the command is gated, and `[OnceOnly]` |
58
+ | One trigger event, several commands | Return the commands as a collection: Arc runs them in order, with no transaction across them, and a retry can repeat them (see "Invoking a command from a reactor") |
59
+ | One trigger, events and commands | Return one stable collection mixing registered events and commands (Arc 22.72.0 or later): the events are appended first as one batch, then the commands run in order, with no transaction across them. Add `[OnceOnly]` where a replay must not repeat it. The Stage 4.73.1 scaffold pins Arc 22.68.0, so this needs a proven dependency override; never split the modeled reaction |
60
+ | One trigger event, events produced directly | Return the event or events; `[OnceOnly]` applies (`CHR0022`) |
61
+ | A condition narrows the trigger | Realize exactly the stated `where`. Show it with one specification where it skips and one for the neighboring case where it acts |
62
+ | A fact on another event source | `EventForEventSourceId` with the stated target id |
63
+ | The trigger's fields are not enough | Inject the read model the contract names; do not widen the mapping |
64
+
65
+ Which return shape expresses "do nothing" for a given handler is established by a scenario that
66
+ runs it, not assumed. Use only the return shapes listed in `SKILL.md`.
67
+
68
+ ## What no longer applies
69
+ Processor identity strings, consumer instance ids, lock and retry configuration, a dead-letter
70
+ store, `schema.migrate()` and a hand-written start and stop call belong to a different runtime.
71
+ Chronicle owns delivery, retry, partition failure and quarantine; see "Failure behavior". Do not
72
+ write a dead-letter table or catch-and-continue around the handler: a swallowed failure is a lost
73
+ fact, not handled (`references/domain-failures.md`).
74
+
75
+ ## Checklist
76
+ - [ ] The slice contract was read first and every trigger, condition, command and field came from it
77
+ - [ ] The trigger event is an `[EventType]` from the owning contracts project
78
+ - [ ] The command (or events) it fires exists and has its own specifications
79
+ - [ ] One handler per trigger event; first parameter is the trigger; no `ReactorSideEffect`, no injected `IEventLog`
80
+ - [ ] Every command or event field is mapped from the trigger, an injected read model or a stated mapping; none invented or defaulted
81
+ - [ ] Every skip condition is the contract's, with a specification on each side of it
82
+ - [ ] Handlers that return events or commands carry `[OnceOnly]`; the effect is idempotent regardless
83
+ - [ ] A gated command has `[ExecuteCommandsAsSystem]` naming the role the command requires
84
+ - [ ] Repeated delivery of the same trigger is specified (what happens when it fires twice)
85
+ - [ ] A modeled slice matches its `.play` contract; the model was not edited to fit the code
86
+ - [ ] The reactor has no route; a command meant only for the automation is gated and the reactor runs it as that role; no processor or lock configuration, no dead-letter store
87
+ - [ ] The build has no `CHR0004`, `CHR0005`, `CHR0008`, `CHR0013`, `CHR0022`, `CHR0031` or `CHR0032` outstanding and the specifications pass
88
+
89
+ ## Specifications
90
+ The trigger-to-command field mapping is part of the contract, so give it its own specification (a
91
+ direct call asserting the returned command, or a `ReactorScenario` where wiring matters). The
92
+ command's own `CommandScenario` covers the command side separately; neither replaces the other.
93
+ Details: `references/specifications.md`.
@@ -5,5 +5,5 @@ Third-party notices
5
5
 
6
6
  This skill adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
7
7
  (https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
8
- https://nebulit.de), used with the agreement of Martin Dilger and Nebulit GmbH. That repository
9
- carries no licence file; the adapted material remains credited to Martin Dilger and Nebulit GmbH.
8
+ https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
9
+ material remains credited to Martin Dilger and Nebulit GmbH.
@@ -204,7 +204,7 @@ one, derive it from the projection and say so. Then check each line:
204
204
  ## Lineage
205
205
 
206
206
  Step 6 is adapted in our own words from ideas recorded in `references/provenance.md`.
207
- Read `references/provenance.md` when checking attribution or the origin of Step 6’s coverage inventory.
207
+ Read `references/view-lifecycle-checks.md` when delivering a read model from a contract: population, update and removal checks per property and event.
208
208
 
209
209
  ## What breaks
210
210
 
@@ -2,14 +2,14 @@
2
2
 
3
3
  Lineage of the #493 additions to `cratis-chronicle-read-model-specifications`. No TrogonStack material was adapted. Nebulit material is credited below.
4
4
 
5
- ## Adapted closely (Martin Dilger and Nebulit GmbH, with agreement)
5
+ ## Adapted closely (Martin Dilger and Nebulit GmbH)
6
6
 
7
7
  Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
8
- by Martin Dilger and Nebulit GmbH (https://nebulit.de). The repository carries no licence file; this material
9
- is adapted with the agreement of Martin Dilger and Nebulit GmbH.
8
+ by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
10
9
 
11
10
  | Source file | Used in | How |
12
11
  |---|---|---|
13
12
  | `.claude/skills/build-state-view/SKILL.md`: checklist: every field asserted, every event covered, empty-list case | `SKILL.md` Step 6 | idea; our own wording kept |
13
+ | `.claude/skills/build-state-view/SKILL.md`: one specification per contract specification, population on the first event, removal on the end event, assertions on the materialized state, optional storyline-derived read-model chain tests | `references/view-lifecycle-checks.md` | Adapted closely as population, update and removal checks over `ReadModelScenario<TReadModel>`; the partial-update and several-instance checks are ours. Not adopted: SQL insert, update and delete operation patterns, Flyway migrations, `PostgreSQLProjectionSpec` with Testcontainers, route creation and wiring; storyline-derived tests wait for storyline syntax (Screenplay#394), lifecycle spec families stand in |
14
14
 
15
15
  The strict-subscription reconciliation is original to Cratis and verified against Chronicle v18.3.0 and v19.32.0.
@@ -0,0 +1,79 @@
1
+ # View lifecycle checks
2
+
3
+ ## Contents
4
+
5
+ - How to use this list
6
+ - Population
7
+ - Update
8
+ - Removal
9
+ - Empty and several-instance cases
10
+ - Closing checklist
11
+
12
+ Step 6 of `SKILL.md` gives the coverage inventory. This reference expands its three lifecycle
13
+ questions (does the first event populate, does a later event update, does an end event remove)
14
+ into checks you can tick per read model. Use it for each StateView slice you deliver. Adapted from
15
+ Martin Dilger and Nebulit GmbH's build-state-view (see `provenance.md`), with the SQL operations,
16
+ migrations and projection specification harness replaced by `ReadModelScenario<TReadModel>`.
17
+
18
+ Take the contract first (the `.play` read model, its projection and its specifications, or the
19
+ agreed outline). Write one specification per contract specification, using its example values, and
20
+ add the cases below only where the contract states the behavior; an uncontracted rule found in the
21
+ projection is a proposal for the contract, not silent coverage.
22
+
23
+ ## How to use this list
24
+ For each read model, list its properties and its events in a small table (property, events that
25
+ set it, events that clear it). Walk the three lifecycle stages against it. A cell with no
26
+ specification is a gap to fix or to report.
27
+
28
+ ## Population
29
+ The first event creates the instance with the properties it sets.
30
+ - Seed only that event (`Given.ForEventSource(id).Events(first)`) and assert each property it sets.
31
+ - Assert the key: the instance is the one for that event source (or for the contract's key
32
+ property). Check the key resolution before the property mapping when `Instance` is `null`.
33
+ - Assert a property the event does not set stays at its default; do not assert a value the
34
+ contract does not state.
35
+ - Cover every event that can create the instance if the contract has more than one.
36
+
37
+ ## Update
38
+ A later event changes the instance.
39
+ - Seed the first event, then the update event, in that order, and assert the changed property
40
+ has its new value.
41
+ - Assert every property the update event does **not** set is unchanged. A partial update that
42
+ clears or overwrites other fields is the common defect; AutoMap can wire an identically named
43
+ property of another event over an explicit setter, so look at the property the event was not
44
+ meant to touch.
45
+ - Cover each event that updates the view, with the contract's example value for each.
46
+ - Where several events set the same property, specify the order that matters and the last-writer
47
+ outcome the contract states.
48
+ - For a child collection, assert the child is added, updated in place, and that siblings stay
49
+ intact.
50
+
51
+ ## Removal
52
+ An end event removes the instance, or clears a property or a child.
53
+ - Seed the creating event and the removing event, then assert absence: `Instance` is `null`, or
54
+ the child is gone from the collection. Absence is a result, not a skipped case.
55
+ - Assert a view that must keep ended items does not remove them but sets the contract's status
56
+ value, and that the removal event does not delete other instances.
57
+ - A suite where every specification only adds is green and untested for removal; add the end
58
+ event for each removal in the contract.
59
+
60
+ ## Empty and several-instance cases
61
+ - **Empty.** With no matching events `Instance` is `null` (the empty initial state, or the
62
+ baseline you passed to the scenario). Assert it where "no result" is a behavior the contract
63
+ states, such as a list with no rows.
64
+ - **Several instances.** Where a view holds one row per source, seed two event sources and use
65
+ `InstanceForEventSourceId(id)` or `Instances`; a single `Instance` would throw
66
+ `MultipleInstancesMaterialized`. Assert that one source's events do not touch the other's row.
67
+ - **Subscribed events.** The events your specifications seed, the projection's subscriptions and
68
+ the contract's events agree in both directions; report any difference to
69
+ `cratis-application-slice-conformance`.
70
+
71
+ ## Closing checklist
72
+ - [ ] Every read-model property is asserted in at least one specification
73
+ - [ ] Every creating event has a population specification asserting the properties it sets and the key
74
+ - [ ] Every updating event has a specification, and the properties it does not set are asserted unchanged
75
+ - [ ] Every removal or clearing event has a specification asserting absence
76
+ - [ ] The empty case and, where the view holds many rows, a two-source case are specified when the contract states them
77
+ - [ ] Example values and relationships come from the contract; fresh identifiers only where isolation needs them
78
+ - [ ] No property, column or event beyond the contract's read model appears in the code or the specifications
79
+ - [ ] Each new specification was seen to fail once (drop a seeded event, confirm the assertion goes red)
@@ -1,2 +1,9 @@
1
1
  Copyright (c) Cratis. All rights reserved.
2
2
  Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ Third-party notices
5
+
6
+ This skill adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
7
+ (https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
8
+ https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
9
+ material remains credited to Martin Dilger and Nebulit GmbH. See references/provenance.md.
@@ -19,8 +19,10 @@ and later). The grammar is owned by Mermaid, and
19
19
  file and Mermaid disagree. Confirm the Mermaid version available to the renderer
20
20
  before relying on a construct.
21
21
 
22
- The Cratis artifacts a diagram refers to are verified against `Cratis.Chronicle`
23
- `18.3.0` and the Arc query and command surface it is used with.
22
+ The Cratis artifacts a diagram refers to were originally checked against `Cratis.Chronicle`
23
+ 18.3.0 and re-read against Chronicle 19.50.0 and the Arc query and command surface it is used with
24
+ (current pins: `cratis-screenplay-toolchain` `references/versions.md`). The Mermaid claim above is
25
+ external and was not re-verified here.
24
26
 
25
27
  ## What an event model is
26
28
 
@@ -100,6 +102,26 @@ tf 12 evt <EntityName><PastTenseVerb>
100
102
  - Several consumers of one read model: declare each consumer `ui` as its own
101
103
  `rf` frame with an explicit `->>` back to the `rmo`.
102
104
 
105
+ ## Connections read forward
106
+
107
+ A diagram reads left to right, so every connection goes to a later frame, never back to an
108
+ earlier one. In practice:
109
+
110
+ - Number frames in story order and put elements that belong together next to each other: a
111
+ persona and the command it issues, a command and the events it produces, an event and the
112
+ read model that projects it. A read model's `->>` sources are frames that come **before** it.
113
+ - When a later event must change what an earlier read model shows, do not draw an arrow back to
114
+ that read model. Draw a new `rmo` frame after the later event, sourced from the events that now
115
+ matter (it is the same read model carried to a later state), and give it its own consumer
116
+ `ui` frame if a person looks at it. The earlier frame stays as it was: it correctly showed
117
+ that earlier point in the story. The model itself is unchanged; its projection simply
118
+ consumes the later event.
119
+ - If the natural place for a frame is already taken, insert it just before or after rather than
120
+ wiring across the gap.
121
+
122
+ Adapted from Martin Dilger and Nebulit GmbH's core rules (`references/provenance.md`); their
123
+ board mechanics (columns, cells, linked copies) do not apply to Mermaid frames.
124
+
103
125
  ## The command rules table
104
126
 
105
127
  Mermaid's eventmodeling grammar has no shape for validation or guards. After the
@@ -166,3 +188,5 @@ language. Include commands that emit no event.
166
188
  for a hand-written Chronicle implementation, or
167
189
  `cratis-screenplay-event-modeling` when the model is authored as a Screenplay
168
190
  `.play` document.
191
+
192
+ Attribution for adapted method text: `references/provenance.md`.
@@ -0,0 +1,19 @@
1
+ # Provenance
2
+
3
+ ## Adapted closely (Martin Dilger and Nebulit GmbH)
4
+
5
+ Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
6
+ by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger
7
+ and Nebulit GmbH. The notice is in this skill's `LICENSE`.
8
+
9
+ | Source file | Used in | How |
10
+ |---|---|---|
11
+ | `.claude/skills/eventmodeling-core-rules/SKILL.md`: "Connections Read Forward" and "Updating a Read Model That Already Feeds a Screen" | `SKILL.md` "Connections read forward" | Adapted closely; board columns, cells, linked copies and `link_element` dropped; the later-state read model becomes a later `rmo` frame in the Mermaid diagram |
12
+
13
+ Not adopted: lanes and the four-row column layout, placement mechanics, single-issuer commands (Mermaid frames
14
+ carry no such rule, and Screenplay commands may have several origins).
15
+
16
+ ## Other lineage
17
+
18
+ - Mermaid `eventmodeling` diagram type: https://mermaid.js.org/syntax/eventmodeling.html.
19
+ - Event Modeling (Adam Dymitruk) and Martin Dilger, *Understanding Eventsourcing*: the timeline as left-to-right business flow.
@@ -29,5 +29,5 @@ SOFTWARE.
29
29
 
30
30
  This skill also adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
31
31
  (https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
32
- https://nebulit.de), used with the agreement of Martin Dilger and Nebulit GmbH. That repository
33
- carries no licence file; the adapted material remains credited to Martin Dilger and Nebulit GmbH.
32
+ https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
33
+ material remains credited to Martin Dilger and Nebulit GmbH.
@@ -28,9 +28,9 @@ identity, effect and pending-work contract at that point; do not postpone it to
28
28
 
29
29
  ## Tool and realization facts (read before promising anything)
30
30
  - Reactions, clocks, triggers, captures and Automation/Translate slices compile (V1) and bind (V3)
31
- on Screenplay 4.61 or later: the standalone tool and the cratis CLI 3.28.2 or later (bundled
32
- 4.66.0). Probed on 3.28.2: the complete examples are `executableReady`. A cratis bundle before 3.28.2
33
- (4.60.1) reports PLAY0268 at binding: report "V3 blocked: PLAY0268 (ESM v6)" and
31
+ on Screenplay 4.61 or later: the standalone tool and the cratis CLI 3.28.2 or later (3.53.1
32
+ bundles 4.137.0). Probed on 3.28.2: the complete examples are `executableReady`. A cratis bundle before 3.28.2
33
+ (4.60.1) reported PLAY0268 at binding: report "V3 blocked: PLAY0268 (ESM v6)" and
34
34
  name the tool, never remove them.
35
35
  - Standalone 4.125.0 runs admitted scenarios through `screenplay test` or MCP
36
36
  `run-specifications`; source validation and render publication do not run V4.
@@ -40,8 +40,8 @@ identity, effect and pending-work contract at that point; do not postpone it to
40
40
  - Reaction `runs as system role "<Role>"` declares an invocation actor (ESM v10).
41
41
  Without it the invoke has no caller. Historical CLI 3.41.0's 4.114.0 compiler
42
42
  rejected the syntax (PLAY0137); previous CLI 3.46.1 refused ESM v10
43
- at render admission (CLI-RENDER-004). CLI 3.50.0 reaches Stage 4.67.0's
44
- construct admission, which still refuses reaction identity (STAGE-ESM-034). Checked model/diagnostics: captures-and-reactions
43
+ at render admission (CLI-RENDER-004). The pinned CLI/Stage pair (toolchain
44
+ `references/versions.md`) reaches construct admission, which still refuses reaction identity (STAGE-ESM-034). Checked model/diagnostics: captures-and-reactions
45
45
  `references/invocation-identity.md`.
46
46
 
47
47
  ## Effect guarantees and recovery traps
@@ -71,13 +71,17 @@ even when it blocks binding. Never record bearer tokens, magic links or signed U
71
71
  (a keyed hash or reference at most), and never put PII on the event-source id.
72
72
 
73
73
  ## Verified product sources
74
+ Current pins: toolchain `references/versions.md`. Language claims were re-read at Screenplay v4.139.0,
75
+ renderer claims at Stage v4.73.1 (no Automation, Translate, reaction or capture: `STAGE-ESM-024`), the
76
+ runtime facts at Arc v22.72.0 and Chronicle v19.50.0. Older reads kept as history:
77
+
74
78
  | Package | Version | Used for |
75
79
  | --- | --- | --- |
76
80
  | Screenplay | v4.66.0 (`c89198b`) | `Documentation/screenplay/{reactions,captures,triggers,specifications,diagnostics}.md`; examples compiled with the standalone tool |
77
- | cratis CLI | v3.28.3 | bundles Screenplay 4.66.0 and Stage 4.24.2 (before 3.28.2: 4.60.1, which gave PLAY0268 on v6 constructs and a false PLAY0285 on cascades, cli#242) |
78
- | Stage | v4.24.2 | admits ESM v1 to v4; renders no Automation or Translate slice |
79
- | Arc | v22.50.5 | `ExecuteCommandsAsSystemAttribute` (since v20.56.0) |
80
- | Chronicle | v19.32.0 | `OnceOnlyAttribute`, `ReactorDelivery` and `Documentation/reactors/delivery-identity.mdx` |
81
+ | cratis CLI | v3.28.3 | bundled Screenplay 4.66.0 and Stage 4.24.2 (before 3.28.2: 4.60.1, which gave PLAY0268 on v6 constructs and a false PLAY0285 on cascades, cli#242) |
82
+ | Stage | v4.24.2 | admitted ESM v1 to v4; rendered no Automation or Translate slice |
83
+ | Arc | v22.72.0 (read; v22.50.5 earlier) | `ExecuteCommandsAsSystemAttribute` (since v20.56.0); mixed events-and-commands reactor returns (since v22.72.0) |
84
+ | Chronicle | v19.50.0 (read; v19.32.0 earlier) | `OnceOnlyAttribute`, `ReactorDelivery` and `Documentation/reactors/delivery-identity.mdx` |
81
85
 
82
86
  Read `references/versions.md` in `cratis-screenplay-toolchain` when selecting a tool or checking the full version and capability pins. Reverify before claiming
83
87
  another version behaves the same.
@@ -164,8 +168,9 @@ or actor that nobody confirmed. Read `references/worked-integration.md` when you
164
168
  separate binder check.
165
169
  - A trigger with `reads` that `produces` directly fails binding: decide in a command. `reads` never protects.
166
170
  - An authorized command exercised in a spec without `given caller` is PLAY0389 at binding.
167
- - A list query (`=> Item[]`) and a clock sweep that iterates items do not bind; show them only as marked
168
- design-only excerpts (`references/todo-list-example.md`).
171
+ - A list query (`=> Item[]`) binds (Screenplay 4.105.0+; a snapshot list is not rendered, `STAGE-ESM-010`);
172
+ a clock sweep that iterates items needs a code body the reference does not run
173
+ (`references/todo-list-example.md`).
169
174
 
170
175
  **Modeling defaults** (deviate with a recorded reason)
171
176
  - A `produces` without `for` lands on the triggering fact's source; clock and trigger occurrences have
@@ -12,7 +12,7 @@ technique: partial work stays visible and nothing is skipped because it looked r
12
12
  Result is `complete` only when every column is filled or says why it does not apply (for example
13
13
  "direct effect: immediate, internal, cannot fail"). `open` names the unresolved decision and who
14
14
  answers. `blocked` names the actual capability gap with intended behavior. For example,
15
- CLI 3.50.0 admits ESM v10 to Stage 4.67.0 construct checks, where reaction identity
15
+ the pinned CLI/Stage pair (toolchain `references/versions.md`) admits ESM v10 to construct checks, where reaction identity
16
16
  is refused with STAGE-ESM-034. Previous CLI 3.46.1 refused v10 at the version gate
17
17
  with CLI-RENDER-004; do not report that historical refusal as the current gap.
18
18