@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
@@ -11,7 +11,7 @@ sections, in this order:
11
11
  not empty, the skill `LICENSE` carries the "Third-party notices" section with the **complete**
12
12
  MIT text (copyright line, permission notice and disclaimer). Closely adapted material is
13
13
  attributed to the source it came from, not to a neighboring one.
14
- 2. **Adapted closely (Martin Dilger and Nebulit GmbH, with agreement).** One row per item taken from Martin Dilger and Nebulit GmbH's
14
+ 2. **Adapted closely (Martin Dilger and Nebulit GmbH).** One row per item taken from Martin Dilger and Nebulit GmbH's
15
15
  agentic-engineer: source file, where it is used, how. Mark "idea; our wording kept" where only
16
16
  the idea was taken. The skill `LICENSE` carries the Nebulit notice.
17
17
  3. **Method lineage.** Public method sources (books, talks, standards), cited as sources of ideas.
@@ -34,11 +34,10 @@ full notice is in this skill's `LICENSE` ("Third-party notices").
34
34
  | same file, "Mid-Workflow Entry" | `SKILL.md`, `phases.md` "Resume mid-workflow" | Entry points table and identity recomputation added |
35
35
  | same file, "Final Output" and "Quality Checklist" | `phases.md` "Final output" and "Quality checklist (closing)" | Items rewritten around Screenplay verdicts, specifications and review |
36
36
 
37
- ## 2. Adapted closely (Martin Dilger and Nebulit GmbH, with agreement)
37
+ ## 2. Adapted closely (Martin Dilger and Nebulit GmbH)
38
38
 
39
39
  Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
40
- by Martin Dilger and Nebulit GmbH (https://nebulit.de). The repository carries no licence file; this material
41
- is adapted with the agreement of Martin Dilger and Nebulit GmbH.
40
+ by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
42
41
 
43
42
  | Source file | Used in | How |
44
43
  |---|---|---|
@@ -55,6 +54,28 @@ is adapted with the agreement of Martin Dilger and Nebulit GmbH.
55
54
  | `.claude/skills/update-prompt-status/SKILL.md` and kit "exactly two status updates per prompt" | `references/per-turn-protocol.md` step 7 | Idea; one start marker and one closing outcome per turn, our wording |
56
55
  | `.claude/skills/eventmodeling-core-rules/SKILL.md`: modeling and critic postures never mixed; a known refusal is a documented rule | `SKILL.md` "Modes", "Do not cut corners to save tokens or effort" | Idea; our wording kept |
57
56
  | `.claude/skills/connect/SKILL.md`: discover capabilities once per session | `SKILL.md` "Run protocol", `references/identity-and-edits.md` | Idea; our wording kept |
57
+ | `.claude/skills/eventmodeling-core-rules/SKILL.md`: modes (modeling versus critic), element definitions and naming, causality, role catalog, field lineage, open question versus decided failure, offline-first, anti-patterns, structural shapes, quick self-check | `references/core-rules-digest.md` | Adapted closely as a one-page card translated to `.play` constructs. Not adopted: lanes, the single-issuer command rule, linked copies, the translation chain with a never-closing todo list, "read model never drives command validation" (Screenplay `reads` + `require`), the update-feeding-read-model procedure; "bed" is a candidate signal here, not an always-flag |
58
+
59
+ ## Not adopted from agentic-engineer (rejected, with reasons)
60
+
61
+ Recorded once here for the whole method family, checked against the same commit
62
+ (`07b0f30648d663cb588d7e2c7aa031af9dfc21f2`). A rejection stays rejected unless a released Screenplay or
63
+ Chronicle capability removes its reason.
64
+
65
+ | Source file or topic | Reason |
66
+ |---|---|
67
+ | `connect`, `learn-eventmodelers-api`, `load-slice`, `update-prompt-status`, and the 24 `references/api-fallback.md` files | Transport and credentials for the eventmodelers board. The Screenplay MCP server (`cratis screenplay mcp`) is the only transport; its tool catalog is `cratis-screenplay-model-authoring` `references/mcp-tools.md` and the root is `mcpServers.screenplay.root` in `.cratis/ai.json` |
68
+ | `place-element`, `html-screen`, `storyboard-screen`, `discover-storyboard` HTML reconstruction | Board lanes, columns, cells and HTML or wireframe rendering. Screenplay screens are declarative and Stage renders them; a recreated page is never evidence |
69
+ | `.agent-modeling-kit/README.md`, `lib/config.js`, `package.json`, `package-lock.json`, root `CLAUDE.md` and `README.md` | Board runtime, config walk, package stubs and an Emmett/Postgres/Express/Flyway template; Chronicle and Arc are the runtime here |
70
+ | `.agent-modeling-kit/CLAUDE.md` and `AGENTS.md`: `<promise>`, progress file, board prompt queue, post-question-and-continue autonomy | Board-specific loop control. Our per-turn protocol and stop-or-assume keep the useful parts, and Cratis stops for consequential unknowns |
71
+ | `eventmodeling-designing-event-models/references/examples.md` | The order example embeds a calculated `total` event field and a generic domain; Cratis examples are compiled |
72
+ | Single issuer per command; a screen wired to more than one command always fails; "the bed" as an always-flag | Screenplay commands may have several origins and a screen several actions; the shape stays a candidate signal |
73
+ | "A read model never drives command validation" | Screenplay commands declare `reads` and `require`; a decision uses stored state only through declared `reads` |
74
+ | Compulsory todo list per automation; never-closing translation queue; every trigger is an event | Direct reactions, clock and application triggers and `capture` are supported; a translation holding pending work gets a terminal disposition |
75
+ | "Default gracefully" and log-and-drop for missing external data | Defaults are never fabricated and failures are recorded facts |
76
+ | Linked copies, backward-arrow handling, `session:` field mappings, `validate_model` batch calls | Board mechanics; caller identity is `context` and the model has no columns |
77
+ | "No natural end" red flag, event-granularity tip, archival splits, `no computed fields` as an absolute | Long-lived identities are normal here, generic update events are defects, and decided calculations are facts |
78
+ | Emmett decide/evolve structure, `processor.ts`, processor ids and locks, DLQ store, SQL operations, Flyway, Testcontainers, `routes.ts` | A different runtime; Chronicle and Arc own delivery, projection and transport |
58
79
 
59
80
  ## 3. Method lineage
60
81
 
@@ -14,8 +14,8 @@ PLAY0477 retained for events. Specifications accept `description`, not documenta
14
14
  put their longer reasoning on the owning slice. Projections/screens do not accept it.
15
15
  Canonical printing retains documentation on its owner. It is report-only (PLAY0270),
16
16
  absent from executable bytes and `modelRevision`; edits change source identity
17
- (`verdicts-and-modes.md`). Neither description nor documentation is rendered as code
18
- (Stage#178): model the rule first, never treat prose as enforcement.
17
+ (`verdicts-and-modes.md`). Neither description nor documentation reaches rendered code except as XML doc
18
+ comments (Stage#178 closed): model the rule first, never treat prose as enforcement.
19
19
 
20
20
  Cover, briefly and only where real:
21
21
  1. Scope: the business process and the identities its streams are keyed by.
@@ -18,7 +18,7 @@ defines what each result means and how to report it. Do not copy version facts h
18
18
 
19
19
  | Result | Evidence | Does NOT prove |
20
20
  |---|---|---|
21
- | V1 authorable | folder-mode validate with warnings as errors. The standalone compiler includes imports in folder and file mode; the pinned `cratis` CLI (v3.28.2) file validation still ignores imports (cli#244, probed), so folder mode is the cross-tool check | semantics, binding, specs |
21
+ | V1 authorable | folder-mode validate with warnings as errors. The standalone compiler includes imports in folder and file mode; `cratis` CLI 3.28.2 file validation ignored imports (cli#244, probed); since 3.28.4 (PR #258) it compiles the file with its imports, but folder mode stays the recommended cross-tool check | semantics, binding, specs |
22
22
  | V2 executable diagnostics | the executable model reports no diagnostics for the scope | that any spec runs or passes |
23
23
  | V3 binding-ready | the model binds to the executable semantic model | that any spec runs or passes |
24
24
  | V4 reference specs run | the reference execution route only: engine, and per `.play` specification passed / failed / unsupported / cancelled | rendering, generated code, build or target tests |
@@ -18,10 +18,10 @@ speaks in them; never model board mechanics (lanes, node ids, positions).
18
18
  | Chapter / workflow | `feature` | feature folder | vertical slices |
19
19
  | Slice | `slice` (one behaviour, not one artifact of each kind) | vertical slice folder | vertical slices |
20
20
  | Scenario (Given/When/Then) | `specification` | generated spec class `when_<spec_name>` (Debug) or hand-written C# specs | `cratis-screenplay-specifications`; C# spec skills |
21
- | Storyline (ordered beats) | a **family** of specifications sharing example data, each one transition (no storyline syntax at the verified Screenplay v4.66.0) | several spec classes | specifications |
21
+ | Storyline (ordered beats) | a **family** of specifications sharing example data, each one transition (no storyline syntax at Screenplay 4.139.0) | several spec classes | specifications |
22
22
  | Field validation | concept `validate` (every use) / command `validate`, `require` | `ConceptValidator<T>` / `CommandValidator<T>` | command validation |
23
23
  | Role permission ("Cannot") | `policy` + `authorize` + `then denied` spec; ownership via `claim ... matches subject` | `[Authorize(Policy)]`, generated policies | authorization |
24
- | Precondition on stream state | `reads` + `require` as stated intent, not enforced at the verified Screenplay v4.66.0 (target: Arc `[ProtectedDecision]` + `DecisionRead<T>`, or Chronicle DCB; APIs available to gap-fill in Stage 4.51.3's Arc 22.50.5/Chronicle 19.32.0, not emitted protection) | decision over a guarded read | command validation |
24
+ | Precondition on stream state | `reads` + `require` as stated intent, not enforced at Screenplay 4.139.0 (target: Arc `[ProtectedDecision]` + `DecisionRead<T>`, or Chronicle DCB; APIs available to gap-fill in Stage 4.73.1's scaffold of Arc 22.68.0/Chronicle 19.45.0, not emitted protection) | decision over a guarded read | command validation |
25
25
  | Generated id (`derived:uuid4()`) | `generated` (authorable, not executable) | id supplied before `Handle()` | commands |
26
26
  | External system / outbound call | `Translate` slice (inbound); `system`/`operation` (authorable, not executable) or Automation (outbound) | `ICommandOperation` / reactor | operations, reactors |
27
27
  | HTML mockup | `screen` Level 1 + board (`visualize-model`) | default Scene composition | ui composition |
@@ -42,8 +42,9 @@ Screenplay meaning, and when you meet the older usage, translate it and say so.
42
42
  - Screenplay **`reaction`**: the construct that models it (`when` trigger, optional `where`,
43
43
  `invokes` a command or `produces` events).
44
44
  - Chronicle **reactor**: C# observer, usually for side effects; it does not by itself define
45
- business decisions. A Screenplay reaction is authorable and bindable, but Stage `v4.24.2` renders no Automation or
46
- Translate slice: the reactor and command are gap-fill code.
45
+ business decisions. A Screenplay reaction is authorable and bindable, but Stage 4.73.1 renders no Automation or
46
+ Translate slice: the reactor and command are gap-fill code. A reaction that both produces events and invokes commands is
47
+ refused by Stage (`STAGE-ESM-037`); Arc 22.72.0 and later run one reactor returning events and commands (the Stage scaffold's Arc 22.68.0 needs a proven override), so keep the reaction whole.
47
48
 
48
49
  ## Scenario vs specification
49
50
  "Scenario" is the Event Modeling example and the scenario *types* `cratis-screenplay-scenario-coverage` uses for
@@ -35,7 +35,8 @@ source is the single flow model.
35
35
  The update follows `commands.md`, `events.md` and `mcp/authoring-tools.md` at
36
36
  that main commit (after v4.52.0); no PDL example changes in this update.
37
37
 
38
- Checked against the Screenplay repository at tag `v4.31.0` (commit `355dffb`):
38
+ Originally checked against the Screenplay repository at tag `v4.31.0` (commit `355dffb`; the
39
+ projection grammar was re-read at v4.139.0 for headers and dynamic keys):
39
40
  `Documentation/screenplay/projections/` (including `semantic-model.md`, `keys.md`
40
41
  and `variants.md`), `readmodels.md`, `diagnostics.md` and decisions 0001 and 0002.
41
42
  Every example below compiles with that version's compiler. Reverify before
@@ -88,8 +89,11 @@ Read [observer filters](../cratis-screenplay-toolchain/references/production-rou
88
89
 
89
90
  ## Projection-level directives
90
91
 
91
- `no automap`, `sequence <name>`, `file <path>`. `sequence` is a realization
92
- concern and does not bind to the executable model.
92
+ `description "..."` (or a fenced text block) on the projection header (report-only `PLAY0270`; variants
93
+ and nested blocks take none), `no automap`, `sequence <name>`, `file <path>`. `sequence` is a realization
94
+ concern and does not bind to the executable model. A mapping target may end in a dynamic dictionary
95
+ key, `count eventCountByType.$eventContext.eventType.id` (one entry per distinct value); only
96
+ `$eventContext` resolves there, any other `$` text is a literal key with warning `PLAY0299`.
93
97
 
94
98
  ⚠️ **Do not write `key` on the projection.** It parses, but neither Chronicle nor
95
99
  the executable model routes any event by it, and it is not a default for the
@@ -328,8 +332,8 @@ What the executable model does with it (ESM v3):
328
332
  - The body is an opaque attachment identified by a content hash, never compiled
329
333
  or run by Screenplay. The reference runner cannot compute reducer state, so a
330
334
  specification that reads a reducer-built read model reports unsupported and
331
- never passes. A target must supply the transition. Stage 4.24.0 admits only pure reducer bodies
332
- (Roslyn allowlist); an impure body is gap-fill code, and the model stays the contract.
335
+ never passes. A target must supply the transition. Stage (4.73.1) admits only pure reducer bodies
336
+ (Roslyn allowlist, `STAGE-ESM-019`/`-022`); an impure body is gap-fill code, and the model stays the contract.
333
337
 
334
338
  **Prefer a projection where one will do.** A reducer is code, and code is the part
335
339
  of a document a reader cannot check at a glance.
@@ -10,7 +10,9 @@
10
10
 
11
11
  Checked against `Documentation/screenplay/projections/{grammar,semantic-model,keys,variants}.md`
12
12
  and `Source/DotNET/Screenplay/Parsing/ProjectionParser.cs` at Screenplay tag
13
- `v4.31.0` (commit `355dffb`).
13
+ `v4.31.0` (commit `355dffb`); the header `description` and the dynamic dictionary-key target
14
+ (`Target = ["@"] Path [DynamicKey]`, `DynamicKey = "." "$eventContext" "." EventContextPath`) were added in
15
+ later releases and re-read at v4.139.0.
14
16
 
15
17
  The grammar says what **parses**. It does not say what an event does at runtime:
16
18
  Chronicle's lowering decides that (Screenplay decision 0001), and the
@@ -143,7 +145,7 @@ LiteralKeyword = "literal", " ", Literal ; (* parsed at the Expr level *)
143
145
  | `PLAY0190` | A reducer rule body opens with an unknown word |
144
146
  | `PLAY0191` | A read model is built by more than one projection or reducer |
145
147
  | `PLAY0192` | A read model is declared more than once |
146
- | `PLAY0295`–`PLAY0299` | An `$eventContext` path the event-context catalog does not have |
148
+ | `PLAY0295`–`PLAY0299` | An `$eventContext` path the event-context catalog does not have; `PLAY0299` also warns when a dynamic dictionary key uses a `$` source other than `$eventContext` |
147
149
  | `PLAY0380` | Chronicle drops part of a construct: `all` below the top level, or `automap` on a joined event |
148
150
  | `PLAY0381` | A projection-level `key` routes no event |
149
151
  | `PLAY0382`–`PLAY0385` | Variant errors: no `enters on`, shared mapping missing on a variant, duplicate variant name, entering event claimed twice |
@@ -1,2 +1,9 @@
1
1
  Copyright (c) Cratis. All rights reserved.
2
2
  Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ Third-party notices
5
+
6
+ This skill adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
7
+ (https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
8
+ https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
9
+ material remains credited to Martin Dilger and Nebulit GmbH. See references/provenance.md.
@@ -150,7 +150,8 @@ pushing; without the marker a query is one-shot, which is the default and what
150
150
  most reads are. The marker qualifies only *how* the result arrives, so it composes
151
151
  with `[]`, `optional`, `by`, `filter`, `authorize` and a `performer`, and a screen binds
152
152
  to a live query exactly as it binds to a one-shot one. The delivery itself is the
153
- target runtime's: the executable model does not bind observable queries.
153
+ target runtime's: the executable model binds `observable` queries (delivery `live`) that
154
+ have no `filter`, `scoped to` or `performer`.
154
155
 
155
156
  Paging, sorting and change-set delivery for queries are accepted as Screenplay
156
157
  decision 0010 but **not in the language yet**. Do not invent syntax for them.
@@ -173,13 +174,14 @@ on the header line is a declaration error, not a shorthand.
173
174
 
174
175
  ### What runs
175
176
 
176
- In the Screenplay 4.66.0 executable model, only the keyed snapshot shape binds:
177
- `=> <ReadModel> optional` with one caller-supplied `by` argument and no `observable`,
178
- `filter`, `scoped to` or `performer`. Anything else, including `=> <ReadModel>`
179
- and `=> <ReadModel>[]`, reports `PLAY0268`. Its `authorize` gate runs before
177
+ In the Screenplay 4.139.0 executable model (admitted since 4.105.0) these bind: a keyed
178
+ `=> <ReadModel> optional` with one caller-supplied `by` argument, an unfiltered list
179
+ `=> <ReadModel>[]`, a list narrowed by one caller-supplied `by` key, and the `observable`
180
+ form of each. `filter`, `scoped to`, `performer`, `by ... from` and composite `by` report
181
+ `PLAY0268`, as does a single non-optional `=> <ReadModel>`. Its `authorize` gate runs before
180
182
  the lookup, ANDed with module and feature gates; a denied caller gets
181
183
  `Unauthorized`. Pin that with a `given caller` fixture and `then denied` (see
182
- `cratis-screenplay-specifications`). Model the richer query shapes when the
184
+ `cratis-screenplay-specifications`). Model `filter`, `scoped to` and `performer` shapes when the
183
185
  application needs them; just do not claim the reference runner exercised them.
184
186
 
185
187
  ## `screen` — three levels
@@ -192,8 +194,10 @@ commands and screens it names are declared elsewhere.
192
194
  ```screenplay excerpt
193
195
  screen InvoiceList
194
196
  data InvoiceListReadModel[] via query ListInvoices
195
- action RegisterInvoice
196
- navigate to RegisterInvoiceScreen
197
+ section registerInvoiceInput
198
+ title "Register invoice"
199
+ on click
200
+ navigate to RegisterInvoiceScreen
197
201
  action CancelInvoice
198
202
  ```
199
203
 
@@ -307,8 +311,12 @@ binding failures are errors.
307
311
  Read `references/versions.md` in `cratis-screenplay-toolchain` when choosing a tool, checking versions, or assessing executable and renderable subsets. Where a construct sits in the
308
312
  method: `cratis-screenplay-modeling-lifecycle` and `cratis-screenplay-slice-design`.
309
313
 
314
+ Read [screen patterns](references/screen-patterns.md) when deciding whether a screen is an input, status or error-state screen and which `data` and `action` lines it needs.
315
+
310
316
  ## Route near misses
311
317
 
318
+ Attribution and licences: `references/provenance.md`.
319
+
312
320
  - How events fill the read model: `cratis-screenplay-projections`.
313
321
  - Layouts, templates, forms, component bindings, toolbars, outlets, contributions, packages and themes: `cratis-screenplay-ui-composition`.
314
322
  - Asserting query results: `cratis-screenplay-specifications`.
@@ -0,0 +1,21 @@
1
+ # Provenance
2
+
3
+ ## Adapted closely (Martin Dilger and Nebulit GmbH)
4
+
5
+ Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
6
+ by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger
7
+ and Nebulit GmbH. The notice is in this skill's `LICENSE`.
8
+
9
+ | Source file | Used in | How |
10
+ |---|---|---|
11
+ | `.claude/skills/eventmodeling-storyboarding-events/SKILL.md`, "Common Patterns": input screen, status screen, error state | `references/screen-patterns.md` | Adapted closely and mapped to `screen`, `data`, `action` and `specification` (`then error`); one screen per column, lanes, actor perspective rows and mandatory rendering not adopted; the example is compiled with Screenplay 4.139.0 |
12
+
13
+ Not adopted: HTML screen reconstruction and wireframe sketching (`html-screen`, `storyboard-screen`), which are board
14
+ mechanics; Screenplay screens are declarative and Stage renders them.
15
+
16
+ ## Other lineage
17
+
18
+ - Screenplay language documentation and the released tool, pinned in `cratis-screenplay-toolchain`
19
+ `references/versions.md`: the `readmodel`, `query` and `screen` constructs.
20
+ - Event Modeling (Adam Dymitruk) and Martin Dilger, *Understanding Eventsourcing*: the screen as the point where
21
+ a person reads a view and decides.
@@ -0,0 +1,130 @@
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
+ # Screen patterns
5
+
6
+ ## Contents
7
+
8
+ - Input screen
9
+ - Status screen
10
+ - Error state
11
+ - A complete example
12
+ - What a screen pattern is not
13
+
14
+ Three screen shapes recur in almost every model. Decide which one a screen is before declaring
15
+ its `data` and `action` lines; the shape tells you which read model and which command it needs.
16
+ Adapted from Martin Dilger and Nebulit GmbH's storyboarding patterns (see `provenance.md`),
17
+ translated to `screen`, `data`, `action` and `specification`.
18
+
19
+ ## Input screen
20
+
21
+ The person fills in a form, submits, and a fact is recorded.
22
+
23
+ - The form fields are the command's inputs; a field the person should not supply (their own
24
+ identity, the tenant) comes from context, not the form (`cratis-screenplay-command-surface`
25
+ `references/context.md`).
26
+ - The submit is `action <Command>` on the screen. The screen needs no read model when it is a
27
+ blank creation form; when it shows current state before the person acts (the berth's
28
+ availability, the amount still owed), it also needs `data <ReadModel> via query <Query>`.
29
+ - After success the person lands somewhere meaningful: `navigate to <Screen>` on the action, or the
30
+ list that now contains the new item. Where the person goes next is part of the story, so name it.
31
+
32
+ ## Status screen
33
+
34
+ The person looks at where something stands and decides what to do next.
35
+
36
+ - `data <ReadModel> via query <Query> [by <param>]` supplies the current state, built from the
37
+ events so far. Every field shown has a source in that read model.
38
+ - The available actions depend on state. A static `action` line is always offered; an action that
39
+ must differ by state is a guarded action (`references/guarded-actions.md`), never prose.
40
+ - A status screen with no incoming view is a gap; only a blank creation form is exempt.
41
+
42
+ ## Error state
43
+
44
+ The person acts and the command is refused: no event is recorded, a message is shown, and the
45
+ person can retry or choose another action.
46
+
47
+ - The refusal is not drawn on the screen. It is behavior, pinned by a `specification` with
48
+ `then error` (a rule) or `then denied` (a gate), and by the command's `validate` and `require`
49
+ messages, which are the text the person sees.
50
+ - Name the way out. After a refusal the person can correct the input and submit again, or take a
51
+ different action on the same screen. If neither is possible, the slice has a dead end; record
52
+ it as an open question.
53
+ - Do not add a screen per error. One screen with its refusal specifications covers the states.
54
+
55
+ ## A complete example
56
+
57
+ A berth booking form that shows availability (input screen over a view), a booking list that
58
+ shows state (status screen), and the refusal pinned by a specification (error state).
59
+
60
+ ```screenplay
61
+ domain Harbourlight.Berths
62
+
63
+ concept BookingId : Uuid
64
+ concept BerthName : String
65
+ validate
66
+ not empty message "A berth needs a name"
67
+
68
+ policy IsAuthenticated
69
+ require authenticated
70
+
71
+ module Berths
72
+ description "Berth bookings for one marina"
73
+ authorize IsAuthenticated
74
+ feature Bookings
75
+ slice StateChange BookBerth
76
+ description "A skipper books a berth"
77
+ command BookBerth
78
+ bookingId BookingId identifier
79
+ berth BerthName
80
+ produces BerthBooked
81
+ for bookingId
82
+ berth = berth
83
+ event BerthBooked
84
+ berth BerthName
85
+ screen BookBerthScreen
86
+ title "Book a berth"
87
+ action BookBerth
88
+ navigate to OpenBookingsScreen
89
+ specification BookingABerth
90
+ given caller
91
+ authenticated
92
+ when BookBerth
93
+ bookingId = "3b0c7a14-5d2e-4f61-8a9b-0c1d2e3f4a01"
94
+ berth = "Pier 2, berth 14"
95
+ then BerthBooked
96
+ for "3b0c7a14-5d2e-4f61-8a9b-0c1d2e3f4a01"
97
+ berth = "Pier 2, berth 14"
98
+ specification BookingWithoutABerthNameIsRefused
99
+ given caller
100
+ authenticated
101
+ when BookBerth
102
+ bookingId = "3b0c7a14-5d2e-4f61-8a9b-0c1d2e3f4a02"
103
+ berth = ""
104
+ then error "A berth needs a name"
105
+
106
+ slice StateView OpenBookings
107
+ description "The harbour office lists the bookings that hold a berth"
108
+ readmodel OpenBooking
109
+ bookingId BookingId
110
+ berth BerthName
111
+ query ListOpenBookings => OpenBooking[]
112
+ projection OpenBookings => OpenBooking
113
+ from BerthBooked
114
+ bookingId = $eventSourceId
115
+ berth = berth
116
+ screen OpenBookingsScreen
117
+ title "Open bookings"
118
+ data OpenBooking[] via query ListOpenBookings
119
+ action BookBerth
120
+ ```
121
+
122
+ ## What a screen pattern is not
123
+
124
+ - Not a column or a lane: a screen is a declaration in a slice, not a position on a timeline.
125
+ One screen per step is not a rule; a screen hosts every action the person can reasonably take
126
+ there, and an action may be reachable from several screens.
127
+ - Not a mockup: a drawn page is never evidence for the model, and a Level 1 screen is a data and
128
+ action contract that a renderer or a person fills in (`cratis-screenplay-ui-composition`).
129
+ - Not mandatory to render: a screen that stays design-only is still a contract for lineage and
130
+ review.
@@ -16,7 +16,7 @@
16
16
  { "kind": "skill-contains", "value": "The tenant is the default and stays unstated" },
17
17
  { "kind": "skill-contains", "value": "belongs on a `from` parameter, never on a `filter`" },
18
18
  { "kind": "skill-contains", "value": "warnings, not errors" },
19
- { "kind": "skill-contains", "value": "the executable model does not bind observable queries" },
19
+ { "kind": "skill-contains", "value": "the executable model binds `observable` queries" },
20
20
  { "kind": "skill-contains", "value": "A compiling query is not evidence that access control works" },
21
21
  { "kind": "skill-contains", "value": "decision 0010 but **not in the language yet**" }
22
22
  ]
@@ -5,5 +5,5 @@ Third-party notices
5
5
 
6
6
  This skill adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
7
7
  (https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
8
- https://nebulit.de), used with the agreement of Martin Dilger and Nebulit GmbH. That repository
9
- carries no licence file; the adapted material remains credited to Martin Dilger and Nebulit GmbH.
8
+ https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
9
+ material remains credited to Martin Dilger and Nebulit GmbH.
@@ -9,9 +9,10 @@ license: MIT
9
9
  ## Purpose
10
10
 
11
11
  Act as a **capability probe and deterministic delivery verifier**, not as a code author.
12
- `cratis render` takes the whole application: if any reachable construct is outside what Stage
13
- admits, that run publishes nothing. This skill finds out what renders, publishes it, proves it
14
- builds and that its generated specifications pass, and reports everything else honestly.
12
+ `cratis render` compiles and binds the whole model, then admits the selected scope (the whole
13
+ application, or `--scope` modules, features and slices): if any construct in that scope is outside
14
+ what Stage admits, that run publishes nothing. This skill finds out what renders, publishes it,
15
+ proves it builds and that its generated specifications pass, and reports everything else honestly.
15
16
  Behaviour the renderer rejects is delivered by `slice-implementer` with the `.play` model as
16
17
  the contract, never smuggled into `Customizations/`.
17
18
 
@@ -21,23 +22,24 @@ rule is in `cratis-screenplay-modeling-lifecycle` ("Decide the level first"); it
21
22
 
22
23
  ## Verified product sources
23
24
 
24
- Version pins live once in `cratis-screenplay-toolchain` `references/versions.md`. Read that file before selecting the compiler and renderer versions for delivery.
25
-
26
- | Source | Pin | Used for |
27
- | --- | --- | --- |
28
- | cratis CLI | `3.50.0` (`v3.50.0`) | Source-checked `Directory.Packages.props`: Stage 4.67.0, Screenplay 4.131.0, `Cratis.Arc.Screenplay` 22.54.0, Chronicle 19.32.0, Fundamentals 7.22.8; default runtime image `cratis/stage:4.67.0`. Previous CLI 3.46.1 used Stage 4.52.0/Screenplay 4.130.0. No new render/browser probe. UI-profile rejection (`CLI-RENDER-007` to `CLI-RENDER-010`) and render-then-recover shipped in 3.41.0 (Cratis/cli#301). Historical screens release vector: 3.40.7 (`af9f18e`) with `cratis/stage:4.51.1`. Reading baselines: 3.40.3, 3.39.0 and 3.28.3 (`8b43fef`) |
29
- | Stage | `4.67.0` (CLI 3.50.0 default) | Source-checked, not executed as a new vector. Previous Stage 4.52.0 was executed on CLI 3.43.0. Admission (`STAGE-ESM-*`, and `PLAY0268` render refusals surfaced by the CLI), ownership manifest, `Customizations/` seams, Debug-only specifications, guarded actions (`STAGE-SCENE-ACTION-001`) and interactions (`STAGE-SCENE-INTERACTION-001`) were source-checked at 4.51.3. Older baselines: 4.49.5, 4.43.0 and `v4.24.2` (`32dcac4`) |
30
- | Screenplay | bundled `4.131.0`; standalone `4.135.0` | Standalone compiler for V1 to V3; binding codes `PLAY0268` and code-attachment rules were read at `v4.66.0`. Historical CLI 3.41.0 probes used bundled 4.114.0; current `cratis` compiler claims require checking 4.131.0 |
31
- | Rendered apps (historical check) | Arc `22.50.5`, Chronicle `19.32.0`, Scene packages | Stage 4.51.3 scaffold; `[ProtectedDecision]` / `DecisionRead<T>` available to gap-fill, not emitted enforcement. Embedded reverse extraction disabled; verify generated packages before claiming exact Scene runtime parity |
32
-
33
- Historical facts retain their checked tags; current pins are source-checked, not new runtime probes.
34
- `cratis render` was run at 3.28.2 and 3.28.3 for the worked example
35
- (`references/worked-example.md`); with public CLI 3.43.0 it was run over the canonical
36
- `ScreenComposition` corpus and published successfully, and an MCP-edited copy was rendered, run and
37
- checked in the browser; the CLI 3.40.7 browser acceptance run passed 51 assertions
38
- (Cratis/Screenplay#605). The AI repository's `screenplay-mcp-transcript.ts`
39
- harness proves the real stdio proposal/apply path against the packaged CLI. The renderer facts are owned by `cratis-stage-rendering-and-sandbox`;
40
- this skill links them and never restates the admission table.
25
+ Version pins live once in `cratis-screenplay-toolchain` `references/versions.md`; read it before
26
+ selecting the compiler and renderer for delivery. Current pair: CLI 3.53.1 bundling Screenplay
27
+ 4.137.0 and Stage 4.73.1 (the standalone compiler is newer, 4.139.0). Render options (`--scope`,
28
+ `--check`, `--package-set`) and exit codes were read at cli `v3.53.1` `Documentation/reference/screenplay.md`
29
+ and `cratis render --help`; admission at Stage `v4.73.1`. Stage's scaffold pins Arc 22.68.0 and
30
+ Chronicle 19.45.0, which are not the latest releases (`cratis-stage-rendering-and-sandbox`
31
+ `references/rendered-application.md`). Source reading is not a new render run.
32
+
33
+ Runs: the worked example (`references/worked-example.md`) was probed with cratis 3.53.1 (observed; the
34
+ 3.28.2/3.28.3 runs are history). With public CLI 3.43.0 (Stage 4.52.0) the canonical `ScreenComposition`
35
+ corpus was rendered and published successfully, and an MCP-edited copy was rendered, run and checked in
36
+ the browser; the CLI 3.40.7 browser acceptance run passed 51 assertions (Cratis/Screenplay#605). The AI
37
+ repository's `screenplay-mcp-transcript.ts` harness proves the real stdio proposal/apply path against the
38
+ packaged CLI. Guarded Close actions (`STAGE-SCENE-ACTION-001`) and double-click interactions
39
+ (`STAGE-SCENE-INTERACTION-001`) are refused and recorded as unsupported, never emulated. UI-profile
40
+ rejection (`CLI-RENDER-007` to `-010`) and render-then-recover shipped in 3.41.0 (Cratis/cli#301). The
41
+ renderer facts are owned by `cratis-stage-rendering-and-sandbox`; this skill links them and never
42
+ restates the admission table.
41
43
 
42
44
  ## When to use / when not
43
45
 
@@ -64,30 +66,36 @@ assume an answer to 4, and record it as `blocked` for the user.
64
66
  | Case | Situation | What happens |
65
67
  | --- | --- | --- |
66
68
  | **A. Admission failure** | the probe reports blocking diagnostics | nothing was rendered or published by this run. Report the codes; the user chooses the next step (see "Procedure" 3) |
67
- | **B. Generated base plus authorized gap-fill** | an earlier admitted whole-model render exists and the user separately authorized hand-written scope, or a seam the model names needs an adapter | the generated output stays managed and untouched; hand-written code lives in `Customizations/` or a separate project (seam adapters by this skill, business gap-fill by `slice-implementer`), serves named model elements only, never claims render admission, and V5 is reported for the generated base **with its scope stated** |
69
+ | **B. Generated base plus authorized gap-fill** | an admitted render (whole, or a `--scope` of the admitted slices) exists and the user separately authorized hand-written scope, or a seam the model names needs an adapter | the generated output stays managed and untouched; hand-written code lives in `Customizations/` or a separate project (seam adapters by this skill, business gap-fill by `slice-implementer`), serves named model elements only, never claims render admission, and V5 is reported for the generated base **with its scope stated** |
68
70
  | **C. Fully hand-written delivery** | the scope cannot render and no generated base is wanted | `slice-implementer` delivers it with the model as the contract (`references/gap-fill-handoff.md`); V5 is `not run: no render` |
69
71
 
70
- Evolved events (a model that selects ESM v4) are gap-fill too: Stage 4.24.2 admits the v4 model but refuses any evolved event and its dependent scope with `STAGE-ESM-026`, because it cannot render Chronicle event-type migrations yet (Stage#204). Events at their initial revision still render. Hand-write the evolved events and their migrations per `cratis-chronicle-event-type-migration`, with the model as the contract. The historical cratis CLI 3.28.3 bundled Stage 4.24.2 and reported an evolved event with `STAGE-ESM-026` (probed); 3.28.2 bundled Stage 4.24.1 (3.28.1 and earlier: 4.24.0) and refused a v4 model with `STAGE-ESM-016`.
72
+ Evolved events are gap-fill too: Stage still refuses (4.73.1) any evolved event and its dependent scope with `STAGE-ESM-026`, because it cannot render Chronicle event-type migrations yet (Stage#204). Events at their initial revision still render. Hand-write the evolved events and their migrations per `cratis-chronicle-event-type-migration`, with the model as the contract.
71
73
 
72
- Generated command values and `returns` responses (ESM v7) bind and run in the reference runner on standalone
73
- Screenplay 4.68.0 (checked). In the historical CLI 3.41.0 check, ESM v7 reached Stage planning, and Stage 4.51.3
74
- refused generated values and responses with `STAGE-ESM-028`/`STAGE-ESM-029` (`cratis-screenplay-toolchain`
75
- `references/versions.md`). When target admission refuses these members, use case A or C: keep
74
+ Generated command values and `returns` responses (ESM v7) bind and run in the reference runner on the standalone
75
+ tool. Stage still refuses them with `STAGE-ESM-028`/`STAGE-ESM-029` (4.73.1). When target admission refuses these members, use case A or C: keep
76
76
  the model, hand-write the command and its response with the model (and its fixtures and `then returns`
77
77
  specifications) as the contract, and report V3 from the standalone tool and V5 as `not run: no render`.
78
78
 
79
- Models with event sources, streams or command routes bind and reference-execute as ESM v8 on standalone
80
- Screenplay 4.125.0, so report V3 and V4 from that tool. Previous CLI 3.46.1 refused above v7 with CLI-RENDER-004. Current CLI 3.50.0/Stage
81
- 4.67.0 reaches v8 route checks and construct admission through v10. Public publication,
79
+ Models with event sources, streams or command routes bind and reference-execute as ESM v8 on the standalone
80
+ tool, so report V3 and V4 from that tool. The pinned CLI/Stage pair
81
+ (`cratis-screenplay-toolchain/references/versions.md`) reaches v8 route checks
82
+ and construct admission through v10. Public publication,
82
83
  foreign events/event captures and v10 reaction identity/filters/production overrides
83
84
  still receive typed refusals; reducer filters render. Keep refused scope as case A/C,
84
85
  never infer target support from binding. Read Stage's `references/admission.md` and
85
86
  toolchain `references/sources-and-streams.md`.
86
87
 
88
+ **Mixed reaction effects.** A reaction that both `produces` events and `invokes` commands is refused by
89
+ Stage (`STAGE-ESM-037`, Stage#207) although Arc 22.72.0 and later run one reactor returning events
90
+ and commands (events appended first as one batch, then commands in order, no cross-effect
91
+ transaction; a retry can repeat the events, so use `[OnceOnly]`/idempotent handling per
92
+ `cratis-chronicle-reactor`). Keep the modeled reaction whole and gap-fill it as that one reactor; never
93
+ split it or drop an effect to get a render. The scaffold pins Arc 22.68.0; whether a newer Arc
94
+ override in `Customizations/Dependencies.props` restores next to it is unverified, so prove it with a restore and build.
95
+
87
96
  Two rules hold in every case: a customization never makes a rejected model renderable, and
88
- a whole-application V5 is never claimed from a subset. The CLI renders whole applications
89
- only; a dependency-closed scope selection does not exist, so do not fake one with an
90
- import-only root file.
97
+ a whole-application V5 is never claimed from a subset. `--scope` renders an admitted part (the whole
98
+ model still compiles and binds) and its V5 states the scope.
91
99
 
92
100
  ## Procedure
93
101
 
@@ -96,17 +104,21 @@ import-only root file.
96
104
  `references/verdicts-and-modes.md` "Source identity"), the model root, `--name`,
97
105
  `--project-name`, `--root-namespace` and target `cratis`. Take V1 and V3 from
98
106
  `cratis-screenplay-toolchain`; report each with tool and version. V3 from a different
99
- compiler version does not prove the cratis-bundled binder admits the model (they agree on
100
- 4.66.0 and cratis 3.28.2; an older cratis bundle binds less).
107
+ compiler version does not prove the cratis-bundled binder admits the model (the bundle is
108
+ 4.137.0, the standalone tool 4.139.0). `cratis screenplay validate --executable <root>` binds with
109
+ the bundled compiler and writes nothing: use it as the bundled-binder check (toolchain `references/verdicts.md`).
101
110
  2. **Probe.** `cratis render <model-root> --name <App> --destination <probe-dir> -o json`
102
- (exit 0 published, 5 refused with nothing published, 1 missing input). Classify every
111
+ (exit 0 published, 5 refused with nothing published, 1 missing input); add `--check` to plan
112
+ against the destination without writing (exit 6 changes pending) and `--scope <Module.Feature.Slice>`
113
+ (repeatable) to render an admitted part. Classify every
103
114
  diagnostic with `references/renderability-gate.md`: model fix in the chosen mode,
104
115
  capability gap, tool skew or environment. Group by code and count; do not paste the list.
105
116
  3. **When admission fails** (case A) present the options, the user decides:
106
117
  (a) keep design mode and record the gaps; (b) narrow to renderable mode, where the modeler
107
118
  changes the model for business reasons and **without** removing protection (`pii`,
108
119
  authorization, rules); (c) deliver the non-renderable scope by hand (case C), with a ledger
109
- entry (`references/drift-and-ledger.md`). Partial render does not exist.
120
+ entry (`references/drift-and-ledger.md`); (d) render the admitted part with `--scope` and gap-fill the rest
121
+ (case B).
110
122
  4. **Publish.** The probe destination by default. Another destination needs the user's intent;
111
123
  `--force` needs approval naming its effect and destination (a request that already names them
112
124
  counts). Read the receipt: written, unchanged, removed, `recovered`. `recovered: true` means
@@ -120,13 +132,13 @@ import-only root file.
120
132
  the generated types the adapter touches (bounded), write the adapter behind a small interface
121
133
  with no business decisions, rebuild, retest. Never edit a managed file; never add behaviour the
122
134
  model does not state. Detail: `references/delivery-protocol.md` section 4.
123
- 7. **Report authored-UI parity.** On Stage 4.24, Stage renders the default composition only;
124
- list each modeled screen, form, layout, template, toolbar, component, outlet, route, package/icon
125
- use, theme and persona view as "not rendered". On a newer screens-capable Stage/CLI, require
126
- explicit plan/runtime evidence for each authored UI element or a blocking diagnostic; silent
127
- fallback to default composition is a failure.
128
- 8. **Drift:** compare the published manifest's `semanticRevision` with a fresh render of the
129
- current model under the same inputs (`references/drift-and-ledger.md`).
135
+ 7. **Report authored-UI parity.** Require explicit plan/runtime evidence for each authored screen,
136
+ form, layout, template, toolbar, component, outlet, route, package/icon use, theme and persona view,
137
+ or a blocking diagnostic or "not rendered" with the responsible tool version; silent fallback to
138
+ default composition is a failure (Stage 4.24 rendered the default composition only).
139
+ 8. **Drift:** `cratis render ... --check` (exit 6 pending); also compare the manifest's `semanticRevision`
140
+ with a fresh render under the same inputs. For hand-written scope, `cratis screenplay conform` gives
141
+ structural code-vs-model evidence (`references/drift-and-ledger.md`).
130
142
  9. **Hand off** the packet: verdict lines, spec mapping, edit requests for the modeler, ledger
131
143
  entries, UI omissions, learning candidates (at most 3).
132
144
 
@@ -140,8 +152,8 @@ Adapters and non-renderable scope follow the contract rules of `cratis-applicati
140
152
  (`cratis-application-slice-conformance` `references/build-prompts.md`).
141
153
  - One ledger scope per `slice-implementer` brief; the brief carries addresses and paths, not contents.
142
154
  - Model-enforced rules realized in code (state-dependent rules) need a protected read or
143
- concurrency scope; never claim them from prose. Historically checked Stage 4.51.3 rendered apps have
144
- Arc 22.50.5/Chronicle 19.32.0; API availability alone is not verified enforcement.
155
+ concurrency scope; never claim them from prose. Stage 4.73.1 rendered apps scaffold
156
+ Arc 22.68.0/Chronicle 19.45.0; API availability alone is not verified enforcement.
145
157
  - Adapters that call outside systems follow `cratis-engineering-effect-boundaries`; slice
146
158
  specifications follow `cratis-application-slice-specifications`.
147
159
  - Realization notes are the explicit realization requirements stated in a slice `description` or `documentation`
@@ -155,8 +167,9 @@ Adapters and non-renderable scope follow the contract rules of `cratis-applicati
155
167
  - This skill changes no model. Model fixes are edit requests (address, change, rationale) to the owning session.
156
168
  - Code reading is bounded: `Customizations/*`, the file and line a build or test error names,
157
169
  and the declared hooks. Never browse managed output, `bin/` or `obj/`.
158
- - `description` and `documentation` never reach rendered code. A rule stated only in prose is
159
- unenforced there: ledger entry or target requirement, never "delivered".
170
+ - `description` and `documentation` reach rendered code only as XML documentation comments (Stage#178),
171
+ never as behavior. A rule stated only in prose is unenforced: ledger entry or target requirement,
172
+ never "delivered".
160
173
  - The `cratis run` sandbox enforces neither validation nor authorization on its default engine; it
161
174
  is no evidence for denial behaviour.
162
175
  - Never remove `pii`, `secret`, authorization or rules to get a render through; report the gap.