@cratis/pi 7.127.0 → 7.129.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/product-sync.json +4 -4
- package/package/corpus/skills/cratis-application-slice-conformance/SKILL.md +1 -1
- package/package/corpus/skills/cratis-arc-react-page/references/from-screenplay.md +5 -5
- package/package/corpus/skills/cratis-onboarding-runtime/SKILL.md +10 -2
- package/package/corpus/skills/cratis-onboarding-runtime/references/default-offering.md +61 -0
- package/package/corpus/skills/cratis-onboarding-runtime/references/sign-up-review.md +52 -0
- package/package/corpus/skills/cratis-screenplay-authentication-and-onboarding/SKILL.md +1 -1
- package/package/corpus/skills/cratis-screenplay-authentication-and-onboarding/references/onboarding-directives.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +6 -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/cases-to-specify.md +5 -5
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/statemachines-and-workflows.md +164 -0
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +12 -15
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translate-example.md +10 -4
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/complete-examples.md +2 -2
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/invocation-identity.md +8 -2
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +5 -4
- package/package/corpus/skills/cratis-screenplay-command-surface/references/described-handlers.md +12 -8
- package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +5 -5
- package/package/corpus/skills/cratis-screenplay-command-surface/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +6 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generated-recovery.md +4 -4
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +2 -2
- package/package/corpus/skills/cratis-screenplay-read-surface/references/named-keys.md +3 -1
- package/package/corpus/skills/cratis-screenplay-read-surface/references/screen-patterns.md +2 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +4 -4
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +6 -5
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +2 -2
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +0 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-example.md +8 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md +17 -9
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +4 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/version-skew.md +25 -14
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/view-and-story-specs.md +7 -6
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/read-model-design.md +1 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/slicing.md +1 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +3 -3
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +4 -2
- package/package/corpus/skills/cratis-screenplay-specifications/references/actions-beyond-commands.md +4 -2
- package/package/corpus/skills/cratis-screenplay-specifications/references/child-ordering.md +12 -3
- package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +70 -21
- package/package/corpus/skills/cratis-screenplay-specifications/references/vocabulary.md +3 -2
- package/package/corpus/skills/cratis-screenplay-specifications/verification.json +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +3 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/automation-translate-example.md +5 -8
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +12 -11
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostic-arguments.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +10 -7
- package/package/corpus/skills/cratis-screenplay-toolchain/references/language-admission.md +4 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/preferred-syntax.md +4 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +4 -4
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract-exceptions.json +0 -70
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +4743 -623
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +1 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +6 -0
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/action-subjects.md +73 -0
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/file-references.md +4 -3
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/response-continuations.md +1 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/worked-flow.md +1 -1
- package/package/corpus/skills/cratis-showrunner-herald/SKILL.md +5 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +6 -5
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +8 -5
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +14 -5
- package/package.json +1 -1
|
@@ -105,11 +105,12 @@ fix to migrate. `--warnaserror` does not reject information diagnostics.
|
|
|
105
105
|
properties, `reads`, `authorize`, `validate`, `produces`/`handler`, `concurrency`.
|
|
106
106
|
Keep to it.
|
|
107
107
|
|
|
108
|
-
A file/code `handler`
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
A file/code `handler` beside unconditional `produces`, with a resolved nonempty body,
|
|
109
|
+
binds as the v23 result contract: `produces` fixes the
|
|
110
|
+
events and the body owns their property values. Without `produces`, with `produces ... when`,
|
|
111
|
+
or with an unresolved body it fails binding with PLAY0800 (`CommandHandlerRequiresAttachment`).
|
|
111
112
|
Read the required typed `subject` argument for the command, never parse the message.
|
|
112
|
-
Requires Screenplay 4.
|
|
113
|
+
Requires Screenplay 4.250.0 (`screenplay --version`); 4.210.0 to 4.249.x refuse every attached handler with PLAY0800 and older binders use PLAY0268. A pending `handler implementation` beside unconditional `produces`
|
|
113
114
|
is a described command (ESM v23): the body owns payload values only. Prefer plain
|
|
114
115
|
`produces` for declarative logic. Read [described handlers](references/described-handlers.md)
|
|
115
116
|
when logic needs prose, for the result contract, PLAY0695–0698, Unsupported
|
package/package/corpus/skills/cratis-screenplay-command-surface/references/described-handlers.md
CHANGED
|
@@ -32,13 +32,17 @@ module Invoices
|
|
|
32
32
|
|
|
33
33
|
A pending `implementation` has no `file` or fence. Bare `implementation` is valid;
|
|
34
34
|
optional `hint` lines are ordered, nonblank quoted strings, decoded without trimming.
|
|
35
|
-
One wrapper and at most one payload are permitted. Attaching a file or fence
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
One wrapper and at most one payload are permitted. Attaching a file or fence makes it
|
|
36
|
+
an attached handler. Beside unconditional `produces`, with a resolved, nonempty,
|
|
37
|
+
language-tagged body, it binds with the same v23 result contract (Screenplay 4.250.0,
|
|
38
|
+
decision 0117): the productions fix event types, count, order and destinations, and
|
|
39
|
+
the body owns property values. Reaching the body in reference execution is Unsupported
|
|
40
|
+
(`ImplementationBody`) and appends nothing. An attached handler with no `produces`,
|
|
41
|
+
with `produces ... when`, or with an empty or unresolved body fails binding with PLAY0800
|
|
42
|
+
(`CommandHandlerRequiresAttachment`): declare unconditional `produces`, split variable
|
|
43
|
+
outcomes into separate commands, or attach a resolved body.
|
|
44
|
+
|
|
45
|
+
Requires Screenplay 4.250.0 (`screenplay --version`) for attached handlers beside `produces` to bind; 4.210.0 to 4.249.x refuse every attached handler with PLAY0800, and older binders use PLAY0268. Hosts switch on the code and read `arguments.subject`, never parse the message.
|
|
42
46
|
|
|
43
47
|
## Result contract v1
|
|
44
48
|
|
|
@@ -61,7 +65,7 @@ explicitly admit this version, never silently drop the body.
|
|
|
61
65
|
|
|
62
66
|
| Diagnostic | Meaning and action |
|
|
63
67
|
| --- | --- |
|
|
64
|
-
| PLAY0800 (error) | File/inline handler
|
|
68
|
+
| PLAY0800 (error) | File/inline handler without unconditional `produces` or a resolved, nonempty body; `subject` identifies the command |
|
|
65
69
|
| PLAY0695 (information) | Described command admitted; command and RequirementId name the missing body |
|
|
66
70
|
| PLAY0696 (error) | No productions, including response-only; add unconditional productions |
|
|
67
71
|
| PLAY0697 (error) | Conditional productions; result v1 needs unconditional events |
|
package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md
CHANGED
|
@@ -98,11 +98,11 @@ validate
|
|
|
98
98
|
|
|
99
99
|
A bodied rule or fenced block on a validation, rule or policy binds as opaque code
|
|
100
100
|
(ESM v3): the reference runner reports it unsupported, and a target must supply the
|
|
101
|
-
implementation. Attached command handlers
|
|
102
|
-
|
|
103
|
-
constraints bind).
|
|
104
|
-
|
|
105
|
-
|
|
101
|
+
implementation. Attached command handlers bind beside unconditional `produces` with a
|
|
102
|
+
resolved body (Screenplay 4.250.0) and otherwise refuse PLAY0800; `file` constraints
|
|
103
|
+
retain PLAY0268 (only `unique` constraints bind). Pending and attached command handlers
|
|
104
|
+
beside unconditional `produces` share the v23 result contract; see
|
|
105
|
+
[described handlers](described-handlers.md).
|
|
106
106
|
Literal text rules, portable patterns and Studio desugaring: [text and match rules](text-and-match-rules.md).
|
|
107
107
|
Stage renders pure reducer transitions and opaque policy bodies, but refuses command and
|
|
108
108
|
concept code validations and rule predicates (STAGE-ESM-005): those are gap-fill code. Prefer a
|
|
@@ -274,11 +274,14 @@ module Invoicing
|
|
|
274
274
|
specification IssuingOnMonday
|
|
275
275
|
given clock "2026-10-05T07:00:00Z"
|
|
276
276
|
when clock "2026-10-05T07:30:00Z"
|
|
277
|
-
then
|
|
278
|
-
|
|
279
|
-
issuedAt = "2026-10-05T07:30:00Z"
|
|
277
|
+
then invokes IssueCollectionsDigest
|
|
278
|
+
period = "weekly"
|
|
280
279
|
```
|
|
281
280
|
|
|
281
|
+
Each slice proves its own link (Screenplay decision 0115): the automation states the
|
|
282
|
+
command it invokes with `then invokes` (ESM v34), and `IssuingTheDigest` in the command's
|
|
283
|
+
slice states `CollectionsDigestIssued`.
|
|
284
|
+
|
|
282
285
|
At the example's verified Screenplay version, iterating the overdue items needs code (a clock trigger reads the whole view and takes
|
|
283
286
|
no `by`); see `cratis-screenplay-automations-and-translations`. A reaction that `produces`
|
|
284
287
|
directly while it `reads` fails binding (`PLAY0268`): decide in a command instead.
|
package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generated-recovery.md
CHANGED
|
@@ -178,9 +178,9 @@ resolved adapter version, diagnostic, retained/withheld form and open question:
|
|
|
178
178
|
`MaximumExecutableModelVersion` below v15 withholds non-default concept generation
|
|
179
179
|
with SP0073 and dependent values/responses/mappings with SP0052; pins against them
|
|
180
180
|
withhold scenarios with SP0039. Below v7 responses/return expectations are withheld.
|
|
181
|
-
A cap describes less behavior, not an equivalent implementation.
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
181
|
+
A cap describes less behavior, not an equivalent implementation. A file/inline command
|
|
182
|
+
handler binds only beside unconditional `produces` with a resolved body (Screenplay
|
|
183
|
+
4.250.0); otherwise it refuses executable binding with PLAY0800. Record that verdict
|
|
184
|
+
separately and gap-fill the slice in code.
|
|
185
185
|
Requires Screenplay 4.210.0 (`screenplay --version`); older binders use PLAY0268 for these handlers.
|
|
186
186
|
Never remove protection, required payloads or loss rows to obtain a green result.
|
package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md
CHANGED
|
@@ -257,7 +257,7 @@ See read-surface `references/named-keys.md` for the collection-key exclusion alg
|
|
|
257
257
|
| Disposition | Constructs |
|
|
258
258
|
| --- | --- |
|
|
259
259
|
| Binds and runs in the reference runner | `StateChange`/`StateView` slices; `produces` including `when` conditions over command properties and literal tags; the portable validation rules, `matches email`, quoted `matches` patterns and `require` over command properties; declarative policies and `authorize` on modules, features, commands and keyed queries; `unique` constraints; projections as Chronicle lowers them, including variants, except the projection constructs in the next row; specifications, including `given caller`, `then denied` and `when append` |
|
|
260
|
-
| Binds, but the reference execution plan refuses it | A projection-level `remove via join`; `all` beside removals, `children` or `nested`; a `join`, `children` or `remove via join` inside `nested`; any event-context value other than the event source identity in a projection mapping or key, such as `$eventContext.
|
|
260
|
+
| Binds, but the reference execution plan refuses it | A projection-level `remove via join`; `all` beside removals, `children` or `nested`; a `join`, `children` or `remove via join` inside `nested`; any event-context value other than the event source identity and occurrence time in a projection mapping or key, such as `$eventContext.sequenceNumber` or `$eventContext.causedBy.subject` (`$eventSourceId` and `$eventContext.eventSourceId` run; `$eventContext.occurred` runs in `from`, `every` and `children` blocks for facts appended during the run under `given clock`, while a `given` fact carries no occurrence time and reports Unsupported) |
|
|
261
261
|
| Binds as ESM v6 (`PLAY0268` on a compiler that stops before v6) | `Automation` and `Translate` slices, reactions that produce or invoke, captures, top-level `trigger`, clock, trigger and capture specifications. The standalone `screenplay test`/MCP reference route evaluates admitted v6 actions; Stage renders supported event-triggered Automation, with remaining refusals in the Stage skill's `references/admission.md` |
|
|
262
262
|
| Reaction with trigger `reads` | Direct-producing (or code-bodied) reaction with `reads`: `PLAY0268` ("ESM v6 cannot protect that decision dependency"), non-executable. Invokes-only reaction with `reads`: information only; the invoked command must declare and protect its own decision reads. Keep the `reads`; never remove them to obtain binding |
|
|
263
263
|
| Binds as opaque code (v3); reference runner reports unsupported | Bodied reducers, bodied named rules, fenced `validate` blocks, code or file policies. A pure reducer body is the only attachment Stage admits |
|
|
@@ -279,7 +279,7 @@ See read-surface `references/named-keys.md` for the collection-key exclusion alg
|
|
|
279
279
|
| Chronological command dates (ESM v26) | Same-primitive Date/DateTime `==`, `!=`, `>`, `>=`, `<`, `<=` in require/produces-when (property or literal RHS) and command/property rules (literal RHS only). DateTime uses UTC ticks, participating offset-less inputs reject Validation before rules; then matching stays ordinal. Requires Screenplay 4.199.0 (`screenplay --version`); older binders refuse PLAY0268. The Stage Host and executor run v26 (older Stage refuses STAGE-ESM-016); the renderer and legacy engines refuse STAGE-ESM-046 (toolchain `language-admission.md`). Read command-surface `references/date-comparisons.md`. |
|
|
280
280
|
| Current routing and actor admission | Sources/streams and command/specification routes bind and reference-execute as v8; reaction `runs as system role` supplies the invocation actor as v10. Whole-workspace binding determines executable availability; CLI/Stage realization remains separate |
|
|
281
281
|
| Blocks binding (`PLAY0268`) | enum/identity compliance and events combining personal or explicitly subject-scoped secret values with explicit subject marks; a compiler that stops before v13 refuses all `pii`/`secret` concepts ("compliance attributes require portable data-subject semantics"), while v13 binds them and Stage renders protection; bare `rule <Name>`, read paths without protected opt-in or in unsupported positions such as `produces when`, date comparisons with mixed primitives, optional condition operands, `$context`, protected read paths or `today`, date rules on concepts or reaction `where`, `$context.tenant`/claims/roles/causation in `produces`, `$env` conditions, `file` constraints, unquoted `import` of an external contract, a read model with neither explicit `key` nor unambiguous query-based identity as described above (several key marks bind as v27; older binders refuse PLAY0268; toolchain `language-admission.md`), queries with context `from` sources (typed query context is unadmitted), single-result filters (collections only), `scoped to` (opaque scope) or a `by` block on a list query or non-optional single result (a `performer` query is not refused: it is an opaque read, PLAY0270, left out of the executable model; [version gate](../../cratis-screenplay-toolchain/references/executable-subset.md#code-attachments-what-binds-what-never-does)); optional keyed and collection queries, including caller-supplied equality filters and observable delivery, bind, `$causedBy` and templates in projections |
|
|
282
|
-
| Blocks binding (`PLAY0800
|
|
282
|
+
| Blocks binding (`PLAY0800`) | Attached file/inline command `handler` with no unconditional `produces`, with `produces ... when`, or with an unresolved body. Beside unconditional `produces` with a resolved body it binds as the v23 result contract, and pending described intent also binds v23 (command-surface `references/described-handlers.md` has the compiler gate). Read required typed `arguments.subject` for the command, never parse the message. Compiler prerequisite and older PLAY0268 attribution: [diagnostic arguments](../../cratis-screenplay-toolchain/references/diagnostic-arguments.md) |
|
|
283
283
|
| Blocks binding (`PLAY0271`, legacy meaning) | Command reads without protected opt-in and `concurrency`; combined protected reads/concurrency is PLAY0783 |
|
|
284
284
|
| Deferred (`PLAY0269`, information) | Screens, layouts, templates, forms, contributions, UI profiles, themes, behaviors and `on`/`uses` |
|
|
285
285
|
| Metadata only (`PLAY0270`, information) | `domain`, `seed`, `persona`, trigger and other descriptions, and `file` provenance on declarations |
|
|
@@ -183,7 +183,9 @@ module Billing
|
|
|
183
183
|
when append PaymentRemoved
|
|
184
184
|
invoice = "INV-1"
|
|
185
185
|
method = "card"
|
|
186
|
-
then no readmodel PaymentTotals for
|
|
186
|
+
then no readmodel PaymentTotals for
|
|
187
|
+
invoiceId = "INV-1"
|
|
188
|
+
method = "card"
|
|
187
189
|
then readmodel PaymentTotals
|
|
188
190
|
invoiceId = "INV-1"
|
|
189
191
|
method = "cash"
|
|
@@ -83,7 +83,7 @@ module Berths
|
|
|
83
83
|
berth BerthName = berth
|
|
84
84
|
screen BookBerthScreen
|
|
85
85
|
title "Book a berth"
|
|
86
|
-
action BookBerth
|
|
86
|
+
action BookBerth for screen
|
|
87
87
|
navigate to OpenBookingsScreen
|
|
88
88
|
specification BookingABerth
|
|
89
89
|
given caller
|
|
@@ -115,7 +115,7 @@ module Berths
|
|
|
115
115
|
screen OpenBookingsScreen
|
|
116
116
|
title "Open bookings"
|
|
117
117
|
data OpenBooking[] via query ListOpenBookings
|
|
118
|
-
action BookBerth
|
|
118
|
+
action BookBerth for screen
|
|
119
119
|
```
|
|
120
120
|
|
|
121
121
|
## What a screen pattern is not
|
|
@@ -42,10 +42,10 @@ mode; query-performer gaps are a separate contract, not completed behavior. Prot
|
|
|
42
42
|
support is not generated-app protection.
|
|
43
43
|
Preserve contracts; reference success is not target realization.
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
older binders use PLAY0268. Read [renderability gate](references/renderability-gate.md)
|
|
45
|
+
A file/inline command handler binds beside unconditional `produces` with a resolved
|
|
46
|
+
body (v23 result contract, Screenplay 4.250.0); without them it refuses PLAY0800 with a
|
|
47
|
+
required typed `arguments.subject`. 4.210.0 to 4.249.x refuse every attached handler
|
|
48
|
+
with PLAY0800; older binders use PLAY0268. Read [renderability gate](references/renderability-gate.md)
|
|
49
49
|
when classifying a handler or other binding refusal; never parse message text.
|
|
50
50
|
|
|
51
51
|
Inline bodies (`csharp`, `typescript`, `react`, `html`, `sql`, `java`) are opaque and reach the target
|
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md
CHANGED
|
@@ -10,10 +10,11 @@ probe reports and choosing what to do. Do not copy the code table here.
|
|
|
10
10
|
1. The CLI compiles and binds the **whole** model with its **bundled** Screenplay (the ESM level it renders is bounded by the bundle; older bundles bound less). Binding is never scoped:
|
|
11
11
|
any binding error blocks even a `--scope` render. Binding errors are `PLAY0268` (outside the admitted vertical), `PLAY0269`
|
|
12
12
|
(deferred), `PLAY0270` (report-only information), `PLAY0271` (legacy semantics) and `PLAY0273`
|
|
13
|
-
(a specification shape).
|
|
14
|
-
(`CommandHandlerRequiresAttachment`)
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
(a specification shape). A file/inline command handler without unconditional `produces`
|
|
14
|
+
or a resolved body instead reports PLAY0800 (`CommandHandlerRequiresAttachment`); beside
|
|
15
|
+
unconditional `produces` with a resolved body it binds as the v23 result contract.
|
|
16
|
+
Requires Screenplay 4.250.0 (`screenplay --version`); 4.210.0 to 4.249.x refuse every
|
|
17
|
+
attached handler with PLAY0800 and older bundled binders use PLAY0268 for these handlers. Hosts read the required typed `arguments.subject`
|
|
17
18
|
to identify the command, never the message.
|
|
18
19
|
2. Execution planning builds the plan and can emit `PLAN-*` diagnostics before Stage runs.
|
|
19
20
|
3. Stage plans the target and admits or rejects each member: `STAGE-ESM-0xx`; profile and path
|
|
@@ -36,7 +37,7 @@ ESM). Only the probe answers renderability. `PLAY0270` entries are information,
|
|
|
36
37
|
| --- | --- | --- | --- |
|
|
37
38
|
| **Model fix (in mode)** | the model is in, or the user chose, renderable mode and breaks its own subset in a way that has a renderable equivalent with the same meaning | a `produces` whose `for` is not the command identifier; two projections for one read model (`-007`); a policy Stage cannot express portably (`-015`; role-only and opaque pure policies render) | edit request to the modeler session with address, change and rationale |
|
|
38
39
|
| **Capability gap** | the intended meaning needs a construct Stage does not render yet | DateTime equality filters and required parameters after optional filters (`-010`); context/single-result filters, opaque `scoped to` and a list-query `by` block remain PLAY0268; an unsupported query performer (observable, a non-C# body, or a missing, changed or non-compiling body) becomes an explicit implementation gap, while a verified C# body renders ([performer bodies](../../cratis-screenplay-read-surface/SKILL.md#performer-bodies-are-rendered)); a read model with several key parts or a projection keyed by parts (v27) refuses `STAGE-ESM-048` (always for a DateTime or decimal key part; the decimal refusal lifts with Stage#847 once Chronicle#5427 lands) and a single-instance query by parts `STAGE-ESM-047` (Chronicle#4265); Translate, clocks, captures, non-event triggers and opaque reaction bodies (`-024`); claim-reading/opaque `runs as` gates (`-034`), legacy `from` (`-035`), mixed effects in one handler (`-037`, retries can duplicate events; keep it whole), unsupported reaction mappings (`-039`); unsupported generated types/result combinations (`-028`/`-038`); `then no readmodel` (`-027`); evolved events (`STAGE-ESM-026`); unsupported expression/enum production conditions (`-006`; supported conditional productions render); legacy reads (`PLAY0271`), protected reads the renderer cannot preserve, or any protected read in an older CLI bundle (STAGE-ESM-044 despite v25 admission; semantic Host/executor support is separate); code validation (`-005`); protected identities/enums (`-040`) or unadmitted explicit subject lineage (`PLAY0268`); described handlers (v23, STAGE-IMPL-002 even Stub mode), atomic mode (STAGE-ESM-043; v22 admission Requires Stage 4.139.0, older Stage reports -016) | keep the model; fallback record entry; options a to c in `SKILL.md`; link the Stage issue |
|
|
39
|
-
| **Implementation attachment** |
|
|
40
|
+
| **Implementation attachment** | the handler shape, not future ESM admission | file/inline command handlers without unconditional `produces` or a resolved body (PLAY0800; typed `subject` names the command) | declare unconditional `produces` beside a resolved body, split variable outcomes into separate commands, or keep the model contract and gap-fill the slice in code |
|
|
40
41
|
| **Tool skew** | the bundled compiler disagrees with documented semantics | the false `PLAY0285` on reaction cascades from an older bundle; codes the standalone compiler does not raise | record in the session state and the fallback record; never "fix" a correct model |
|
|
41
42
|
| **Environment** | not the model | restore failures, missing SDK, a destination that is not writable | fix the environment or report blocked |
|
|
42
43
|
|
|
@@ -175,8 +175,8 @@ Use a separate `when added` append when initial observations should produce a fa
|
|
|
175
175
|
Read captures-and-reactions `references/record-capture-specifications.md` for the
|
|
176
176
|
prerequisite and runnable cases. Include first, changed and unchanged rows in the matrix.
|
|
177
177
|
|
|
178
|
-
##
|
|
179
|
-
|
|
178
|
+
## Reaction chains: one slice per specification
|
|
179
|
+
A specification runs only its own slice. Prove a chain across slices link by link: the command's spec states its own events, the Automation's `when append` spec states what it appends, and `then invokes <Command>` (ESM v34) states a command it invokes in another slice. Another slice's event in a spec is PLAY0285. Never delete the reaction. Read [references/version-skew.md](references/version-skew.md) when a spec reports PLAY0285 or the bundled compiler is older than the standalone tool.
|
|
180
180
|
|
|
181
181
|
## Gate
|
|
182
182
|
A scope is spec-complete only when: the matrix has no `open`, `question` or `gap` cell (or the
|
|
@@ -203,9 +203,6 @@ module Invoicing
|
|
|
203
203
|
then PaymentReversed
|
|
204
204
|
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
205
205
|
amount = 130
|
|
206
|
-
then RefundRequested
|
|
207
|
-
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
208
|
-
amount = 130
|
|
209
206
|
|
|
210
207
|
specification RejectingAReversalWithoutAReceivedPayment
|
|
211
208
|
given caller
|
|
@@ -227,9 +227,6 @@ module Invoicing
|
|
|
227
227
|
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
228
228
|
outcome = "declined"
|
|
229
229
|
reason = "Card declined"
|
|
230
|
-
then PaymentDeclined
|
|
231
|
-
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
232
|
-
reason = "Card declined"
|
|
233
230
|
|
|
234
231
|
slice Automation RecordPaymentOutcome
|
|
235
232
|
reaction ReceivedTranslator
|
|
@@ -247,6 +244,14 @@ module Invoicing
|
|
|
247
244
|
event PaymentReceived
|
|
248
245
|
event PaymentDeclined
|
|
249
246
|
reason String
|
|
247
|
+
specification RecordingADeclinedPayment
|
|
248
|
+
when append PaymentGatewayResultReceived
|
|
249
|
+
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
250
|
+
outcome = "declined"
|
|
251
|
+
reason = "Card declined"
|
|
252
|
+
then PaymentDeclined
|
|
253
|
+
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
254
|
+
reason = "Card declined"
|
|
250
255
|
|
|
251
256
|
slice StateView OpenInvoices
|
|
252
257
|
description "Todo list: membership means 'still to collect'; there is no status flag."
|
package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md
CHANGED
|
@@ -104,9 +104,9 @@ design-mode rejection spec and `recorded` in the matrix. See `RejectingSettlemen
|
|
|
104
104
|
in `invoicing-dues-design.md`; it is never prose and never a spec that pretends to enforce it.
|
|
105
105
|
|
|
106
106
|
## 3. External failure: the capture, then the retry
|
|
107
|
-
Two separate obligations. First, the **capture specification**: concrete external input in,
|
|
108
|
-
|
|
109
|
-
vocabulary; a separate Automation records the local outcome. The capture uses
|
|
107
|
+
Two separate obligations. First, the **capture specification**: concrete external input in, the
|
|
108
|
+
provider's fact out. The provider's refusal is a fact (never a `then error`), kept in the provider's
|
|
109
|
+
vocabulary; a separate Automation records the local outcome and states it in its own specification. The capture uses
|
|
110
110
|
`when added` for first sight and a separate `when outcome` for updates. An update
|
|
111
111
|
spec needs `given capture` with the same key's earlier record; the first record's
|
|
112
112
|
fields are not modifications (root, child or nested). See captures-and-reactions
|
|
@@ -121,6 +121,15 @@ specification TranslatingADeclinedCardResult
|
|
|
121
121
|
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
122
122
|
outcome = "declined"
|
|
123
123
|
reason = "Card declined"
|
|
124
|
+
```
|
|
125
|
+
The Automation that records the local outcome proves its own link in its own slice
|
|
126
|
+
(a specification runs only its slice, Screenplay decision 0115):
|
|
127
|
+
```screenplay excerpt parent=references/invoicing-dues-example.md#1
|
|
128
|
+
specification RecordingADeclinedPayment
|
|
129
|
+
when append PaymentGatewayResultReceived
|
|
130
|
+
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
131
|
+
outcome = "declined"
|
|
132
|
+
reason = "Card declined"
|
|
124
133
|
then PaymentDeclined
|
|
125
134
|
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
126
135
|
reason = "Card declined"
|
|
@@ -153,9 +162,11 @@ model; it tests the projection only, never the translation.
|
|
|
153
162
|
|
|
154
163
|
## 4. Compensation
|
|
155
164
|
A reversal needs a paid history, the reversal action and the exact consequence. The command spec
|
|
156
|
-
|
|
157
|
-
`RefundRequested`
|
|
158
|
-
|
|
165
|
+
states the command's own fact (`PaymentReversed`); the `RequestRefunds` Automation states
|
|
166
|
+
`RefundRequested` in its own specification, because a specification runs only its own slice
|
|
167
|
+
(Screenplay decision 0115). `RefundRequested` is a recorded request, not proof that money moved.
|
|
168
|
+
An automation that invokes another slice's command states it with `then invokes <Command>`
|
|
169
|
+
(ESM v34). What the target must do to deliver the refund is a requirement, not a spec.
|
|
159
170
|
From `invoicing-dues-design.md` (design mode; the specs do not run):
|
|
160
171
|
```screenplay excerpt parent=references/invoicing-dues-design.md#1 expect PLAY0516 test=unbound
|
|
161
172
|
specification ReversingAReceivedPayment
|
|
@@ -174,9 +185,6 @@ specification ReversingAReceivedPayment
|
|
|
174
185
|
then PaymentReversed
|
|
175
186
|
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
176
187
|
amount = 130
|
|
177
|
-
then RefundRequested
|
|
178
|
-
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
179
|
-
amount = 130
|
|
180
188
|
|
|
181
189
|
specification RequestingARefundAfterAReversal
|
|
182
190
|
when append PaymentReversed
|
package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md
CHANGED
|
@@ -29,7 +29,8 @@ Typed example/override forms: `cratis-screenplay-specifications`
|
|
|
29
29
|
| `when query` -> `then result` / `then no result` | yes | yes | same as `then query`: only the query-only cases below |
|
|
30
30
|
| `given clock` / `when clock`, `when trigger`, record-source `given`/`when capture` | yes | yes (standalone and any cratis whose compiler admits v6; an older bundle does not, see toolchain `references/executable-subset.md`) | no |
|
|
31
31
|
| Event-source capture fixtures | `given <FromEvent>` / `when append <FromEvent>`, not capture records (PLAY0701) | admitted root capture behavior executes; see `public-event-coverage.md` for prerequisites and limits | separate target admission |
|
|
32
|
-
| Command spec listing reaction cascade events | yes (v6 semantics) |
|
|
32
|
+
| Command spec listing its own slice's reaction cascade events | yes (v6 semantics) | yes; another slice's event is PLAY0285 (decision 0115); see SKILL.md "Reaction chains" | no: STAGE-ESM-011; generated CommandScenario does not settle reactions |
|
|
33
|
+
| `then invokes <Command>` in an Automation spec | yes | yes, ESM v34 | Stage spec runner compares it; the Cratis renderer refuses models after v33 (STAGE-ESM-016) |
|
|
33
34
|
| `generated <name> = <value>` under `when`, `then returns` (ESM v7) | yes | yes on a compiler that admits v7 (PLAY0268 on an older bundle) | yes on Stage for supported UUID/String strategies and v15 freshness and scalar/named responses; unsupported types/combinations remain -028/-038 |
|
|
34
35
|
| v15 generation strategy fixtures and used-source rejection | yes | strict encoding/size/case/version/variant; Contract for invalid pins, Concurrency for reused source | supported strategies/freshness render; invalid pins refuse -011, unpinned unordered/projected assertions -038; source: command-surface `references/generated-values-and-responses.md` |
|
|
35
36
|
| `then events in any order` | yes | yes | yes |
|
|
@@ -44,13 +45,13 @@ Typed example/override forms: `cratis-screenplay-specifications`
|
|
|
44
45
|
| Date rules using `today`, `$context`, mixed `Date`/`DateTime`, concept or reaction-`where` positions; nested paths | spec them in design | rule does not bind: `recorded` | `recorded` |
|
|
45
46
|
| Bodied rules, code policies | spec them | spec reported **unsupported**, never passed | no |
|
|
46
47
|
| Pending described command handlers (v23) | specify intent | binds; denial/validation execute, body-reaching specs Unsupported ImplementationBody; all-Unsupported is not green | STAGE-IMPL-002 even Stub mode |
|
|
47
|
-
| Attached command handlers | spec them in design |
|
|
48
|
+
| Attached command handlers | spec them in design | beside unconditional `produces` with a resolved body: binds v23, a spec reaching the body is Unsupported (`ImplementationBody`); otherwise PLAY0800, no spec runs | Stage renders a C# body; generated specifications execute verified synchronous C# handlers |
|
|
48
49
|
| `file` constraints | spec them in design | blocked: PLAY0268 at binding, no spec runs (V3 blocked) | no |
|
|
49
50
|
| Query `performer`s | spec them in design | opaque read: PLAY0270 information, left out of the executable model; a spec that reads it is left out, every other spec still runs ([version gate](../../cratis-screenplay-toolchain/references/executable-subset.md#code-attachments-what-binds-what-never-does); older compilers report PLAY0268) | no |
|
|
50
51
|
| Atomic reaction mode (v22) | declare for new models | failed batch adds no facts or view changes; earlier batches/commands remain; `then error` alone is insufficient | v22 STAGE-ESM-016; mode in admitted v23–v27 STAGE-ESM-043 |
|
|
51
52
|
| Protected command reads (v25) | declare opt-in for eligible reads | absence Validation; matching intervening facts Conflict; race vectors are not a new spec construct | Cratis C# rendering in a new enough bundle (STAGE-ESM-044 before, or for unpreservable shapes); semantic Host/executor execute admitted reads, non-Error protected requirements STAGE-ESM-045; v25 pair admitted |
|
|
52
53
|
|
|
53
|
-
Requires Screenplay 4.
|
|
54
|
+
Requires Screenplay 4.250.0 (`screenplay --version`) for attached handlers beside `produces` to bind; 4.210.0 to 4.249.x report PLAY0800 for every attached handler and older binders use PLAY0268. Other PLAY0268 families are unchanged.
|
|
54
55
|
|
|
55
56
|
Requires Screenplay 4.105.0 or later (`screenplay --version`) for list-query specifications, and 4.143.0 or later for collection equality filters (ESM v14).
|
|
56
57
|
|
package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/version-skew.md
CHANGED
|
@@ -1,14 +1,25 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
How to specify
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
# Specifying reaction chains across slices and compiler versions
|
|
2
|
+
|
|
3
|
+
How to specify a chain of reactions, and what `PLAY0285` means on each compiler.
|
|
4
|
+
|
|
5
|
+
Requires Screenplay 4.246.0 or later (`screenplay --version`) for single-slice runs and `then invokes`.
|
|
6
|
+
|
|
7
|
+
A specification runs only the slice that declares it (Screenplay decision 0115, for every model
|
|
8
|
+
and version). A chain across slices is proved link by link:
|
|
9
|
+
- The command's slice: `when <Command>` states the command's own events.
|
|
10
|
+
- The Automation slice: `when append <Trigger>` states what its reaction appends, and
|
|
11
|
+
`then invokes <Command>` (ESM v34) states a command it invokes in another slice.
|
|
12
|
+
- The invoked command's slice: `when <Command>` states that command's events.
|
|
13
|
+
|
|
14
|
+
A command spec that states another slice's event is refused with `PLAY0285` (unreachable)
|
|
15
|
+
and fails at run time with "Expected N fact(s), got M". That is a modeling error: move
|
|
16
|
+
the expectation to the slice that produces it. Never delete the reaction.
|
|
17
|
+
|
|
18
|
+
Older compilers:
|
|
19
|
+
- A compiler older than ESM v6 does not trace reactions and can report `PLAY0285` on a
|
|
20
|
+
reaction in the specification's own slice. That is tool skew: validate with the
|
|
21
|
+
standalone `screenplay <folder> --warnaserror --no-color` or a current
|
|
22
|
+
`cratis screenplay validate <folder> --warnings-as-errors`, and record which tool gave which verdict.
|
|
23
|
+
- A compiler that predates `then invokes` refuses it. With only such a tool, keep the
|
|
24
|
+
automation's own appended facts in its spec and record the pending hand-over expectation
|
|
25
|
+
in `STATE.md` as known-incomplete.
|
package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/view-and-story-specs.md
CHANGED
|
@@ -142,12 +142,13 @@ not prove an entire list is empty: assert the unkeyed list query itself (an unke
|
|
|
142
142
|
- **Projection lag**: a spec asserts the settled state. If a screen decision depends on the view
|
|
143
143
|
being current (a booking screen that must not offer a taken berth), that is not protection:
|
|
144
144
|
the command needs its own constraint, or the rule is `recorded` as target-enforced.
|
|
145
|
-
- **Rebuild**: a view rebuilt from all facts must give the same rows.
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
(`UnsupportedEventContext`)
|
|
149
|
-
|
|
150
|
-
|
|
145
|
+
- **Rebuild**: a view rebuilt from all facts must give the same rows. The reference runner
|
|
146
|
+
refuses every event-context path except the event source id and, from Screenplay 4.254.0,
|
|
147
|
+
`$eventContext.occurred` in `from`, `every` and `children` blocks
|
|
148
|
+
(`UnsupportedEventContext` otherwise). `occurred` executes only for a fact appended during
|
|
149
|
+
the run under `given clock` (`when append` or a command's production); a `given` fact
|
|
150
|
+
carries no occurrence time and the specification reports unsupported. Record the
|
|
151
|
+
remaining cases as capability gaps (keep the mapping and the intended spec in design mode).
|
|
151
152
|
- **Corrections and backdated facts**: a correction is a new fact; specify the view after it.
|
|
152
153
|
If a fact carries a business date earlier than its occurrence, specify which date the view
|
|
153
154
|
shows.
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
{ "kind": "skill-contains", "value": "Once, idempotent, exactly once are different claims" },
|
|
11
11
|
{ "kind": "skill-contains", "value": "Unauthorized is never `then error`" },
|
|
12
12
|
{ "kind": "skill-contains", "value": "find-specification-obligations" },
|
|
13
|
-
{ "kind": "skill-contains", "value": "
|
|
13
|
+
{ "kind": "skill-contains", "value": "A specification runs only its own slice." },
|
|
14
14
|
{ "kind": "skill-contains", "value": "One behaviour per spec" },
|
|
15
15
|
{ "kind": "skill-contains", "value": "No command has only two specs" },
|
|
16
16
|
{ "kind": "skill-contains", "value": "not scenario-complete" },
|
|
@@ -83,7 +83,7 @@ module Moorings
|
|
|
83
83
|
query WaitingRequests => WaitingRequest[]
|
|
84
84
|
screen WaitingListPage
|
|
85
85
|
data WaitingRequest via query WaitingRequests
|
|
86
|
-
action AssignBerth
|
|
86
|
+
action AssignBerth for item
|
|
87
87
|
slice StateChange AssignBerth
|
|
88
88
|
command AssignBerth
|
|
89
89
|
berthRequestId BerthRequestId identifier
|
|
@@ -121,8 +121,8 @@ module Lockers
|
|
|
121
121
|
column number label "Locker"
|
|
122
122
|
column volume label "Volume (l)"
|
|
123
123
|
column assigned label "Taken"
|
|
124
|
-
action InstallLocker
|
|
125
|
-
action AssignLocker
|
|
124
|
+
action InstallLocker for screen
|
|
125
|
+
action AssignLocker for item
|
|
126
126
|
specification RefusingAnAnonymousLockerLookup
|
|
127
127
|
given caller
|
|
128
128
|
then query LockerById
|
|
@@ -273,7 +273,7 @@ module Lockers
|
|
|
273
273
|
screen MyRequest
|
|
274
274
|
title "My locker request"
|
|
275
275
|
data RequestStatus via query RequestById
|
|
276
|
-
action RequestLocker
|
|
276
|
+
action RequestLocker for screen
|
|
277
277
|
specification FollowingARequestToAssignment
|
|
278
278
|
given caller
|
|
279
279
|
authenticated
|
|
@@ -186,8 +186,10 @@ Read [references/actions-beyond-commands.md](references/actions-beyond-commands.
|
|
|
186
186
|
|
|
187
187
|
## Reactions and cascades (ESM v6)
|
|
188
188
|
|
|
189
|
-
From ESM v6 every action sets reactions off and `then` events compare
|
|
190
|
-
Read [references/reactions-and-cascades.md](references/reactions-and-cascades.md) when a specification's expected events include what a reaction appends, when a cascade, clock tick or invoked command is involved, or when
|
|
189
|
+
From ESM v6 every action sets reactions off. A specification runs only the slice that declares it: only that slice's reactions, captures and publications run, and `then` events compare the new facts of that slice. A specification whose action is a command goes in the slice that declares the command and states the command's own events. Another slice's event is `PLAY0285` (unreachable): state it in the slice that produces it. An automation states a command it invokes in another slice with `then invokes <Command>` (ESM v34).
|
|
190
|
+
Read [references/reactions-and-cascades.md](references/reactions-and-cascades.md) when a specification's expected events include what a reaction appends, when a cascade, clock tick or invoked command is involved, or when a compiler reports `PLAY0285` (it holds the "Version skew and `PLAY0285`" section).
|
|
191
|
+
|
|
192
|
+
A `statemachine` or `workflow` (ESM v36) carries its own specifications with `then is`, `then sends`, `then starts`, `outcome`, `then completes`, `then fails at` and `then waits at`. Read automations-and-translations [state machines and workflows](../cratis-screenplay-automations-and-translations/references/statemachines-and-workflows.md) when specifying either.
|
|
191
193
|
|
|
192
194
|
## Published-event specifications (released ESM v9)
|
|
193
195
|
|
package/package/corpus/skills/cratis-screenplay-specifications/references/actions-beyond-commands.md
CHANGED
|
@@ -21,8 +21,10 @@ Event captures use the typed event fixtures and overlay rules in
|
|
|
21
21
|
|
|
22
22
|
Use `given clock`, never `given time`, to state the scenario occurrence time and
|
|
23
23
|
assert a value mapped from `$context.occurred`. In a command's `produces`, that
|
|
24
|
-
mapping executes when the scenario has `given clock`.
|
|
25
|
-
|
|
24
|
+
mapping executes when the scenario has `given clock`. `$eventContext.occurred` in a
|
|
25
|
+
projection is the fact's occurrence time: the reference runner executes it in `from`,
|
|
26
|
+
`every` and `children` blocks for facts appended during the run under `given clock`, and a
|
|
27
|
+
`given` fact carries none (Unsupported).
|
|
26
28
|
|
|
27
29
|
**Which tools bind these actions.** A compiler that admits ESM v6 binds the clock, trigger
|
|
28
30
|
and capture actions, and the `Automation` and `Translate` slices, reactions and captures they
|
|
@@ -69,7 +69,10 @@ module Orders
|
|
|
69
69
|
orderId = "00000000-0000-0000-0000-000000000001"
|
|
70
70
|
then readmodel OrderView
|
|
71
71
|
orderId = "00000000-0000-0000-0000-000000000001"
|
|
72
|
-
lines
|
|
72
|
+
lines
|
|
73
|
+
item
|
|
74
|
+
lineNumber = 1
|
|
75
|
+
amount = 10
|
|
73
76
|
specification ChildBeforeGivenParent
|
|
74
77
|
given LineAdded
|
|
75
78
|
orderId = "00000000-0000-0000-0000-000000000001"
|
|
@@ -79,7 +82,10 @@ module Orders
|
|
|
79
82
|
orderId = "00000000-0000-0000-0000-000000000001"
|
|
80
83
|
then readmodel OrderView
|
|
81
84
|
orderId = "00000000-0000-0000-0000-000000000001"
|
|
82
|
-
lines
|
|
85
|
+
lines
|
|
86
|
+
item
|
|
87
|
+
lineNumber = 1
|
|
88
|
+
amount = 10
|
|
83
89
|
specification ParentBeforeChild
|
|
84
90
|
given OrderAdded
|
|
85
91
|
orderId = "00000000-0000-0000-0000-000000000001"
|
|
@@ -89,7 +95,10 @@ module Orders
|
|
|
89
95
|
amount = 10
|
|
90
96
|
then readmodel OrderView
|
|
91
97
|
orderId = "00000000-0000-0000-0000-000000000001"
|
|
92
|
-
lines
|
|
98
|
+
lines
|
|
99
|
+
item
|
|
100
|
+
lineNumber = 1
|
|
101
|
+
amount = 10
|
|
93
102
|
specification ParentNeverArrives
|
|
94
103
|
given LineAdded
|
|
95
104
|
orderId = "00000000-0000-0000-0000-000000000001"
|