@cratis/pi 7.33.0 → 7.34.1

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 (160) 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 +14 -9
  28. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +5 -5
  29. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +1 -1
  30. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/provenance.md +2 -3
  31. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/public-events-and-direction.md +1 -2
  32. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +9 -5
  33. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +6 -6
  34. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translate-example.md +1 -1
  35. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +14 -13
  36. package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +12 -13
  37. package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +3 -1
  38. package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +2 -2
  39. package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +4 -2
  40. package/package/corpus/skills/cratis-screenplay-delivery-planning/LICENSE +9 -0
  41. package/package/corpus/skills/cratis-screenplay-delivery-planning/SKILL.md +118 -0
  42. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/parallel-delivery.md +45 -0
  43. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/provenance.md +29 -0
  44. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/slice-counting.md +43 -0
  45. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/velocity-and-capacity.md +48 -0
  46. package/package/corpus/skills/cratis-screenplay-delivery-planning/verification.json +16 -0
  47. package/package/corpus/skills/cratis-screenplay-discovery/LICENSE +2 -2
  48. package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +6 -5
  49. package/package/corpus/skills/cratis-screenplay-discovery/references/divergent-sweep.md +1 -0
  50. package/package/corpus/skills/cratis-screenplay-discovery/references/domain-analysis-template.md +92 -0
  51. package/package/corpus/skills/cratis-screenplay-discovery/references/personas-and-causes.md +2 -2
  52. package/package/corpus/skills/cratis-screenplay-discovery/references/provenance.md +4 -3
  53. package/package/corpus/skills/cratis-screenplay-discovery/verification.json +1 -1
  54. package/package/corpus/skills/cratis-screenplay-event-modeling/LICENSE +2 -2
  55. package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +28 -28
  56. package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +7 -5
  57. package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +12 -9
  58. package/package/corpus/skills/cratis-screenplay-event-modeling/references/provenance.md +2 -3
  59. package/package/corpus/skills/cratis-screenplay-legacy-extraction/LICENSE +2 -2
  60. package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +26 -13
  61. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/candidate-inventory.md +6 -1
  62. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +7 -0
  63. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/prologue-safety.md +22 -17
  64. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/provenance.md +2 -3
  65. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md +2 -2
  66. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/side-car-migration.md +1 -0
  67. package/package/corpus/skills/cratis-screenplay-legacy-extraction/verification.json +1 -1
  68. package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +2 -2
  69. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +3 -3
  70. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +3 -1
  71. package/package/corpus/skills/cratis-screenplay-model-review/LICENSE +2 -2
  72. package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +8 -8
  73. package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +2 -2
  74. package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +4 -4
  75. package/package/corpus/skills/cratis-screenplay-model-review/references/model-inventory-report.md +75 -0
  76. package/package/corpus/skills/cratis-screenplay-model-review/references/provenance.md +3 -4
  77. package/package/corpus/skills/cratis-screenplay-model-review/references/public-keys-and-routes.md +1 -1
  78. package/package/corpus/skills/cratis-screenplay-model-review/references/worked-example.md +4 -3
  79. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/LICENSE +2 -2
  80. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +7 -5
  81. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/core-rules-digest.md +131 -0
  82. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/phases.md +1 -1
  83. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/provenance.md +25 -4
  84. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/reasoning-notes.md +2 -2
  85. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/verdicts-and-modes.md +1 -1
  86. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +5 -4
  87. package/package/corpus/skills/cratis-screenplay-projections/SKILL.md +9 -5
  88. package/package/corpus/skills/cratis-screenplay-projections/references/pdl-grammar.md +4 -2
  89. package/package/corpus/skills/cratis-screenplay-read-surface/LICENSE +7 -0
  90. package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +16 -8
  91. package/package/corpus/skills/cratis-screenplay-read-surface/references/provenance.md +21 -0
  92. package/package/corpus/skills/cratis-screenplay-read-surface/references/screen-patterns.md +130 -0
  93. package/package/corpus/skills/cratis-screenplay-read-surface/verification.json +1 -1
  94. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/LICENSE +2 -2
  95. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +58 -46
  96. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/delivery-protocol.md +17 -2
  97. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/drift-and-ledger.md +19 -2
  98. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +22 -4
  99. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/provenance.md +2 -3
  100. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +21 -16
  101. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/worked-example.md +34 -29
  102. package/package/corpus/skills/cratis-screenplay-scenario-coverage/LICENSE +2 -2
  103. package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +5 -4
  104. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +1 -1
  105. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +5 -4
  106. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-example.md +32 -3
  107. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/provenance.md +3 -4
  108. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-catalogue.md +7 -6
  109. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md +3 -3
  110. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-workshop.md +15 -7
  111. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +8 -7
  112. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/view-and-story-specs.md +6 -4
  113. package/package/corpus/skills/cratis-screenplay-slice-design/LICENSE +2 -2
  114. package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +4 -3
  115. package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +2 -2
  116. package/package/corpus/skills/cratis-screenplay-slice-design/references/derived-condition-events.md +68 -0
  117. package/package/corpus/skills/cratis-screenplay-slice-design/references/field-lineage.md +1 -1
  118. package/package/corpus/skills/cratis-screenplay-slice-design/references/provenance.md +5 -5
  119. package/package/corpus/skills/cratis-screenplay-slice-design/references/read-model-design.md +17 -0
  120. package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +6 -6
  121. package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +3 -3
  122. package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +6 -4
  123. package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +2 -1
  124. package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md +3 -2
  125. package/package/corpus/skills/cratis-screenplay-specifications/references/persona-callers-and-cases.md +3 -0
  126. package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +3 -2
  127. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/LICENSE +2 -2
  128. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +9 -9
  129. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +31 -3
  130. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/chronicle-boundaries.md +6 -6
  131. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +12 -11
  132. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/evolution.md +1 -1
  133. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/provenance.md +4 -4
  134. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +1 -1
  135. package/package/corpus/skills/cratis-screenplay-toolchain/LICENSE +2 -2
  136. package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +14 -12
  137. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +3 -3
  138. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +1 -1
  139. package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +3 -1
  140. package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +24 -16
  141. package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +2 -3
  142. package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +41 -12
  143. package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +5 -5
  144. package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +14 -9
  145. package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +9 -3
  146. package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +4 -1
  147. package/package/corpus/skills/cratis-screenplay-ui-composition/LICENSE +2 -2
  148. package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +10 -10
  149. package/package/corpus/skills/cratis-screenplay-ui-composition/references/flow-review.md +1 -1
  150. package/package/corpus/skills/cratis-screenplay-ui-composition/references/provenance.md +2 -3
  151. package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +39 -14
  152. package/package/corpus/skills/cratis-screenplay-ui-composition/references/worked-flow.md +17 -9
  153. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +83 -74
  154. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +62 -12
  155. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/render-example.md +3 -1
  156. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +30 -15
  157. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +21 -1
  158. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +8 -3
  159. package/package/profile-catalog.json +1 -0
  160. 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.
@@ -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
  |---|---|---|
@@ -123,8 +123,7 @@ 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. The pinned CLI/Stage pair (toolchain `references/versions.md`)
126
+ Stage 4.52.0 (previous CLI 3.46.1, history) audited only through v7. The pinned CLI/Stage pair (toolchain `references/versions.md`)
128
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
 
@@ -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 Arc the Stage scaffold pins (see `cratis-stage-rendering-and-sandbox` `references/rendered-application.md`) accepts a collection in a command handler 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 Arc 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
 
@@ -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.
@@ -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
@@ -173,7 +170,8 @@ When a rule depends on state:
173
170
  - otherwise state the rule, and say in review that the target implementation
174
171
  must enforce it consistently. Do not claim the model guarantees it.
175
172
 
176
- 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`).
177
175
 
178
176
  ## `validate`
179
177
 
@@ -242,7 +240,7 @@ choosing or omitting `for` on a production, or fixing `PLAY0469`-`PLAY0478`.
242
240
  computed expressions parse but block binding (`PLAY0268`).
243
241
  - **`for <identifier>`** on an indented line names the event source the event is
244
242
  appended to. At most one per `produces`. To bind, it must name the command's
245
- `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
246
244
  source parses but does not run today.
247
245
  - **`tag`** lines apply literal tags to this append. Tags also exist on the
248
246
  `event` declaration, where they apply to every append of that type.
@@ -341,7 +339,8 @@ constraint OneRegistrationPerInvoice
341
339
  hand-written Chronicle `IConstraint`, which can only declare uniqueness; it warns
342
340
  (`PLAY0396`) and the executable model rejects it. A state transition rule
343
341
  belongs in `validate`/`require`. Use a constraint when two concurrent appends must
344
- 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`).
345
344
 
346
345
  ## `policy` and `persona`
347
346
 
@@ -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 an Arc.Screenplay older than that (its version is in `cratis-screenplay-toolchain` `references/versions.md`), 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),
@@ -3,8 +3,8 @@
3
3
  A `generated` command property and `returns` response bind and reference-execute
4
4
  as ESM v7 (checked at 4.68.0). Current pins:
5
5
  `cratis-screenplay-toolchain/references/versions.md`. CLI#261 is closed: CLI now admits v7
6
- to Stage planning. The historical CLI 3.41.0 v7 canonical corpus received Stage
7
- generated-value and response refusals STAGE-ESM-028/029. Do not turn this into a blanket compiler
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
8
8
  refusal or promise a render from binding alone. Preserve the contract for gap-fill
9
9
  where admission refuses. Historical rules below were read at 4.68.0. Complete compiled example:
10
10
  `cratis-screenplay-toolchain` `references/generated-responses-example.md`.
@@ -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).
@@ -0,0 +1,45 @@
1
+ # Parallel delivery
2
+
3
+ Read when splitting work across people or agents, building the dependency table or grouping issues.
4
+
5
+ ## Why slices can run in parallel
6
+ A slice consumes events and views and produces events and views. Those are its contracts. A slice that needs `OrderConfirmed` can be built and specified against synthetic `given` events before the slice that produces it exists, because the model fixes the event's shape. When the producer lands, the consumer's specifications already describe what it expects. Slice design records this per slice (`cratis-screenplay-slice-design`, `references/slicing.md`); planning reads it.
7
+
8
+ This holds only for event and view contracts. Edges through `reads` of another slice's view, `invokes` of another slice's command from a reaction, and shared streams are real coordination points: record them as edges and plan an owner for each.
9
+
10
+ ## Derive the dependency table
11
+ Use the Screenplay MCP rather than a board or memory (`cratis-screenplay-model-authoring`):
12
+ - `describe-application` for slice counts and children,
13
+ - `dependency-graph` at slice level (`from`/`to`) with its `edges`, `cycles` and `order` views as the starting point for the waves; its order is advisory and covers only `usesFactsFrom`/`reactsTo`/`decidesFrom` edges (`reads` maps to `decidesFrom`; only `asks` edges from invokes, actions and forms, and `shows` edges are left out of order and cycles),
14
+ - `dependencies` and `find-references` for each slice's consumed and produced contracts and for the `reads` and `invokes` edges; `invokes`, action and form edges are not ordered by the graph, and `reads` is ordered but still a coordination point.
15
+
16
+ `complete: false`, uncovered declarations or ambiguous bindings mean the table is incomplete; list them as unknown and resolve them in the model before relying on parallelism. Container `depends on` declarations are orientation, not execution order.
17
+
18
+ Table, one row per slice:
19
+
20
+ | Slice | Type | Realization | Consumes (from slice) | Produces | Waits on | Wave |
21
+ |---|---|---|---|---|---|---|
22
+
23
+ ## Waves
24
+ - Wave 1: slices that consume nothing, or only events their own scope produces.
25
+ - Wave n: slices whose producers are all in earlier waves.
26
+ - Slices in one wave are independent and can run in parallel.
27
+ - A cycle means feedback; model it as an Automation slice or return to slice design. Do not schedule a cycle.
28
+
29
+ Because consumers can build against synthetic events, a wave boundary is an integration check (producer and consumer agree on the contract), not a hard start gate. Say which waves you started early and where the contract check will happen.
30
+
31
+ ## Contract ownership
32
+ - Each event and view has one owning slice; its shape is changed in the model, never in a consumer.
33
+ - A contract change reopens every consumer in the table: recount and notify their owners.
34
+ - When people or agents work in parallel, brief each from the model's slice and its consumed contracts (a brief states the goal, the files owned, the exact verification command, the done condition, the stop conditions and the report format); one writer per branch or worktree.
35
+
36
+ ## Slice groups and issues
37
+ - One GitHub issue per slice group: slices that share a view, a stream or an owner, small enough for one person to finish.
38
+ - Status block lists the slices (name, type, realization), the wave, blockers and each slice's planning status (todo, in progress, blocked, done). That vocabulary is per slice; the issue's own state follows the repository's hygiene (in progress, in review, paused, blocked, done when delivered). Update the block rather than adding progress comments.
39
+ - Claim before starting: assign the issue, keep an in-progress status in its body and check for an existing claim (for example `issue_work` where the harness provides it). If the group is already in progress, choose another; do not take over.
40
+ - Mark `blocked` only with the named producer, decision or outside party.
41
+
42
+ ## Parallelism that does not pay
43
+ - Slices writing the same file, stream or external resource.
44
+ - Two hand-written slices that depend on the same unresolved integration.
45
+ - A wave with one slice: no parallelism, use the time for integration, review or the next wave's briefs.
@@ -0,0 +1,29 @@
1
+ # Provenance
2
+
3
+ ## Method lineage
4
+ The planning method (count the modeled units, let explicit contracts allow parallel work, estimate from the team's measured throughput, plan capacity and review with retrospective metrics) comes from the Event Modeling community: Adam Dymitruk's Event Modeling, and Martin Dilger's writing on estimating from event models. They are cited as practice. The text of this skill is written for Screenplay slices and Cratis delivery.
5
+
6
+ ## Adapted closely (Martin Dilger and Nebulit GmbH)
7
+
8
+ Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
9
+ by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
10
+
11
+ | Source file | Used in | How |
12
+ |---|---|---|
13
+ | `.claude/skills/eventmodeling-orchestrating-event-modeling/references/project-planning-with-event-modeling.md`: contracts let steps proceed in parallel | `SKILL.md` ground rules, `references/parallel-delivery.md` | adapted closely; steps become slices, contracts are the events and views a slice consumes and produces in the `.play` model |
14
+ | same: velocity measured from history, estimating a project by counting | `SKILL.md` procedure, `references/velocity-and-capacity.md` | adapted closely; velocity becomes throughput of weighted slices from issue history, results are ranges with a stated basis |
15
+ | same: variable complexity (typical, complex, simple steps) | `references/slice-counting.md` "Weights" | adapted; weights are by slice type and realization and are calibrated by the team |
16
+ | same: capacity planning, dependency handling across teams, organization-level velocity | `references/velocity-and-capacity.md` "Capacity", `references/parallel-delivery.md` "Waves" | adapted; waves derived from the model's dependencies instead of a spreadsheet |
17
+ | same: common estimation mistakes (equal weights, non-implementation work, ignoring dependencies) | `references/slice-counting.md` "What not to count", `references/parallel-delivery.md` | adapted closely |
18
+ | same: retrospectives and key metrics table | `references/velocity-and-capacity.md` "Retrospective metrics" | adapted closely; metrics extended with cycle time by class, blocked time and rework |
19
+ | `.claude/skills/update-slice-status/SKILL.md`: closed slice status vocabulary and the already-in-status guard | `SKILL.md` "Status vocabulary" | adapted; four statuses (todo, in progress, blocked, done) applied to GitHub issues, the board API dropped; the guard becomes "pick another slice" and `issue_work` claim |
20
+
21
+ ## Not adopted
22
+ | Source material | Why |
23
+ |---|---|
24
+ | "±50% versus ±10%" accuracy claims and "4-6 months guess, 6-9 months actual" comparisons | no source or data given; Cratis estimates are ranges derived from the team's own counts and rates |
25
+ | "Flat cost curve" diagrams and fixed example numbers (3 steps per sprint, 1 week per step) | illustrative figures, not facts; a team's throughput is measured, not assumed |
26
+ | Sprint and week-based schedule spreadsheets | replaced by waves, slice groups and ranges |
27
+ | The eventmodelers board, token and slice-status API, MCP slice listing, and node events | Screenplay MCP navigation and GitHub issues replace them |
28
+ | Statuses Created, Planned, Review, Assigned, Informational | replaced by the four-status set; review is a gate in the lifecycle, assignment is the issue assignee |
29
+ | Autonomous continue-without-asking behavior in the upstream orchestration | Cratis keeps the model-first gates and user authority; planning never skips review or acceptance |
@@ -0,0 +1,43 @@
1
+ # Slice counting
2
+
3
+ Read when counting, classifying or weighing the slices of an accepted model.
4
+
5
+ ## What counts
6
+ One unit per slice of an accepted model. The type is the slice's declared type; the model decides it, not the planner.
7
+
8
+ | Type | What it delivers | Usually realized by |
9
+ |---|---|---|
10
+ | StateChange | a command, its rules and the events it produces | Stage renders it where admitted; else hand-written |
11
+ | StateView | a read model with its projection and query | Stage renders it where admitted; else hand-written |
12
+ | Automation | a reaction, todo list or trigger doing follow-up work | hand-written against the model (gap-fill) |
13
+ | Translate | a capture or translator turning outside data into events | hand-written against the model (gap-fill) |
14
+
15
+ Screens and UI composition belong to the slice whose data and actions they show. Count a screen separately only when the plan has a separate frontend owner, and then count it as its own line, not as a slice.
16
+
17
+ Count a rendered slice and a hand-written slice in different rows even when they share a type. The first row's effort is review, verification and customization; the second's is implementation.
18
+
19
+ ## What not to count as slices
20
+ Plan these as separate lines, not slice weight:
21
+ - modeling, review and acceptance gates (lifecycle phases P0 to P6); P7 to P9 verification is part of each slice's done criteria,
22
+ - environment, hosting, deployment, identity and authorization provider setup,
23
+ - integration with an outside system beyond the slice's own adapter (credentials, sandboxes, contract tests with the other party),
24
+ - migration of existing data,
25
+ - documentation and training.
26
+
27
+ ## Realization check
28
+ Before pricing a slice as rendered, run the admission probe in `cratis-screenplay-render-and-gap-fill` for the whole model. Do not restate version pins in a plan; cite `cratis-screenplay-toolchain` `references/versions.md` for the pair you used. A slice Stage refuses (an `STAGE-ESM-*` code) is hand-written work with the model as contract: price it as hand-written and record the refusal code.
29
+
30
+ ## Weights
31
+ Weights are the team's, calibrated from completed slices, not constants of the method. Start with a simple scale and let history replace it:
32
+
33
+ | Class | Starting weight (first estimate without history) |
34
+ |---|---|
35
+ | rendered StateChange or StateView, no customization | 1 (the reference) |
36
+ | StateChange or StateView with customization or hand-written | 2 |
37
+ | Automation or Translate | 3 |
38
+ | any slice with an outside system on the critical path | add a separate integration line |
39
+
40
+ These starting weights are placeholders to be replaced. State them as assumptions in the plan. After the first completed groups, derive each class's weight as its median actual effort divided by the median effort of the reference class.
41
+
42
+ ## Re-count triggers
43
+ Recount when: the model's slice set changes, a slice's type changes, a slice splits or merges, Stage admission changes after a tool upgrade, or a hand-written slice turns out renderable (or the reverse).
@@ -0,0 +1,48 @@
1
+ # Velocity and capacity
2
+
3
+ Read when producing or updating an estimate, or when running a retrospective.
4
+
5
+ ## Measure throughput from history
6
+ Throughput is the number of weighted slices a team completes per period, measured from the team's own finished slices.
7
+
8
+ 1. List the completed slices of the last few periods (weeks or iterations). A slice is completed when it is `done` in the status vocabulary: built, specifications passing, conforming to the model.
9
+ 2. Take dates from the issue or pull request history (opened and closed, or claimed and merged), not from memory.
10
+ 3. Record per period: slices completed by class, effort spent (person-days or agent-sessions), and anything unusual (leave, outages, a model rework).
11
+ 4. Compute the median and the lowest and highest period. Report all three.
12
+
13
+ With fewer than about three completed periods or a handful of slices, the number is a first estimate without history: say so, keep the range wide, and do not extrapolate a trend.
14
+
15
+ ## Estimate as a range
16
+ ```
17
+ remaining weighted slices = sum over classes (count x team weight)
18
+ duration low / expected / high = remaining / (high, median, low throughput)
19
+ ```
20
+ - Report the range and its basis in one line: "N weighted slices; throughput X to Y per week from the last K weeks (slices ...)". Include the separate lines for work that is not slice work.
21
+ - Do not state accuracy percentages or comparisons with other methods; they cannot be derived from your data. Calibrate by comparing your past ranges with what happened (below).
22
+
23
+ ## Capacity
24
+ Throughput scales with people only along the dependency table: the useful parallelism of a wave is the number of independent slices in it, capped by the number of people or agents. A slice has one owner, so its work cannot be split across workers.
25
+ ```
26
+ lower bound for a wave = (weighted slices in the wave / workers in use) / throughput per worker
27
+ elapsed time for a wave = (largest total weight assigned to one worker) / throughput per worker
28
+ total elapsed time = sum over waves (waves are sequential)
29
+ ```
30
+ - Assign the wave's slices to workers first (heaviest first, each to the least-loaded worker), then take the most-loaded worker. The aggregate formula is only a lower bound; the wave can never finish before its heaviest single slice.
31
+ - Example: three independent slices weighted 1, 1 and 3, three workers at one weighted unit per week. The lower bound says 5 / 3 = 1.7 weeks; the assignment gives loads 3, 1 and 1, so the wave takes 3 weeks. Split a heavy slice in the model (slice design) if it dominates a wave, never by sharing it between workers.
32
+ - Throughput per worker comes from history with that many workers; adding a worker adds coordination cost, so measure after the change rather than assuming it multiplies.
33
+ - Shared contracts (one event consumed by several slices) need one owner; count that integration as work.
34
+ - Capacity levers other than people: faster verification (spec run time, CI queue), fewer hand-written slices (a model change that Stage admits), better adapters. Estimate their effect from a before and after measurement, not a promise.
35
+
36
+ ## Retrospective metrics
37
+ After each completed group or iteration, record:
38
+
39
+ | Metric | How | What it shows |
40
+ |---|---|---|
41
+ | Throughput | weighted slices done per period | the rate used for the next range |
42
+ | Slice cycle time by class | claimed to done, per class | which classes carry the cost; recalibrates weights |
43
+ | Estimate fit | planned range versus actual, per group | whether ranges were too narrow or too wide |
44
+ | Parallel share | slices worked in parallel / slices in waves that allowed it | whether parallelism was used |
45
+ | Blocked time | time in `blocked` and the named cause | dependency, decision or external waits |
46
+ | Rework | slices reopened after done, or recounted after a model change | model stability |
47
+
48
+ Use the results to adjust weights, widen or narrow ranges, and decide what to unblock first. Write them in `.ai-work/<task>/delivery-plan.md`; a pattern that must outlive the session becomes an issue.
@@ -0,0 +1,16 @@
1
+ {
2
+ "skill": "cratis-screenplay-delivery-planning",
3
+ "input": "The model is accepted. How long will delivering it take, in what order, and how do we split it across three people?",
4
+ "fixtures": [],
5
+ "assertions": [
6
+ { "kind": "skill-contains", "value": "first estimate without history" },
7
+ { "kind": "skill-contains", "value": "Count slices, not features." },
8
+ { "kind": "skill-contains", "value": "`dependency-graph`" },
9
+ { "kind": "skill-contains", "value": "already `in progress`" },
10
+ { "kind": "skill-contains", "value": "Automation` and `Translate` are hand-written" },
11
+ { "kind": "skill-contains", "value": "Never quote an accuracy", "file": "SKILL.md" },
12
+ { "kind": "skill-contains", "value": "Estimate fit", "file": "references/velocity-and-capacity.md" },
13
+ { "kind": "skill-contains", "value": "Wave 1", "file": "references/parallel-delivery.md" },
14
+ { "kind": "skill-contains", "value": "One GitHub issue per slice group", "file": "references/parallel-delivery.md" }
15
+ ]
16
+ }