@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
@@ -0,0 +1,126 @@
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
+ # Inspect a property's chain before changing it
5
+
6
+ ## Contents
7
+
8
+ - Address and query
9
+ - Read evidence, not just a count
10
+
11
+ Screenplay 4.138.0 released property-path evidence in `find-references` and
12
+ `dependencies`; this guidance was checked against 4.139.0. Discover installed
13
+ `tools/list`: CLI 3.53.1's 4.137.0 bundle predates it. These are read-only
14
+ inspection tools, not a property-change planner.
15
+
16
+ ## Address and query
17
+
18
+ Use `kind: "Property"`, case-sensitive. Append the member to its owner's exact
19
+ logical address: `Owner.member`. For an event this selects the current generation;
20
+ `Owner.generationN.member` selects a historical shape, whose target details carry
21
+ `historical: true`. Properties are not returned in declaration listings: locate
22
+ the owner and inspect its properties first.
23
+
24
+ On the command-surface [enum example](../../cratis-screenplay-command-surface/references/enum-numbers.md),
25
+ first inspect the event with `find-references`:
26
+
27
+ ```json
28
+ {
29
+ "address": "Invoicing.Issuing.SendingInvoice.InvoiceSent",
30
+ "kind": "Event"
31
+ }
32
+ ```
33
+
34
+ At 4.139.0 this returns two references (`produces`, `thenEvent`), with top-level
35
+ `totalCount: 2`, `references` and empty `ambiguous`, `incomplete`, `wrongKind`
36
+ arrays. The event response has no `complete` field. Query its property separately:
37
+
38
+ ```json
39
+ {
40
+ "address": "Invoicing.Issuing.SendingInvoice.InvoiceSent.status",
41
+ "kind": "Property"
42
+ }
43
+ ```
44
+
45
+ Then query direct mapping counterparts with `dependencies`:
46
+
47
+ ```json
48
+ {
49
+ "address": "Invoicing.Issuing.SendingInvoice.InvoiceSent.status",
50
+ "kind": "Property",
51
+ "direction": "outgoing"
52
+ }
53
+ ```
54
+
55
+ Both tools accept `offset`, `limit` and `expectedSourceRevision`; echo the first
56
+ response's `sourceRevision` on continuation pages. `dependencies` additionally
57
+ accepts `direction: "incoming"` (default), `descendants` and `document`. It follows
58
+ **direct mapping counterparts only**, not a transitive property chain or runtime
59
+ impact. Query each resolved counterpart separately when walking a longer chain.
60
+
61
+ ## Read evidence, not just a count
62
+
63
+ `find-references` returns top-level `references`, `ambiguous`, `incomplete`,
64
+ `complete`, `totalCount`, `offset`, `nextOffset` and `coverage`. Ambiguous/incomplete
65
+ rows contain `reference` and `candidates`. `dependencies` instead has
66
+ `page.items`, each carrying `reference`, `resolution` and `targets`, with paging
67
+ inside `page`; `complete` and `coverage` stay at the top level.
68
+
69
+ Each property reference retains `owner`, `location`, `role`, `reasons` and
70
+ `otherEnd` (the link's resolved other end, or null). For outgoing dependencies,
71
+ navigate `targets`, not an assumed interpretation of `otherEnd`. Evidence roles are:
72
+
73
+ | Role | Meaning |
74
+ | --- | --- |
75
+ | `mapping-source`, `mapping-target` | Explicit production, capture append or projection mapping end |
76
+ | `automap` | Derived case-insensitive projection link |
77
+ | `condition` | Declarative condition, including query filters and policy readers |
78
+ | `key` | Lookup/read, projection/join/removal/parent, constraint or stream-id key |
79
+ | `screen-binding` | Screen/form field use |
80
+ | `fixture`, `assertion` | Specification/example assignment or expected value |
81
+ | `response` | Command response property source |
82
+ | `opaque` | Text names the property; code is not resolved |
83
+ | `unclassified` | Conservative backstop found a name occurrence outside classified links |
84
+
85
+ ### Observed result on the compiled example (4.139.0)
86
+
87
+ The property `find-references` response has `success: true`, `complete: false`,
88
+ `totalCount: 3`, `nextOffset: null`: two resolved references (`mapping-target`
89
+ on the command's `status = status`, and `assertion` on `then InvoiceSent`),
90
+ and one `incomplete` entry. Its `reference.role` is `unclassified`, located at the
91
+ specification's command-input `status` assignment, with `reference.reasons`:
92
+
93
+ ```json
94
+ ["Property name occurs in referencing declaration text without a classified link."]
95
+ ```
96
+
97
+ Outgoing `dependencies` also reports `success: true`, `complete: false` and
98
+ `page.totalCount: 1`. Its resolved `page.items[0]` has a `mapping-source`
99
+ reference; `targets[0].address` is
100
+ `Invoicing.Issuing.SendingInvoice.SendInvoice.status`, while the reference's
101
+ `otherEnd.address` is the queried event property. The property's completeness
102
+ covers all indexed evidence even when the chosen direction's page has only a
103
+ resolved link. The workspace had `sourceSuccess: true`, no source diagnostics
104
+ and `readiness.executableReady: true`: compilation success does not imply
105
+ complete property evidence.
106
+
107
+ **`complete: false` is never a successful empty list.** Inspect every ambiguous
108
+ or incomplete row and its `reasons`/candidates, even when resolved `references`
109
+ is empty. `success` describes compilation, not completeness. Opaque occurrences,
110
+ unresolved counterparts, nested composite paths, legacy command reads and external
111
+ source items can leave incomplete evidence. The backstop counts whole-word names
112
+ case-insensitively in relevant typed source and comments, including quoted text;
113
+ same-named properties in unrelated declarations do not affect completeness.
114
+ External code contents and registrations remain outside coverage even with
115
+ `complete: true`; authored links do not prove executable admission.
116
+
117
+ Before a rename/removal: pin the revision, inspect incoming readers and outgoing
118
+ counterparts, page to completion, resolve uncertainties, then choose the supported
119
+ identity-safe edit route with the connection owner. Never infer safe deletion from
120
+ zero resolved hits or edit every same-named field. An event-property change still
121
+ needs a persisted-contract evolution decision; the catalog is not storage evidence.
122
+
123
+ Source/output authority: `v4.139.0:Documentation/screenplay/mcp/reference.md`
124
+ (property links), `Source/DotNET/Screenplay.Mcp/McpPropertyDependencies.cs`,
125
+ `McpToolSchemas.cs`, and decision 0044's released prerequisite index. The planner
126
+ phases in that decision are not release evidence.
@@ -148,10 +148,9 @@ Historical verified public vector and executable checks:
148
148
  `cratis/stage:4.52.0` and which bundled Screenplay 4.127.0. Published since,
149
149
  and not verified by this vector: Scene 4.17.0, Screenplay 4.133.1, Stage 4.64.0,
150
150
  previous CLI 3.46.1 (bundling Screenplay 4.130.0, then-default Stage 4.52.0) and
151
- Studio 0.152.2. Current pins are CLI 3.50.0 (Screenplay 4.131.0 / Stage 4.67.0)
152
- and standalone Screenplay 4.135.0; see toolchain `references/versions.md`.
153
- Compiler claims from this `cratis` probe are 4.127.0 claims, not current CLI
154
- 3.50.0/Screenplay 4.131.0 claims;
151
+ Studio 0.152.2. Current pins: `cratis-screenplay-toolchain/references/versions.md`.
152
+ Compiler claims from this `cratis` probe are 4.127.0 claims, not current
153
+ bundled-compiler claims;
155
154
  - fixture root: `Source/DotNET/Screenplay.CanonicalCorpus/Corpus/ScreenComposition/v1/source/folder`
156
155
  in the Screenplay repository;
157
156
  - Screenplay repo tool (available checkout): `dotnet run --project Source/DotNET/Tool
@@ -6,7 +6,7 @@
6
6
  { "kind": "play-compiles" },
7
7
  {
8
8
  "kind": "skill-contains",
9
- "value": "Screenplay v4.135.0"
9
+ "value": "Screenplay v4.139.0"
10
10
  },
11
11
  {
12
12
  "kind": "skill-contains",
@@ -35,5 +35,5 @@ SOFTWARE.
35
35
 
36
36
  This skill also adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
37
37
  (https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
38
- https://nebulit.de), used with the agreement of Martin Dilger and Nebulit GmbH. That repository
39
- carries no licence file; the adapted material remains credited to Martin Dilger and Nebulit GmbH.
38
+ https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
39
+ material remains credited to Martin Dilger and Nebulit GmbH.
@@ -17,7 +17,7 @@ adapted to `.play` declarations (`references/provenance.md`).
17
17
  ## When / when not
18
18
  - Use: P4 self-check; P5 independent review; auditing an existing or extracted model; reviewing a
19
19
  proposal or edit request before it is applied; checking a model before rendering; checking a
20
- code diff in a repository with a model for model-first drift (checklist R1).
20
+ code diff in a repository with a model for model-first drift (checklist R1; `conform` is structural only).
21
21
  - Not for: changing the model (return findings; the modeler or the main session edits); writing
22
22
  missing specs (`cratis-screenplay-scenario-coverage`); designing slices
23
23
  (`cratis-screenplay-slice-design`); stream and invariant redesign
@@ -31,11 +31,10 @@ adapted to `.play` declarations (`references/provenance.md`).
31
31
  |---|---|---|
32
32
  | Screenplay | `v4.66.0` (`c89198b`) | MCP catalog (29 tools: `describe-application`, `search-declarations`, `dependencies`, `find-assertion-gaps`, `read-workspace`, `declaration-details`) in `Source/DotNET/Screenplay.Mcp/McpToolCatalog.cs`; diagnostics PLAY0029, PLAY0191, PLAY0268, PLAY0271, PLAY0350, PLAY0381, PLAY0469 in `Source/DotNET/Screenplay/Diagnostics/DiagnosticCodes.cs`; decision 0008 (one data subject per event) |
33
33
  | Screenplay | `v4.127.0` | `find-specification-obligations` (SPEC001–SPEC008 authored presence), `find-modeling-smells` (SMELL001–SMELL005 advisory questions); neither proves executed behavior or complete lineage |
34
- | Screenplay | `v4.131.0` | `semantic-diff` source objects and revision-pinned pages: `Source/DotNET/Screenplay.Mcp/{McpRevisionDiff,McpWorkspaces.Comparison,McpToolCatalog}.cs`, `Documentation/screenplay/mcp/reference.md`; previous CLI 3.46.1 predates these; CLI 3.50.0 bundles them |
34
+ | Screenplay | `v4.131.0` | `semantic-diff` source objects and revision-pinned pages: `Source/DotNET/Screenplay.Mcp/{McpRevisionDiff,McpWorkspaces.Comparison,McpToolCatalog}.cs`, `Documentation/screenplay/mcp/reference.md`; previous CLI 3.46.1 predates these |
35
35
  | cratis CLI | `v3.28.3` | bundles Screenplay 4.66.0 and Stage 4.24.2; see the toolchain skill |
36
36
 
37
- The full pin table lives in `cratis-screenplay-toolchain` `references/versions.md`; do not copy
38
- it here. Compilation (V1) does not establish reference execution.
37
+ Historical sources; pins (v4.139.0: 39 tools): toolchain `references/versions.md`. Compilation (V1) does not establish reference execution.
39
38
 
40
39
  ## Interview phase
41
40
  Skip if the brief names the scope, the mode and the review kind.
@@ -65,7 +64,7 @@ model's behalf.
65
64
  `dependencies direction=incoming` for orphans. The verdict lines are independent: a V1 pass is
66
65
  necessary, never sufficient. Opt into completeness with `--check` or MCP
67
66
  `checks` for bindings, input surfaces, field origins, query keys, event consumers
68
- and navigation; whole-source errors skip these checks. Record selected families,
67
+ navigation and personas (PLAY0574-0576); whole-source errors skip these. Record selected families,
69
68
  skipped status and coverage limits, never a vacuous pass. Any line without
70
69
  evidence is "not run: reason".
71
70
  3. **Element sweep** (phase 1, mechanical, before any judgement). One line per gated element, event,
@@ -255,10 +254,11 @@ verdict follows the rules in `references/report-template.md`.
255
254
  ## References (load on demand)
256
255
  - Review public leaks, direction, complete keys and effective routes with [public/key/route checks](references/public-keys-and-routes.md).
257
256
  - Read `references/checklist.md` when performing the element sweep and phased audit; it contains eleven phases, 89 checks, tiers and evidence sources.
258
- - Read `references/anti-patterns.md` when investigating an anti-pattern signal; it gives the signal, why it matters, tier and Screenplay fix.
259
- - Read `references/report-template.md` when classifying findings, deciding the verdict, writing the report or conducting a re-review; it defines report, severity and verdict rules.
260
- - Read `references/worked-example.md` when an example of the sweep, lineage or report is needed, or when checking the complete examples; it contains a seeded model, sweep notes, a filled report and the fixed model.
257
+ - Read `references/anti-patterns.md` when investigating an anti-pattern signal.
258
+ - Read `references/report-template.md` when classifying findings, deciding the verdict, writing the report or conducting a re-review.
259
+ - Read `references/worked-example.md` when an example of the sweep, lineage or report is needed, or when checking the complete examples: seeded model, filled report, fixed model.
261
260
  - Read `references/review-questions.md` when gathering evidence for subject-specific checks or distinguishing facts from views; it contains questions per subject and domain examples.
261
+ - Read `references/model-inventory-report.md` when asked for a read-only inventory of an existing model.
262
262
  - Read `references/business-questions.md` when conducting the business-question pass; it contains the explainer journey method, prompts and word translation.
263
263
 
264
264
  ## Lineage
@@ -61,8 +61,8 @@ the problem, the checks it violates, the fix, all pinned to one declaration.
61
61
  | Dropped construct | PLAY0029 warning; misspelled keyword or `type` inside a slice | the construct is silently ignored | C | fix the keyword; validate with warnings as errors |
62
62
  | Missing `for` | an event production (`produces <Event>` or `produces event`) without `for`. Not operation productions: they are authorable design intent, belong to commands, and take no event `for`, tags or routing | runtimes disagree on the destination | C (executable) / D | `for <identifier>` |
63
63
  | Unbuilt read-model field | field no projection maps and AutoMap cannot fill | always empty; not reported by the compiler | D | map it or remove it |
64
- | Undeclared removal/append event | `remove with` or capture `append` names an undeclared event | passes V1, fails binding (V2/V3, PLAY0273) | C (executable) / D | declare or fix the name; run V3 |
65
- | Gated command invoked by a reaction without a declared actor | reaction `invokes` a command under a caller policy and has no `runs as system role "<Role>"` that satisfies the gate | the invocation carries no caller: rejected at run time | D (major) | declare `runs as system role "<Role>"` with the least-privilege role the gate admits (ESM v10, Screenplay 4.125.0; previous CLI 3.46.1 refused v10 with CLI-RENDER-004, so gap-fill) or record another trusted-path decision - never just delete the gate. A matching `runs as system role` is the admitted trusted path, not a defect |
64
+ | Undeclared removal/append event | `remove with` or capture `append` names an undeclared event | V1 warns (PLAY0166, a failure under warnings as errors); binding fails PLAY0273 | C (executable) / D | declare or fix the name; run V3 |
65
+ | Gated command invoked by a reaction without a declared actor | reaction `invokes` a command under a caller policy and has no `runs as system role "<Role>"` that satisfies the gate | the invocation carries no caller: rejected at run time | D (major) | declare `runs as system role "<Role>"` with the least-privilege role the gate admits (ESM v10, Screenplay 4.125.0; Stage 4.73.1 refuses `runsAs` with STAGE-ESM-034 and every reaction model, so gap-fill) or record another trusted-path decision - never just delete the gate. A matching `runs as system role` is the admitted trusted path, not a defect |
66
66
  | `reads` + `produces` reaction | reaction both reads a view and produces | fails binding | C (executable) | invoke a command, or produce without reads |
67
67
  | `reads` treated as protection | rule "checked" because the command or reaction `reads` a view | `reads` enforces nothing | D (major) | keep or introduce `reads <View>` + `require ... message` as stated intent, mark it NOT enforced in the slice `description`, name the target (`[ProtectedDecision]` + `DecisionRead<T>`, Chronicle DCB, or a constraint where it fits); checklist E3 |
68
68
  | Caller-supplied state rule | `require currentStatus == "open"` where the caller sends `currentStatus` | the caller decides its own permission | D (major) | read the stored state with `reads`; keep or introduce `reads <View>` + `require ... message` as stated intent, mark it NOT enforced in the slice `description`, name the target (`[ProtectedDecision]` + `DecisionRead<T>`, Chronicle DCB, or a constraint where it fits); checklist E3 |
@@ -168,19 +168,19 @@ Nebulit (`provenance.md`).
168
168
  | Id | Check | Evidence | Tier |
169
169
  |---|---|---|---|
170
170
  | G1 | Every command has at least one reachable and authorized origin, and no command is attributed to a generic "User" | screen `action`, forms, reactions, persona policies | D |
171
- | G2 | Personas have a purpose and say what they cannot do; read-only roles are legitimate; every persona has at least one command or one view | `persona` descriptions | D |
171
+ | G2 | Personas have a purpose and say what they cannot do; read-only roles are legitimate; every persona has at least one command or one view (mechanical evidence: `--check personas`, PLAY0574 to PLAY0576) | `persona` descriptions | D |
172
172
  | G3 | Persona policy lists cover every gate on the path (module, feature, construct) | policies | C semantics (board placement) |
173
173
  | G4 | A command invoked by a reaction is not gated by a caller policy, unless a trusted-path decision is recorded | reactions, `authorize` | D (silent = major) |
174
174
  | G5 | Row scoping (whose data) is part of the view, not a filter the caller supplies | queries | D |
175
175
  | G6 | Every persona Cannot line resolves to an executable gate (`authorize` policy, or ownership `claim "x" matches subject\|<command property>`) and a `then denied` spec whose caller is synthesized with `given caller as <Persona>` or explicitly carries the effective-gate roles/claims; otherwise recorded as a gap. Persona text is intent only | personas, policies, specs | D |
176
176
  | G7 | Every command and query under an inherited module/feature `authorize` has its own `then denied` spec; authorization shared by a feature is declared at feature/module level so new paths inherit it | policies, specs | D |
177
- | G8 | Ownership checks against a Uuid-backed identifier are not renderable today (STAGE-ESM-015): noted | policies | C (renderable mode) |
177
+ | G8 | Ownership/claim targets are a supported scalar (text, Uuid, Date or DateTime render; a numeric or Boolean target is always denied; other shapes and a command without exactly one identifier are STAGE-ESM-015 at Stage 4.73.1): noted | policies | C (renderable mode) |
178
178
 
179
179
  ## Phase 10. Views, queries and screens (4 checks, H1-H4)
180
180
  | Id | Check | Evidence | Tier |
181
181
  |---|---|---|---|
182
182
  | H1 | Query shape follows the business view (list where people scan; lookup where they open one) | queries, screens | D |
183
- | H2 | Executable scope: one keyed `=> RM optional` query with `by` named like a read-model property, and the projection routes by the same identity (a `from` key or an event property, or `$eventSourceId`; `$eventSourceId` is not mandated). Renderable scope only: Stage-specific identity limits (Stage 4.24 admits a one-instance projection with an optional keyed snapshot query) | queries, projections | C (executable); C (render admission, renderable only) |
183
+ | H2 | Executable scope: a keyed `=> RM optional` query with `by` named like a read-model property, or an unfiltered / one-`by` list (`=> RM[]`, observable too; `filter`, `scoped to`, `performer` do not bind), and the projection routes by the same identity (a `from` key or an event property, or `$eventSourceId`; `$eventSourceId` is not mandated). Renderable scope only: Stage-specific identity limits (Stage 4.73.1 renders a keyed optional snapshot lookup and observable collection queries; any other query is `STAGE-ESM-010`) | queries, projections | C (executable); C (render admission, renderable only) |
184
184
  | H3 | One builder per read model; projection `key` only on `from` | projections | C |
185
185
  | H4 | Screens show one actor's point of view; a form submits one command | screens, forms | D |
186
186
 
@@ -192,7 +192,7 @@ artifact is `N/A: <reason>`.
192
192
 
193
193
  | Id | Check (the rejected pattern) | Signal to look for | Severity |
194
194
  |---|---|---|---|
195
- | R1 | Code-first change that silently outranks accepted model intent | behaviour added in code with no `.play` counterpart; the model edited to match existing code; the model left stale after a code change | major (critical when the code contradicts a protection) |
195
+ | R1 | Code-first change that silently outranks accepted model intent | behaviour added in code with no `.play` counterpart; the model edited to match existing code; the model left stale after a code change; optional structural evidence: `cratis screenplay conform <model-root> --project <path>` (CLI 3.42.0+, exit 0/1/2, exact structural addresses only, never a behavioral or V4 verdict; MSBuild runs, so a trusted clone) | major (critical when the code contradicts a protection) |
196
196
  | R2 | A diagram, board or document in place of executable semantics | a rule only in a board note, a description or a wiki page; no property, validation, constraint or spec behind it (E8) | major |
197
197
  | R3 | Claims of universal low-code, lossless recovery or target parity | words like "fully generated", "lossless", "any target" in a report or description | minor; major when it hides a gap |
198
198
  | R4 | Framework machinery in the domain vocabulary (saga, aggregate, passive objects, HTTP or broker detail) or syntax wanted because a framework API is common | declarations named after saga, handler classes, topics, endpoints; a request to add language syntax to mirror a framework API | minor; major when it shapes the model |
@@ -0,0 +1,75 @@
1
+ # Model inventory report
2
+
3
+ Use this for a read-only "what is in this model and where are the gaps" report on an
4
+ existing, extracted or inherited `.play` model, before or without a full checklist run. It is
5
+ the inventory the audit pass in `SKILL.md` produces, in a fixed shape a maintainer can read
6
+ in a minute. It never changes the model. Adapted from Martin Dilger and Nebulit GmbH's
7
+ analyze-existing-model (see `provenance.md`), with board, status and placement steps replaced by
8
+ the Screenplay MCP views.
9
+
10
+ ## Gather (read-only)
11
+ 1. Scope. A named module narrows the report to that module; otherwise report the whole
12
+ model, one block per module. If the named module does not exist, say so and list the modules
13
+ that do.
14
+ 2. Structure: `describe-application` (view `summary`) gives modules, features and slices by kind.
15
+ 3. Elements: counts of `event`, `command`, `readmodel`, `screen`, `reaction` and `trigger`
16
+ per module from `search-declarations`; fall back to the source files when a view is
17
+ unavailable and say which.
18
+ 4. Specifications: `find-assertion-gaps` for slices without an assertion; `find-specification-obligations`
19
+ for obligations with no matching specification. These read authored examples, not executed
20
+ coverage (`../../cratis-screenplay-model-authoring/references/mcp-tools.md`).
21
+ 5. Gaps and orphans: `find-references` and `dependencies` for declarations referenced by nothing;
22
+ `find-modeling-smells` for the candidate shapes.
23
+
24
+ ## Report
25
+ ```
26
+ ## Model inventory: <model root or module>
27
+ Inspected: <date>, Screenplay <tool version>, source identity <revision>
28
+
29
+ ### Modules (n)
30
+ - <module>: <n> features, <n> slices
31
+
32
+ ### Elements (per module)
33
+ | Kind | Count |
34
+ |---|---|
35
+ | event | |
36
+ | command | |
37
+ | readmodel | |
38
+ | screen | |
39
+ | reaction / trigger | |
40
+ | capture | |
41
+
42
+ ### Specification coverage
43
+ - n of total slices have at least one assertion (pct)
44
+ - Without: <names, at most 10, then "and N more">
45
+
46
+ ### Structural gaps (per slice)
47
+ <slice: what is missing>, or "none"
48
+
49
+ ### Orphans
50
+ <declarations nothing references>, or "none"
51
+
52
+ ### Shapes
53
+ <left chair, right chair, bed, shelf only as candidates that held up against the domain; see
54
+ anti-patterns.md>, or "none"
55
+
56
+ ### Summary
57
+ <2 to 4 sentences: maturity, the most important gap or risk, one concrete suggestion>
58
+ ```
59
+
60
+ ## Structural gaps to look for
61
+ | Slice kind | Expect | Flag when missing |
62
+ |---|---|---|
63
+ | StateChange | an origin (screen action, form, or reaction), a `command`, at least one `event` | any of the three |
64
+ | StateView | a `readmodel` with a projection (or reducer) and a `query` or screen that reads it | projection or reader |
65
+ | Automation | a `reaction` or `trigger` and what it produces or invokes | either |
66
+ | Translate | inbound: a `capture` or a translating reaction, and the private events it produces; outbound: a reaction or an event-target projection/reducer publishing the public event contract (no capture) | the direction's source or the produced or published events |
67
+
68
+ Do not flag a gap the documentation or the slice name marks intentional (an internal slice
69
+ with no screen). Judge unintentional gaps against the slice title, and surface only those.
70
+ Orphans that a documented terminal reason explains are not findings.
71
+
72
+ ## Not carried over
73
+ Slice status counts (`Planned`, `InProgress`, `Done`) are not in the report: `.play` has no
74
+ status field. Delivery status lives in the GitHub issue or `STATE.md`. An orphan that a board
75
+ tool could not see is skipped with a note, never guessed.
@@ -12,11 +12,10 @@ MIT, Copyright (c) 2025 Straw Hat, LLC. The complete notice is in this skill's `
12
12
  | `eventmodeling-validating-event-models` | `checklist.md` T (allowed and refused transitions per entity), C7 and C8 (unique semantics, corrections name what they correct), F3, G (role attribution and coverage), D and E (read models serve real queries, regenerable), `report-template.md` (critical and warning findings, completeness table) | Adapted; the command-state rule is not adopted as such (Screenplay decisions read stored state through `reads`; see `anti-patterns.md`) |
13
13
  | `eventmodeling-checking-completeness` | `checklist.md` A (origin and destination for every field, every command input, every read-model field), A8 (step contracts), G (role coverage), `references/worked-example.md` (field-trace format) | Adapted; matrices replaced by lineage over `.play` declarations |
14
14
 
15
- ## Adapted closely (Martin Dilger and Nebulit GmbH, with agreement)
15
+ ## Adapted closely (Martin Dilger and Nebulit GmbH)
16
16
 
17
17
  Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
18
- by Martin Dilger and Nebulit GmbH (https://nebulit.de). The repository carries no licence file; this material
19
- is adapted with the agreement of Martin Dilger and Nebulit GmbH.
18
+ by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
20
19
 
21
20
  | Source file | Used in | How |
22
21
  |---|---|---|
@@ -24,7 +23,7 @@ is adapted with the agreement of Martin Dilger and Nebulit GmbH.
24
23
  | `.claude/skills/eventmodeling-designing-automation-chains/SKILL.md`: every automation needs a todo list, translation versus worker, redundant second stage, no status field, closing path, quality checklist | `checklist.md` F8 to F12 and the automation-chain audit, `report-template.md` "Automation chains", `review-questions.md` | Restored from #493 (the automation-chain audit) as review checks translated to `Automation` and `Translate` slices. Not adopted: a translation's todo list is never closed; here a translation holding real pending work needs a terminal disposition (the audit format of `cratis-screenplay-automations-and-translations`), and an artificial never-closing queue is flagged instead |
25
24
  | `.claude/skills/eventmodeling-core-rules/SKILL.md`: Critic Mode, Flow and Causality, Open Questions vs. Decided Failures, Offline-First Thinking | `SKILL.md` "Procedure" (stance), `checklist.md` E9 and F13, `report-template.md` "Defect or business question?", `review-questions.md` | Adapted closely; the single-issuer command rule, lanes, linked copies and board mechanics are not adopted |
26
25
  | `.claude/skills/handle-comment/SKILL.md`: one remark per node with a kind, resolving means answering | `SKILL.md` "Findings" | Adapted; the board place, resolve and delete actions are dropped, the remark is a finding pinned to one declaration |
27
- | `.claude/skills/analyze-existing-model/SKILL.md`: spec coverage with names, structural gaps per slice type, summary in 2 to 4 sentences | `SKILL.md` "Audit pass", `report-template.md` Inventory | Now adapted closely; slice status breakdown dropped (Screenplay has none) |
26
+ | `.claude/skills/analyze-existing-model/SKILL.md`: spec coverage with names, structural gaps per slice type, summary in 2 to 4 sentences | `SKILL.md` "Audit pass", `report-template.md` Inventory, `model-inventory-report.md` (gather steps, report shape, structural-gap table) | Adapted closely; board and slice-status steps replaced by the Screenplay MCP views, slice status breakdown dropped (Screenplay has none), `validate_model` replaced by `find-modeling-smells` and `find-assertion-gaps` |
28
27
  | `.claude/skills/eventmodeling-validating-event-models/SKILL.md`, `-checklist/SKILL.md`: event-entity mapping (Check 6.2), report with blockers and next steps, common issues, closing questions that gate the verdict | `checklist.md` B2, `report-template.md` Verdict, `review-questions.md` | Martin Dilger and Nebulit GmbH's changes to the TrogonStack base, adapted; the "exactly one issuer" and "screen wired to more than one command always fails" rules are not adopted (Screenplay commands may have several origins and a screen several actions) |
29
28
  | `.claude/skills/eventmodeling-checking-completeness/SKILL.md`: field matrix, slice coverage, "search before calling data missing" | `checklist.md` A1 to A8 | Already adapted from the TrogonStack base (role coverage is TrogonStack's, credited above); Martin Dilger and Nebulit GmbH's slice-border and linked-copy checks are not adopted (no columns or linked copies in `.play`) |
30
29
 
@@ -16,7 +16,7 @@ Add these to the element sweep, with evidence pinned to the declaration:
16
16
  - Is the view identity explicitly marked `key` or unambiguously inferred? Does each
17
17
  single-instance query/read supply every part exactly once, with compatible types,
18
18
  and do state fixtures contain all parts? Do PDL keys align with the view's key?
19
- Composite view keys still refuse binding at 4.135.0 (PLAY0268, #599); compilation
19
+ Composite view keys still refuse binding at 4.139.0 (PLAY0268, #599); compilation
20
20
  is not executable evidence. Read read-surface `references/named-keys.md`.
21
21
  - Does a production override replace the whole source/stream/id route, rather than
22
22
  assume partial inheritance? Is its `for` destination still explicit and compatible?
@@ -12,8 +12,9 @@
12
12
  A small model with one seeded design defect, reviewed in critic mode. The model file is
13
13
  `berths.play`; line numbers below refer to it. The report follows `report-template.md` and is
14
14
  shortened: it shows the flagged checks of each phase and elides the passing ones, which a real
15
- report lists in full. The model compiles in design mode: the `ListBerths` list query blocks V3
16
- (`PLAY0268`), which is why the report below does not run V3.
15
+ report lists in full. The model compiles and, on the standalone 4.139.0 tool, binds and runs one specification (the
16
+ `ListBerths` list query binds since Screenplay 4.105.0). The report works in design mode, so it
17
+ does not run V3 or V4.
17
18
 
18
19
  ## The model under review
19
20
 
@@ -171,7 +172,7 @@ Confidence: medium (design mode; V2 to V5 not run)
171
172
 
172
173
  ## After the fix
173
174
  The same scope after the modeler applied the edit request and added denial specifications.
174
- The review is re-run only on the changed scope. The query contract is unchanged: no edit request asked for a different query, so `ListBerths => BerthSummary[]` stays. This document compiles (design mode), but the list query blocks V3 (binding reports PLAY0268, a query must declare one caller-supplied `by` argument), so its specifications do not run here. Adding a keyed `BerthById` next to the list would not unblock binding; replacing the list would change the contract and needs its own domain-justified edit request.
175
+ The review is re-run only on the changed scope. The query contract is unchanged: no edit request asked for a different query, so `ListBerths => BerthSummary[]` stays. This document compiles and binds, and its four specifications pass in `screenplay test` (4.139.0). Replacing the list with a keyed lookup would change the contract and needs its own domain-justified edit request. Stage 4.73.1 would refuse the snapshot list (`STAGE-ESM-010`); only an `observable` list or a keyed lookup renders.
175
176
 
176
177
  ```screenplay
177
178
  concept BerthId : Uuid
@@ -33,5 +33,5 @@ SOFTWARE.
33
33
 
34
34
  This skill also adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
35
35
  (https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
36
- https://nebulit.de), used with the agreement of Martin Dilger and Nebulit GmbH. That repository
37
- carries no licence file; the adapted material remains credited to Martin Dilger and Nebulit GmbH.
36
+ https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
37
+ material remains credited to Martin Dilger and Nebulit GmbH.
@@ -43,7 +43,7 @@ an unproven pass.
43
43
  | An accepted model covers the scope | **Model** | Change the `.play`, verify V1-V3, review, then render or gap-fill |
44
44
  | Opted in, but this scope has no model yet | **Model** | New behavior starts in discovery, then slice design |
45
45
  | A computed rule inside a modeled slice | **Model + code attachment** | `csharp`/`file` block; it binds only as the construct allows (`cratis-screenplay-model-authoring`) |
46
- | Scope Stage cannot render yet, including every modeled automation and translation (Stage `v4.24.2` renders neither; the whole behavior is gap-fill, not just its outside call) | **Gap-fill code** | Hand-written; the `.play` slice and specs are the contract. `cratis-screenplay-render-and-gap-fill` separates an authorized existing generated base from fully hand-written delivery |
46
+ | Scope Stage cannot render yet, including every modeled automation and translation (Stage 4.73.1 renders neither; the whole behavior is gap-fill, not just its outside call; a reaction that produces and invokes stays one reaction, `STAGE-ESM-037`, hand-written as one reactor on Arc 22.72.0 or later) | **Gap-fill code** | Hand-written; the `.play` slice and specs are the contract. `cratis-screenplay-render-and-gap-fill` separates an authorized existing generated base from fully hand-written delivery |
47
47
  | Outside call, transport or credentials | **Adapter code** | `Customizations/` or the host, applying `cratis-engineering-effect-boundaries` |
48
48
  | Infrastructure, clients, framework-profile repositories, brownfield not opted in | **Code** | Arc, Chronicle, spec and React skills; trivial changes keep the proportional-delegation policy |
49
49
 
@@ -210,10 +210,12 @@ labelled as such. The user decides whether it is enough
210
210
  | Critic review, business-question pass | `cratis-screenplay-model-review` |
211
211
  | Existing system into a model | `cratis-screenplay-legacy-extraction` |
212
212
  | Render, gap-fill, fallback, drift | `cratis-screenplay-render-and-gap-fill` |
213
+ | Estimate, order or split delivery of an accepted model | `cratis-screenplay-delivery-planning` |
213
214
 
214
215
  Construct mechanics stay in the `cratis-screenplay-*` construct skills; term clashes:
215
216
  `references/vocabulary-map.md`; worked example: `references/worked-example.md`; done checklist: `references/phases.md`.
216
217
  Read `references/worked-example.md` when needing an example of reasoning documentation, constraints, and decided rejections.
218
+ Read `references/core-rules-digest.md` when you need the one-page card of element names, causality, open-question-versus-decided-failure and the anti-patterns to reject early.
217
219
 
218
220
  ## Gate
219
221
  Done when: the mode's "done when" holds with fresh verdict lines; every open question has an
@@ -221,13 +223,13 @@ address and assumption; every decided rejection is a specification; no protectio
221
223
  the packet opens with `Outcome:`; STATE.md is current.
222
224
 
223
225
  ## Verified product sources
224
- Full pin table: `cratis-screenplay-toolchain/references/versions.md`. Read `cratis-screenplay-toolchain/references/versions.md` when selecting or reverifying tool versions. Used here: Screenplay
226
+ Full pin table: `cratis-screenplay-toolchain/references/versions.md`. Read `cratis-screenplay-toolchain/references/versions.md` when selecting or reverifying tool versions. Current pins (Stage 4.73.1, cratis CLI 3.53.1 and the rest) are in that file. Older source reads used here: Screenplay
225
227
  `v4.66.0` (`c89198b`): `Source/DotNET/Tool/Program.cs` (`--warnaserror`, folder mode),
226
228
  `Source/DotNET/Screenplay/Semantics/SemanticModelBinder.cs:209-216` (personas are report-only),
227
229
  `Documentation/screenplay/{constraints,specifications}.md`, `mcp/reference.md` (`modelRevision`);
228
- cratis CLI `v3.28.3` (`cratis screenplay validate --warnings-as-errors`, bundled Screenplay 4.66.0);
229
- Stage `v4.24.2` (admits ESM v1-v4 and refuses evolved events with `STAGE-ESM-026`); opt-in key `mcpServers.screenplay.root` in cratis CLI `v3.28.3`
230
- `Documentation/reference/screenplay-mcp.md`. The worked example compiles with both tools.
230
+ cratis CLI `v3.28.3` (`cratis screenplay validate --warnings-as-errors`; bundled Screenplay 4.66.0 then, 4.137.0 in 3.53.1);
231
+ opt-in key `mcpServers.screenplay.root` in cratis CLI `v3.28.3`
232
+ `Documentation/reference/screenplay-mcp.md`. The 4.66.0 and 3.28.3 reads are historical, not current pins. The worked example compiles with the standalone tool.
231
233
  ## Verify
232
234
  ```shell
233
235
  screenplay <model-folder> --warnaserror --no-color
@@ -0,0 +1,131 @@
1
+ # Core rules digest
2
+
3
+ ## Contents
4
+
5
+ - Two postures, never mixed in one pass
6
+ - Elements and names
7
+ - Causality
8
+ - Roles
9
+ - Field lineage
10
+ - Open question versus decided failure
11
+ - Offline-first lens
12
+ - Anti-patterns to reject early
13
+ - Structural shapes (candidates)
14
+ - Quick self-check
15
+
16
+ A one-page card of the element, naming and causality rules that every modeling phase
17
+ relies on. It restates what the construct and phase skills own, in one place, so a session
18
+ does not reopen five skills to check a name. When this card and a construct skill differ, the
19
+ construct skill and the compiler win. Adapted from Martin Dilger and Nebulit GmbH's
20
+ eventmodeling-core-rules (see `provenance.md`), translated to `.play` constructs.
21
+
22
+ ## Two postures, never mixed in one pass
23
+ - **Modeling.** Discovery, slice design, authoring. Build the process as completely as you can.
24
+ Flag a naming slip or an incomplete precondition and move on; do not stall the step on it.
25
+ - **Critic.** Review (`cratis-screenplay-model-review`). Apply every rule strictly and report every
26
+ violation; do not soften a finding because the model mostly works, and do not quietly add
27
+ missing structure on the model's behalf. Findings go in the report, not into the model.
28
+
29
+ A modeling pass is not the place for a full audit, and a critic pass never edits.
30
+
31
+ ## Elements and names
32
+ | Construct | Means | Name it | Reject |
33
+ |---|---|---|---|
34
+ | `event` | A business fact that already happened; immutable; a correction is a new event | Past tense, business language: `BerthReserved`, `PaymentAuthorized` | UI or machinery: `SidebarOpened`, `ApiCalled`, `ResponseReceived` |
35
+ | `command` | Business intent from a caller; can be refused; on success produces one or more events | Imperative: `ReserveBerth`, `CancelSubscription` | Queries and UI actions: `LoadOrders`, `FetchData`, `OpenDialog` |
36
+ | `readmodel` (+ `query`) | A projection of events shaped for one question; optional for any given command | A noun phrase for the data: `BerthAvailability`, `InvoiceList` | Implementation words: `...Projector`, `...Repository` |
37
+ | `screen` | What a user sees and can act on | What a user would call it: `Dashboard`, `ReservationsPage` | `...Component`, `...View` internals |
38
+ | `reaction` / `trigger` | An automated actor reacting to an event, a clock or an application signal | What it does: `BillingScheduler`, `BerthReleaser` | Handler or service names |
39
+ | `persona` | A named role with Does / Reads / Cannot | A role in domain language | A generic "User" |
40
+
41
+ An event holds captured or decided facts. A running total, an average or a status that is only
42
+ recomputed from other events is a `readmodel`, not an event. A calculation that was actually
43
+ decided at a point in time (a quoted price, an approved amount) is a fact and belongs in the
44
+ event; say which it is.
45
+
46
+ ## Causality
47
+ - Every locally produced event has a modeled producer that is reachable and motivated: whatever
48
+ the language lets produce it, for example a command or reaction `produces`, a capture, or an
49
+ event-target projection or reducer publishing an outbound public event. A foreign event
50
+ declared with `from` is produced by its owning system, not locally. The examples are not a
51
+ closed list; the construct skills and checklist F13 in `cratis-screenplay-model-review` decide.
52
+ - Every command has a reachable, authorized origin, for example a screen or form action, or a
53
+ reaction to an event, a clock or an application trigger (not a closed list; F13 decides). A
54
+ command may have several origins and a screen several actions; judge each origin on its own.
55
+ - A process starts at a screen or form action (a blank creation form counts), at a reaction to a
56
+ modeled event, a clock or application trigger, or at a capture appending outside facts; never at
57
+ an unmotivated command.
58
+ - Two state changes in a row need something that triggers the second (a screen, or a reaction).
59
+ - Connections read forward: what a later step needs from an earlier one is an event or a read
60
+ model that already exists. When a later event must change what an earlier view shows, the
61
+ projection of that view consumes the later event; do not draw a backward dependency.
62
+ - Slices connect through events and views. Common transitions: StateView to StateChange,
63
+ StateChange to StateView, StateChange to Automation, Automation to StateChange, Automation to
64
+ StateView, Translate to StateView, Translate to Automation. Judge a connection by checklist
65
+ F13 in `cratis-screenplay-model-review`, not by this list.
66
+
67
+ ## Roles
68
+ Every persona has a name in domain language, what it does, what it reads, and what it cannot do,
69
+ and each "Cannot" is backed by an `authorize` gate and a `then denied` specification, or recorded
70
+ as a gap. No command is attributed to a generic "User". A persona that never acts and never reads
71
+ anything is decorative, not modeled. See `cratis-screenplay-discovery` `references/personas-and-causes.md`.
72
+
73
+ ## Field lineage
74
+ Every command input, event property and read-model field has an origin (user input, caller
75
+ context, a prior event property, a decided derivation, or an external payload) and, where it
76
+ matters, a destination. A field with no origin is a gap to resolve, not a detail to fill in later.
77
+ See `cratis-screenplay-slice-design` `references/field-lineage.md`.
78
+
79
+ ## Open question versus decided failure
80
+ - **Open question.** Genuinely undecided. It goes in session state (`STATE.md`) or the review
81
+ report and stays open until someone answers it. Resolving means answering.
82
+ - **Decided failure.** A rejection or error whose behavior is already decided ("payment fails,
83
+ refuse, no event"). Model it as a `specification` with `then error` or `then denied`. It is
84
+ permanent specified behavior, not a note waiting on an answer.
85
+
86
+ A decided failure left as an open note looks unresolved when it is not. When counting
87
+ completeness, only a genuinely unanswered question is a gap; a decided failure needs its
88
+ specification.
89
+
90
+ ## Offline-first lens
91
+ Model the business process as it would run without software first: who acts, what triggers each
92
+ action, what information they need before acting. Question any step that exists only because of
93
+ the system (a loading state, a cache refresh, a session check); it is not a business step and
94
+ does not belong on the timeline. The anti-patterns below are what skipping this looks like.
95
+
96
+ ## Anti-patterns to reject early
97
+ - **Data-loading commands.** `LoadOrders` is a query; model a `readmodel` and a `query`.
98
+ - **UI-interaction events.** `ButtonClicked` is UI state; model it only if the business cares.
99
+ - **Technical events.** `ApiCalled` describes machinery; find the business outcome underneath.
100
+ - **Recomputed events.** A value that changes whenever its source data changes is a read-model field.
101
+
102
+ ## Structural shapes (candidates)
103
+ Check these only when the model's wiring is visible; a count over the threshold is a prompt to
104
+ think, not a finding.
105
+ - **Screen with several commands** (the bed). Check each action is a distinct decision the user
106
+ already made on that screen. Screenplay allows several actions on a screen; the signal is a
107
+ single submit that quietly settles several things.
108
+ - **Command with more than two events** (left chair). One business outcome that fans out, or a
109
+ command doing two jobs? Ask whether the events always happen together.
110
+ - **Read model fed by more than three events** (right chair). One coherent picture, or a view
111
+ answering several questions? Ask whether the fields describe one thing.
112
+ - **Slice with many more specifications than its neighbors** (shelf). Genuinely complex, or
113
+ quietly covering a neighbor's ground? Read what the extra specifications cover.
114
+
115
+ Use plain descriptions in anything a business stakeholder reads; the shape names are shorthand
116
+ for modelers. The full signal, consequence and fix per shape is in
117
+ `cratis-screenplay-model-review` `references/anti-patterns.md`.
118
+
119
+ ## Quick self-check
120
+ - [ ] Every event is past tense and a business fact.
121
+ - [ ] Every command is imperative intent, not a data load.
122
+ - [ ] Every read model is named for its data.
123
+ - [ ] No event carries a value that is only recomputed from other events.
124
+ - [ ] Every command has a reachable, authorized origin.
125
+ - [ ] Every process starts at a screen or form action, a reaction, a clock or application trigger, or a capture.
126
+ - [ ] No two state changes are chained without a trigger between them.
127
+ - [ ] Every persona has a Cannot line backed by a gate and a denial specification, or a recorded gap.
128
+ - [ ] Every decided failure is a specification; every open question is in session state.
129
+
130
+ This is the fast pass; the full audit is `cratis-screenplay-model-review`
131
+ `references/checklist.md`, and the closing quality checklist is in `references/phases.md`.
@@ -127,7 +127,7 @@ phase, a decision important enough that a later reader could misread the model (
127
127
  - **Input**: the accepted identity.
128
128
  - **Carry-forward**: the admission result; render output and named gaps in `Customizations/`;
129
129
  non-renderable scope handed to a code agent with the model as contract, plus a fallback record
130
- naming the blocking codes. Automations and translations are not rendered at the pinned Stage version, so the whole behavior is gap-fill. Three cases stay distinct: admission failure (nothing rendered); an
130
+ naming the blocking codes. Automations and translations are not rendered at the pinned Stage version (4.73.1), so the whole behavior is gap-fill (a reaction that produces and invokes keeps its one modeled form; `STAGE-ESM-037` is Stage's refusal, not a reason to split it). Three cases stay distinct: admission failure (nothing rendered); an
131
131
  existing generated base plus separately authorized gap-fill; fully hand-written delivery.
132
132
  - **Gate**: V5 sub-results, or a fallback entry per non-renderable scope. A customization never
133
133
  makes a rejected model renderable; no whole-application V5 from a subset.