@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
@@ -12,8 +12,8 @@
12
12
  - 8. Chain completion checkpoint
13
13
  - 9. Fan-out
14
14
 
15
- Complete compiled example: `todo-list-example.md` (binds on Screenplay 4.66.0; the list query
16
- and retry sweep that do not bind are shown there as marked excerpts).
15
+ Complete compiled example: `todo-list-example.md` (binds on Screenplay 4.66.0 and later; the list query
16
+ excerpt binds too, and the retry sweep that needs code is shown as a marked excerpt).
17
17
 
18
18
  ## 1. Deciding whether it is an automation
19
19
  Write the four parts in one line each:
@@ -44,12 +44,12 @@ Outcomes:
44
44
  - A projection that adds an item `from <OpeningFact>` and removes it with
45
45
  `remove with <ClosingFact>`. Several facts may open or close; they need not match one to one.
46
46
  - A keyed query (`…ById => Item optional` + `by itemId`) for specs and executable scope; a
47
- list query for the visible queue (design-only: a list query reports PLAY0268 at binding on 4.66.0).
47
+ list query for the visible queue (`=> Item[]` binds since Screenplay 4.105.0; a snapshot list is refused by Stage, `STAGE-ESM-010`).
48
48
  - A reaction `when <OpeningFact>` that invokes the command producing the closing fact.
49
49
  The trigger may `reads` the item view to document its input; that is not protection.
50
50
  - A retry sweep on a clock reads the whole view (no `by` on clock reads). Iterating its items
51
- declaratively (`for each <View>`) is reserved syntax; on Screenplay 4.66.0 the sweep needs a code body,
52
- which the reference never runs. Durable fan-out is outside Screenplay 4.66.0 (Screenplay#286).
51
+ declaratively (`for each <View>`) is reserved syntax; at Screenplay 4.139.0 the sweep needs a code body,
52
+ which the reference never runs. Durable fan-out is outside the language (Screenplay#286).
53
53
  - Specify the list as a small story: empty -> item present (`then query …ById`) -> closed
54
54
  (`when append <Closing>` + `then no readmodel … for`), plus "not opened" for facts that
55
55
  must not queue work.
@@ -72,8 +72,8 @@ Screenplay 4.125.0 declares the actor with reaction-level `runs as system role
72
72
  "<Role>"` (ESM v10); without it a gated invocation has no caller and denies.
73
73
  `given caller` is not an invocation actor. Role requirements remain enforced;
74
74
  claim conditions for this system principal remain unknown. Historical CLI 3.41.0's
75
- older compiler rejected the syntax (PLAY0137). CLI 3.50.0 bundles Screenplay 4.131.0 / Stage 4.67.0 and reaches v10
76
- construct admission, but reaction identity still refuses STAGE-ESM-034.
75
+ older compiler rejected the syntax (PLAY0137). The pinned CLI/Stage pair (toolchain
76
+ `references/versions.md`) reaches v10 construct admission, but reaction identity still refuses STAGE-ESM-034.
77
77
  Previous CLI 3.46.1 refused v10 at its version gate; see toolchain `references/versions.md`.
78
78
  Use the checked model in captures-and-reactions `references/invocation-identity.md`.
79
79
  Arc gap-fill uses `[ExecuteCommandsAsSystem("<role>")]` for returned commands,
@@ -59,7 +59,7 @@ See "Effect guarantees and recovery traps" in SKILL.md.
59
59
  - A capture spec does not acknowledge the source or store a new last-seen record; prefix
60
60
  facts that were accepted do not mean the record was processed (Screenplay `captures.md`).
61
61
  Record how the target acknowledges.
62
- - Delivery guarantees, acknowledgements and durable fan-out are outside Screenplay 4.66.0 (Screenplay#286);
62
+ - Delivery guarantees, acknowledgements and durable fan-out are outside the language (Screenplay#286);
63
63
  never describe them as provided.
64
64
 
65
65
  ## Projection lag and rebuild
@@ -15,11 +15,10 @@ defaults for missing data) is replaced by "never fabricate a default"; its log-a
15
15
  handling is replaced by recorded failure facts. `plugins/trogonstack-eda` was skimmed; nothing
16
16
  adopted.
17
17
 
18
- ## Adapted closely (Martin Dilger and Nebulit GmbH, with agreement)
18
+ ## Adapted closely (Martin Dilger and Nebulit GmbH)
19
19
 
20
20
  Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
21
- by Martin Dilger and Nebulit GmbH (https://nebulit.de). The repository carries no licence file; this material
22
- is adapted with the agreement of Martin Dilger and Nebulit GmbH.
21
+ by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
23
22
 
24
23
  | Source file | Used in | How |
25
24
  |---|---|---|
@@ -44,8 +43,8 @@ binds); tool-qualified verdict text; the trusted-actor text now names `[ExecuteC
44
43
  `reactions.md`, `ReactionIdentityParser.cs`, `ReactionRefusalValidator.cs` and the
45
44
  binder's v10 selection; the checked scenario passed reference execution. CLI
46
45
  3.41.0's older parser and Stage 4.51.3's v7 planner were historical target limits.
47
- Previous CLI 3.46.1 refused v10 at its version gate. CLI 3.50.0 bundles
48
- Screenplay 4.131.0/Stage 4.67.0, reaches v10 construct checks, and still refuses
49
- reaction identity with STAGE-ESM-034; see toolchain `references/versions.md`.
46
+ Previous CLI 3.46.1 refused v10 at its version gate. The pinned CLI/Stage pair
47
+ (toolchain `references/versions.md`) reaches v10 construct checks and still
48
+ refuses reaction identity with STAGE-ESM-034.
50
49
  Public/direction forms and routes/filters follow Screenplay v4.135.0 decisions
51
50
  0049–0051 and 0060–0066, not the older inbound-only translation scope.
@@ -123,9 +123,8 @@ Keep correlation and resulting private events in the model and report the runtim
123
123
  ESM v9 shipped in Screenplay 4.117.0 and is selected only by use of public events,
124
124
  origins, direction, event-target builders or events-source captures. At 4.135.0,
125
125
  publication reference scenarios execute; imported shapes still refuse binding.
126
- Stage 4.52.0 (previous CLI 3.46.1) audits only through v7: CLI-RENDER-004 precedes
127
- its STAGE-ESM-016 version refusal. CLI 3.50.0/Stage 4.67.0 reaches construct
128
- admission through v10 but still refuses publication (STAGE-ESM-032), foreign
126
+ Stage 4.52.0 (previous CLI 3.46.1, history) audited only through v7. The pinned CLI/Stage pair (toolchain `references/versions.md`)
127
+ reaches construct admission through v10 but still refuses publication (STAGE-ESM-032), foreign
129
128
  events/events-source captures (STAGE-ESM-033); source admission is not rendering.
130
129
 
131
130
  Source: Screenplay `v4.135.0:Documentation/screenplay/fixtures/public-events.play`,
@@ -5,11 +5,15 @@ the automation-and-translation addendum to `cratis-screenplay-render-and-gap-fil
5
5
  skill for the admission, publication and ownership rules.
6
6
 
7
7
  ## What Stage does not do
8
- Stage 4.24.2 renders no Automation or Translate slice (Stage#79). A model that contains one is not
9
- admitted: it needs ESM v6, and Stage admits ESM v1 to v4 (STAGE-ESM-016 for the whole model; probed
10
- with `cratis render` 3.28.2 and 3.28.3, whose bundled compiler binds these slices, where 3.27.1 stopped earlier
11
- with PLAY0268). So the automation or translation is
12
- hand-written delivery with the model as its contract. A `Customizations/` file never makes a
8
+ Stage 4.73.1 renders no Automation or Translate slice, reaction or capture (Stage#79): each reaction
9
+ or capture refuses with `STAGE-ESM-024` (plus `-034` runsAs, `-035` filters, `-037` mixed effects). So the
10
+ automation or translation is hand-written delivery with the model as its contract. (History: cratis
11
+ 3.28.2 and 3.28.3 refused such a model whole with `STAGE-ESM-016`, and 3.27.1 stopped earlier with PLAY0268.)
12
+
13
+ A reaction that both `produces` events and `invokes` commands stays one modeled reaction. Hand-write one
14
+ reactor that returns the events and the commands: Arc 22.72.0 and later append the events first as one
15
+ batch, then run the commands in order, with no transaction across them (a retry can repeat both, so keep
16
+ both repeatable); the Stage scaffold pins Arc 22.68.0, whose command handler accepts a collection only when every element is a command, so a rendered app needs a proven dependency override to Arc 22.72.0 or later. Never split the reaction to dodge `STAGE-ESM-037`. A `Customizations/` file never makes a
13
17
  rejected model renderable, and never claim a whole-application V5 from a subset. Choose the route
14
18
  with `cratis-screenplay-render-and-gap-fill`.
15
19
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  A complete model: a result opens a work item, a reaction invokes a command, the command's fact
8
8
  closes the item. It binds on Screenplay 4.66.0 (`executableReady: true`), standalone and through `cratis screenplay mcp`
9
- 3.28.2; `cratis render` 3.28.2 refuses it whole (`STAGE-ESM-016`). The cratis 3.27.1 bundle (4.60.1)
9
+ 3.28.2; `cratis render` refuses the Automation slice (3.28.2: whole, `STAGE-ESM-016`; Stage 4.73.1: `STAGE-ESM-024`). The cratis 3.27.1 bundle (4.60.1)
10
10
  rejected the Automation slice at binding with PLAY0268. Versions: `cratis-screenplay-toolchain` `references/versions.md`.
11
11
 
12
12
  The first spec lists the whole cascade (`then` names every new fact: `CoursePassed`, and
@@ -190,10 +190,10 @@ module Certification
190
190
 
191
191
  ## Design-only additions
192
192
 
193
- Two things a real queue often wants do not bind on 4.66.0 and stay out of the complete model
194
- above: a list query (the visible queue) and a retry sweep that reads the whole view. Both parse
195
- (V1) and report PLAY0268 at binding; durable per-item fan-out is outside the language
196
- (Screenplay#286). Keep them in the model only when the document is the deliverable and say so
193
+ Two things a real queue often wants stay out of the complete model above: a list query (the
194
+ visible queue) and a retry sweep that reads the whole view. The list query binds (Screenplay 4.105.0
195
+ or later; it was PLAY0268 at 4.66.0, and Stage refuses a snapshot list); the sweep needs a code body the
196
+ reference does not run, and durable per-item fan-out is outside the language (Screenplay#286). Say so
197
197
  in the verdict.
198
198
 
199
199
  ```screenplay excerpt parent=assets/pending-certificates.play
@@ -205,7 +205,7 @@ query PendingCertificates => PendingCertificate[]
205
205
  // Parent: the complete document above, slice Automation SendCertificates, after CertificateSender.
206
206
  // The sweep reads the whole view (a clock trigger takes no `by`); iterating items needs code.
207
207
  reaction CertificateRetrySweep
208
- description "Retries items still pending; per-item fan-out needs code on Screenplay 4.66.0 (#286)"
208
+ description "Retries items still pending; per-item fan-out needs code (#286)"
209
209
  every 15 minutes
210
210
  reads PendingCertificate
211
211
  file Reactions/RetryPendingCertificates.cs
@@ -4,7 +4,7 @@ A complete model: a webhook record from an outside proctoring service is capture
4
4
  external fact in the provider's vocabulary, then translated by reactions into our facts. It
5
5
  binds on Screenplay 4.66.0 (`executableReady: true`), standalone and through `cratis screenplay mcp`
6
6
  3.28.2; the cratis 3.27.1 bundle (Screenplay 4.60.1) compiled it (V1) but rejected the Translate
7
- slice at binding (PLAY0268). `cratis render` 3.28.2 refuses it whole (`STAGE-ESM-016`).
7
+ slice at binding (PLAY0268). `cratis render` refuses it (3.28.2: whole, `STAGE-ESM-016`; Stage 4.73.1: `STAGE-ESM-024`).
8
8
 
9
9
  Read the slice `description`: it is the per-field disposition (map, translate, ignore) and it
10
10
  states what this example does not do. Examples never show the whole integration contract; use
@@ -36,16 +36,15 @@ decides, not the slice type:
36
36
  `Translate` slices, reactions, declared triggers and captures bind, and the
37
37
  reference runner executes them. Probed: the complete example below is
38
38
  `executableReady` over `screenplay mcp`.
39
- - **Historical CLI 3.28.2 / Screenplay 4.66.0 probe:** complete examples validated
40
- and were executableReady through MCP. Earlier 4.60.1 bundles refused v6 at
41
- binding and falsely reported PLAY0285 on cascades. Toolchain `references/versions.md`
42
- separates that history from current pins.
43
- - **Stage 4.24.2** admits ESM v1-v4 and renders no `Automation` or `Translate`
44
- slice. The automation is gap-fill, with the `.play` slice and its specifications
45
- as the contract: `cratis-screenplay-render-and-gap-fill`.
39
+ - **History:** the CLI 3.28.2 bundle (Screenplay 4.66.0) bound v6; the earlier 4.60.1 bundles
40
+ refused it and falsely reported PLAY0285 (`references/versions.md`).
41
+ - **Stage 4.73.1** admits ESM v1-v10 by version but renders no `Automation`, `Translate`, reaction or
42
+ capture (`STAGE-ESM-024`; `-037` for a reaction that produces and invokes, which Arc 22.72.0+
43
+ runs as one reactor; scaffold 22.68.0 needs override). The automation is gap-fill; the `.play` slice and its specifications
44
+ are the contract: `cratis-screenplay-render-and-gap-fill`.
46
45
 
47
46
  Model them whenever the `.play` file is the deliverable, and say which tool bound
48
- them. Read `cratis-screenplay-toolchain` (`references/versions.md`) when selecting a compiler version or interpreting version-dependent messages.
47
+ them (`cratis-screenplay-toolchain` `references/versions.md` for versions and messages).
49
48
  Method (the four-part automation test, loops, translations versus automations):
50
49
  `cratis-screenplay-automations-and-translations`.
51
50
 
@@ -75,8 +74,8 @@ Read [invocation identity](references/invocation-identity.md) for the checked
75
74
  scenario, claim/unknown semantics and PLAY0647–0652/0557 diagnostics.
76
75
 
77
76
  Historical CLI 3.41.0's 4.114.0 compiler rejected this source with PLAY0137.
78
- Previous CLI 3.46.1 refused v10 (CLI-RENDER-004); CLI 3.50.0 reaches
79
- Stage 4.67.0's construct admission, still refusing identity (STAGE-ESM-034).
77
+ Previous CLI 3.46.1 refused v10 (CLI-RENDER-004); the pinned CLI/Stage pair (toolchain
78
+ `references/versions.md`) reaches construct admission, still refusing identity (STAGE-ESM-034).
80
79
  Target realization is gap-fill, using Arc `[ExecuteCommandsAsSystem]` for returned commands. Without that attribute
81
80
  Arc supplies no principal and `[Authorize]`/`[Roles]` deny. Each invoked command
82
81
  is atomic, not the whole cascade; earlier accepted facts remain after a later refusal.
@@ -123,7 +122,8 @@ Read [references/capture-map-and-example.md](references/capture-map-and-example.
123
122
  `api` (`api`, `route`, `poll`), `webhook` (`path`) and `message` (`topic`).
124
123
  ⚠️ The grammar is **open** — the parser accepts any kind and any setting name as
125
124
  free-form name/value pairs, so a typo is not caught. The three kinds are
126
- convention, not enforcement.
125
+ convention, not enforcement. `source events` (`from <Event>` lines, ESM v9) is the exception, with
126
+ its own closed grammar (PLAY0610/0612/0616/0619/0620).
127
127
 
128
128
  **`key <property>`** names the source property identifying an instance. From ESM v6
129
129
  a capture without a `key` does not bind (`PLAY0268`). In a specification the
@@ -131,9 +131,9 @@ reference is handed records (`given capture`, `when capture`) and never contacts
131
131
  `source`, which stays realization metadata; events append to the event source the
132
132
  record's `key` names, and `$context.occurred` is the scenario's `given clock`.
133
133
 
134
- Declaring an event's external origin on the `event` itself is accepted as
135
- Screenplay decision 0009 but **not in the language**; a `capture` in a
136
- `Translate` slice is how outside data enters a model in the verified Screenplay versions.
134
+ An event's external origin is declared on the `event` itself with `event X from "<origin>"` (ESM v9);
135
+ outside records still enter through a `capture` in a `Translate` slice
136
+ (`cratis-screenplay-automations-and-translations` `references/public-events-and-direction.md`).
137
137
 
138
138
  **`map`** reshapes properties before events are appended (rename, template, `translate`, `split`; mapping sources are `$.`, `$context.` and `$env.`); syntax is in the reference file linked above.
139
139
 
@@ -297,7 +297,8 @@ open. The type on a value is optional; a bare name is already a useful statement
297
297
  the document declares → triggers registered with the compiler, plus the built-in
298
298
  host signals. A registration wins over a built-in of the same name. Only when all
299
299
  three miss is the name reported unknown — a **warning** (`PLAY0248`), because the
300
- name may be known outside the document. A malformed reaction body is an error.
300
+ name may be known outside the document. A malformed reaction body is an error. If an event
301
+ and a trigger share a name, the event wins for value validation and binding.
301
302
 
302
303
  **Built-in triggers:** `Startup` and `Shutdown`. The clock is built in too, but
303
304
  with its own syntax rather than a name.
@@ -71,8 +71,8 @@ module Work
71
71
 
72
72
  Historical CLI 3.41.0 bundled Screenplay 4.114.0, which did not parse `runs as`:
73
73
  the example's `cratis screenplay validate --executable --warnings-as-errors`
74
- returned PLAY0137, exit 5. This is not a current parser claim. CLI 3.50.0 bundles
75
- Screenplay 4.131.0/Stage 4.67.0 and reaches v10 construct admission, but
74
+ returned PLAY0137, exit 5. This is not a current parser claim. The pinned CLI/Stage pair
75
+ (`cratis-screenplay-toolchain/references/versions.md`) reaches v10 construct admission, but
76
76
  reaction identity still refuses STAGE-ESM-034. Previous CLI 3.46.1/Stage 4.52.0
77
77
  audited through v7 only (`references/versions.md` in toolchain).
78
78
  Clock/application-trigger identities have no Stage Arc realization either.
@@ -26,17 +26,14 @@ source is the single flow model.
26
26
 
27
27
  ## Verified product sources
28
28
 
29
- | Package | Version | Purpose |
30
- | --- | --- | --- |
31
- | `Cratis.Screenplay` | `4.31.0` | Original examples and executable boundaries |
32
- | `Cratis.Screenplay` | main `fd18129` | Inline events, repairs and canonical `optional`; changed examples compiled |
33
- | `Cratis.Screenplay` | `4.66.0` (`c89198b`) | Binding behaviour of `handler`, code attachments, `persona` and compliance attributes: `Semantics/SemanticModelBinder*.cs`, `Diagnostics/DiagnosticCodes.cs` |
34
- | `Cratis.Screenplay` | `4.68.0` (`79801bf`) | Historical generated-value/response rule probes (ESM v7) |
35
- | `Cratis.Screenplay` (historical check) | `4.127.0` | Identity and compliance guidance checked at this release: released `identity.md`, `context.md`, `concepts.md`, `purposes.md`, `events.md`, `diagnostics.md`; changed examples compiled |
29
+ Current pins: toolchain `references/versions.md`; the claims here were read at 4.139.0 and at
30
+ the older tags below (provenance). Compilation checks syntax and
31
+ model consistency, not reference execution.
36
32
 
37
- Historical examples/probes retain the table's original versions; current source
38
- guidance is not a relabeled old execution result. Compilation checks syntax and
39
- model consistency, not reference execution. Pins: toolchain `references/versions.md`.
33
+ - `4.31.0`: original examples and executable boundaries; main `fd18129`: inline events, repairs, canonical `optional`.
34
+ - `4.66.0` (`c89198b`): `handler`, code attachments, `persona` and compliance binding (`Semantics/SemanticModelBinder*.cs`, `Diagnostics/DiagnosticCodes.cs`).
35
+ - `4.68.0` (`79801bf`): generated-value/response rule probes (ESM v7).
36
+ - `4.127.0`: identity and compliance guidance (`identity.md`, `context.md`, `concepts.md`, `purposes.md`, `events.md`, `diagnostics.md`).
40
37
 
41
38
  "Parses" and "runs" are different claims. The executable profile, and what
42
39
  each construct binds to, is in the `cratis-screenplay-model-authoring` language
@@ -75,6 +72,10 @@ scalar/composite stream-id types and nested route mapping sources, including leg
75
72
  markers. Keep a surrogate identity and carry protected data in the payload.
76
73
  Chronicle likewise rejects `[PII]`/`[Encrypted]` identifiers (CHR0034/CHR0052).
77
74
 
75
+ Read [enum numbers](references/enum-numbers.md) for `draft = 1`, unique int32
76
+ all-or-none pins, stored/public identity safety, `enum-pinning`, ESM v12 and the
77
+ CLI/Stage gap. Unnumbered enums keep positions; specifications use names.
78
+
78
79
  ⚠️ **Enum trap.** A value literally named `validate` is read as an empty validate
79
80
  block. Write `@validate` for the value; the compiler warns when it sees the
80
81
  ambiguity.
@@ -169,7 +170,8 @@ When a rule depends on state:
169
170
  - otherwise state the rule, and say in review that the target implementation
170
171
  must enforce it consistently. Do not claim the model guarantees it.
171
172
 
172
- Do not use `reads` to fetch data the caller could supply.
173
+ Do not use `reads` to fetch data the caller could supply. A composite-key view's `by` block is
174
+ `PLAY0268` (#599; read-surface `references/named-keys.md`).
173
175
 
174
176
  ## `validate`
175
177
 
@@ -238,7 +240,7 @@ choosing or omitting `for` on a production, or fixing `PLAY0469`-`PLAY0478`.
238
240
  computed expressions parse but block binding (`PLAY0268`).
239
241
  - **`for <identifier>`** on an indented line names the event source the event is
240
242
  appended to. At most one per `produces`. To bind, it must name the command's
241
- `identifier` property (`PLAY0273` otherwise); fanning out to another event
243
+ `identifier` property (`PLAY0273` otherwise; a `generated identifier` command, ESM v7, may name another required scalar property); fanning out to another event
242
244
  source parses but does not run today.
243
245
  - **`tag`** lines apply literal tags to this append. Tags also exist on the
244
246
  `event` declaration, where they apply to every append of that type.
@@ -337,7 +339,8 @@ constraint OneRegistrationPerInvoice
337
339
  hand-written Chronicle `IConstraint`, which can only declare uniqueness; it warns
338
340
  (`PLAY0396`) and the executable model rejects it. A state transition rule
339
341
  belongs in `validate`/`require`. Use a constraint when two concurrent appends must
340
- not both win — a `validate` rule cannot do that.
342
+ not both win — a `validate` rule cannot do that. Stage renders only single-text-property and
343
+ `unique event` constraints (`STAGE-ESM-014`; `cratis-stage-rendering-and-sandbox` `references/admission.md`).
341
344
 
342
345
  ## `policy` and `persona`
343
346
 
@@ -368,8 +371,8 @@ Four contexts, and **what each omits is load-bearing** — when writing a code b
368
371
  ## Verify
369
372
 
370
373
  - [ ] Validate the complete model root with warnings as errors; name the tool,
371
- version and result. Current pins: standalone 4.135.0 / CLI 3.50.0; bundle
372
- compatibility and execution are separate checks.
374
+ version and result. Pins: toolchain `references/versions.md`;
375
+ bundle compatibility and execution are separate checks.
373
376
  - [ ] No unintended `PLAY0478` or `PLAY0479` information remains.
374
377
  - [ ] At most one command property carries `identifier`, and no event property does.
375
378
  - [ ] Format rules live on the `concept`; state-dependent rules are specifications.
@@ -385,10 +388,8 @@ Four contexts, and **what each omits is load-bearing** — when writing a code b
385
388
  runnable or renderable without saying which tool admits it.
386
389
  - [ ] No event carries an optional property covering two situations.
387
390
 
388
- Read `cratis-screenplay-toolchain/references/versions.md` when selecting a compiler or determining which executable or renderable subset admits a construct.
389
-
390
- Versions, tool capabilities and the executable and renderable subsets: `cratis-screenplay-toolchain` (`references/versions.md`). Where a construct sits in the
391
- method: `cratis-screenplay-modeling-lifecycle` and `cratis-screenplay-slice-design`.
391
+ Compiler pins and admission: `cratis-screenplay-toolchain/references/versions.md`.
392
+ Method: `cratis-screenplay-modeling-lifecycle` and `cratis-screenplay-slice-design`.
392
393
 
393
394
  ## Route near misses
394
395
 
@@ -70,7 +70,9 @@ Reverse generation is not the C# provider mapping above. Source authority: Arc
70
70
  `v22.70.0:Documentation/backend/csharp/generating-a-screenplay.md` (Operational
71
71
  secrets), `Source/DotNET/Screenplay/Emission/Concepts/ConceptSyntaxBuilder.cs`
72
72
  and `Source/DotNET/Screenplay/Analysis/Types/PersonalDataMarkings.cs`.
73
- Check the generator package actually loaded; the CLI's bundle may be older.
73
+ SP0058 to SP0060 exist from Arc.Screenplay 22.61.0 (or earlier); SP0061 to SP0063 first ship in 22.70.0 (read at
74
+ v22.70.0 and v22.72.0), so the full set described here needs 22.70.0 or later. CLI 3.53.1 bundles 22.54.0, which has
75
+ none of SP0061 to SP0063, so the CLI shows none of them; check the generator package actually loaded.
74
76
 
75
77
  - Both `[Encrypted]` and `[NotAudited]` must be on the concept to recover
76
78
  `secret`. Partial or member-specific markings report SP0058 (Information),
@@ -105,7 +105,7 @@ Checked at Screenplay 4.127.0: `$identity.<property>` is the same caller value a
105
105
  is supported, not deprecated. Historical `cratis` CLI 3.41.0 bundled Screenplay 4.114.0, which predated both:
106
106
  its parser rejected a top-level `identity` block (`PLAY0001`), and with `--executable` it read a
107
107
  `$identity.<property>` mapping as a raw expression (`PLAY0268`). Those checks used standalone 4.127.0;
108
- they are not current CLI 3.50.0/Screenplay 4.131.0 parser claims. Check current renderer
108
+ they are not current parser claims; compiler pins are in toolchain `references/versions.md`. Check current renderer
109
109
  admission separately before choosing caller mappings. Built-ins are `id`, `name`, `userName`,
110
110
  `isAuthenticated`, `roles`, `claims.<name>` (everything after `claims.` is opaque).
111
111
  Bare `$identity` reports PLAY0152; unknown properties report PLAY0155. Only
@@ -0,0 +1,93 @@
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
+ # Explicit enum member numbers
5
+
6
+ Authoring shipped in Screenplay 4.137.0; non-positional executable numbers shipped
7
+ in 4.139.0 as ESM v12 (decision 0065). The model owns member identity, not the renderer.
8
+
9
+ ```screenplay
10
+ domain EnumNumbers
11
+
12
+ concept InvoiceId : Uuid
13
+ concept InvoiceStatus : Enum
14
+ draft = 1
15
+ sent = 4
16
+ cancelled = -1
17
+
18
+ module Invoicing
19
+ feature Issuing
20
+ slice StateChange SendingInvoice
21
+ command SendInvoice
22
+ invoiceId InvoiceId identifier
23
+ status InvoiceStatus
24
+ produces InvoiceSent
25
+ for invoiceId
26
+ status = status
27
+ event InvoiceSent
28
+ status InvoiceStatus
29
+ specification Sending
30
+ when SendInvoice
31
+ invoiceId = "6f9619ff-8b86-d011-b42d-00c04fc964ff"
32
+ status = "sent"
33
+ then InvoiceSent
34
+ for "6f9619ff-8b86-d011-b42d-00c04fc964ff"
35
+ status = "sent"
36
+ ```
37
+
38
+ ## Source rules
39
+
40
+ - Number **all members or none**; there is no implicit continuation after a pin.
41
+ - Numbers are unique whole int32 values, from -2147483648 through 2147483647.
42
+ Gaps and negative numbers are allowed; aliases and flags semantics are not.
43
+ - Write decimal digits with an optional minus sign: no leading zeros, fraction,
44
+ exponent or plus sign. `-0` prints canonically as `0`.
45
+ - Escape a keyword member as usual, for example `@validate = 7`.
46
+ - Unnumbered enums retain zero-based positional meaning. Descriptions and
47
+ validation blocks still work. Specifications, fixtures, validation operands
48
+ and conditions use **member names**, never their numbers.
49
+
50
+ PLAY0667 reports mixed numbering, PLAY0668 duplicate numbers, PLAY0669 an
51
+ out-of-int32 value and PLAY0670 malformed number syntax. None has an automatic
52
+ repair: correcting a stored identity needs an author decision.
53
+
54
+ ## When to pin
55
+
56
+ Pin enums used in persisted events or a stable public contract, or when retaining
57
+ numbers extracted from an existing system. Before reordering, inserting or removing
58
+ members, establish the **stored** numbers first; numbering an already reordered list
59
+ would preserve the wrong meaning. Never renumber a published member or reuse its
60
+ number for another meaning. Pinning does not prove old readers accept a removed member.
61
+
62
+ A short-lived enum used only by command inputs or views may remain positional.
63
+ Ordinary compilation does not demand pins. Opt into `--check enum-pinning`
64
+ (or `PLAY0671` or `all`) for an Information hint on wholly unnumbered enums used
65
+ by event properties, including through composite types. MCP `diagnostics` uses
66
+ `checks: "enum-pinning"`. The hint suggests `propose-number-enum-members`, which
67
+ pins current positions; it is a refactoring, not a correctness repair. Read
68
+ model-authoring `references/mcp-tools.md` for the revision-checked proposal loop.
69
+
70
+ ## Executable contract and consumer boundary
71
+
72
+ ESM v12 adds an optional canonical **last** `numbers` array parallel to `values`.
73
+ For the concept above, `values` is `["draft", "sent", "cancelled"]` and `numbers`
74
+ is `[1, 4, -1]`. Non-positional numbers select v12. Pins equal to `0..n-1` are
75
+ retained in source/AST but omitted from ESM, preserving the previous executable
76
+ version, bytes and revision; unnumbered enums also preserve their old bytes.
77
+
78
+ Strict reading rejects `numbers` in older versions, without enum values, with a
79
+ length mismatch, duplicates, non-int32 entries or a positional array (non-canonical).
80
+ Programmatic validation enforces the same contract. Specifications still compare
81
+ names; numbers are neither alternative fixture values nor flags.
82
+
83
+ Consumers must **explicitly admit v12**. CLI 3.53.1 and Stage 4.73.1 both bundle
84
+ Screenplay 4.137.0: `cratis render`/Stage do not admit v12 yet. A model with
85
+ non-positional numbers compiles and binds with standalone Screenplay >= 4.139.0,
86
+ but does not render through that CLI. Do not remove its pins to pass rendering;
87
+ report the consumer gap. See toolchain `references/versions.md`.
88
+
89
+ Sources checked at `v4.139.0`: `Documentation/screenplay/concepts.md`,
90
+ `interoperability.md`, `diagnostics.md`, `mcp/authoring-tools.md`, decision 0065,
91
+ `Semantics/Versions.cs`, `SemanticModelValidator.EnumMemberNumbers.cs` and the
92
+ source-backed `EnumMemberNumbersCorpus.V12` (under `Source/DotNET/`). Consumer
93
+ pins: CLI `v3.53.1:Directory.Packages.props`, Stage `v4.73.1:Directory.Packages.props`.
@@ -1,11 +1,10 @@
1
1
  ## Generated values and responses (ESM v7)
2
2
 
3
3
  A `generated` command property and `returns` response bind and reference-execute
4
- as ESM v7 (checked at 4.68.0). Current pins are standalone Screenplay 4.135.0
5
- and CLI 3.50.0 (bundled Screenplay 4.131.0/Stage 4.67.0); `cratis-screenplay-toolchain`
6
- `references/versions.md` owns the table. CLI#261 is closed: CLI now admits v7
7
- to Stage planning. The historical CLI 3.41.0 v7 canonical corpus received Stage
8
- generated-value and response refusals STAGE-ESM-028/029. Do not turn this into a blanket compiler
4
+ as ESM v7 (checked at 4.68.0). Current pins:
5
+ `cratis-screenplay-toolchain/references/versions.md`. CLI#261 is closed: CLI now admits v7
6
+ to Stage planning, and the 4.137.0 compiler in CLI 3.53.1 binds it. Stage 4.73.1 still refuses
7
+ generated values and responses with STAGE-ESM-028/029 (Stage#175), as the historical CLI 3.41.0 corpus did. Do not turn this into a blanket compiler
9
8
  refusal or promise a render from binding alone. Preserve the contract for gap-fill
10
9
  where admission refuses. Historical rules below were read at 4.68.0. Complete compiled example:
11
10
  `cratis-screenplay-toolchain` `references/generated-responses-example.md`.
@@ -45,7 +44,7 @@ Rules (all read at `v4.68.0`):
45
44
 
46
45
  Operations remain authorable/unadmitted (PLAY0268). Named event sources,
47
46
  streams and command/specification routes instead bind and reference-execute as
48
- ESM v8 at 4.125.0; CLI 3.50.0 reaches Stage construct admission through v10,
47
+ ESM v8 at 4.125.0; the pinned CLI (toolchain `references/versions.md`) reaches Stage admission through v10,
49
48
  not blanket target support. Syntax/MCP acceptance alone is not execution. Source/stream
50
49
  forms and realization boundary: `cratis-screenplay-toolchain`
51
50
  `references/sources-and-streams.md`. Do not infer further syntax or provider
@@ -32,5 +32,7 @@ A bodied rule or fenced block on a validation, rule or policy binds as opaque co
32
32
  implementation. Two exceptions never bind: the command `handler`, and a `file`
33
33
  constraint (the binder records the requirement, then rejects it with `PLAY0268`;
34
34
  only `unique` constraints bind).
35
- Stage 4.24 admits only pure reducer bodies, so such a body is gap-fill code there. Prefer a
36
- declarative rule when one can say it.
35
+ Stage 4.73.1 renders pure reducer transitions and opaque policy bodies, but refuses command and
36
+ concept code validations and rule predicates (STAGE-ESM-005): those are gap-fill code. Prefer a
37
+ declarative rule when one can say it. What binds and what the executable model rejects (Date and
38
+ DateTime comparisons, nested-path rules): `cratis-screenplay-toolchain` `references/executable-subset.md`.
@@ -0,0 +1,9 @@
1
+ Copyright (c) Cratis. All rights reserved.
2
+ Licensed under the MIT license. See LICENSE file in the canonical Cratis/AI repository for the full license text.
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.
@@ -0,0 +1,118 @@
1
+ ---
2
+ name: cratis-screenplay-delivery-planning
3
+ description: "Plan and estimate the delivery of an accepted Screenplay model by slices: count slices by type (StateChange, StateView, Automation, Translate), derive the slice dependency table from the model, split work in parallel along event contracts, track slice groups as GitHub issues with a closed status vocabulary, and turn the team's own completed-slice history into ranged estimates, capacity math and retrospective metrics. Use when asked how long a modeled scope will take, how to split it across people or agents, what to build first, or how to track and re-plan delivery. Not for: deciding what to model (use `cratis-screenplay-event-modeling`), rendering or gap-filling a slice (use `cratis-screenplay-render-and-gap-fill`), or reviewing the model (use `cratis-screenplay-model-review`)."
4
+ license: MIT
5
+ ---
6
+
7
+ # Delivery planning
8
+
9
+ ## Purpose
10
+ Turn an accepted `.play` model into a delivery plan: how many slices of which type, in which
11
+ order, who can work in parallel, what each group costs, and when it is done. The model already
12
+ cuts the work into slices and names the events between them, so the plan counts and orders
13
+ those slices instead of guessing at features.
14
+
15
+ Planning does not replace modeling, review or the render and gap-fill gates. A plan is a
16
+ working note, not a contract: when the model changes, recount; when a slice is not accepted,
17
+ it is not planned work yet.
18
+
19
+ ## Ground rules
20
+ - **Count slices, not features.** The unit is one slice of one type
21
+ (`StateChange`, `StateView`, `Automation`, `Translate`). Method and weights:
22
+ `references/slice-counting.md`.
23
+ - **Estimates are ranges from the team's own history.** State the basis (which completed slices,
24
+ how many, how long). With no history the estimate is a *first estimate without history*:
25
+ say so, give a wide range, and replace it as soon as slices complete. Never quote an accuracy
26
+ figure or a duration you cannot trace to a count and a rate.
27
+ - **Events are the contract.** Slice B depends on slice A because B needs an event or view A
28
+ produces. Anyone can build B against the events A will produce, with synthetic `given`
29
+ events, before A is finished. Dependencies are read from the model, not remembered.
30
+ - **Render is not free of effort, and gap-fill is not free of risk.** Stage renders
31
+ `StateChange` and `StateView`; `Automation` and `Translate` are hand-written against the
32
+ model as contract. Check admission per slice with `cratis-screenplay-render-and-gap-fill`
33
+ (version pins: `cratis-screenplay-toolchain` `references/versions.md`) before pricing a slice as
34
+ rendered.
35
+ - **Plans live in `.ai-work/`; tracking lives in GitHub issues** where the repository works
36
+ that way. Never put a plan in the model, in `.cratis/`, or in a documentation folder.
37
+
38
+ ## Procedure
39
+ 1. **Confirm the scope is accepted.** Only slices of a committed model under the root count
40
+ as planned delivery. Drafts and open questions are listed separately as unplanned. If the
41
+ model is still moving, plan only the stable modules and say what is excluded.
42
+ 2. **Inventory the slices.** Use the Screenplay MCP: `describe-application` for counts and
43
+ paged children, `dependency-graph` at slice level for edges, cycles and an advisory
44
+ order, `dependencies` and `find-references` per slice for the contracts it consumes and
45
+ produces and for the `invokes`, action and form edges the graph does not order (`reads` maps to `decidesFrom`, which it does order, but it stays a coordination point). Treat `complete: false` or an ambiguous binding as unknown, never as no
46
+ dependency (`cratis-screenplay-model-authoring`). Without the MCP, read the `.play` files.
47
+ 3. **Classify each slice** by type and by realization: rendered (Stage admits it) or
48
+ hand-written (gap-fill, adapter, external call). Record the reason for each hand-written one.
49
+ 4. **Build the dependency table** (`references/parallel-delivery.md`): per slice, the events
50
+ it consumes, who produces each, and the slices it waits on. A cycle means a feedback loop:
51
+ return it to slice design (usually an Automation slice); never schedule around it.
52
+ 5. **Group into waves.** Slices with no unmet producers form wave 1; each next wave needs
53
+ only earlier waves. Within a wave, slices are independent and can run in parallel. Group
54
+ slices that share one view or one stream into one slice group (one issue).
55
+ 6. **Weigh and estimate** (`references/velocity-and-capacity.md`): apply the team's weights per
56
+ type and realization, divide by measured throughput, and report a range with its basis. Add
57
+ separate lines for what is not slice work: modeling and review gates, integration with
58
+ outside systems, environment and deployment, specifications that need new infrastructure.
59
+ 7. **Track.** One GitHub issue per slice group, in the repository's own issue practice
60
+ (assign the issue, keep an in-progress status in the issue body, check for an existing claim
61
+ before starting): the status block lists the slices, their
62
+ type, the wave, the blockers and each slice's planning status below. The issue's own state
63
+ follows the repository's hygiene (in progress, in review when the PR opens, paused, blocked,
64
+ done only when delivered). Keep the working plan in
65
+ `.ai-work/<task>/delivery-plan.md`.
66
+ 8. **Re-plan after each completed group.** Update throughput, recount if the model changed,
67
+ restate the range. Record the retrospective metrics from `references/velocity-and-capacity.md`.
68
+
69
+ ## Status vocabulary
70
+ Per-slice planning status, a closed set recorded inside the plan and the issue's status block.
71
+ It is not the issue's state: the enclosing issue keeps the repository's own states (for example
72
+ in progress, in review, paused, blocked, done), and is done only when its slices are
73
+ delivered (merged and released where the repository releases).
74
+
75
+ | Status | Meaning |
76
+ |---|---|
77
+ | todo | accepted in the model, not started |
78
+ | in progress | one owner is working on it |
79
+ | blocked | waiting on a named producer, decision or external party; say which |
80
+ | done | built, its specifications pass, and the slice conforms to the model |
81
+
82
+ Before claiming a slice, check its current status. If it is already `in progress`, someone else
83
+ holds it: pick another slice, do not take it over and do not report an error. Move a status only
84
+ to a different value; a repeated update is a signal that another worker got there first.
85
+ Check for an existing claim (assignee and in-progress status) before starting; where the harness
86
+ provides a claim tool such as `issue_work`, its claim step is that guard.
87
+
88
+ ## What a plan states
89
+ - Scope: the modules and slices counted, and what was excluded and why.
90
+ - Slice counts by type, split into rendered and hand-written.
91
+ - The dependency table and the waves.
92
+ - The estimate as a range with its basis, or "first estimate without history".
93
+ - Capacity assumptions: who or what works in parallel, and the constraints on it.
94
+ - Risks that move the range: hand-written slices, outside systems, open questions, a model
95
+ likely to change.
96
+
97
+ ## Limits
98
+ - A rate from one project or one person does not transfer to another team or another kind of
99
+ slice; say when the sample is small or mixed.
100
+ - Counting hides unusually large slices. A slice that needed a design discussion is two slices
101
+ or a modeling question; recount rather than weigh it as "big".
102
+ - Parallel work only pays when slices are truly independent in the dependency table and
103
+ integration of the shared events is owned. Shared writes to one file, one stream or one
104
+ external system serialize the work.
105
+
106
+ ## References
107
+ - `references/slice-counting.md` - types, realization, weights, what to count and exclude.
108
+ Read when counting or classifying slices.
109
+ - `references/velocity-and-capacity.md` - measuring throughput, ranges, capacity math,
110
+ retrospective metrics. Read when producing or updating an estimate.
111
+ - `references/parallel-delivery.md` - dependency table, waves, event contracts, issue
112
+ grouping. Read when splitting work across people or agents.
113
+ - `references/provenance.md` - sources and what was not adopted.
114
+
115
+ ## Related skills
116
+ `cratis-screenplay-slice-design` (slice dependencies), `cratis-screenplay-model-authoring`
117
+ (MCP navigation), `cratis-screenplay-render-and-gap-fill` (what renders, gap-fill handoff),
118
+ `cratis-screenplay-modeling-lifecycle` (phases and gates).