@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
@@ -2,7 +2,8 @@
2
2
 
3
3
  ## Contents
4
4
 
5
- - What Stage 4.24 admits
5
+ - Current admission (Stage 4.73.1)
6
+ - Historical: what Stage 4.24 admitted
6
7
  - Authoring consequences in renderable mode
7
8
  - Ownership, publication and recovery
8
9
  - Reading V5
@@ -30,12 +31,35 @@ render itself before claiming renderability: this table is a reading of the sour
30
31
  render result.
31
32
 
32
33
  Renderable is a strict subset of executable (`executable-subset.md`). Order of events in
33
- `cratis render`: the CLI binds the model with its **bundled Screenplay** (4.66.0 in cratis 3.28.2, so PLAY0268
34
- and friends appear first), then Stage admits or
35
- rejects members. An ESM v6 model binds but Stage refuses it whole with `STAGE-ESM-016`
36
- (probed on 3.28.2; an ESM v7 model with generated values or responses fails binding first on the bundled 4.66.0 with `PLAY0268`, and Stage 4.24.2 would refuse it with `STAGE-ESM-016` too, tracked in Stage#201; on before 3.28.2 it failed binding first, with PLAY0268).
34
+ `cratis render`: the CLI binds the **whole** model with its **bundled Screenplay** (4.137.0 in cratis
35
+ 3.53.1, so PLAY0268 and friends appear first, even with `--scope`), then Stage admits or rejects
36
+ members of the selected scope. (Historical, cratis 3.28.2: an ESM v6 model bound but Stage refused it
37
+ whole with `STAGE-ESM-016`.)
37
38
 
38
- ## What Stage 4.24 admits
39
+ ## Current admission (Stage 4.73.1)
40
+
41
+ Read at Stage `v4.73.1` (`Documentation/guides/build-renderer-target.md`, `SemanticVersionFeatures.cs`,
42
+ `SemanticCratisAdmission*.cs`) and cli `v3.53.1`; source reading, not a render run (the worked
43
+ example in `cratis-screenplay-render-and-gap-fill` was probed). Stage admits ESM v1 to v10 by
44
+ version; each construct it does not render refuses with its own code before any artifact is planned.
45
+
46
+ | Area | Renders at 4.73.1 | Refused (code) |
47
+ | --- | --- | --- |
48
+ | Slice kinds | `StateChange`, `StateView` | `Automation`, `Translate`, every reaction, capture, application trigger and clock specification (`STAGE-ESM-001`/`-024`); a reaction that both produces and invokes (`-037`, Stage#207; Arc 22.72.0+ can run it, and the Arc the scaffold pins needs a proven override; hand-write one reactor, never split the reaction) |
49
+ | Queries | optional keyed snapshot lookups; observable collections, keyed or unkeyed (since 4.49.0) | a snapshot list: `STAGE-ESM-010`; `filter`, `scoped to`, `performer`, composite `by`: `PLAY0268` at binding |
50
+ | Authorization | role-only, authenticated, opaque pure policies, claim conditions with Uuid, Date, DateTime or text targets (numeric and Boolean claim matches render as always false; Stage 4.73.1 `IsSupportedClaimPath`), `not`/and/or; roles read through the identity's `RoleClaimType` | role-claim URIs, nested opaque policies, unresolved or non-portable policies, no single identifier, opaque-policy subjects that are not text, Uuid, Date or DateTime (`STAGE-ESM-015`; Stage 4.73.1 `IsTextualSubject`, a restriction separate from declarative claim targets) |
51
+ | Event sources, streams, routes (ESM v8) | rendered, with routed specifications | reserved stored names, unformattable routed fixtures, unsupported routed replay (`STAGE-ESM-030`) |
52
+ | Numbers, case tables | whole numbers as `long` from ESM v8; case tables | out-of-`int` literals below v8 (`STAGE-ESM-031`) |
53
+ | Generated values and responses (v7) | not rendered | `STAGE-ESM-028`/`-029` (Stage#175) |
54
+ | Specifications | as in Stage's `admission.md` | `then no readmodel` (`-027`); an unauthenticated caller carrying roles or claims, `$context.occurred`-derived fixed values asserted (`-011`) |
55
+ | v9 and v10 | reducer observer `from` filters | public events and event-target projections (`-032`); foreign origins and event-source captures (`-033`); directed Translate (`-024`); reaction `runsAs` (`-034`); reaction `from` filters (`-035`); per-production route overrides (`-036`) |
56
+ | Evolved events | initial revisions only | `STAGE-ESM-026` (Stage#204) |
57
+ | Descriptions, documentation | XML `<summary>`/`<remarks>` doc comments only (Stage#178 closed) | characters invalid in XML: `CLI-RENDER-005`; never behavior |
58
+
59
+ Still bind-refused (not Stage): `reads` and `concurrency` (`PLAY0271`), command `handler`s, `pii`/`secret`
60
+ (`PLAY0268`). Other rows of the table below that name 4.24 behavior are history.
61
+
62
+ ## Historical: what Stage 4.24 admitted
39
63
 
40
64
  Models using `eventsource`, `stream` or command routes are not renderable: they fail
41
65
  binding (`PLAY0268`) and Stage refuses their ESM version (`STAGE-ESM-016`); rendered
@@ -80,11 +104,14 @@ legacy ids or drop protected ids into routing to fit a renderer (PLAY0515).
80
104
  readmodel`). The seeded when-less `then query` only checks a lookup over a given read-model
81
105
  state; it proves no projection (Stage `SemanticSpecificationAdmission.Callers.cs`).
82
106
  - Use `$context.occurred` only; no `$context.identity.*` mappings.
83
- - A list is a design-only query and blocks binding, and so rendering, of the whole application on its own. A keyed `XById` sibling does not change that: while any list query remains, nothing in the model binds, runs or renders. Keep a list the domain needs and report the capability gap.
107
+ - A list query binds (unfiltered, or narrowed by one `by` key); Stage 4.73.1 renders it only as an
108
+ `observable` collection, and refuses a snapshot list with `STAGE-ESM-010`. `filter`, `scoped to` and
109
+ `performer` queries block binding of the whole application. Keep a list the domain needs and report
110
+ the capability gap; marking it `observable` or keying it is a modeling decision for the user.
84
111
  - A `handler` (with or without `implementation` or `hint`) never binds; the slice is
85
112
  gap-fill, never "customized into" rendering.
86
- - Descriptions and documentation are never rendered (Stage#178): a rule that exists only in
87
- prose is unenforced in rendered code.
113
+ - Descriptions and documentation render only as XML doc comments (Stage#178 closed), never as
114
+ behavior: a rule that exists only in prose is unenforced in rendered code.
88
115
 
89
116
  ## Ownership, publication and recovery
90
117
 
@@ -104,8 +131,9 @@ legacy ids or drop protected ids into routing to fit a renderer (PLAY0515).
104
131
  `Customizations/styles.css`. The planner never reads it, and it never binds a modeled
105
132
  reaction or capture. A customization never makes a rejected model renderable.
106
133
  - `cratis render` does **not** build, test or run the application.
107
- - Stage 4.51.3's scaffold pins .NET 10, Arc 22.50.5, Chronicle client/kernel 19.32.0
108
- and emits a `.frontend/` React/Vite app (Components 4.14.0, Scene 4.10.0).
134
+ - Stage 4.73.1's scaffold pins .NET 10 and Arc and Chronicle client/kernel releases
135
+ and emits a `.frontend/` React/Vite app (Components and Scene releases pinned too); these are not the latest
136
+ releases (`cratis-stage-rendering-and-sandbox` `references/rendered-application.md`).
109
137
  `CratisEmbeddedScreenplayEnabled=false`; `Directory.Packages.props` is managed,
110
138
  never edit it. `[ProtectedDecision]` / `DecisionRead<T>` are available to gap-fill,
111
139
  not Stage-emitted enforcement; projection/key admission and unit-of-work enrollment
@@ -117,7 +145,8 @@ V5 is four separate results (admission, publication, build, tests), plus runtime
117
145
  was exercised; formats and the Debug-only spec classes are in `verdicts.md`. Three cases
118
146
  stay distinct: admission failure (nothing rendered); an existing generated base plus
119
147
  separately authorized hand-written gap-fill; and a fully hand-written delivery. Never claim a
120
- whole-application V5 from a subset. Drift: compare successive `.cratis-render.json`
148
+ whole-application V5 from a subset (`cratis render --scope` renders an admitted part; state the scope).
149
+ Drift: `cratis render ... --check` (CLI 3.44.0+; exit 6 means pending changes), or compare successive `.cratis-render.json`
121
150
  `semanticRevision` values from renders with the same `--name` and inputs (see `versions.md`,
122
151
  "Revisions and descriptions"); not the MCP `modelRevision`, not `open-workspace.revision`.
123
152
 
@@ -6,8 +6,8 @@ scope; negative capability claims there are not current verdicts. Current routes
6
6
  bind as v8, v7 reaches Stage planning, reference tests have CLI/MCP routes, and
7
7
  exact numbers are documented in the grammar. Compiler syntax: `cheat-sheet.md`.
8
8
 
9
- 1. Clean V1 is not executable: binding errors appear only through MCP (V2) or `render`. Neither `screenplay <folder>` nor `cratis screenplay validate` binds. [probed]
10
- 2. The Screenplay samples validate clean but are not all executable; copying their idioms (list queries, `@pii`, `today`, `reads`, `$causedBy`, templates, performers) breaks V3. [probed]
9
+ 1. Clean V1 is not executable: binding errors appear through MCP (V2), `render` or `cratis screenplay validate --executable` (bundled compiler, writes nothing). Neither `screenplay <folder>` nor plain `cratis screenplay validate` binds. [probed]
10
+ 2. The Screenplay samples validate clean but are not all executable; copying their idioms (filtered queries, `@pii`, `today`, `reads`, `$causedBy`, templates, performers) breaks V3. [probed]
11
11
  3. Know the target mode (design/executable/renderable) before writing; state it.
12
12
  4. Plain `produces` without `for` means allocation in the ESM but "the identifier" in rendered code. Always write `for <identifier>`. [PLAY0478 probed]
13
13
  5. PLAY0029 is a warning: a misspelled keyword (or `type` inside a slice) drops the construct silently. Use `--warnings-as-errors`. [probed]
@@ -41,10 +41,10 @@ exact numbers are documented in the grammar. Compiler syntax: `cheat-sheet.md`.
41
41
  33. Which compiler matters: cratis before 3.28.2 bundle Screenplay 4.60.1, which rejects ESM v6 (Automation/Translate) and reports a false PLAY0285 on cascades; cratis 3.28.2 bundles 4.66.0 and behaves like the standalone tool. Check `cratis --version` and name the tool in every verdict. [probed on both tools]
42
42
 
43
43
  34. A `from <Event> key <property>` routes only if every such event carries that property: an event that frees or updates a row keyed by another stream's id must carry that id in its payload, or the row never changes. Whether the compiler reports a missing key property is unverified [to probe]; check by hand.
44
- 35. `description`/`documentation` are authoring metadata: board, MCP and Prologue show them; `cratis render` never does (Stage#178). A rule only in prose is unenforced in rendered code; make it a rule layer, a spec or a recorded target requirement.
44
+ 35. `description`/`documentation` are authoring metadata: board, MCP and Prologue show them; `cratis render` emits them only as XML doc comments (Stage#178 closed; invalid XML characters are CLI-RENDER-005), never as behavior. A rule only in prose is unenforced in rendered code; make it a rule layer, a spec or a recorded target requirement.
45
45
  36. One unadmitted construct (operations, `numbers exact`, composite view keys, refusal/redelivery) blocks whole-model binding. Routing is admitted v8, unlike composite view keys (#599); current CLI admits through v10 to construct checks. Overrides replace the whole route, filters never match unrouted facts. Do not remove routing or authorization to render a model.
46
46
  37. Personas remain outside ESM bytes, but 4.127.0 specifications accept `given caller as <Persona>`: one authenticated deterministic policy witness, not every matching caller. Inspect the chosen `or` branch; use explicit callers when synthesis is refused.
47
- 38. A rule that depends on stored state is `reads <View>` + `require <expr> message "..."` (stated intent; PLAY0268/0271 at binding are expected in design mode). The slice `description` must mark it NOT enforced in the model today (Screenplay#129/#209) and name the target: Arc `[ProtectedDecision]` + `DecisionRead<T>` (Arc v22.39.0 and later; available to gap-fill on Stage 4.51.3's Arc 22.50.5/Chronicle 19.32.0, not emitted protection), Chronicle DCB (`concurrency` scope), or a constraint where one fits. Forbidden: caller-supplied copies of state in `require`, boolean attestation inputs (`confirmsX == true`), rules hidden in `handler`/implementation-hint prose. An unguarded materialized read is unsafe for a protected decision.
47
+ 38. A rule that depends on stored state is `reads <View>` + `require <expr> message "..."` (stated intent; PLAY0268/0271 at binding are expected in design mode). The slice `description` must mark it NOT enforced in the model today (Screenplay#129) and name the target: Arc `[ProtectedDecision]` + `DecisionRead<T>` (Arc v22.39.0 and later; available to gap-fill on Stage 4.51.3's Arc 22.50.5/Chronicle 19.32.0, not emitted protection), Chronicle DCB (`concurrency` scope), or a constraint where one fits. Forbidden: caller-supplied copies of state in `require`, boolean attestation inputs (`confirmsX == true`), rules hidden in `handler`/implementation-hint prose. An unguarded materialized read is unsafe for a protected decision.
48
48
 
49
49
  Identity/compliance traps checked at v4.127.0 (`identity.md`, `concepts.md`, `events.md`,
50
50
  `purposes.md`, `diagnostics.md`):
@@ -65,7 +65,7 @@ Identity/compliance traps checked at v4.127.0 (`identity.md`, `concepts.md`, `ev
65
65
 
66
66
  The SKILL.md top 12: 1, 4, 5, 6, 7, 10, 12, 13, 17, 18, 20, 21 (+ mode/version notes there). Traps 39 to 44 are tool traps added at the 4.66.0 pin.
67
67
  39. A handler never binds: PLAY0268 "Command '<n>' handler requires a constrained implementation attachment", with a file, a fence, `implementation` or `hint` alike. `implementation` and `hint` are accepted on a command handler, an operation execute/compensate phase and (from 4.65.0) a command property named rule, and are rejected on concept rules, built-in property rules and whole-command `require`/`validate` bodies; on a handler they are authoring intent only (no execution, lock or confirmation). A handler slice is gap-fill, not a customization of a rendered slice. [source, probed]
68
- 40. `numbers exact` parses on 4.66.0 to 4.68.0 but never binds (PLAY0268; "not admitted by any supported executable model (ESM) version yet") and is PLAY0001 on older compilers; it is absent from `grammar.md`. Never use it in a model or example meant to execute. [probed]
68
+ 40. `numbers exact` (the source mode) parses but never binds at any release through 4.139.0 (exact lowering of qualifying Double-mode literals is separate: v11) (PLAY0268; "not admitted by any supported executable model (ESM) version yet") and is PLAY0001 on older compilers; it is absent from `grammar.md`. Never use it in a model or example meant to execute. [probed]
69
69
  41. MCP roots bug (4.63.1 and earlier, including the 4.60.1 bundled by cratis before 3.28.2; not present in 4.66.0 or cratis 3.28.2, probed): a dynamic-root server answers the roots request with an `id: null` error right after `notifications/initialized`; hosts treat it as fatal. `open-workspace.path` does not help. Start with a fixed root (`screenplay mcp <folder>`, `cratis screenplay mcp` in a project with `.cratis/ai.json`) or use 4.63.2 or later (cratis 3.28.2 or later). [source, probed]
70
70
  42. A symlinked model path is refused by the MCP server (macOS `/tmp` is a symlink); pass the physical path. Proposals are connection-local (at most 16); `apply` persists identities to `.screenplay/identities.json` and is not crash-atomic across files; never retry `apply` after `ApplyOutcomeUnknown`. [source]
71
71
  43. `modelRevision` is canonical semantic (line positions and descriptions do not change it; a file move only if it changes logical placement or application identity) and, without `identities.json`, changes with the root folder name; it is not comparable with a render's `semanticRevision`. Source identity for verdicts is the commit plus the digest from the source-identity helper (`cratis-screenplay-modeling-lifecycle` `references/verdicts-and-modes.md` "Source identity"). [probed]
@@ -46,12 +46,17 @@ V3 are read from the MCP server or from a render, V1 and V5 from the CLIs.
46
46
  - Warnings are failures here. PLAY0029 (a construct dropped silently) and the unresolved-name
47
47
  warnings are the defects this verdict exists to catch.
48
48
  - Syntax and consistency checks (PLAY0282 to PLAY0294) run; binding does not.
49
- - Report: `V1 pass (screenplay 4.66.0, 3 files)`, `V1 fail: PLAY0029 a.play:12 ...`.
49
+ - Report: `V1 pass (screenplay 4.139.0, 3 files)`, `V1 fail: PLAY0029 a.play:12 ...`.
50
50
 
51
51
  ## V2: executable diagnostics
52
52
 
53
53
  Needs an MCP connection (V2 and V3 belong to the session that owns MCP; a subagent without
54
- MCP reports `V2 not run: no MCP in this agent` unless the brief supplies fresh output).
54
+ MCP reports `V2 not run: no MCP in this agent` unless the brief supplies fresh output). Without
55
+ MCP, a binding check exists: `cratis screenplay validate --executable <root>` binds with the
56
+ **bundled** compiler (CLI 3.53.1 bundles Screenplay 4.137.0, not the standalone 4.139.0), never
57
+ renders or writes files, and exits 5 with "The model does not bind into an executable semantic
58
+ model" when it does not. Report it as `V3 (bundled 4.137.0 via cratis validate --executable)`; it
59
+ gives binding errors, not the V2 `executable-diagnostics` view, so V2 stays MCP-only.
55
60
 
56
61
  1. Start the server with a fixed root: `screenplay mcp <model-folder>` or `cratis screenplay
57
62
  mcp` in a project with `.cratis/ai.json` (see `versions.md`, roots bug). Send
@@ -62,7 +67,7 @@ MCP reports `V2 not run: no MCP in this agent` unless the brief supplies fresh o
62
67
  current `expectedRevision` (page with `offset`; paging beyond the first page needs the
63
68
  source revision).
64
69
  4. Report the codes with counts, blocking (error severity) apart from informational. A list
65
- with blocking entries is a valid V2 result (`V2 read: 6 blocking, PLAY0268 x3 list query,
70
+ with blocking entries is a valid V2 result (`V2 read: 6 blocking, PLAY0268 x3 filter query,
66
71
  pii ...`); it is the evidence for a "V3 blocked" report. The view also lists
67
72
  information-severity diagnostics (PLAY0269 deferred UI, PLAY0270 authoring metadata such as
68
73
  descriptions, personas and screens) on models that bind; they do not block.
@@ -79,8 +84,8 @@ do not block. The ESM then binds (and `read-workspace view=executable-model` rep
79
84
  comparison needs it). Binding is what makes a model renderable at all. V3 means "binds",
80
85
  never "specifications pass".
81
86
 
82
- - Report the ESM version the model needs: `V3 ready (screenplay 4.68.0, ESM v6)`,
83
- `V3 blocked: PLAY0268 x3 (list query, pii) - design scope kept`.
87
+ - Report the ESM version the model needs: `V3 ready (screenplay 4.139.0, ESM v6)`,
88
+ `V3 blocked: PLAY0268 x3 (filter query, pii) - design scope kept`.
84
89
  - A blocked V3 is not repaired by deleting protection or domain rules. Never remove `pii`,
85
90
  `secret`, authorization, list queries, automations or rules to reach V3; record the
86
91
  slice and the code in the gap list.
@@ -137,11 +142,11 @@ What Stage admits: `renderable-subset.md`.
137
142
  One line per verdict, tool and version first, evidence second:
138
143
 
139
144
  ```text
140
- V1 pass (screenplay 4.66.0, 3 files)
141
- V2 read (screenplay 4.66.0 via MCP): 0 blocking, 3 informational (PLAY0270)
142
- V3 ready (screenplay 4.66.0, ESM v3)
145
+ V1 pass (screenplay 4.139.0, 3 files)
146
+ V2 read (screenplay 4.139.0 via MCP): 0 blocking, 3 informational (PLAY0270)
147
+ V3 ready (screenplay 4.139.0, ESM v3)
143
148
  V4 not run: no route
144
- V5 admission pass (cratis 3.28.3, Stage 4.24.2); publication written 14 files; build not run; tests not run
149
+ V5 admission pass (cratis 3.53.1, Stage 4.73.1); publication written 14 files; build not run; tests not run (a sample line, not a result)
145
150
  ```
146
151
 
147
152
  Rules: a clean verdict never implies a later one; a verdict names the **source identity** it
@@ -23,6 +23,8 @@ probe; older probes retain their original labels in the other references.
23
23
  | Stage bundled by CLI | **4.73.1** | Same file; Stage's own `Directory.Packages.props` also pins Screenplay 4.137.0 |
24
24
  | Cratis.Arc.Screenplay bundled by CLI | **22.54.0** | Same file; this is the generator package, not a blanket rendered-app dependency pin |
25
25
  | Chronicle / Fundamentals bundled by CLI | **19.32.0 / 7.22.8** | Same file |
26
+ | Latest Arc / Chronicle / Fundamentals released when this was checked | **22.72.0 / 19.50.0 / 7.23.0** | Released tags; newer than the CLI bundle and than Stage's scaffold. Arc 22.72.0 and later run a reactor returning events and commands (absent through 22.71.0); the Stage 4.73.1 scaffold pins Arc 22.68.0, whose command handler accepts a collection only when every element is a command, so a rendered app needs a proven dependency override to 22.72.0 or later |
27
+ | Stage 4.73.1 rendered backend and frontend | **Arc 22.68.0 / Chronicle 19.45.0**; Components 4.26.2, Scene 4.21.0, `@cratis/arc` 22.58.2, Fundamentals 7.22.8 | Stage `v4.73.1:Source/Rendering.Cratis/Scaffolding/CratisBackendApplicationScaffoldProfile.cs` and `CratisFrontendPackageSet.cs` (`Current`); not the latest releases and not bumped by hand |
26
28
  | Historical Stage 4.51.3 rendered backend | **Arc 22.50.5 / Chronicle 19.32.0** | Stage `v4.51.3:Source/Rendering.Cratis/Scaffolding/CratisBackendApplicationScaffoldProfile.cs`; client/testing/image match; scaffold disables embedded reverse extraction |
27
29
 
28
30
  The published `screenplay-contract.json` beside this reference is the machine-readable authority for PLAY codes, MCP tools and parameters, and standalone CLI commands/options. Its unchanged release bytes are pinned by `screenplay-contract.version` to the standalone version above. Before adding a claim, search this large JSON file by exact `code` in `diagnostics`, or by exact `name` in `mcpTools`/`cliCommands`, and inspect that object's retirement flag, parameters or options; do not load the full file into context. For example, search for `"code": "PLAY0029"` or `"name": "read-workspace"`; `screenplay-contract-exceptions.json` preserves explicitly reasoned historical statements, not current-release exceptions. Coverage gaps are mention inventories, not proof that a skill teaches a feature.
@@ -175,8 +177,9 @@ specifications, UI composition and `diagnostics.md`.
175
177
  Stage 4.24.1/4.24.2. Those old negative v7 probes do not describe CLI 3.41.0.
176
178
  - CLI before 3.28.2 bundled Screenplay 4.60.1: false cascade PLAY0285, v6 refusal
177
179
  and dynamic-root initialization bug. The roots bug was fixed in 4.63.2.
178
- - CLI 3.28.2 file validation ignored imports; this is an old probe, not a current
179
- reason to invent missing declarations. Validate the complete root.
180
+ - CLI 3.28.2 file validation ignored imports (cli#244, closed by PR #258): later CLI releases compile
181
+ the file as an application root together with its imports. Folder mode stays the recommended check;
182
+ validate the complete root.
180
183
  - Older standalone empty-folder probes exited 0. Current validation still needs
181
184
  a nonzero file count, and specification execution needs an expected selection.
182
185
 
@@ -189,7 +192,10 @@ preserve assigned identities; do not reconstruct them from names.
189
192
 
190
193
  A render manifest's `semanticRevision` is a different provenance value, made
191
194
  with the render name and bundled compiler. Do not compare it directly to MCP
192
- `modelRevision`. Compare successive renders with the same identity and inputs.
195
+ `modelRevision`. Compare successive renders with the same identity and inputs, or use
196
+ `cratis render ... --check` (CLI 3.44.0 or later). Descriptions and event documentation render as XML
197
+ doc comments, so editing them changes managed-file hashes (a `--check` exit 6) but not the executable
198
+ model revision.
193
199
 
194
200
  ## Upgrade checklist
195
201
 
@@ -25,7 +25,10 @@
25
25
  { "kind": "skill-contains", "value": "4.66.0" },
26
26
  { "kind": "skill-contains", "value": "references/generated-responses-example.md" },
27
27
  { "kind": "skill-contains", "value": "Operations and exact numeric" },
28
- { "kind": "skill-contains", "value": "Stage generated-value/response refusals `STAGE-ESM-028`/`029`" },
28
+ { "kind": "skill-contains", "value": "`STAGE-ESM-028`/`029`, not a blanket compiler refusal" },
29
+ { "kind": "skill-contains", "value": "cratis screenplay validate --executable" },
30
+ { "kind": "skill-contains", "value": "XML doc comments" },
31
+ { "kind": "skill-contains", "value": "Stage 4.73.1 rendered backend", "file": "references/versions.md" },
29
32
  { "kind": "skill-contains", "value": "cratis screenplay validate" },
30
33
  { "kind": "skill-contains", "value": "cli#244" },
31
34
  { "kind": "skill-contains", "value": "`notifications/initialized`" },
@@ -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.
@@ -31,11 +31,9 @@ source is the single flow model.
31
31
 
32
32
  ## Verified product sources
33
33
 
34
- | Package | Version | Purpose |
35
- | --- | --- | --- |
36
- | `Cratis.Screenplay` | `4.31.0` | Original UI composition parser evidence |
37
- | `Cratis.Screenplay` | main `fd18129` | Cancellation routing and `optional`; changed example compiled |
38
- | `Cratis.Screenplay` | `4.66.0` (`c89198b`) | Statements in this skill re-verified: the nine `Documentation/screenplay/` pages above are unchanged since `v4.31.0` except `file-references.md` (typed-context and `implementation` paragraphs); `PLAY0269` in `Diagnostics/DiagnosticCodes.cs`; the new section compiled with `screenplay` 4.66.0 and `cratis screenplay validate` 3.28.2 |
34
+ Current pins: toolchain `references/versions.md`; UI statements were re-read at Screenplay v4.139.0
35
+ (`screens.md`, `contributions.md`, `forms.md`, `templates.md`, `ui-profile.md`, `fixtures/screen-release-ui.play`). Older provenance:
36
+ `4.31.0` (original parser evidence), main `fd18129` (cancellation routing, `optional`), `4.66.0` (`c89198b`: `PLAY0269`).
39
37
 
40
38
  The update follows `commands.md`, `events.md`, `queries.md` and decision 0023
41
39
  at that main commit (after v4.52.0). It does not verify UI rendering.
@@ -222,9 +220,11 @@ module-level.
222
220
  `navigate to <Screen> by <param>` is **not** string interpolation; it reuses the
223
221
  same typed navigate binding a screen action uses.
224
222
 
225
- ⚠️ The v4.31.0 baseline, re-verified at v4.66.0, ships `navigate`, `label` and `order` only. Grouping beyond a
226
- flat ordered list, and an explicit override for when nearest-enclosing is not the
227
- point you mean, are deliberately left for later. The screens-release vector
223
+ ⚠️ At v4.139.0 a navigation contribution also carries `id`, `icon`, `presentation`, `group` and
224
+ `destination outlet <name> | dialog <DialogTemplate> | external "<route>"`; its `navigate to` takes
225
+ `route`, `outlet` and `parameter` lines, and an undeclared outlet or dialog target is `PLAY0654`
226
+ (`contributions.md`). An explicit override for when nearest-enclosing is not the point you mean is
227
+ not in the language. The screens-release vector
228
228
  (canonical `ScreenComposition` corpus v1) adds typed screen composition; public
229
229
  CLI 3.43.0 renders it and passes the browser run. Report a refused form as a
230
230
  capability gap, never a flat-list fallback; Studio production proof is separate.
@@ -286,8 +286,8 @@ module Invoicing
286
286
  The inline event targets `invoiceId` without copying it into payload; the
287
287
  projection obtains it from event context. A command `returns` clause (scalar or
288
288
  record) binds and executes from standalone Screenplay 4.68.0 (ESM v7, `commands.md`,
289
- "Generated values and responses"); the 4.66.0 bundled in `cratis` 3.28.x reports `PLAY0268`, and
290
- Stage 4.24.2 does not render ESM v7 (`STAGE-ESM-016`, tracked in Stage#201). Form `on submit` and
289
+ "Generated values and responses") and in the current cratis bundle (the 4.66.0 in 3.28.x reported `PLAY0268`);
290
+ Stage 4.73.1 refuses it (`STAGE-ESM-029`; generated properties `-028`). Form `on submit` and
291
291
  interaction `on success` response-name scopes, failure clearing and response
292
292
  execution remain unavailable.
293
293
  An existing success continuation does not imply a response contract.
@@ -36,7 +36,7 @@ the build.
36
36
  BerthListScreen
37
37
  Shows: the berths booked so far (berth, boat name).
38
38
  Arrived by: the entry point, and after a booking is submitted.
39
- Can do: book a berth (BookBerth, opens BookBerthScreen).
39
+ Can do: open the booking screen (a click on the booking section opens BookBerthScreen).
40
40
  Gaps: none. Empty list: nothing booked yet.
41
41
 
42
42
  BookBerthScreen
@@ -6,11 +6,10 @@ No TrogonStack text is adapted in this skill. Nebulit material is credited in th
6
6
  |---|---|---|---|---|
7
7
  | Language constructs, rules and Verify list | Cratis/Screenplay v4.31.0 documentation, re-verified at v4.66.0 | MIT | original | SKILL.md |
8
8
 
9
- ## Adapted closely (Martin Dilger and Nebulit GmbH, with agreement)
9
+ ## Adapted closely (Martin Dilger and Nebulit GmbH)
10
10
 
11
11
  Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
12
- by Martin Dilger and Nebulit GmbH (https://nebulit.de). The repository carries no licence file; this material
13
- is adapted with the agreement of Martin Dilger and Nebulit GmbH.
12
+ by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
14
13
 
15
14
  | Source file | Used in | How |
16
15
  |---|---|---|
@@ -17,7 +17,9 @@
17
17
 
18
18
  This reference is the authoring checklist for the screens-release UI surface. It
19
19
  records the contract an agent must look for in the installed Screenplay tool and
20
- in peer runtime/render contracts; it is not a second language definition. When a
20
+ in peer runtime/render contracts; it is not a second language definition. The syntax
21
+ below was re-read at Screenplay v4.139.0 (`screens.md`, `forms.md`, `templates.md`,
22
+ `contributions.md`, `ui-profile.md` and `fixtures/screen-release-ui.play`); the shapes are released, not proposed. When a
21
23
  syntax form below is not present in `syntax-schema` or does not compile with the
22
24
  project's selected Screenplay version, report the support level instead of
23
25
  hand-writing an alternate shape.
@@ -55,22 +57,25 @@ Still true: a guarded Close action and a double-click interaction are refused
55
57
  (`STAGE-SCENE-ACTION-001`, `STAGE-SCENE-INTERACTION-001`, defined from Stage
56
58
  4.51 through 4.57) and recorded as unsupported, never emulated; Studio production
57
59
  Play proof is pending a test-account decision. Refusing an unresolvable UI
58
- profile and recovering a rendered application shipped in Cratis/cli#301. On Stage 4.24.2 or cratis 3.28.x
59
- renderers, authored screens are still reported as omitted/default composition.
60
+ profile and recovering a rendered application shipped in Cratis/cli#301. (History: on Stage 4.24.2 or
61
+ cratis 3.28.x renderers authored screens were reported as omitted/default composition; Stage 4.73.1
62
+ (CLI 3.53.1) renders navigation contributions and toolbars, and `CLI-RENDER-015`, which refused them, is retired.)
60
63
 
61
64
  ## Data context and component bindings
62
65
 
63
66
  A component instance is a presentation of a typed Screenplay data context. The
64
- proposed syntax is:
67
+ released syntax (canonical fixture `fixtures/screen-release-ui.play`) is:
65
68
 
66
69
  ```screenplay excerpt
67
70
  component <Package.Component> <instanceName>
68
- context <binding>
69
- property <property.path> from <binding>
71
+ id "<stable-id>"
72
+ context from query <Query>
73
+ property <property.path> from component <stable-id>.<outputPath> null preserve
74
+ property <property.path> from literal <value>
70
75
  property <property.path> = "literal"
71
76
  icon <IconName>
72
77
  presentation <key> "value"
73
- exposes <name> from <binding>
78
+ exposes <name> from component <stable-id>.<outputPath>
74
79
  outlet <name>
75
80
  ...nested screen directives...
76
81
  on click
@@ -78,6 +83,11 @@ component <Package.Component> <instanceName>
78
83
  with <name> from <binding>
79
84
  ```
80
85
 
86
+ A binding is `from query <Query>`, `from component <stableId>.<outputPath>` (quote the id when it has
87
+ punctuation) or `from literal <value>`, and may carry `mode oneWay|twoWay`, `null propagate|clear|preserve`
88
+ and `expected <Type>`. A component's `id` pins the stable instance id Studio and Stage use; without it the
89
+ authored name is the id. Malformed bindings are diagnostics, and the raw text is kept.
90
+
81
91
  Rules for agents:
82
92
 
83
93
  - Discover the exact node shape through `syntax-schema` before proposing it; do
@@ -137,6 +147,15 @@ screen template MasterDetail
137
147
  - `outlet` declares an addressable child surface. It is different from a static
138
148
  slot such as `sidebar` or `main`.
139
149
 
150
+ A template may also declare `content <slot>` (screen directives the template renders in that slot itself;
151
+ the slot must be declared, `PLAY0629`; templates may not nest in a cycle, `PLAY0656`), `display` and
152
+ `description` (what a picker shows), and `scopes application|module|feature|subfeature|slice|none`
153
+ (use outside its scopes is `PLAY0631`). Which of a template's components a screen may configure is a
154
+ top-level **exposure** (`exposure for <Owner>`, owner a layout or template, `PLAY0622`; `reexposes <Owner>`,
155
+ `PLAY0623`/`PLAY0624`), and a screen or template configures it with a top-level `instance <Screen>`
156
+ (`set <component>.<path> = <value>`, `items <component>.<path>` with `item <id>` lines; `PLAY0626` to
157
+ `PLAY0628`). Layouts take `category`, `type`, `exposes` and `outlet` too.
158
+
140
159
  A module, feature or slice may select a default template for contained screens:
141
160
 
142
161
  ```screenplay
@@ -149,7 +168,10 @@ installed parser/printer supports the scoped `template` directive before using i
149
168
 
150
169
  ## Forms and columns
151
170
 
152
- A form remains bound to exactly one command. The screens-release additions make
171
+ A form remains bound to exactly one command. It may carry one `description` line (report-only),
172
+ `generation auto|manual` (Scene's form generation mode: generate fields from command metadata, or the
173
+ authored fields are the contract), a `layout` block (column, gap and placement geometry, independent of
174
+ `generation`) and the `columns` display-order hint. The screens-release additions make
153
175
  its generated fields explicit when the automatic shape is not enough:
154
176
 
155
177
  ```screenplay excerpt
@@ -182,7 +204,8 @@ ui profile Desktop
182
204
  packages
183
205
  Product.DesignSystem
184
206
  Cratis.Components
185
- icons Product.Icons
207
+ icons
208
+ Product.Icons
186
209
  ```
187
210
 
188
211
  - Package order is still override-priority order. Later packages shadow earlier
@@ -204,13 +227,15 @@ toolbar InvoiceToolbar
204
227
  label "Register"
205
228
  icon Add
206
229
  item details navigate to InvoiceDetails
207
- parameter invoiceId from selected.invoiceId
230
+ parameter invoiceId from component invoices.selectedItem.id
231
+ item compose dialog InvoiceComposer
208
232
  ```
209
233
 
210
- Use a toolbar for reusable groups of actions; use inline `action` when a single
211
- screen owns the button. Dialog opening stays an interaction (`on click open dialog
212
- <DialogTemplate>`) unless the installed language exposes a dedicated toolbar-dialog
213
- node. A dialog destination must state every input with a typed `with`/`parameter`
234
+ A toolbar item is `item <name> action <Command>`, `item <name> navigate to <Screen>` or
235
+ `item <name> dialog <DialogTemplate>`. Use a toolbar for reusable groups of actions; use inline `action`
236
+ when a single screen owns the button. A parameter that reads a selection is a typed
237
+ `from component <stableId>.<path>` binding (the bare `selected.invoiceId` form parses only as a legacy
238
+ data-context path). A dialog destination must state every input with a typed `with`/`parameter`
214
239
  binding; a runtime default is not an authored contract.
215
240
 
216
241
  What Scene 4.17 adds to the runtime side of this contract, so an agent knows what a
@@ -1,7 +1,10 @@
1
1
  # Worked flow: marina berth bookings
2
2
 
3
- Complete document, design-mode (the list query `ListBerths` keeps it out of the executable
4
- subset; see `cratis-screenplay-slice-design`). Used by `SKILL.md`, *Compose in this order*.
3
+ Complete document. It compiles and binds (screens, forms and descriptions are informational
4
+ PLAY0269/0270; the `ListBerths` list query binds since Screenplay 4.105.0, and Stage 4.73.1 would render only
5
+ an `observable` list). Used by `SKILL.md`, *Compose in this order*. Opening an input screen is a
6
+ click (`section ... on click navigate to`); the input screen's `action` carries the destination
7
+ **after success**.
5
8
 
6
9
  ```screenplay
7
10
  concept BerthId : Uuid
@@ -31,8 +34,10 @@ module Marina
31
34
  query ListBerths => BerthListView[]
32
35
  screen BerthListScreen
33
36
  data BerthListView[] via query ListBerths
34
- action BookBerth
35
- navigate to BookBerthScreen
37
+ section bookBerthInput
38
+ title "Book a berth"
39
+ on click
40
+ navigate to BookBerthScreen
36
41
 
37
42
  form BookBerthForm for BookBerth
38
43
  field berthId label "Berth"
@@ -58,8 +63,11 @@ payload field the event never declares, so the event payload line matters.
58
63
  - `identifier` marks which property names the event source. It neither generates the value nor
59
64
  fills it. Here the user supplies the berth. Other sources are a prefill (`populate via query`
60
65
  or `populate from item` when the user chose a berth on the previous screen) or a modeled
61
- selection. `generated identifier` is ESM v7: it binds on standalone Screenplay 4.68.0 and reports `PLAY0268`
62
- on the 4.66.0 bundled in `cratis` 3.28.x; Stage 4.24.2 does not render it.
63
- - The form is found through `action BookBerth`; neither screen names it.
64
- - Compiled with `screenplay` 4.68.0 `--warnaserror` and `cratis screenplay validate
65
- --warnings-as-errors` 3.28.2.
66
+ selection. `generated identifier` is ESM v7: it binds on standalone Screenplay 4.68.0 and later and on the current
67
+ cratis bundle (`PLAY0268` on the 4.66.0 bundled in `cratis` 3.28.x); Stage 4.73.1 refuses it
68
+ (`STAGE-ESM-028`).
69
+ - The form is found through the input screen's `action BookBerth`; neither screen names it. A click
70
+ opens `BookBerthScreen` before the command runs; the action's `navigate to` is where the user
71
+ lands after success, never a route to the command's own input screen (Screenplay `screens.md`).
72
+ - Compiled with `screenplay` 4.139.0 `--warnaserror`; `cratis screenplay validate --executable` 3.53.1
73
+ reports it valid (bundled 4.137.0).