@cratis/pi 7.61.0 → 7.63.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/spec-writer.md +2 -2
- package/package/corpus/harnesses/copilot/instructions/application-profile.instructions.md +2 -2
- package/package/corpus/harnesses/copilot/instructions/glossary.instructions.md +2 -2
- package/package/corpus/harnesses/copilot/instructions/specs.scenarios.csharp.instructions.md +7 -4
- package/package/corpus/harnesses/copilot/instructions/vertical-slices.instructions.md +22 -13
- package/package/corpus/product-sync.json +11 -10
- package/package/corpus/prompts/add-business-rule.prompt.md +1 -1
- package/package/corpus/rules/application-profile.md +2 -2
- package/package/corpus/rules/glossary.md +2 -2
- package/package/corpus/rules/specs.scenarios.csharp.md +7 -4
- package/package/corpus/rules/vertical-slices.md +22 -13
- package/package/corpus/skills/cratis-application-slice-conformance/SKILL.md +1 -1
- package/package/corpus/skills/cratis-application-slice-specifications/SKILL.md +4 -3
- package/package/corpus/skills/cratis-application-slice-specifications/references/query-and-decision-scenarios.md +12 -3
- package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/SKILL.md +12 -7
- package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/references/authorization.md +11 -11
- package/package/corpus/skills/cratis-arc-command/SKILL.md +3 -2
- package/package/corpus/skills/cratis-arc-command/references/decisions-and-routing.md +95 -51
- package/package/corpus/skills/cratis-arc-command/references/fresh-identifiers.md +5 -2
- package/package/corpus/skills/cratis-arc-command/references/generated-values.md +27 -12
- package/package/corpus/skills/cratis-arc-command/references/read-model-injection.md +9 -5
- package/package/corpus/skills/cratis-arc-command/references/shop-generation.md +17 -6
- package/package/corpus/skills/cratis-arc-command-validation/SKILL.md +99 -52
- package/package/corpus/skills/cratis-chronicle-decision-reads/SKILL.md +37 -15
- package/package/corpus/skills/cratis-chronicle-decision-reads/references/admission-and-ownership.md +3 -2
- package/package/corpus/skills/cratis-chronicle-decision-reads/references/choosing-how-a-rule-holds.md +277 -138
- package/package/corpus/skills/cratis-chronicle-event-constraints/SKILL.md +4 -4
- package/package/corpus/skills/cratis-chronicle-event-modeling/SKILL.md +6 -4
- package/package/corpus/skills/cratis-chronicle-read-model/SKILL.md +2 -1
- package/package/corpus/skills/cratis-chronicle-reducer/SKILL.md +6 -3
- package/package/corpus/skills/cratis-code-review/SKILL.md +6 -3
- package/package/corpus/skills/cratis-fundamentals-concept/SKILL.md +10 -2
- package/package/corpus/skills/cratis-fundamentals-concept/references/shop-generation.md +49 -6
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +43 -41
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/cases-to-specify.md +11 -2
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/integration-interview.md +24 -0
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/public-events-and-direction.md +76 -10
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +5 -0
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translate-example.md +39 -23
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translation-patterns.md +35 -12
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +51 -81
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/atomic-batches-and-source-mappings.md +83 -0
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/capture-map-and-example.md +14 -4
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/reaction-forms.md +59 -0
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/record-capture-specifications.md +60 -0
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/specifying-triggers-and-clock.md +5 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +26 -28
- package/package/corpus/skills/cratis-screenplay-command-surface/references/described-handlers.md +82 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +82 -28
- package/package/corpus/skills/cratis-screenplay-command-surface/references/protected-reads.md +113 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/shop-generation.md +45 -12
- package/package/corpus/skills/cratis-screenplay-command-surface/references/text-and-match-rules.md +119 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +14 -4
- package/package/corpus/skills/cratis-screenplay-command-surface/verification.json +10 -3
- package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +12 -12
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +5 -3
- package/package/corpus/skills/cratis-screenplay-event-modeling/verification.json +5 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +2 -2
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/evidence-table-template.md +1 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generated-recovery.md +51 -14
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/intent-example.md +5 -0
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/loss-report-template.md +2 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md +6 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/signal-to-intent.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +22 -28
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/choosing-generation.md +20 -7
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +12 -6
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +9 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +58 -10
- package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +4 -2
- package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +2 -5
- package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +2 -2
- package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +2 -2
- package/package/corpus/skills/cratis-screenplay-model-review/references/quick-self-check.md +2 -1
- package/package/corpus/skills/cratis-screenplay-model-review/references/review-questions.md +3 -2
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/principles.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +1 -1
- package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +2 -3
- package/package/corpus/skills/cratis-screenplay-read-surface/references/named-keys.md +3 -1
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +8 -3
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +8 -0
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +6 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +36 -29
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +6 -0
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +15 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-example.md +25 -20
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/public-event-coverage.md +14 -3
- 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 +7 -3
- package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +3 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +4 -4
- package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +4 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/references/slicing.md +4 -3
- package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +8 -8
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +49 -47
- package/package/corpus/skills/cratis-screenplay-specifications/references/actions-beyond-commands.md +11 -1
- package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md +48 -17
- package/package/corpus/skills/cratis-screenplay-specifications/references/vocabulary.md +14 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +25 -21
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +2 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +14 -6
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/multi-service-models.md +4 -3
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +7 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +30 -22
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +3 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +47 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostic-arguments.md +60 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +65 -5
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +50 -22
- package/package/corpus/skills/cratis-screenplay-toolchain/references/generation-checks.md +93 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/generation-strategies-example.md +117 -35
- package/package/corpus/skills/cratis-screenplay-toolchain/references/language-admission.md +46 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/preferred-syntax.md +3 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +25 -10
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +1800 -50
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +5 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +6 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +8 -53
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/file-references.md +2 -2
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/interaction-example.md +54 -0
- package/package/corpus/skills/cratis-screenplay-ui-composition/verification.json +6 -3
- package/package/corpus/skills/cratis-specifications-csharp/SKILL.md +3 -2
- package/package/corpus/skills/cratis-specifications-csharp/references/application-scenarios.md +1 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +30 -29
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +36 -9
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/choosing-generation.md +28 -8
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/publication-and-recovery.md +31 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +8 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +4 -1
- package/package.json +1 -1
|
@@ -57,8 +57,8 @@ observed legacy check from verified atomic protection.
|
|
|
57
57
|
| several command properties / constants | `require` | runs after property rules, before production |
|
|
58
58
|
| a value across all sources | `unique <prop> on <Event>` | value owned by one source; same source may re-claim |
|
|
59
59
|
| a fact at most once per source; mutually exclusive facts | `unique event` (+ `released by`) | covers simple lifecycle transitions |
|
|
60
|
-
| state-dependent rule
|
|
61
|
-
| a view (read model) |
|
|
60
|
+
| state-dependent rule (balance, capacity, "only if approved") | eligible `reads` + `require` under `command reads protected` (v25) | required absence rejects; matching intervening facts conflict. Payload-key fan-in, joins, reducers and other refused shapes remain target gaps |
|
|
61
|
+
| a view (read model) | unguarded materialized reads are not protection | legacy command and trigger reads remain unprotected; Stage refuses protected reads (STAGE-ESM-044), so reference protection is not target realization |
|
|
62
62
|
|
|
63
63
|
## 3. Record each state-dependent rule that the model cannot enforce
|
|
64
64
|
Never accept the caller's copy of the state: `currentStatus Status` on the command with
|
|
@@ -67,7 +67,13 @@ input (`confirmsX == true`) standing in for the rule. Never move the rule into `
|
|
|
67
67
|
`implementation hint` prose; a description renders only as an XML doc comment (Stage#178), so prose alone leaves
|
|
68
68
|
the rule unenforced in rendered scope.
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
First inspect [protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md):
|
|
71
|
+
opt eligible command reads into v25, retain absence/conflict specifications and verify
|
|
72
|
+
target consistency separately. Stage admits v25 but refuses protected reads (STAGE-ESM-044). A payload-keyed
|
|
73
|
+
fan-in such as the course-capacity example remains refused; the preamble is not a
|
|
74
|
+
blanket admission of arbitrary projections.
|
|
75
|
+
|
|
76
|
+
For legacy models without opt-in or refused shapes, write stated intent and mark it unenforced.
|
|
71
77
|
- `reads <View> as x by …` plus `require <expr over x> message "…"` on the command (the
|
|
72
78
|
`StateChange` slice in `streams-example.md`). Binding reports PLAY0271 / PLAY0268; that is
|
|
73
79
|
expected in design mode, so keep the lines. Do not remove them to pass a tool.
|
|
@@ -101,9 +107,11 @@ another event source) in `Provide()`/`Handle()` and returning a validation resul
|
|
|
101
107
|
at commit is reported as a concurrency violation. Equivalently a Chronicle decision-consistency
|
|
102
108
|
read with a `concurrency` scope on the event source or stream. A passive read is fresh
|
|
103
109
|
computation, not an atomic read-and-append; a plain materialized view and a validator are
|
|
104
|
-
advisory
|
|
105
|
-
|
|
106
|
-
|
|
110
|
+
advisory under Arc read protection `Off` (the default); under `On` (Arc 22.106.0 or later) the read
|
|
111
|
+
model parameters of `Handle()` and of a validator constructor are guarded. Protection covers a single
|
|
112
|
+
projection keyed directly by the event source id (routing key empty or `$eventSourceId`) and an
|
|
113
|
+
unfiltered reducer without constructor dependencies. Filtered reducers, reducers with dependencies,
|
|
114
|
+
joins, children, nested sources and **event-property routing** (fan-in from many streams by a payload reference) are refused, and a concurrency scope
|
|
107
115
|
on the referenced source does not see appends made on other sources. A rule over such a view, for
|
|
108
116
|
example a course capacity computed from enrolment streams, needs option a or b: write the
|
|
109
117
|
deciding fact on the source that owns the state, or give each scarce item its own identity. Sources: Arc `Documentation/backend/csharp/chronicle/read-models/injecting-into-commands.md` (limits unchanged);
|
|
@@ -115,9 +115,10 @@ module Billing
|
|
|
115
115
|
another reason each service has its own folder.
|
|
116
116
|
- A capture keys on the incoming content, so the contract carries the identity
|
|
117
117
|
the consumer keys on.
|
|
118
|
-
-
|
|
119
|
-
consumer's capture over events
|
|
120
|
-
the
|
|
118
|
+
- Both sides run in the reference evaluator: the producer's publication
|
|
119
|
+
specification, and the consumer's capture over events, which a specification
|
|
120
|
+
drives by presenting the consumed public event (`when append <Event>`;
|
|
121
|
+
Requires Screenplay 4.171.0).
|
|
121
122
|
- Syntax, publication semantics and the full rules: read
|
|
122
123
|
`cratis-screenplay-automations-and-translations`
|
|
123
124
|
`references/public-events-and-direction.md`.
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Example: streams, constraints and a recorded rule
|
|
2
2
|
|
|
3
|
+
Legacy control: no `command reads protected` preamble is declared. The course-capacity
|
|
4
|
+
payload-key fan-in remains refused even with opt-in; eligible active-enrolment reads
|
|
5
|
+
can protect under v25, but reads plus concurrency cannot combine (PLAY0783). Read
|
|
6
|
+
[protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
7
|
+
for admission and Stage's protected-read refusal (STAGE-ESM-044). The legacy diagnostics below describe this
|
|
8
|
+
control, not a blanket refusal of command reads.
|
|
9
|
+
|
|
3
10
|
A complete design-mode model for course enrolment. It shows one business identity per stream,
|
|
4
11
|
cross-stream references as payload, three kinds of uniqueness constraint, a state-dependent
|
|
5
12
|
rule recorded as **NOT enforced in the model today**, a declared `concurrency` scope, and an
|
|
@@ -8,12 +8,9 @@ license: MIT
|
|
|
8
8
|
|
|
9
9
|
Read [preferred syntax](references/preferred-syntax.md) when writing or reviewing `.play`.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
`cratis-screenplay-modeling-lifecycle`; construct syntax lives in the construct skills
|
|
15
|
-
(`cratis-screenplay-command-surface`, `-projections`, `-read-surface`,
|
|
16
|
-
`-captures-and-reactions`, `-specifications`, `-ui-composition`).
|
|
11
|
+
This skill owns tool selection, verdict meaning and admission. Modeling method
|
|
12
|
+
lives in `cratis-screenplay-modeling-lifecycle`; construct syntax lives in command,
|
|
13
|
+
projection, read-surface, capture/reaction, specification and UI skills.
|
|
17
14
|
|
|
18
15
|
## Locate the model
|
|
19
16
|
|
|
@@ -28,7 +25,11 @@ bundled in the CLI are different releases, and the bundled one can be older; a c
|
|
|
28
25
|
standalone tool binds may be refused or unrendered through the CLI. Capabilities that need a
|
|
29
26
|
minimum release carry a one-line `Requires ...` note in the reference that teaches them.
|
|
30
27
|
|
|
31
|
-
|
|
28
|
+
Search [screenplay-contract.json](references/screenplay-contract.json), not its
|
|
29
|
+
whole contents, for exact diagnostic `code`, tool `name` or `cliCommands` options.
|
|
30
|
+
Its version is [screenplay-contract.version](references/screenplay-contract.version).
|
|
31
|
+
Read [contract exceptions](references/screenplay-contract-exceptions.json) when a
|
|
32
|
+
superseded statement needs context; exceptions do not change the contract.
|
|
32
33
|
|
|
33
34
|
## Ground rules
|
|
34
35
|
|
|
@@ -101,8 +102,11 @@ changes with the root folder name.
|
|
|
101
102
|
lists and lists narrowed by one `by` key (observable too) bind; caller-supplied equality
|
|
102
103
|
filters on collections bind as ESM v14. Context `from`, single-result
|
|
103
104
|
filters, opaque `scoped to`/`performer` and composite `by` remain PLAY0268. Read
|
|
104
|
-
read-surface [equality filters](../cratis-screenplay-read-surface/references/equality-filters.md).
|
|
105
|
-
|
|
105
|
+
read-surface [equality filters](../cratis-screenplay-read-surface/references/equality-filters.md).
|
|
106
|
+
Pending handlers beside unconditional productions bind as described commands (v23),
|
|
107
|
+
but reached bodies are Unsupported; attached handlers remain PLAY0268.
|
|
108
|
+
Eligible protected reads opt into v25; legacy reads and `concurrency` retain PLAY0271.
|
|
109
|
+
Concept compliance binds as v13 (precise refusals: command-surface `references/compliance.md`);
|
|
106
110
|
generated values and `returns` responses bind (ESM v7, `references/generated-responses-example.md`). Read [references/executable-example.md](references/executable-example.md) when you need a small StateChange and StateView model that binds executable, [references/pdl-example.md](references/pdl-example.md) when writing projection forms that bind and run, and [references/automation-translate-example.md](references/automation-translate-example.md) when writing Automation and Translate slices (ESM v6).
|
|
107
111
|
- **Renderable** (V5): `references/renderable-subset.md` has the admission table. The CLI admits through
|
|
108
112
|
its newest known ESM version to construct checks; supported UUID/String
|
|
@@ -119,18 +123,22 @@ changes with the root folder name.
|
|
|
119
123
|
Composite view keys remain authoring-only (PLAY0268), while one explicit
|
|
120
124
|
`key` binds. Read `references/production-routes-and-filters.md` and read-surface
|
|
121
125
|
`references/named-keys.md`.
|
|
122
|
-
- **Enum numbers (v12):**
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
126
|
+
- **Enum numbers (v12):** read command-surface `references/enum-numbers.md` for
|
|
127
|
+
pins, stored numbers and Stage output; `references/diagnostics.md` owns PLAY0667–0671.
|
|
128
|
+
- **Concept strategies (v15):** read
|
|
129
|
+
[generation strategies](references/generation-strategies-example.md) for Guarded
|
|
130
|
+
freshness and strict fixtures, and command-surface
|
|
131
|
+
`references/generated-values-and-responses.md` for strategy/refusal depth.
|
|
132
|
+
- **v17–v21:** recovery/no-events (v17), query Validation errors (v18), refusal
|
|
133
|
+
branches (v19), generated-concept proofs (v20), pattern/random/rule/checksum (v21).
|
|
134
|
+
Read `references/executable-subset.md` for version prerequisites and
|
|
135
|
+
`references/diagnostics.md` for proof/support failures. Binding is not rendering.
|
|
136
|
+
Tool/renderer authors: read [references/generation-checks.md](references/generation-checks.md)
|
|
137
|
+
when discovering strategy options, checking one concept or value, or consuming rule proofs.
|
|
138
|
+
- **v22–v25:** read [language admission](references/language-admission.md) for atomic
|
|
139
|
+
batches, described handlers, text rules, protected reads and Stage refusals.
|
|
140
|
+
Read [diagnostic arguments](references/diagnostic-arguments.md) for MCP/JSON subjects:
|
|
141
|
+
code and typed arguments, never message parsing.
|
|
134
142
|
- **Caller/compliance metadata:** `$identity` aliases caller built-ins;
|
|
135
143
|
additional identity details are metadata and executable reads still refuse.
|
|
136
144
|
Bare `pii`/`secret` replace legacy spellings; `pii personal` repeats one marker
|
|
@@ -186,7 +194,7 @@ Read [references/diagnostics.md](references/diagnostics.md) when a PLAY, STAGE o
|
|
|
186
194
|
11. Declare an event once, in its producing slice.
|
|
187
195
|
12. Quoted `import "glob"` is your own files; unquoted `import Ctx.Event` is a foreign
|
|
188
196
|
contract and does not bind.
|
|
189
|
-
13.
|
|
197
|
+
13. Pending described handlers bind but do not execute their bodies; attached handlers and `numbers exact` do not bind. Descriptions render as XML doc comments, not behavior.
|
|
190
198
|
|
|
191
199
|
## Gate
|
|
192
200
|
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
One complete document with every construct family. Design mode, not executable. Prose rules: [cheat-sheet.md](cheat-sheet.md); what binds: [executable-subset.md](executable-subset.md).
|
|
4
4
|
|
|
5
|
-
Binding blockers
|
|
5
|
+
Binding blockers in this legacy control without protected-read opt-in: unquoted
|
|
6
|
+
import, legacy `reads` (PLAY0271), condition-only `starts with` (PLAY0268).
|
|
7
|
+
Property/concept text rules bind v24; eligible protected reads bind v25. Caller-supplied collection equality filters bind as ESM v14; context and single-result filters remain blocked. Executable shapes are in the sibling examples. `RecordingAPayment` lists the `InvoiceClosed` cascade; an older bundled compiler rejected it with a false PLAY0285 ("outcome cannot be produced by 'RecordPayment'").
|
|
6
8
|
|
|
7
9
|
Concept compliance itself binds as ESM v13; reasons remain report-only PLAY0270. Stage renders v13 concept
|
|
8
10
|
protection. Binder-only PLAY0268 refusals and subject-lineage limits: command-surface `references/compliance.md`.
|
|
@@ -10,11 +10,23 @@
|
|
|
10
10
|
- `$context.` paths (command `produces`)
|
|
11
11
|
- `$eventContext.` (projections)
|
|
12
12
|
- PDL quick reference (most forms are compiled in `pdl-example.md` or `cheat-sheet-example.md`; `remove via join` and `$eventContext.occurred` are not)
|
|
13
|
+
- Generated values and proofs
|
|
13
14
|
- Specification forms
|
|
14
15
|
|
|
15
16
|
Released boundary forms: `public event X`, `event X from "store"`, Translate
|
|
16
17
|
`direction inbound|outbound`, event-target `projection/reducer P => PublicEvent`,
|
|
17
|
-
and capture `source events` with `from ForeignEvent` select v9.
|
|
18
|
+
and capture `source events` with `from ForeignEvent` select v9.
|
|
19
|
+
For event captures, present `given <FromEvent>` / `when append <FromEvent>`, not
|
|
20
|
+
capture records (PLAY0701). The key must be required on every `from` event, never
|
|
21
|
+
a context key (PLAY0700). PLAY0701 repairs only an unambiguous single-`from` capture;
|
|
22
|
+
PLAY0700 has no automatic repair.
|
|
23
|
+
Requires Screenplay 4.171.0 or later (`screenplay --version`); older runners do not
|
|
24
|
+
deliver these events to captures.
|
|
25
|
+
A directionless Translate reacting without a `from` route to its own capture's
|
|
26
|
+
append warns PLAY0694 (fails `--warnaserror`): move the reaction to Automation,
|
|
27
|
+
keeping the capture in Translate. No automatic split.
|
|
28
|
+
Requires Screenplay 4.176.0 or later; older compilers leave that shape unchecked.
|
|
29
|
+
Read
|
|
18
30
|
[public contracts](../../cratis-screenplay-automations-and-translations/references/public-events-and-direction.md).
|
|
19
31
|
View properties use trailing `key`; multipart `by` query/read blocks remain
|
|
20
32
|
PLAY0268, not v10. Read [named keys](../../cratis-screenplay-read-surface/references/named-keys.md).
|
|
@@ -71,9 +83,14 @@ remain unadmitted. Compile and test each relevant fixture with the chosen tool.
|
|
|
71
83
|
require that position. Source preambles precede declarations.
|
|
72
84
|
- Strings: `"..."`, escapes `\" \\ \n \r \t`; other backslashes kept (regex `"^INV-\d{6}$"` works).
|
|
73
85
|
- Structured values: single-line JSON, quoted keys (`[{"sku": "A-1", "quantity": 2}]`).
|
|
86
|
+
- Literal property/concept text rules use `contains`, `not contains`, `starts with`,
|
|
87
|
+
`ends with` with quoted operands (v24, ordinal UTF-16). Portable `matches` refuses
|
|
88
|
+
nonportable constructs with PLAY0699; exact Studio patterns warn PLAY0787.
|
|
89
|
+
Read command-surface [text and match rules](../../cratis-screenplay-command-surface/references/text-and-match-rules.md).
|
|
74
90
|
- One condition grammar (policy `require`, `produces when`, `require`, reaction `where`): `and`
|
|
75
91
|
binds tighter than `or`; operators `== != > >= < <= contains`, `starts with`; claims use
|
|
76
|
-
`claim "x" matches "v"` (not `==`: PLAY0120).
|
|
92
|
+
`claim "x" matches "v"` (not `==`: PLAY0120). Text operators here are condition-only
|
|
93
|
+
authoring syntax (PLAY0268 at binding), not the admitted property text rules.
|
|
77
94
|
- Keyword escape `@name` for properties named `tag`, `authorize`, `produces`, `reads`, `file`,
|
|
78
95
|
`validate` (enum value), `sequence`, `occurred`, `causedBy`, `namespace`, `correlation`,
|
|
79
96
|
`causation`, and projection `key`/`parent`/`with`.
|
|
@@ -153,6 +170,34 @@ collections (path below them: PLAY0297 E). Unknown member: PLAY0295/0296 W.
|
|
|
153
170
|
- One `every`/`all` block per level for the executable model (else PLAY0268).
|
|
154
171
|
- Templates (`` `${a}` ``) and `$causedBy` parse but do not bind (PLAY0268).
|
|
155
172
|
|
|
173
|
+
## Generated values and proofs
|
|
174
|
+
|
|
175
|
+
Choose readable invoice/order references with `generate pattern "INV-{yyyy}{MM}-#{7}" checksum luhn`
|
|
176
|
+
on a String concept and author `validate checksum luhn` separately. `#`, `?`, `*`
|
|
177
|
+
mean digit, uppercase letter, letter-or-digit; ASCII classes and repeats up to
|
|
178
|
+
64 are finite. UTC segments are `{yyyy}`, `{yy}`, `{MM}`, `{dd}`. Int
|
|
179
|
+
`generate random 100000..999999` is inclusive; `generate rule Name` attaches one
|
|
180
|
+
file/tagged fence with Now/Tenant context and unknown entropy. These are ESM v21.
|
|
181
|
+
Requires Screenplay 4.172.0 (`screenplay --version`) for these constructs; older compilers report PLAY0268.
|
|
182
|
+
Sequence and generated secrets remain refused.
|
|
183
|
+
|
|
184
|
+
Generated-concept rules select v20 (older compilers refuse them with PLAY0268): Proven silent, Refuted PLAY0688 plus witness, Unproven PLAY0689
|
|
185
|
+
plus reason. Finite support exhaustion is PLAY0691, empty support on a scanned
|
|
186
|
+
date PLAY0692, not a proof warning. MCP rules[]/derivedPattern support typed
|
|
187
|
+
matches/PLAY0688 repair proposals.
|
|
188
|
+
Requires Screenplay 4.173.0 for those MCP fields; older servers omit them.
|
|
189
|
+
See [generation example](generation-strategies-example.md).
|
|
190
|
+
|
|
191
|
+
Pin whole identifiers with `for`, other values with named `generated`; pins obey
|
|
192
|
+
shape and rules. `given clock` fixes all UTC pattern date segments, not randomness;
|
|
193
|
+
without it only digit widths are checked. Patterns are not gapless sequences or
|
|
194
|
+
secrets; check digits catch typos, not forgery. Short payload codes need uniqueness,
|
|
195
|
+
generated source destinations need freshness. Read
|
|
196
|
+
[Stage admission](../../cratis-stage-rendering-and-sandbox/references/admission.md)
|
|
197
|
+
for v21 admission, all-Proven unpinned specs and the separate prerequisites for
|
|
198
|
+
warning/info rules, checksum validation and pattern/random rendering.
|
|
199
|
+
`generate rule` remains STAGE-ESM-028. Reference binding is not rendering.
|
|
200
|
+
|
|
156
201
|
## Specification forms
|
|
157
202
|
Full list with semantics: `Documentation/screenplay/specifications.md`. Compiled in the
|
|
158
203
|
examples: `given caller` (+`authenticated`, `role`), `given clock`, `given <Event> for`,
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
# Read diagnostic subjects from arguments
|
|
5
|
+
|
|
6
|
+
Requires Screenplay 4.194.0 or later (`screenplay --version`) for typed diagnostic arguments; older diagnostics may omit the field.
|
|
7
|
+
|
|
8
|
+
Use code plus declared `arguments` to identify subjects, never parse message text.
|
|
9
|
+
Messages are display prose and may be reworded. Published names, kinds, meanings
|
|
10
|
+
and optionality are permanent; tolerate unknown names and keyword values.
|
|
11
|
+
Missing `arguments` remains readable; no subjects is `{}`; optional subjects are
|
|
12
|
+
omitted when unavailable. This changes neither text output nor ESM version.
|
|
13
|
+
|
|
14
|
+
The `screenplay` MCP server's `diagnostics`, `read-workspace` executable diagnostics,
|
|
15
|
+
proposal `diagnostics` and `introducedExecutableErrors[].arguments`, plus the CLI's
|
|
16
|
+
JSON output, expose the same structure. Resolve the harness-native tool name from
|
|
17
|
+
the listing; this is not a new diagnostic tool. C# exposes Diagnostic.Arguments.
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"specification": { "kind": "specification", "path": ["Billing", "Invoices", "SendReminder", "Overdue"] },
|
|
22
|
+
"step": { "kind": "keyword", "value": "when" },
|
|
23
|
+
"stepIndex": { "kind": "index", "value": 0 },
|
|
24
|
+
"property": { "kind": "text", "value": "amount" }
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Each argument is keyed by name. `text` is verbatim authored text, `keyword` a stable
|
|
29
|
+
never-localized language spelling, `index` a zero-based number. A declaration uses
|
|
30
|
+
its declaration kind as `kind` (for example `specification`) and `path`, not a
|
|
31
|
+
`value`: module if present, features outermost first, slice if present, declaration
|
|
32
|
+
name; never repeat a slice's own name. Specification names are authored names;
|
|
33
|
+
a separate `case` names an expansion. Argument order is immaterial.
|
|
34
|
+
|
|
35
|
+
## Codes with declared subjects
|
|
36
|
+
|
|
37
|
+
`?` denotes optional. Except where marked, arguments are text.
|
|
38
|
+
|
|
39
|
+
| Code | Arguments |
|
|
40
|
+
| --- | --- |
|
|
41
|
+
| PLAY0044, PLAY0075, PLAY0101, PLAY0518 | `text` |
|
|
42
|
+
| PLAY0351 | `readmodel`, `property` |
|
|
43
|
+
| PLAY0468 | `query?`, `argument` |
|
|
44
|
+
| PLAY0514, PLAY0519 | `property` |
|
|
45
|
+
| PLAY0520 | `example`, `type?`, `kind?` (keyword: event, command, readmodel, concept, type, example) |
|
|
46
|
+
| PLAY0521 | `example` |
|
|
47
|
+
| PLAY0522 | `example`, `kind`, `expectedKind` (both keyword: event, command, readmodel) |
|
|
48
|
+
| PLAY0523 | `example`, `type`, `property?` |
|
|
49
|
+
| PLAY0524 | `specification` (declaration), `step` (keyword), `stepIndex` (index), `property`, `type`, `example?`, `case?`, `parameter?` |
|
|
50
|
+
| PLAY0525, PLAY0526 | `example` |
|
|
51
|
+
| PLAY0583 | `case?`, `parameter?`, `type?`, `text?` |
|
|
52
|
+
|
|
53
|
+
For PLAY0524, `step` is given, given readmodel, when, when append or then.
|
|
54
|
+
`stepIndex` counts every authored given/when/then clause once across all forms,
|
|
55
|
+
not nested lines, synthesized callers or defaults. Example/case expansion retains
|
|
56
|
+
that position. Read the missing property and its type directly, navigate the
|
|
57
|
+
specification path and optional case, then repair the effective fixture; do not
|
|
58
|
+
infer these from a translated message. Codes outside this table may have no
|
|
59
|
+
subjects, including PLAY0198. Check the published contract for the code rather
|
|
60
|
+
than assuming every diagnostic names a declaration.
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
- Structural completeness and timeline checks
|
|
15
15
|
- Editor versus C# verdicts
|
|
16
16
|
- Consistency errors (V1: the model contradicts itself)
|
|
17
|
+
- Batches, described handlers, text rules and protected reads
|
|
17
18
|
- Binding (V2 and V3) - see `executable-subset.md` for the full table
|
|
18
19
|
- Frequent errors
|
|
19
20
|
- Render admission (V5): `STAGE-*`, `CLI-RENDER-*`, `STAGE-CRATIS-*`
|
|
@@ -55,7 +56,7 @@ Legacy compliance spellings (`@pii`/`@sensitive`) do not evade PLAY0515.
|
|
|
55
56
|
|
|
56
57
|
## Public events and translation direction
|
|
57
58
|
|
|
58
|
-
|
|
59
|
+
PLAY0607–0620 are errors. These constructs bind as ESM v9, except public/foreign imports without local shapes (PLAY0268).
|
|
59
60
|
|
|
60
61
|
| Code | Meaning / fix |
|
|
61
62
|
| --- | --- |
|
|
@@ -80,6 +81,18 @@ or non-Translate direction. Repair discovery uses `repair-capabilities`, workspa
|
|
|
80
81
|
`repairs`, then revision-checked `propose-repair`; do not guess a direction.
|
|
81
82
|
See automations-and-translations `references/public-events-and-direction.md`.
|
|
82
83
|
|
|
84
|
+
| Code | Severity | Meaning / fix |
|
|
85
|
+
| --- | --- | --- |
|
|
86
|
+
| PLAY0694 | W | An unrouted reaction in a directionless Translate consumes an event its own capture appends (root, children or nested). Keep the capture here and move the reaction to a separate Automation slice with its specs. No automatic repair; `--warnaserror` fails. Other slices' captures and reactions with a `from` route do not trigger this check; explicit inbound local-event consumption is PLAY0616. |
|
|
87
|
+
| PLAY0700 | E | Event-capture `key` is not required on every `from` event, or uses a `$` context key. Choose a required content property or deliberately change the source contracts; no repair. |
|
|
88
|
+
| PLAY0701 | E | `given capture` / `when capture` names a capture over events. Present `given <FromEvent>` / `when append <FromEvent>`. A compiler-authored repair exists only for exactly one `from` event; several are ambiguous. Review the specification repair individually; no fix-all or pinned evidence. |
|
|
89
|
+
|
|
90
|
+
Requires Screenplay 4.171.0 or later (`screenplay --version`) for PLAY0700/0701
|
|
91
|
+
and event delivery to captures; older runners do not execute that delivery.
|
|
92
|
+
Requires Screenplay 4.176.0 or later for PLAY0694; older compilers leave the
|
|
93
|
+
legacy directionless co-location unchecked. Full capture execution and ordering:
|
|
94
|
+
automations-and-translations `references/public-events-and-direction.md`.
|
|
95
|
+
|
|
83
96
|
## Explicit enum member numbers
|
|
84
97
|
|
|
85
98
|
Source errors; the pins bind as ESM v12:
|
|
@@ -290,12 +303,43 @@ or V4 execution. Run the CLI or MCP for those verdicts.
|
|
|
290
303
|
| PLAY0287 | producer/capture/spec assigns a field the event lacks |
|
|
291
304
|
| PLAY0291-0294 | bad single-line JSON / unknown key / wrong shape / duplicate key |
|
|
292
305
|
|
|
306
|
+
## Batches, described handlers, text rules and protected reads
|
|
307
|
+
|
|
308
|
+
Use code and typed subjects from [diagnostic arguments](diagnostic-arguments.md), not
|
|
309
|
+
message parsing, for codes that declare arguments. Other messages still explain
|
|
310
|
+
refusal reasons. Read [language admission](language-admission.md) before changing modes.
|
|
311
|
+
|
|
312
|
+
| Code | Meaning / fix |
|
|
313
|
+
| --- | --- |
|
|
314
|
+
| PLAY0693 | Duplicate/conflicting/invalid atomic batch declaration; keep one application-root declaration, do not remove intended atomicity |
|
|
315
|
+
| PLAY0695 (I) | Described handler admitted; a target must supply its payload body |
|
|
316
|
+
| PLAY0696 | Pending handler without productions, including response-only; declare unconditional productions |
|
|
317
|
+
| PLAY0697 | Conditional productions under pending intent; result v1 needs unconditional events |
|
|
318
|
+
| PLAY0698 | Pending intent plus another handler; retain one |
|
|
319
|
+
| PLAY0699 | Pattern outside portable dialect or over 1,000 UTF-16 units / 3,000 expanded nodes; rewrite the refused construct |
|
|
320
|
+
| PLAY0780 | Invalid placement/repetition of `command reads protected`; declare once at root |
|
|
321
|
+
| PLAY0781 | Protected read shape/key refused; inspect the closed reason, never downgrade to an unguarded read |
|
|
322
|
+
| PLAY0782 | Omitted `by` without command identifier; declare the lookup input |
|
|
323
|
+
| PLAY0783 | Command combines reads and concurrency; choose the intended boundary |
|
|
324
|
+
| PLAY0784 | Unknown read/property path; reference a declared read or alias |
|
|
325
|
+
| PLAY0785 | Ambiguous view path; use distinct aliases on repeated reads |
|
|
326
|
+
| PLAY0786 (I) | Eligible legacy model; preview typed preamble repair, individually review absence/conflict semantics |
|
|
327
|
+
| PLAY0787 (W) | Exact deprecated Studio text-rule pattern; repair to literal rule or equality, preserving message/severity |
|
|
328
|
+
| STAGE-ESM-043 | Atomic mode not realized, even in admitted v23–v25; retain declaration and gap-fill |
|
|
329
|
+
| STAGE-ESM-044 | Protected reads not realized despite v25 version admission; keep protection and gap-fill |
|
|
330
|
+
| STAGE-IMPL-002 | Described handler body not realized by Stage, even Stub mode; no stubs emitted |
|
|
331
|
+
|
|
332
|
+
Invalid match syntax remains PLAY0367. Property/concept text rules bind v24;
|
|
333
|
+
`contains`/`starts with` in conditions only still fail PLAY0268. Stage rejects
|
|
334
|
+
v22/v26 and mixed pairs with STAGE-ESM-016; v23–v25 admission does not implement
|
|
335
|
+
bodies, batches or protected reads (STAGE-ESM-044).
|
|
336
|
+
|
|
293
337
|
## Binding (V2 and V3) - see `executable-subset.md` for the full table
|
|
294
338
|
| Code | Meaning | Fix |
|
|
295
339
|
|---|---|---|
|
|
296
|
-
| PLAY0268 | construct the ESM cannot represent; read the message for the construct (`executable-subset.md` lists
|
|
340
|
+
| PLAY0268 | construct the ESM cannot represent; read the message for the construct (`executable-subset.md` lists attached handlers, unsupported query shapes, protected enum/identity concepts, read paths without opt-in or in conditions, and older bundled-compiler limits) | stay in design mode, or change the construct if the domain allows; never strip `pii`/authorization |
|
|
297
341
|
| PLAY0269 / 0270 | UI deferred / authoring metadata (I) | none |
|
|
298
|
-
| PLAY0271 | legacy `reads` or a `concurrency` block keeps its legacy meaning and cannot bind (error) |
|
|
342
|
+
| PLAY0271 | legacy `reads` or a `concurrency` block keeps its legacy meaning and cannot bind (error) | opt eligible command reads into v25 with reviewed preamble repair; `concurrency` remains unbound; uniqueness uses a constraint, target realization stays separate |
|
|
299
343
|
| PLAY0273 | incoherent: ambiguous `for`, property not on event revision, operand type mismatch, derived `$eventContext` path | fix the reference |
|
|
300
344
|
| PLAY0350 | `null` in command/event value | Chronicle semantics (nullable event properties are CHR0012; an optional fact is a separate event), not only a binder limitation: specs cannot state an absent command/event value. Omit the value or record a capability gap; whether the optional detail is really a separate fact is a review question, not this code's fix |
|
|
301
345
|
| PLAY0351 | given/then readmodel lacks the key property | add the keyed query's `by` property |
|
|
@@ -336,10 +380,26 @@ or V4 execution. Run the CLI or MCP for those verdicts.
|
|
|
336
380
|
| PLAY0683/0684 | PLAY0683: generated non-identifier below 64 random bits warns (a single-property unique constraint suppresses it); PLAY0684: generated identifier below 64 random bits is an error |
|
|
337
381
|
| PLAY0687 | capture `source events` spans multiple origins; split into one capture per origin (event store) |
|
|
338
382
|
| PLAY0688 | generated strategy refutes a concept rule; read its violating example, align the rule/strategy or review the derived-`matches` repair |
|
|
339
|
-
| PLAY0689 (W) | generated-concept rule proof is undecided; reason names regex fragment/budget/opaque limits.
|
|
383
|
+
| PLAY0689 (W) | generated-concept rule proof is undecided; reason names regex fragment/budget/opaque limits or ambiguity. Only deterministic matches patterns prove containment; passing samples prove nothing |
|
|
384
|
+
| PLAY0691 | finite pattern support cannot be counted within the generation budget; simplify the strategy, never treat it as an Unproven rule warning or redraw |
|
|
385
|
+
| PLAY0692 | pattern support is empty for some valid UTC date in the compiler's next-100-year horizon; repair the pattern/checksum contract, never sample around it |
|
|
340
386
|
| PLAY0685 | own response name used under execute failure; outer successful responses remain available. UI composition `references/response-continuations.md` |
|
|
341
387
|
| PLAY0289 | (binding) no documents: empty root |
|
|
342
388
|
|
|
389
|
+
Requires Screenplay 4.164.0 (`screenplay --version`) for PLAY0688/0689 (ESM v20),
|
|
390
|
+
4.172.0 for finite generation PLAY0691/0692 and checksum validation (v21); older
|
|
391
|
+
compilers refuse those constructs with PLAY0268. A refuted rule's PLAY0688 repair
|
|
392
|
+
uses the strategy-derived matches pattern (and declared checksum validation if
|
|
393
|
+
absent). Inspect MCP `rules[]` for status/witness/reason and only use a repair
|
|
394
|
+
when diagnosticCode/repair is reported. Pattern/random/rule no longer refuse
|
|
395
|
+
PLAY0268; generated secrets still do. Requires Stage 4.109.0 for v20, 4.115.0
|
|
396
|
+
for v21 admission/all-Proven unpinned specs, 4.117.0 for warning/info rules,
|
|
397
|
+
4.118.0 for checksum validation and 4.119.0 for pattern/random. Older renderers
|
|
398
|
+
refuse those constructs or require pins even for Proven rules. Bad pins fail
|
|
399
|
+
STAGE-ESM-011; unpinned Unproven/Refuted rules fail -038; opaque rules fail -005
|
|
400
|
+
before pin evaluation. `generate rule` remains -028; checksum remains -042 only
|
|
401
|
+
on legacy syntax paths. Tool-author checks: [generation checks](generation-checks.md).
|
|
402
|
+
|
|
343
403
|
Fix order: E at V1 -> W at V1 -> silent-gap check -> V2 codes (if the mode needs V3).
|
|
344
404
|
Report each as `code file:line one-line meaning`; never paste more than about 30 lines.
|
|
345
405
|
|
|
@@ -358,7 +418,7 @@ Publication STAGE-ESM-032, foreign facts/event captures 033, claim-reading/opaqu
|
|
|
358
418
|
| STAGE-ESM-004 / 006 / 013 | a `StateChange` without commands; `produces` that cannot render (expression/enum conditions, literal or computed mappings, duplicate tags); event-context value other than `$context.occurred` (reactions: `$context.causedBy.*`, `$context.eventSourceId`) |
|
|
359
419
|
| STAGE-ESM-005 / 015 | code rule or code validation bodies; authorization Stage cannot render exactly (role-claim URIs, nested or unresolved opaque policies, opaque-policy subjects that are not text, Uuid, Date or DateTime). Role-only, authenticated, opaque pure policies and Uuid/Date/DateTime/text claim targets render |
|
|
360
420
|
| STAGE-ESM-007 / 009 / 010 / 017 | projection shape (one projection or reducer per read model, affected-instance key, unsupported query shapes, keys, unsupported `all` mappings, event-context values) |
|
|
361
|
-
| STAGE-ESM-011 | specification shape not rendered (`when append` outside the single-hop reaction subset, command specifications that cascade into reactions, composite values, an unauthenticated caller carrying roles or claims,
|
|
421
|
+
| STAGE-ESM-011 | specification shape not rendered (`when append` outside the single-hop reaction subset, command specifications that cascade into reactions, composite values, an unauthenticated caller carrying roles or claims, generated fixtures that do not match their strategy shape or concept rules). Command scenarios and single-hop reaction appends render |
|
|
362
422
|
| STAGE-ESM-014 | constraint shape (multi-claim in one command, optional or composite targets) |
|
|
363
423
|
| STAGE-ESM-019/022 | reducer or opaque pure policy body outside the pure allowlist |
|
|
364
424
|
| STAGE-ESM-024 | interval, schedule, application, startup and shutdown triggers, opaque reaction bodies, captures, Translate, clock/trigger/capture specifications |
|
|
@@ -24,7 +24,8 @@ non-route Double literals (exact lowering of Double-mode literals) as v11, non-p
|
|
|
24
24
|
numbers as v12, concept compliance as v13, caller-supplied collection equality filters as v14,
|
|
25
25
|
concept generation strategies and freshness as v15, stored event names as v16,
|
|
26
26
|
no-event assertions/redelivery as v17, query-error specifications as v18,
|
|
27
|
-
invocation refusal branches as v19
|
|
27
|
+
invocation refusal branches as v19, generated-concept rules as v20, and finite
|
|
28
|
+
pattern/random/rule generation plus checksum validation as v21. Always name
|
|
28
29
|
the tool with a V2 or V3 result. When tool and documentation disagree, the tool decides
|
|
29
30
|
current capability; the documentation and the domain decide intended correctness. Record
|
|
30
31
|
the gap, never strip the model to pass. Use the actual binder before promoting an older
|
|
@@ -38,6 +39,10 @@ never bind (`verdicts.md`).
|
|
|
38
39
|
Complete examples that bind live in `executable-example.md`, `pdl-example.md` (projections),
|
|
39
40
|
`automation-translate-example.md` (ESM v6) and `generated-responses-example.md` (ESM v7).
|
|
40
41
|
|
|
42
|
+
For atomic batches (v22), described handlers (v23), ordinal text rules (v24) and
|
|
43
|
+
protected reads (v25), read [language admission](language-admission.md). A later
|
|
44
|
+
version alone does not enable either application opt-in.
|
|
45
|
+
|
|
41
46
|
## Caller and compliance boundary
|
|
42
47
|
|
|
43
48
|
`$identity.id`/`.name`/`.userName` are aliases of the admitted
|
|
@@ -168,11 +173,14 @@ fixtures and `then returns`. Unsupported generated types (`-028`) and result com
|
|
|
168
173
|
`references/generated-values-and-responses.md`.
|
|
169
174
|
Complete examples: `generated-responses-example.md`, `generation-strategies-example.md`.
|
|
170
175
|
|
|
171
|
-
- A generated property is command-only, required, scalar and a generatable concept backed by Uuid
|
|
172
|
-
|
|
176
|
+
- A generated property is command-only, required, scalar and a generatable concept backed by Uuid/String,
|
|
177
|
+
or Int with `random` (v21). Bare primitives, optional and collection types are invalid.
|
|
178
|
+
Uuid has implicit `uuid`; String needs a strategy. Generated identifiers remain Uuid/String only.
|
|
173
179
|
Explicit serialized generation selects v15, with strict fixture encoding and whole-source freshness for all
|
|
174
|
-
generated destinations.
|
|
175
|
-
|
|
180
|
+
generated destinations. Sequence and generated secrets remain refused.
|
|
181
|
+
Generated-concept rules bind as v20 with proof diagnostics PLAY0688/0689;
|
|
182
|
+
pattern/random/rule and checksum validation bind as v21. PLAY0691 is uncountable
|
|
183
|
+
support within budget; PLAY0692 is empty support on a scanned UTC date.
|
|
176
184
|
See command-surface `references/generated-values-and-responses.md` and `generation-strategies-example.md`. Modifier order is `Type optional generated identifier`.
|
|
177
185
|
- Generated values are not request inputs, form fields, invocation arguments or ordinary `when` values. Generation
|
|
178
186
|
runs after authorization and validation and before productions, so a denial or a validation failure never
|
|
@@ -180,7 +188,10 @@ Complete examples: `generated-responses-example.md`, `generation-strategies-exam
|
|
|
180
188
|
- A policy (including inherited or composed ones and the implicit `subject` of a generated identifier), a property
|
|
181
189
|
rule or a requirement that references a generated value reports `PLAY0273`; reference input properties only. A
|
|
182
190
|
generated property whose concept declares rules selects v20; refuted rules report
|
|
183
|
-
PLAY0688 and
|
|
191
|
+
PLAY0688 with a witness and Unproven rules warn PLAY0689 with a reason. Proven
|
|
192
|
+
rules bind silently; matches containment requires deterministic patterns, not
|
|
193
|
+
passing samples. Opaque validation needs a target. Opaque generation rules use
|
|
194
|
+
pinned String results without executing their bodies.
|
|
184
195
|
A reaction mapping into a generated property is invalid.
|
|
185
196
|
- Responses: `returns <property>` is scalar; bare `returns` opens an ordered record of `<name> [<Type>] = <property>` fields
|
|
186
197
|
over direct properties of the same command (collections, read aliases, arithmetic and whole read models are not
|
|
@@ -198,14 +209,25 @@ Complete examples: `generated-responses-example.md`, `generation-strategies-exam
|
|
|
198
209
|
- A reaction-invoked command that reaches generation is `Unsupported(IdentityAllocation)`; response-only commands run
|
|
199
210
|
and discard the response. Generated values give no idempotency, retry or deduplication guarantee.
|
|
200
211
|
|
|
201
|
-
Requires Screenplay 4.68.0 or later (`screenplay --version`) for generated values and responses (ESM v7),
|
|
212
|
+
Requires Screenplay 4.68.0 or later (`screenplay --version`) for generated values and responses (ESM v7), 4.147.0 for strategies/freshness (v15), 4.164.0 for generated-concept rules (v20), and 4.172.0 for pattern/random/rule/checksum (v21); older compilers refuse the respective constructs with PLAY0268.
|
|
213
|
+
|
|
214
|
+
Pins satisfy both strategy shape and concept rules; failure is Rejected(Contract),
|
|
215
|
+
not an input error or redraw. Pin date segments with `given clock`; without it the
|
|
216
|
+
runner checks digit widths only. Generation checksum does not add validation:
|
|
217
|
+
author `validate checksum` for arithmetic. Requires Stage 4.109.0 for v20,
|
|
218
|
+
4.115.0 for v21 admission/all-Proven unpinned specs, 4.117.0 for warning/info rules,
|
|
219
|
+
4.118.0 for checksum validation and 4.119.0 for pattern/random rendering; older
|
|
220
|
+
renderers refuse those constructs or require rule-bearing pins even when Proven.
|
|
221
|
+
Unproven/Refuted rules still need pins (-038), bad pins fail -011, and
|
|
222
|
+
`generate rule` remains -028. Do not remove rules or classification to render.
|
|
202
223
|
|
|
203
224
|
## Released public boundaries and observer routes
|
|
204
225
|
|
|
205
226
|
Public/origin events, explicit Translate direction, event-target builders and
|
|
206
|
-
`source events` captures bind as ESM v9. Publication folds execute
|
|
207
|
-
|
|
208
|
-
|
|
227
|
+
`source events` captures bind as ESM v9. Publication folds execute, and so do
|
|
228
|
+
captures over events (Requires Screenplay 4.171.0; a specification presents the
|
|
229
|
+
consumed event with `given <Event>` / `when append <Event>`); reached opaque
|
|
230
|
+
event-target reducers return typed Unsupported. Public/foreign imports still lack a local shape and refuse PLAY0268.
|
|
209
231
|
See automations-and-translations `references/public-events-and-direction.md`.
|
|
210
232
|
Production overrides and reaction/reducer filters bind and select v10;
|
|
211
233
|
filters match routed source/stream names only. Read
|
|
@@ -231,9 +253,15 @@ Requires Screenplay 4.117.0 or later (`screenplay --version`) for ESM v9, 4.129.
|
|
|
231
253
|
|
|
232
254
|
## Code attachments (what binds, what never does)
|
|
233
255
|
|
|
256
|
+
Pending `handler implementation` beside unconditional `produces` binds as a described
|
|
257
|
+
command (v23). Its payload-only body returns Unsupported ImplementationBody when reached;
|
|
258
|
+
denial/validation specs still run. Read [language admission](language-admission.md) for
|
|
259
|
+
v22–v25 and [described handlers](../../cratis-screenplay-command-surface/references/described-handlers.md)
|
|
260
|
+
for the result contract. Attached handlers remain unbound.
|
|
261
|
+
|
|
234
262
|
Inline fences (`csharp`, `typescript`, `react`, `html`, `sql`) and `file <path>` attach
|
|
235
263
|
code to an owner. Three kinds block binding (PLAY0268, V3 blocked, no specification runs):
|
|
236
|
-
the command `handler`, the `file` constraint (see below) and a query `performer`
|
|
264
|
+
the attached command `handler`, the `file` constraint (see below) and a query `performer`
|
|
237
265
|
("uses delivery, filtering, scope, or implementation behavior outside the first ESM v1
|
|
238
266
|
vertical"). Everything else binds as an **opaque requirement** that needs a target to
|
|
239
267
|
execute: reducer transitions, rule predicates, command and concept code validation, policy
|
|
@@ -246,22 +274,22 @@ bodies still leave their owner non-executable.
|
|
|
246
274
|
can only declare uniqueness: declare it with `unique ...`, and put other rules in command
|
|
247
275
|
validation or a `require` condition.
|
|
248
276
|
|
|
249
|
-
- A command `handler`
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
277
|
+
- A file/fenced command `handler` remains PLAY0268, wrapped or direct. A pending
|
|
278
|
+
intent instead selects v23 with unconditional productions (PLAY0695 information).
|
|
279
|
+
Missing productions use PLAY0696, conditional ones PLAY0697, duplicate handlers PLAY0698.
|
|
280
|
+
Hints are not executable code, locks or confirmation.
|
|
253
281
|
- A command property named rule also accepts an `implementation` block (ordered
|
|
254
282
|
`hint` lines, at most one `file` or tagged fence). With a source attached it binds like a
|
|
255
283
|
direct source; hints-only or empty is pending intent: valid source, PLAY0268 at binding.
|
|
256
284
|
The block is rejected on concept rules, built-in property rules and whole-command
|
|
257
285
|
`require`/`validate` bodies.
|
|
258
|
-
- A
|
|
259
|
-
with
|
|
286
|
+
- A reached described body is Unsupported, not a passing specification; Stage refuses
|
|
287
|
+
it with STAGE-IMPL-002, even in Stub mode. Deliver its body as authorized gap-fill.
|
|
260
288
|
- Stage admits only pure reducer bodies (Roslyn allowlist, STAGE-ESM-019 and 022);
|
|
261
289
|
code validation is refused (STAGE-ESM-005). Opaque pure policies render.
|
|
262
290
|
- The reference runner returns Unsupported for the opaque bodies that do bind (rule and
|
|
263
291
|
policy predicates, code validation, reducer transitions); a specification that needs one
|
|
264
|
-
never passes.
|
|
292
|
+
never passes. Attached handlers, file constraints and query performers (and reaction effects on a trigger with
|
|
265
293
|
`reads`) are different: they leave the whole model unbound, so no specification runs at
|
|
266
294
|
all.
|
|
267
295
|
|
|
@@ -274,13 +302,13 @@ bodies still leave their owner non-executable.
|
|
|
274
302
|
| `pii` or `secret` on a concept | PLAY0268 | Older compilers refuse it outright. Current compilers admit 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 |
|
|
275
303
|
| `query` with a composite `by` block, or `by ... from` context-derived arguments | PLAY0268 | composite `by` blocks remain unadmitted. 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 |
|
|
276
304
|
| 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 |
|
|
277
|
-
| `contains` or `starts with` in conditions | PLAY0268 | equality and numeric ordering only |
|
|
305
|
+
| `contains` or `starts with` in conditions only | PLAY0268 | `require`/`produces when` conditions admit equality and numeric ordering only; property/concept text rules bind as v24 |
|
|
278
306
|
| Date or DateTime comparison, `today` | PLAY0268 | no runtime date value |
|
|
279
307
|
| Rule on a nested path (`lines.qty all > 0`) | PLAY0268 | put the rule on the nested value's concept |
|
|
280
|
-
|
|
|
281
|
-
| `reads <View> ...` on a command | PLAY0271 (error) |
|
|
308
|
+
| Read paths without protected opt-in, or in `produces when` | PLAY0268 | v25 admits single-level paths only in `require` and produced-event mappings |
|
|
309
|
+
| Legacy `reads <View> ...` on a command | PLAY0271 (error) | `command reads protected` opts eligible views into v25; see command-surface protected reads |
|
|
282
310
|
| `concurrency` block on a command | PLAY0271 (error) | "concurrency metadata keeps its legacy meaning and cannot bind to ESM v1" |
|
|
283
|
-
| `handler` (see above) | PLAY0268 |
|
|
311
|
+
| File/inline `handler` (see above) | PLAY0268 | pending described handlers instead bind v23; body execution and rendering remain gaps |
|
|
284
312
|
| `$context.tenant`, roles, claims, causation | PLAY0268 | no portable scalar counterpart |
|
|
285
313
|
| Arithmetic or raw expression in a `produces` mapping | PLAY0268 | |
|
|
286
314
|
| Template `` `${x}` `` or `$causedBy` in a projection | PLAY0268 | |
|