@cratis/pi 7.38.2 → 7.39.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.
- package/package/corpus/agents/screenplay-modeler.md +1 -1
- package/package/corpus/agents/screenplay-reviewer.md +1 -1
- package/package/corpus/product-sync.json +3 -3
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/public-events-and-direction.md +2 -5
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +2 -5
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translate-example.md +2 -5
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +7 -11
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/complete-examples.md +6 -15
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/specifying-triggers-and-clock.md +1 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +14 -15
- package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +2 -2
- package/package/corpus/skills/cratis-screenplay-command-surface/references/enum-numbers.md +2 -5
- package/package/corpus/skills/cratis-screenplay-command-surface/references/inline-events.md +23 -1
- package/package/corpus/skills/cratis-screenplay-discovery/references/provenance.md +1 -1
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/invoicing-example.md +3 -7
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +7 -10
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +1 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/intent-example.md +3 -8
- package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +8 -3
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +7 -5
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +26 -6
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +40 -0
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/property-links.md +3 -1
- package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-review/references/report-template.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/verdicts-and-modes.md +3 -2
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/worked-example.md +2 -6
- package/package/corpus/skills/cratis-screenplay-projections/SKILL.md +2 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +26 -18
- package/package/corpus/skills/cratis-screenplay-read-surface/references/equality-filters.md +211 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/references/screen-patterns.md +2 -5
- package/package/corpus/skills/cratis-screenplay-read-surface/verification.json +4 -0
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +1 -1
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/worked-example.md +2 -5
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +4 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +8 -19
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +8 -20
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-example.md +9 -23
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md +9 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +3 -2
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/view-and-story-specs.md +2 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +7 -4
- package/package/corpus/skills/cratis-screenplay-slice-design/references/model-reasoning.md +2 -5
- package/package/corpus/skills/cratis-screenplay-slice-design/references/read-model-design.md +5 -10
- package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +8 -19
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +17 -25
- package/package/corpus/skills/cratis-screenplay-specifications/references/actions-beyond-commands.md +2 -1
- package/package/corpus/skills/cratis-screenplay-specifications/references/persona-callers-and-cases.md +2 -5
- package/package/corpus/skills/cratis-screenplay-specifications/references/source-notes.md +10 -0
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +10 -24
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +11 -6
- package/package/corpus/skills/cratis-screenplay-toolchain/references/automation-translate-example.md +4 -10
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +9 -20
- package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +2 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-example.md +3 -7
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +24 -8
- package/package/corpus/skills/cratis-screenplay-toolchain/references/pdl-example.md +27 -69
- package/package/corpus/skills/cratis-screenplay-toolchain/references/preferred-syntax.md +73 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract-exceptions.json +21 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +7 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +14 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +25 -5
- package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +7 -11
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +2 -2
- package/package.json +1 -1
|
@@ -22,17 +22,13 @@ module Gallery
|
|
|
22
22
|
authorize IsCurator
|
|
23
23
|
validate
|
|
24
24
|
insuredValue > 0 message "An insured value must be positive"
|
|
25
|
-
produces ArtworkRegistered
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
insuredValue = insuredValue
|
|
25
|
+
produces event ArtworkRegistered
|
|
26
|
+
title ArtworkTitle = title
|
|
27
|
+
insuredValue Decimal = insuredValue
|
|
29
28
|
produces when insuredValue > 100000
|
|
30
29
|
HighValueArtworkFlagged
|
|
31
30
|
for artworkId
|
|
32
31
|
insuredValue = insuredValue
|
|
33
|
-
event ArtworkRegistered
|
|
34
|
-
title ArtworkTitle
|
|
35
|
-
insuredValue Decimal
|
|
36
32
|
event HighValueArtworkFlagged
|
|
37
33
|
insuredValue Decimal
|
|
38
34
|
constraint UniqueArtworkTitle
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
- Caller and compliance boundary (4.142.0)
|
|
6
6
|
- Admitted on both compilers
|
|
7
|
+
- Equality query filters (ESM v14, since 4.143.0)
|
|
7
8
|
- Admitted from Screenplay 4.61 (ESM v6): standalone tool and cratis 3.28.2 or later
|
|
8
9
|
- Generated values and responses (ESM v7): standalone 4.68.0 or later; the cratis 3.53.1 bundle binds them too
|
|
9
10
|
- Released public boundaries and observer routes
|
|
@@ -16,12 +17,13 @@ Current pins: `versions.md`. Detailed
|
|
|
16
17
|
4.66.0/4.68.0 binder probes below retain their historical labels. Current source
|
|
17
18
|
admits routes as ESM v8, public/direction constructs as v9, identity/overrides/filters
|
|
18
19
|
as v10, qualifying non-route Double literals as v11 (exact lowering of Double-mode literals)
|
|
19
|
-
and non-positional enum numbers as v12; concept compliance as v13
|
|
20
|
+
and non-positional enum numbers as v12; concept compliance as v13; caller-supplied
|
|
21
|
+
collection equality filters as v14 since 4.143.0. Operations, the `numbers exact` **source mode** (PLAY0268) and
|
|
20
22
|
reaction refusals/redelivery remain unadmitted. Use the actual
|
|
21
23
|
binder before promoting an older probe to a current capability claim.
|
|
22
24
|
|
|
23
25
|
What the binder admits, and what it refuses with which code. The answer depends on the
|
|
24
|
-
compiler version: the standalone tool (4.
|
|
26
|
+
compiler version: the standalone tool (4.145.0) binds through v14; the compiler bundled in cratis
|
|
25
27
|
3.53.1 (4.137.0) binds ESM through v10 for rendering and refuses non-positional enum numbers at
|
|
26
28
|
binding; older bundles (4.66.0 in cratis 3.28.x, admitting v1 to v6; 4.60.1 before 3.28.2, v1 to v5)
|
|
27
29
|
are history.
|
|
@@ -61,8 +63,8 @@ caller and purpose guidance retains v4.127.0 `context.md`, `identity.md`, `purpo
|
|
|
61
63
|
## Admitted on both compilers
|
|
62
64
|
|
|
63
65
|
- `StateChange` and `StateView` slices.
|
|
64
|
-
- A command with one `identifier`; `produces <
|
|
65
|
-
|
|
66
|
+
- A command with one `identifier`; inline `produces event <Name>` (omit `for`) for a command-owned event, or
|
|
67
|
+
plain `produces <Event>` with explicit `for <identifier>` for a shared event.
|
|
66
68
|
- `produces when` with `==`/`!=` on scalar text, enum, number or boolean, and ordering on
|
|
67
69
|
numbers.
|
|
68
70
|
- Mappings from command properties, string and number literals, `$context.occurred`,
|
|
@@ -84,8 +86,9 @@ caller and purpose guidance retains v4.127.0 `context.md`, `identity.md`, `purpo
|
|
|
84
86
|
Queryless read models need an explicit `key`. Explicit single keys preserve
|
|
85
87
|
equivalent inferred ESM bytes. Composite read-model keys, query `by` blocks and
|
|
86
88
|
their fixtures remain PLAY0268 (#599), not the 4.129.0 authoring delivery's
|
|
87
|
-
executable admission. Collections and observable delivery bind
|
|
88
|
-
|
|
89
|
+
executable admission. Collections and observable delivery bind. Since 4.143.0,
|
|
90
|
+
caller-supplied equality filters on collections also bind as ESM v14; context
|
|
91
|
+
sources, single-result filters, scope, performer and composite `by` remain blocked.
|
|
89
92
|
- One projection per read model: `from`, `every`, `all` (one block per level), `join`,
|
|
90
93
|
`children`, `nested`, `remove with`, `remove via join` (binds; blocks the execution plan at the projection level, see below), `clear with`, counters, `add`,
|
|
91
94
|
`subtract`, `set`, `clear`, variants, and the identifier mapped from the projection's key (`xId = $eventSourceId` only for an event-source key).
|
|
@@ -96,6 +99,19 @@ caller and purpose guidance retains v4.127.0 `context.md`, `identity.md`, `purpo
|
|
|
96
99
|
- `seed`. Personas, screens and descriptions are PLAY0270/PLAY0269 information, not
|
|
97
100
|
blocking.
|
|
98
101
|
|
|
102
|
+
## Equality query filters (ESM v14, since 4.143.0)
|
|
103
|
+
|
|
104
|
+
`filter <name> <Type> [optional]` binds on collections with no `from`, targeting a
|
|
105
|
+
same-named scalar primitive/concept/enum property of the same nominal type
|
|
106
|
+
(ignoring optionality). Distinct filter names must not repeat `by`. All supplied
|
|
107
|
+
filters AND with `by`; optional omission does not narrow, supplied null is refused.
|
|
108
|
+
`then query … arguments` and `when query` accept both `by` and filters; PLAY0468
|
|
109
|
+
reports unknown/repeated/missing required arguments. Collection results match by
|
|
110
|
+
read model/key regardless of row order. The standalone 4.145.0 pin admits this;
|
|
111
|
+
CLI 3.53.1's 4.137.0 compiler does not. Stage 4.73.1 admits through v10 and the
|
|
112
|
+
latest checked Stage 4.80.0 through v13, neither v14. Complete compiled specs:
|
|
113
|
+
read-surface [equality filters](../../cratis-screenplay-read-surface/references/equality-filters.md).
|
|
114
|
+
|
|
99
115
|
## Admitted from Screenplay 4.61 (ESM v6): standalone tool and cratis 3.28.2 or later
|
|
100
116
|
|
|
101
117
|
- `slice Automation` with `reaction`: `when <Event>` (with values) then `produces` (no
|
|
@@ -223,7 +239,7 @@ bodies still leave their owner non-executable.
|
|
|
223
239
|
| Unquoted `import Other.Contract` | PLAY0268 | external contract import is not bound |
|
|
224
240
|
| `pii` or `secret` on a concept | PLAY0268 | Blanket refusal on CLI 3.53.1's 4.137.0 bundle only. Standalone 4.142.0 admits v13 except enum/identity compliance and events mixing personal or explicitly subject-scoped secret values with explicit subject marks; see `compliance.md` in command-surface references |
|
|
225
241
|
| `query` with a composite `by` block, or `by ... from` context-derived arguments | PLAY0268 | composite `by` blocks remain unadmitted (#599). An optional scalar snapshot lookup, an unfiltered list (`RM[]`) and a list narrowed by one caller-supplied `by` key bind, in their `observable` form too (since 4.105.0) |
|
|
226
|
-
| `
|
|
242
|
+
| Context `from`, single-result filters, `scoped to`, `performer` queries | PLAY0268 | Typed query context, filtering of single results, opaque scope and query implementation remain unadmitted; each refusal names its reason. Caller-supplied collection equality filters bind as v14. `observable` goes in the return position (`=> observable RM[]`); as a body line it is PLAY0048 |
|
|
227
243
|
| `contains` or `starts with` in conditions | PLAY0268 | equality and numeric ordering only |
|
|
228
244
|
| Date or DateTime comparison, `today` | PLAY0268 | no runtime date value |
|
|
229
245
|
| Rule on a nested path (`lines.qty all > 0`) | PLAY0268 | put the rule on the nested value's concept |
|
|
@@ -252,7 +268,7 @@ bodies still leave their owner non-executable.
|
|
|
252
268
|
## Not refused, but do not rely on it
|
|
253
269
|
|
|
254
270
|
- Plain `produces` without `for` binds (PLAY0478, information) but means allocation in the
|
|
255
|
-
ESM and "the identifier" in rendered Arc code. Always write `for
|
|
271
|
+
ESM and "the identifier" in rendered Arc code. Always write `for` on a plain `produces <Name>`; inline `produces event` omits it.
|
|
256
272
|
- A projection-level (root) `remove via join` binds, but the reference execution plan refuses it (`UnsupportedProjectionBlock`), so no specification in the application runs; Chronicle wires it as a child pull. See the blocked-plan rows above.
|
|
257
273
|
- At Screenplay 4.125.0, V1 reports absent projection/children/nested targets
|
|
258
274
|
with PLAY0514 and unknown removal/capture events with PLAY0166. An unmapped
|
|
@@ -25,20 +25,12 @@ module Shop
|
|
|
25
25
|
orderId OrderId identifier
|
|
26
26
|
customerId CustomerId
|
|
27
27
|
total Decimal
|
|
28
|
-
produces OrderPlaced
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
lineNumber = 1
|
|
35
|
-
sku = "A-1"
|
|
36
|
-
event OrderPlaced
|
|
37
|
-
customerId CustomerId
|
|
38
|
-
total Decimal
|
|
39
|
-
event LineAdded
|
|
40
|
-
lineNumber Int
|
|
41
|
-
sku String
|
|
28
|
+
produces event OrderPlaced
|
|
29
|
+
customerId CustomerId = customerId
|
|
30
|
+
total Decimal = total
|
|
31
|
+
produces event LineAdded
|
|
32
|
+
lineNumber Int = 1
|
|
33
|
+
sku String = "A-1"
|
|
42
34
|
specification PlacingAnOrder
|
|
43
35
|
when PlaceOrder
|
|
44
36
|
orderId = "7a1c2e30-4b5d-4e6f-8a9b-0c1d2e3f4a5b"
|
|
@@ -64,29 +56,19 @@ module Shop
|
|
|
64
56
|
command RemoveLine
|
|
65
57
|
orderId OrderId identifier
|
|
66
58
|
lineNumber Int
|
|
67
|
-
produces LineRemoved
|
|
68
|
-
|
|
69
|
-
lineNumber = lineNumber
|
|
70
|
-
event LineRemoved
|
|
71
|
-
lineNumber Int
|
|
59
|
+
produces event LineRemoved
|
|
60
|
+
lineNumber Int = lineNumber
|
|
72
61
|
slice StateChange ShipOrder
|
|
73
62
|
command ShipOrder
|
|
74
63
|
orderId OrderId identifier
|
|
75
64
|
carrier String
|
|
76
|
-
produces Shipped
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
produces ShippingCleared
|
|
80
|
-
for orderId
|
|
81
|
-
event Shipped
|
|
82
|
-
carrier String
|
|
83
|
-
event ShippingCleared
|
|
65
|
+
produces event Shipped
|
|
66
|
+
carrier String = carrier
|
|
67
|
+
produces event ShippingCleared
|
|
84
68
|
slice StateChange CancelOrder
|
|
85
69
|
command CancelOrder
|
|
86
70
|
orderId OrderId identifier
|
|
87
|
-
produces OrderCancelled
|
|
88
|
-
for orderId
|
|
89
|
-
event OrderCancelled
|
|
71
|
+
produces event OrderCancelled
|
|
90
72
|
specification CancellingAnOrder
|
|
91
73
|
given OrderPlaced
|
|
92
74
|
for "7a1c2e30-4b5d-4e6f-8a9b-0c1d2e3f4a5b"
|
|
@@ -101,14 +83,9 @@ module Shop
|
|
|
101
83
|
command RenameCustomer
|
|
102
84
|
customerId CustomerId identifier
|
|
103
85
|
name String
|
|
104
|
-
produces CustomerRenamed
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
produces CustomerDeleted
|
|
108
|
-
for customerId
|
|
109
|
-
event CustomerRenamed
|
|
110
|
-
name String
|
|
111
|
-
event CustomerDeleted
|
|
86
|
+
produces event CustomerRenamed
|
|
87
|
+
name String = name
|
|
88
|
+
produces event CustomerDeleted
|
|
112
89
|
slice StateView OrderOverview
|
|
113
90
|
readmodel OrderView
|
|
114
91
|
orderId OrderId
|
|
@@ -156,28 +133,17 @@ module Work
|
|
|
156
133
|
command OpenIssue
|
|
157
134
|
issueId IssueId identifier
|
|
158
135
|
title String
|
|
159
|
-
produces IssueCreated
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
for issueId
|
|
164
|
-
title = title
|
|
165
|
-
event IssueCreated
|
|
166
|
-
title String
|
|
167
|
-
event IssueTitleCorrected
|
|
168
|
-
title String
|
|
136
|
+
produces event IssueCreated
|
|
137
|
+
title String = title
|
|
138
|
+
produces event IssueTitleCorrected
|
|
139
|
+
title String = title
|
|
169
140
|
slice StateChange OpenPullRequest
|
|
170
141
|
command OpenPullRequest
|
|
171
142
|
issueId IssueId identifier
|
|
172
143
|
status String
|
|
173
|
-
produces PullRequestCreated
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
for issueId
|
|
177
|
-
status = status
|
|
178
|
-
event PullRequestCreated
|
|
179
|
-
event BuildCompleted
|
|
180
|
-
status String
|
|
144
|
+
produces event PullRequestCreated
|
|
145
|
+
produces event BuildCompleted
|
|
146
|
+
status String = status
|
|
181
147
|
slice StateView WorkItems
|
|
182
148
|
readmodel BacklogItem
|
|
183
149
|
issueId IssueId
|
|
@@ -207,19 +173,11 @@ module Bank
|
|
|
207
173
|
accountId AccountId identifier
|
|
208
174
|
amount Decimal
|
|
209
175
|
code Code
|
|
210
|
-
produces Deposited
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
amount = amount
|
|
216
|
-
produces Frozen
|
|
217
|
-
for accountId
|
|
218
|
-
event Deposited
|
|
219
|
-
amount Decimal
|
|
220
|
-
event Withdrawn
|
|
221
|
-
amount Decimal
|
|
222
|
-
event Frozen
|
|
176
|
+
produces event Deposited
|
|
177
|
+
amount Decimal = amount
|
|
178
|
+
produces event Withdrawn
|
|
179
|
+
amount Decimal = amount
|
|
180
|
+
produces event Frozen
|
|
223
181
|
specification Depositing
|
|
224
182
|
when Deposit
|
|
225
183
|
accountId = "5d1f0c2e-8a47-4c1b-9b3e-6f2a7c9d1e10"
|
|
@@ -0,0 +1,73 @@
|
|
|
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
|
+
# Preferred Screenplay syntax
|
|
5
|
+
|
|
6
|
+
Use these forms when writing or reviewing `.play`. Acceptance of an older
|
|
7
|
+
spelling is not a recommendation to teach it. Information diagnostics do not
|
|
8
|
+
fail `--warnaserror`; the corpus verification gate rejects the nine style codes
|
|
9
|
+
below even when a fence declares `expect`, unless an exact, reasoned migration
|
|
10
|
+
exception exists in the verifier's preferred-syntax allowlist. That allowlist also
|
|
11
|
+
covers deliberate legacy explanations in prose; stale entries fail.
|
|
12
|
+
|
|
13
|
+
## Forms
|
|
14
|
+
|
|
15
|
+
| Construct | Preferred form | Accepted older form or redundancy | Diagnostic |
|
|
16
|
+
| --- | --- | --- | --- |
|
|
17
|
+
| Optional type | `T optional`, `T[] optional` | `T?`, `T[]?` | PLAY0479 (information) |
|
|
18
|
+
| Compliance | Header `concept X : String pii` or `secret`; body settings `pii reason`, `pii special health`, `secret scope namespace` | `@pii`, `@sensitive`, `sensitive`; `personal` is an accepted alias without a diagnostic | PLAY0565 (information); repeated markers warn PLAY0653 |
|
|
19
|
+
| Inline code | A construct header such as `validate`, followed by an indented language-tagged fence; descriptions use a tagged `text` fence, event documentation `markdown` | `validate csharp`, a language line above a bare fence, or a bare description fence | PLAY0397 (warning) |
|
|
20
|
+
| Event identity | Omit `id` for a new event; preserve `id "OldName"` for a renamed stored contract | `id` equal to the current event name | PLAY0471 (information) |
|
|
21
|
+
| Source/stream identity | Omit `id` unless preserving a previous stored name | A pin equal to the current name | PLAY0507 (information) |
|
|
22
|
+
| Production route | Inherit the command's route | Repeating the same `stream` / `streamId` on a production | PLAY0664 (warning) |
|
|
23
|
+
| Imports | Import only declarations not already declared by the application | Importing the application's own names | PLAY0290 (warning) |
|
|
24
|
+
| Interaction guard | Block-form `when` alternatives | Opaque interaction `where` on click, double click or select | PLAY0564 (warning or information) |
|
|
25
|
+
| Projection transition cardinality | Source binding emits `One` | Constructed/deserialized ESM v1–v3 `ZeroOrOne` / `Many` | PLAY0445 (warning; ESM-only, not a source spelling) |
|
|
26
|
+
|
|
27
|
+
`query Q => observable?` is not a legacy optional type suffix and has no keyword
|
|
28
|
+
replacement. Reaction/Translate `where` is current syntax, not an interaction
|
|
29
|
+
legacy guard. Keep a real rename pin; do not remove it to resemble a new event.
|
|
30
|
+
|
|
31
|
+
## Command productions
|
|
32
|
+
|
|
33
|
+
**Cratis convention:** prefer inline `produces event <Name>` when one command
|
|
34
|
+
owns the event. Declare payload types and mappings together; omit `for` to use
|
|
35
|
+
the command identifier and never copy that identifier into the event payload.
|
|
36
|
+
For an event shared by commands or reactions, keep a standalone `event` and use
|
|
37
|
+
plain `produces <Name>` with explicit `for <identifier>` on commands. Reactions
|
|
38
|
+
cannot declare inline events; omission there follows the triggering event's
|
|
39
|
+
source, and clock/application triggers require a destination.
|
|
40
|
+
|
|
41
|
+
Plain command production omission is accepted *legacy omission behavior*, not
|
|
42
|
+
identifier inference: it can use allocation or a sibling's resolved destination.
|
|
43
|
+
PLAY0478 is advice, not a forbidden style code or permission to retarget a stored
|
|
44
|
+
contract automatically. PLAY0469 concerns payload design and contract impact;
|
|
45
|
+
it is not a syntax-style ban either. Neither are PLAY0516, PLAY0553 or PLAY0520.
|
|
46
|
+
Read command-surface [inline events and destinations](../../cratis-screenplay-command-surface/references/inline-events.md)
|
|
47
|
+
for mixed destinations, extraction and generation evolution.
|
|
48
|
+
|
|
49
|
+
**Stage caveat:** rendered Arc commands ignore production `for` (Stage#187).
|
|
50
|
+
An authored destination is not proof of rendered routing; verify the target
|
|
51
|
+
implementation separately.
|
|
52
|
+
|
|
53
|
+
## Navigation `by` and form `columns`
|
|
54
|
+
|
|
55
|
+
Both are current, not legacy (settled in Screenplay#688, v4.145.1). Screen
|
|
56
|
+
navigation passes the target's key with `by <parameter>` (`on row-click navigate
|
|
57
|
+
to InvoiceDetail by invoiceId`) and further values with `parameter <name> from
|
|
58
|
+
<binding>`; navigation inside an interaction block passes values with `with <name>
|
|
59
|
+
from <binding>`. A form's `columns auto|manual` chooses which command properties
|
|
60
|
+
it shows and in which order; `layout`/`place` positions them. Use whichever the
|
|
61
|
+
case needs; neither has a style diagnostic.
|
|
62
|
+
|
|
63
|
+
## Verified product sources
|
|
64
|
+
|
|
65
|
+
Screenplay **v4.145.0** (syntax unchanged from 4.144.0):
|
|
66
|
+
`Documentation/screenplay/types.md:23-25`, `concepts.md:34-37,142-146`,
|
|
67
|
+
`ast-compatibility.md:68`, `commands.md:80-90,136-176,503`,
|
|
68
|
+
`events.md:114,118-120`, `event-sources.md:7,86,132`, `reactions.md:298-312`,
|
|
69
|
+
`interactions.md:105-107`, `folders.md:418-421`, `diagnostics.md:825,979-987,1013,1084,1105-1120,1271`.
|
|
70
|
+
Printer: `Source/DotNET/Screenplay/Printing/ScreenplaySyntaxText.cs:41`,
|
|
71
|
+
`ScreenplayPrinter.Expressions.cs:18-32`, `ScreenplayPrinter.Commands.cs:481-530`.
|
|
72
|
+
Navigation and forms: Screenplay v4.145.1 `glossary.md:65`, `forms.md:40`; https://github.com/Cratis/Screenplay/issues/688.
|
|
73
|
+
The published contract is the selector's authority, not this hand-written table.
|
|
@@ -46,7 +46,7 @@ version; each construct it does not render refuses with its own code before any
|
|
|
46
46
|
| Area | Renders at 4.73.1 | Refused (code) |
|
|
47
47
|
| --- | --- | --- |
|
|
48
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`;
|
|
49
|
+
| Queries | optional keyed snapshot lookups; observable collections, keyed or unkeyed (since 4.49.0) | a snapshot list: `STAGE-ESM-010`; context/single-result filters, opaque `scoped to`/`performer` and composite `by`: PLAY0268. Caller-supplied collection equality filters bind since 4.143.0 as v14, above this bundle's v10 admission ceiling |
|
|
50
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
51
|
| Event sources, streams, routes (ESM v8) | rendered, with routed specifications | reserved stored names, unformattable routed fixtures, unsupported routed replay (`STAGE-ESM-030`) |
|
|
52
52
|
| Numbers, case tables | whole numbers as `long` from ESM v8; case tables | out-of-`int` literals below v8 (`STAGE-ESM-031`) |
|
|
@@ -87,7 +87,7 @@ whole automation is hand-written (gap-fill).
|
|
|
87
87
|
| Constraints | unique property value, unique event occurrence; admitted even though Chronicle#4123 means index updates run after commit | intra-command multi-event change to one constraint; multi-claim in one command: 014 |
|
|
88
88
|
| Authorization | authenticated, role, claim and logical policies; caller fixtures; ownership claims against text-backed targets | opaque policy code, role-claim URIs, a claim matched against a Uuid-backed subject or path: 015 |
|
|
89
89
|
| Specifications | command-action scenarios: given events, `when <Command>`, `then` events (ordered or any order), `then readmodel`, `then query`, `then error` (naming a rendered constraint or message), `then denied`, `given caller`. Two narrow when-less routes: an unprotected single `then query` seeded by exactly one `given readmodel` whose key and values match (no given events, no caller), and a query-only denial (`given caller`, one `then query` with no results, `then denied`, a protected query, no role claims) | `then no readmodel`, `when append`, composite values, error codes not naming a rendered constraint: 011. Any other when-less specification (for example given events with `then query`) fails 011 |
|
|
90
|
-
| Compliance | none | any
|
|
90
|
+
| Compliance | none | any `pii` or `secret` already fails binding (PLAY0268) on the pinned CLI. The C# provider mapping (Stage v4.29.0, Stage#197) is personal data to `[PII]`, operational secrets to `[Encrypted]` + `[NotAudited]`, both to `[PII]` only |
|
|
91
91
|
|
|
92
92
|
At standalone 4.127.0, compliance uses bare `pii`/`secret` (legacy markers are
|
|
93
93
|
accepted with PLAY0565 information); either still refuses binding on that compiler.
|
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"file": ".cratis/ai/skills/cratis-screenplay-model-authoring/references/mcp-loop.md",
|
|
4
|
+
"text": " 3 unsupported/unbound. `test` rejects `--no-color`. Hand off to the verdict",
|
|
5
|
+
"kind": "cliOption",
|
|
6
|
+
"value": "--no-color",
|
|
7
|
+
"reason": "Explicitly documents a rejected option, not a supported CLI argument; Screenplay v4.145.0 ModelTest.cs:22-26. Remove with the warning."
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"file": ".cratis/ai/skills/cratis-screenplay-model-authoring/references/mcp-tools.md",
|
|
11
|
+
"text": "or unbound. `--no-color` is rejected (exit 2); there is no proposal or paging option.",
|
|
12
|
+
"kind": "cliOption",
|
|
13
|
+
"value": "--no-color",
|
|
14
|
+
"reason": "Explicit warning that test does not accept this flag; Screenplay v4.145.0 ModelTest.cs:22-26. Remove with the warning."
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"file": ".cratis/ai/skills/cratis-screenplay-toolchain/references/verdicts.md",
|
|
18
|
+
"text": "is not proof of coverage. `test` rejects `--no-color` (exit 2).",
|
|
19
|
+
"kind": "cliOption",
|
|
20
|
+
"value": "--no-color",
|
|
21
|
+
"reason": "Negative option guidance, not a command recommendation; Screenplay v4.145.0 ModelTest.cs:22-26. Remove with the warning."
|
|
22
|
+
},
|
|
2
23
|
{
|
|
3
24
|
"file": ".cratis/ai/skills/cratis-screenplay-model-authoring/references/mcp-loop.md",
|
|
4
25
|
"text": "4.63.1. Cratis CLI 3.28.2 bundles Screenplay 4.66.0 (probed: 29 tools and the same views);",
|
package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json
CHANGED
|
@@ -24512,12 +24512,17 @@
|
|
|
24512
24512
|
"expectedSourceRevision",
|
|
24513
24513
|
"limit",
|
|
24514
24514
|
"offset",
|
|
24515
|
+
"proposalId",
|
|
24515
24516
|
"scope",
|
|
24516
24517
|
"specification"
|
|
24517
24518
|
],
|
|
24518
24519
|
"inputSchema": {
|
|
24519
24520
|
"type": "object",
|
|
24520
24521
|
"properties": {
|
|
24522
|
+
"proposalId": {
|
|
24523
|
+
"type": "string",
|
|
24524
|
+
"description": "Outstanding proposal from this connection. Runs its retained candidate and identity catalog without refreshing, applying or mutating it; an externally changed base does not replace the snapshot."
|
|
24525
|
+
},
|
|
24521
24526
|
"specification": {
|
|
24522
24527
|
"type": "string"
|
|
24523
24528
|
},
|
|
@@ -24534,7 +24539,8 @@
|
|
|
24534
24539
|
"maximum": 200
|
|
24535
24540
|
},
|
|
24536
24541
|
"expectedSourceRevision": {
|
|
24537
|
-
"type": "string"
|
|
24542
|
+
"type": "string",
|
|
24543
|
+
"description": "Echo sourceRevision from the first execution response on continuation. With proposalId, pins the candidate source rather than the current model."
|
|
24538
24544
|
}
|
|
24539
24545
|
},
|
|
24540
24546
|
"required": [],
|
package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.
|
|
1
|
+
4.145.0
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
## Admission
|
|
12
12
|
|
|
13
13
|
Sources, streams and command/specification routes bind and reference-execute as
|
|
14
|
-
**ESM v8**
|
|
14
|
+
**ESM v8** since Screenplay 4.125.0. Current evidence: released `event-sources.md`,
|
|
15
15
|
`specifications.md`, `Versions.cs`; the complete example below compiled with
|
|
16
16
|
`--warnaserror` and passed `screenplay test` on 4.125.0.
|
|
17
17
|
|
|
@@ -7,9 +7,9 @@ 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
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,
|
|
10
|
+
2. The Screenplay samples validate clean but are not all executable; copying their idioms (context-filtered queries, enum/identity compliance, `today`, `reads`, `$causedBy`, templates, performers) can block V3. Caller-supplied collection equality filters bind since 4.143.0 (ESM v14); read read-surface `references/equality-filters.md`. [historical probes; current filter source checked]
|
|
11
11
|
3. Know the target mode (design/executable/renderable) before writing; state it.
|
|
12
|
-
4. Plain `produces` without `for` means allocation in the ESM but "the identifier" in rendered code. Always write `for <identifier
|
|
12
|
+
4. Plain `produces` without `for` means allocation in the ESM but "the identifier" in rendered code. Always write `for <identifier>` on a plain `produces <Name>`; inline `produces event <Name>` omits `for` and defaults to the 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]
|
|
14
14
|
6. Validate the folder: `cratis screenplay validate file.play` ignores imports and reports false unknown-name warnings (cli#244, open); the standalone tool follows them. [probed on 3.28.2 and 4.66.0]
|
|
15
15
|
7. Current V1 warns on absent projection/children/nested targets (PLAY0514) and unknown removal/capture events (PLAY0166). Opt-in field-origins checks find unmapped declared fields (PLAY0534) where coverage is known; still walk lineage for skipped/opaque shapes.
|
|
@@ -104,13 +104,25 @@ never "specifications pass".
|
|
|
104
104
|
## V4: reference specifications run
|
|
105
105
|
|
|
106
106
|
Run `screenplay test <root> [--filter <exact-address>] [--format text|json]` on
|
|
107
|
-
|
|
107
|
+
the standalone pin, or MCP `run-specifications`. The compile command alone still does not
|
|
108
108
|
execute scenarios. Reference execution is in-memory: no external services or
|
|
109
109
|
opaque code run. Record route, expected versus discovered/selected counts,
|
|
110
110
|
passed, failed and unsupported outcomes. Exit 0 means all selected passed; 1
|
|
111
111
|
failed, 2 could not run/invalid input or selection, 3 unbound or unsupported.
|
|
112
112
|
Unknown filters refuse rather than select zero. No discovered specifications
|
|
113
|
-
is not proof of coverage.
|
|
113
|
+
is not proof of coverage. `test` rejects `--no-color` (exit 2).
|
|
114
|
+
|
|
115
|
+
MCP selectors are `specification` (exact address/id) and `scope` (prefix);
|
|
116
|
+
both supplied mean intersection. `offset`/`limit` page results; continuation
|
|
117
|
+
requires `expectedSourceRevision`. On **Screenplay 4.145.0 and later**, pass
|
|
118
|
+
`proposalId` between proposal review and `apply` to run the retained candidate
|
|
119
|
+
read-only. Without that argument it runs the workspace. A candidate
|
|
120
|
+
V4 belongs only to its returned source revision, not to the disk model.
|
|
121
|
+
Unknown/applied/discarded/reopened proposals give `UnknownProposal`.
|
|
122
|
+
A statically impossible `then` reports PLAY0285: the whole model is unbound,
|
|
123
|
+
exit 3, and no specifications run. Details and source evidence:
|
|
124
|
+
[reference execution](../../cratis-screenplay-model-authoring/references/mcp-tools.md#run-reference-specifications).
|
|
125
|
+
|
|
114
126
|
The reference runner returns unsupported for a specification that reads a reducer-built read
|
|
115
127
|
model and for any construct whose evaluation needs an opaque body.
|
|
116
128
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
## Contents
|
|
4
4
|
|
|
5
5
|
- Pin set
|
|
6
|
+
- Equality-filter rendering boundary
|
|
6
7
|
- Two compilers, one rule
|
|
7
8
|
- Commands and exit codes
|
|
8
9
|
- Model notes gate
|
|
@@ -18,11 +19,11 @@ probe; older probes retain their original labels in the other references.
|
|
|
18
19
|
|
|
19
20
|
| Source | Pin | Evidence |
|
|
20
21
|
| --- | --- | --- |
|
|
21
|
-
| Screenplay language, standalone tool and MCP | **4.
|
|
22
|
+
| Screenplay language, standalone tool and MCP | **4.145.0** (`bf58b489`) | Released tag `v4.145.0`, published NuGet tool and byte-identical Golden contract; read-only proposal specification execution with `proposalId`; model notes/open-question gate and ESM v14 equality filters retained |
|
|
22
23
|
| cratis CLI | **3.53.1** | Released tag `v3.53.1`; source-checked, not a new render/browser probe |
|
|
23
24
|
| Screenplay bundled by CLI | **4.137.0** | CLI `v3.53.1:Directory.Packages.props`; enum-number authoring, not v12 binding |
|
|
24
25
|
| Stage bundled by CLI | **4.73.1** | Same file; Stage's own `Directory.Packages.props` also pins Screenplay 4.137.0 |
|
|
25
|
-
|
|
|
26
|
+
| Historical standalone Stage source baseline | **4.76.0** (Screenplay 4.139.0) | Released tag `v4.76.0`; no cli release bundles Stage 4.74.0 to 4.76.0, so a cli user observes none of it. It admits ESM v1 to v12 (v11 from 4.75.0, v12 from 4.76.0), renders UUID-concept generated values and responses (4.74.0) and explicit enum numbers (4.76.0). Its scaffold pins match 4.73.1 (Arc 22.68.0, Chronicle 19.45.0, frontend pins); `Directory.Packages.props` takes Scene 4.21.0 |
|
|
26
27
|
| Screenplay.Generation / CritterStack / Prologue bundled by CLI | **0.18.0 / 0.24.0 / 2.0.0** | CLI `v3.53.1:Directory.Packages.props`. Latest released: Generation 0.18.1, CritterStack 0.26.0, Prologue 2.0.0 (no release after 2.0.0); the newer Generation and CritterStack releases are not in a cli |
|
|
27
28
|
| Cratis.Arc.Screenplay bundled by CLI | **22.54.0** | Same file; this is the generator package, not a blanket rendered-app dependency pin |
|
|
28
29
|
| Chronicle / Fundamentals bundled by CLI | **19.32.0 / 7.22.8** | Same file |
|
|
@@ -52,9 +53,25 @@ and `Source/Cli.Specs/for_AiMcpRegistration/when_installing/with_a_composed_prof
|
|
|
52
53
|
at tag `v3.46.1` (CLI#322 / CLI#311). This minimum does not re-label the compiler
|
|
53
54
|
or renderer probes below as results from the newer bundle.
|
|
54
55
|
|
|
56
|
+
## Equality-filter rendering boundary
|
|
57
|
+
|
|
58
|
+
Caller-supplied collection equality filters shipped in Screenplay **4.143.0**
|
|
59
|
+
(decision 0069), selecting ESM v14; the standalone **4.145.0** pin binds and
|
|
60
|
+
reference-tests them. No-filter models retain their version/bytes/revision.
|
|
61
|
+
The latest released Stage checked for this boundary, **4.80.0**, admits through
|
|
62
|
+
v13 (`Source/Rendering.Cratis/Semantics/SemanticVersionFeatures.cs:100`,
|
|
63
|
+
`EsmSchemaV13Support`) and refuses authored filters in its legacy renderer
|
|
64
|
+
(`Renderers/QueryAdmission.cs:13-22`); it pins Screenplay 4.141.0. It does not
|
|
65
|
+
admit v14. CLI **3.53.1** still bundles Screenplay **4.137.0** / Stage **4.73.1**,
|
|
66
|
+
whose audited pair ceiling is v10 (`SemanticVersionFeatures.cs:89`). These are
|
|
67
|
+
source checks at Stage `v4.80.0` / `v4.73.1` and CLI `v3.53.1`, not new render
|
|
68
|
+
probes or scaffold dependency upgrades. A future consumer must explicitly admit
|
|
69
|
+
v14 and preserve equality selection rather than drop filters. Complete examples:
|
|
70
|
+
read-surface [equality filters](../../cratis-screenplay-read-surface/references/equality-filters.md).
|
|
71
|
+
|
|
55
72
|
## Two compilers, one rule
|
|
56
73
|
|
|
57
|
-
Standalone Screenplay 4.
|
|
74
|
+
Standalone Screenplay 4.145.0 and CLI 3.53.1's 4.137.0 bundle are different releases.
|
|
58
75
|
Prefer standalone for the current language checks; CLI owns generation, Prologue
|
|
59
76
|
and rendering. Name the tool/version with every verdict. No verdict transfers
|
|
60
77
|
between differing compilers without checking the same inputs there.
|
|
@@ -76,13 +93,16 @@ conflicts: `cratis-screenplay-model-authoring`.
|
|
|
76
93
|
| Completeness | Add `--check <name>[,<name>]` (repeatable) or `--check all` | Opt-in warnings; whole-source errors skip checks, not pass them |
|
|
77
94
|
| CLI source validation | `cratis screenplay validate <root> --warnings-as-errors -o json-compact` | Read producer exit and JSON errors/warnings/file count. Passing source-only probe on CLI 3.41.0: dependencies example, exit 0 |
|
|
78
95
|
| Binding | MCP workspace readiness and `executable-diagnostics` | V2 reads diagnostics; V3 requires binding with no blocking diagnostics |
|
|
79
|
-
| Reference specifications | `screenplay test <root> [--filter <address>] [--format text|json]`, or MCP `run-specifications` | 0 all selected passed; 1 failed; 2
|
|
96
|
+
| Reference specifications | `screenplay test <root> [--filter <address>] [--format text|json]`, or MCP `run-specifications` (`specification`, `scope`, `offset`, `limit`, `expectedSourceRevision`; `proposalId` from 4.145.0) | 0 all selected passed; 1 failed; 2 invalid arguments/input/selection or IO; 3 unsupported or unbound. `test` rejects `--no-color`; counts of zero do not prove coverage |
|
|
80
97
|
| Rendering | `cratis render` | Separate admission, publication, target build and target tests (V5) |
|
|
81
98
|
|
|
82
99
|
Source validation does not bind or run attached code. Reference execution is
|
|
83
100
|
in-memory and does not run opaque attachments or external services. CLI-derived
|
|
84
101
|
specification IDs need not match persisted MCP identities after renames; use MCP
|
|
85
|
-
for identity-stable selection.
|
|
102
|
+
for identity-stable selection. On Screenplay **4.145.0 and later**, run a retained
|
|
103
|
+
proposal read-only with `proposalId` after review and before apply. Without that
|
|
104
|
+
argument it runs the current workspace. An impossible `then` (PLAY0285)
|
|
105
|
+
unbinds the entire model and prevents every specification running.
|
|
86
106
|
|
|
87
107
|
## Model notes gate
|
|
88
108
|
|
|
@@ -6,6 +6,8 @@ license: MIT
|
|
|
6
6
|
|
|
7
7
|
# UI composition in Screenplay
|
|
8
8
|
|
|
9
|
+
Read [preferred syntax](../cratis-screenplay-toolchain/references/preferred-syntax.md) when writing or reviewing `.play`.
|
|
10
|
+
|
|
9
11
|
Event Modeling's wireframe step is a first-class part of the language. The shell,
|
|
10
12
|
the reusable shapes inside it, the forms bound to commands, and the navigation
|
|
11
13
|
entries other modules contribute are all declared in the `.play` model.
|
|
@@ -17,17 +19,11 @@ a trigger value named `file` is written `@file`.
|
|
|
17
19
|
|
|
18
20
|
## Locate the model
|
|
19
21
|
|
|
20
|
-
Look first for the project's existing `.play` files:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
location or search the whole repository before checking it.
|
|
26
|
-
|
|
27
|
-
`cratis ai install` manages `.cratis/ai/`, never model files. Never
|
|
28
|
-
hand-copy Screenplay source between repositories. Keep Markdown that explains,
|
|
29
|
-
questions or navigates the model in the repository's documentation; the `.play`
|
|
30
|
-
source is the single flow model.
|
|
22
|
+
Look first for the project's existing `.play` files: their folder is the model.
|
|
23
|
+
For a new model, check `Source/` or `src/`, else use `Screenplay/` at the repository
|
|
24
|
+
root. Never put a model under `.cratis/` or hand-copy it between repositories.
|
|
25
|
+
`cratis ai install` manages `.cratis/ai/`, never model files. Keep explanatory
|
|
26
|
+
Markdown in project documentation; `.play` is the single flow model.
|
|
31
27
|
|
|
32
28
|
## Verified product sources
|
|
33
29
|
|
|
@@ -70,7 +70,7 @@ model owner's decision.
|
|
|
70
70
|
| `STAGE-ESM-005` | Code validation or rule predicate bodies; or a command beyond the first capability (optional event property, event revision other than the first, validation or requirement that cannot be rendered, no `produces`) | Use declarative validation; non-initial event generations are not rendered |
|
|
71
71
|
| `STAGE-ESM-006` | `produces` that cannot render without changing its destination or mappings (`produces when`, literal or computed mappings, `for` not a command identifier, mappings not one-to-one with event properties, duplicate tags) | Map properties one to one; conditional outcomes (`produces when`) are a different behavior, so gap-fill unless the owner accepts splitting them into commands |
|
|
72
72
|
| `STAGE-ESM-007`, `-008`, `-009` | Projection count per read model (exactly one projection or reducer each); unresolvable properties or no single read-model transition (**flat** projections only); affected instance not one, not keyed by an event property, or not the event-source identity (flat projections only) | One projection per read model; see "Projections" below |
|
|
73
|
-
| `STAGE-ESM-010` | A query is neither an optional snapshot lookup by the read-model identifier nor an observable collection query (for example a snapshot list); each query is checked on its own. Observable list queries (keyed or unkeyed) render since Stage 4.49.0. Through Stage 4.79.0 (so in cratis CLI 3.53.1, which bundles 4.73.1) an optional snapshot lookup whose key concept has validation rules is refused; Stage 4.79.1 renders a scalar validated key, in keyed lookups and filtered observable collections, as its primitive and converts it inside the query, so an out-of-rule key finds no instance instead of failing validation, and still refuses a validated concept inside a composite or collection argument (Stage `v4.79.1` `Source/Rendering.Cratis/Semantics/SemanticCratisAdmission.StateView.cs:117-141`) | Keyed `XById => X optional` queries or `observable` lists; a snapshot list is gap-fill.
|
|
73
|
+
| `STAGE-ESM-010` | A query is neither an optional snapshot lookup by the read-model identifier nor an observable collection query (for example a snapshot list); each query is checked on its own. Observable list queries (keyed or unkeyed) render since Stage 4.49.0. Through Stage 4.79.0 (so in cratis CLI 3.53.1, which bundles 4.73.1) an optional snapshot lookup whose key concept has validation rules is refused; Stage 4.79.1 renders a scalar validated key, in keyed lookups and filtered observable collections, as its primitive and converts it inside the query, so an out-of-rule key finds no instance instead of failing validation, and still refuses a validated concept inside a composite or collection argument (Stage `v4.79.1` `Source/Rendering.Cratis/Semantics/SemanticCratisAdmission.StateView.cs:117-141`) | Keyed `XById => X optional` queries or `observable` lists; a snapshot list is gap-fill. Caller-supplied collection equality filters bind as v14 since 4.143.0 but exceed this Stage 4.73.1 v10 ceiling (latest checked 4.80.0 admits through v13). Context/single-result filters, opaque scope/performer and composite `by` remain PLAY0268 |
|
|
74
74
|
| `STAGE-ESM-011` | A specification cannot render (see the rules below) | Reshape it only if the assertion keeps its meaning; otherwise keep the specification, record the gap, and gap-fill with the specification as the oracle. Never weaken or delete it to get a render |
|
|
75
75
|
| `STAGE-ESM-012` | Generated C# names collide (properties, types, namespaces, constraints) | Rename |
|
|
76
76
|
| `STAGE-ESM-013` | An event-context value other than `$context.occurred` mapped in `produces` | Map a command property when that preserves the meaning; otherwise gap-fill |
|
|
@@ -249,7 +249,7 @@ Whole-model admission needs ESM schema v1 to v4; v5 and v6 are `STAGE-ESM-016`.
|
|
|
249
249
|
Not rendered: `Automation` and `Translate` slices (Stage#79, open: the whole automation
|
|
250
250
|
is gap-fill), reactions and captures, list, observable, filtered and scoped queries,
|
|
251
251
|
`produces when`, command `handler`s, code validation and opaque policies (they refuse),
|
|
252
|
-
composite-key projections, `all`, and compliance
|
|
252
|
+
composite-key projections, `all`, and compliance markers (`pii`, `secret`, which
|
|
253
253
|
already fail binding with `PLAY0268`). Any one blocking diagnostic fails the whole plan.
|
|
254
254
|
A refusal is not a licence to weaken the model: drop no specification, event generation
|
|
255
255
|
or protection to get a render; keep the model, record the capability gap and gap-fill.
|