@cratis/pi 7.63.0 → 7.65.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-fundamentals-concept/references/shop-generation.md +16 -3
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +2 -1
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +3 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +13 -3
- package/package/corpus/skills/cratis-screenplay-command-surface/references/date-comparisons.md +100 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +30 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/protected-reads.md +15 -5
- package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +12 -2
- package/package/corpus/skills/cratis-screenplay-command-surface/verification.json +3 -0
- package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +2 -2
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +1 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generated-recovery.md +14 -2
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +3 -2
- package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +1 -1
- 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-render-and-gap-fill/SKILL.md +3 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +3 -1
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +6 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +12 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +5 -5
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +1 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +3 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +1 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +20 -0
- package/package/corpus/skills/cratis-screenplay-specifications/references/outcome-comparison.md +6 -0
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +1 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +3 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +4 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +6 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +20 -4
- package/package/corpus/skills/cratis-screenplay-toolchain/references/language-admission.md +21 -4
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +7 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +1429 -25
- 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-stage-rendering-and-sandbox/SKILL.md +12 -4
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +8 -3
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +41 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +32 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/scene-runtime.md +10 -0
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Read [protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
5
5
|
for the opt-in alternative. Do not insert the preamble blindly: every read must meet
|
|
6
6
|
finite event-source-keyed admission with removals. A v25 reference pass still does not
|
|
7
|
-
render protected reads: Stage admits v25 but refuses them with STAGE-ESM-044. The comments and unenforced markers below describe
|
|
7
|
+
render protected reads: Stage admits v25 but the Cratis C# renderer refuses them with STAGE-ESM-044. The comments and unenforced markers below describe
|
|
8
8
|
this legacy control, not a general limit on command reads.
|
|
9
9
|
|
|
10
10
|
**Design mode.** This document states the stored-state rules of the
|
package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md
CHANGED
|
@@ -34,12 +34,13 @@ Typed example/override forms: `cratis-screenplay-specifications`
|
|
|
34
34
|
| Refusal branches, `$refusal` | yes | ESM v19; first matching branch wins | Stage supported subset; -039 for unfaithful refusal details/trigger groups, -011 for specification limits |
|
|
35
35
|
| Query `then error` | yes | ESM v18; one query/one error, no result/denial | requires target v18 admission; a v19-capable renderer does not necessarily admit v18 |
|
|
36
36
|
| Composite (JSON) values in specs | yes | yes | no |
|
|
37
|
-
|
|
|
37
|
+
| Same-primitive `Date`/`DateTime` comparisons in `require`, `produces when` and command or property validation rules (v26; Requires Screenplay 4.199.0; see [date comparisons](../../cratis-screenplay-command-surface/references/date-comparisons.md)) | spec them | binds and executes; a `DateTime` input without an offset is a Validation rejection | v26 STAGE-ESM-016: gap-fill |
|
|
38
|
+
| 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` |
|
|
38
39
|
| Bodied rules, code policies | spec them | spec reported **unsupported**, never passed | no |
|
|
39
40
|
| 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 |
|
|
40
41
|
| Attached command handlers, `file` constraints, query `performer`s | spec them in design | blocked: PLAY0268 at binding, no spec runs (V3 blocked) | no |
|
|
41
42
|
| 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–v25 STAGE-ESM-043 |
|
|
42
|
-
| Protected command reads (v25) | declare opt-in for eligible reads | absence Validation; matching intervening facts Conflict; race vectors are not a new spec construct |
|
|
43
|
+
| 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 STAGE-ESM-044; semantic Host/executor execute admitted reads, non-Error protected requirements STAGE-ESM-045; v25 pair admitted |
|
|
43
44
|
|
|
44
45
|
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).
|
|
45
46
|
|
|
@@ -20,7 +20,7 @@ protected decisions. Gap-fill must use an admitted projection/key shape and acti
|
|
|
20
20
|
unit-of-work enrollment; do not edit managed dependencies. Keep the `.play` rule
|
|
21
21
|
target enforcement separate from reference semantics until target tests verify it.
|
|
22
22
|
Read [protected command reads](../../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
23
|
-
for admission and
|
|
23
|
+
for admission and the Cratis C# renderer's protected-read refusal (STAGE-ESM-044); never remove protection to obtain rendering. Forbidden: caller-supplied copies of state in `require`, boolean attestation
|
|
24
24
|
inputs (`confirmsX == true`), rules in `handler` / implementation-hint prose.
|
|
25
25
|
|
|
26
26
|
## Authorization is executable
|
|
@@ -5,7 +5,7 @@ One complete legacy design-mode control for `cratis-screenplay-slice-design`, wi
|
|
|
5
5
|
specification runs here. List queries and clock fixtures bind on an admitting compiler;
|
|
6
6
|
they are not the remaining blocker. Personas and screens are informational.
|
|
7
7
|
Eligible command reads can opt into v25; inspect every projection/key/removal before
|
|
8
|
-
migration and retain
|
|
8
|
+
migration and retain the Cratis C# renderer's separate refusal (STAGE-ESM-044; the v25 pair itself is admitted). Read
|
|
9
9
|
[protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md).
|
|
10
10
|
The unenforced descriptions below refer to this legacy control, not all command reads.
|
|
11
11
|
The specifications still seed every read-model source (`LockerInstalled`, `LockerRequested`,
|
|
@@ -81,6 +81,21 @@ or target tests; name engine, version and expected/discovered selection.
|
|
|
81
81
|
[text and match rules](../cratis-screenplay-command-surface/references/text-and-match-rules.md)
|
|
82
82
|
for boundary values and PLAY0699/0787. Reference success is not Stage admission.
|
|
83
83
|
|
|
84
|
+
## Chronological command date comparisons
|
|
85
|
+
|
|
86
|
+
Requires Screenplay 4.199.0 (ESM v26; `screenplay --version`); older binders refuse
|
|
87
|
+
these comparisons with PLAY0268. DateTime conditions compare UTC instants at tick
|
|
88
|
+
precision: cover equal instants with different offsets, increasing endpoints,
|
|
89
|
+
an inverted interval and a one-tick boundary. Every participating DateTime input
|
|
90
|
+
without an offset or `Z` rejects with Validation before rules, even when its
|
|
91
|
+
comparison is skipped; add a missing-offset rejection, not a clock fixture workaround.
|
|
92
|
+
`then` matching stays ordinal: expected event values keep the exact produced text,
|
|
93
|
+
not an equivalent offset. Read the complete [retention-window specifications](../cratis-screenplay-command-surface/references/date-comparisons.md)
|
|
94
|
+
for `require to >= from`, PLAY0268/0273 and Stage's v26 refusal. The missing-offset
|
|
95
|
+
runtime case needs an evaluator-request or target input test: putting the invalid
|
|
96
|
+
value in a typed `.play` fixture instead fails binding with PLAY0273; `then error`
|
|
97
|
+
does not exercise runtime validation.
|
|
98
|
+
|
|
84
99
|
## Descriptions, persona callers and case tables
|
|
85
100
|
|
|
86
101
|
Use one `description "<rule or behavior>"` (or a fenced `text` description) to
|
|
@@ -196,6 +211,9 @@ Whitespace-acceptance specs fail. This applies to every ESM version.
|
|
|
196
211
|
|
|
197
212
|
Requires Screenplay 4.151.0 or later (`screenplay --version`) for the Unicode `not empty` correction.
|
|
198
213
|
|
|
214
|
+
Date/DateTime comparisons are the command-only exception: do not move them onto
|
|
215
|
+
concept rules to follow the general format-rule convention.
|
|
216
|
+
|
|
199
217
|
## Application-boundary coverage
|
|
200
218
|
|
|
201
219
|
Every slice should carry at least one specification whose action is what a real
|
|
@@ -223,6 +241,8 @@ For command specifications:
|
|
|
223
241
|
- [ ] Error cases test business rules; each concept rule has one rejection
|
|
224
242
|
specification through one command, not one per use.
|
|
225
243
|
- [ ] A localized rejection is pinned by its quoted `$strings` key.
|
|
244
|
+
- [ ] DateTime comparisons cover offset-less input rejection before rules, equal
|
|
245
|
+
instants across offsets and tick boundaries; `then` keeps ordinal payload values.
|
|
226
246
|
|
|
227
247
|
For view specifications:
|
|
228
248
|
|
package/package/corpus/skills/cratis-screenplay-specifications/references/outcome-comparison.md
CHANGED
|
@@ -20,6 +20,12 @@ This reference holds the comparison rules for events, read models, query rows an
|
|
|
20
20
|
and requires the rejection to carry the string-key marker; it never loads
|
|
21
21
|
translated text; resolving the key is the realization's job.
|
|
22
22
|
|
|
23
|
+
Date/DateTime `then` matching stays ordinal: different offsets naming one instant
|
|
24
|
+
do not match merely because a v26 command comparison considers them equal. Keep
|
|
25
|
+
the exact produced payload text in the expectation. Keys, constraints and freshness
|
|
26
|
+
also retain ordinal equality. For UTC-tick comparisons and pre-rule missing-offset
|
|
27
|
+
Validation rejections, read the [retention-window specifications](../../cratis-screenplay-command-surface/references/date-comparisons.md).
|
|
28
|
+
|
|
23
29
|
## Rejections and denials say different things
|
|
24
30
|
|
|
25
31
|
`then error "<message>"` says **rejected, for this reason** — pin it when the
|
|
@@ -114,7 +114,7 @@ Unattended work takes the conservative option and marks it `ASSUMED` in model
|
|
|
114
114
|
conflict. Legacy reads remain PLAY0271/PLAY0268; `concurrency` remains unbound and
|
|
115
115
|
combining it with protected reads is PLAY0783. Read
|
|
116
116
|
[protected reads](../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
117
|
-
for admission and
|
|
117
|
+
for admission and the Cratis C# renderer's STAGE-ESM-044 protected-read refusal (the v25 pair itself is admitted). `description` text never reaches rendered code: a rule that lives only in prose is
|
|
118
118
|
unenforced there.
|
|
119
119
|
- `pii` and `secret` bind as ESM v13;
|
|
120
120
|
enum/identity compliance and protected events with explicit subject marks still
|
|
@@ -58,7 +58,7 @@ observed legacy check from verified atomic protection.
|
|
|
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
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;
|
|
61
|
+
| a view (read model) | unguarded materialized reads are not protection | legacy command and trigger reads remain unprotected; the Cratis C# renderer refuses protected reads (STAGE-ESM-044); semantic Host/executor evidence is not generated-app protection |
|
|
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
|
|
@@ -69,7 +69,8 @@ the rule unenforced in rendered scope.
|
|
|
69
69
|
|
|
70
70
|
First inspect [protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md):
|
|
71
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).
|
|
72
|
+
target consistency separately. Stage admits v25 but the Cratis C# renderer refuses protected reads (STAGE-ESM-044).
|
|
73
|
+
Semantic Host/executor support has separate severity and outside-append limits. A payload-keyed
|
|
73
74
|
fan-in such as the course-capacity example remains refused; the preamble is not a
|
|
74
75
|
blanket admission of arbitrary projections.
|
|
75
76
|
|
|
@@ -4,7 +4,7 @@ Legacy control: no `command reads protected` preamble is declared. The course-ca
|
|
|
4
4
|
payload-key fan-in remains refused even with opt-in; eligible active-enrolment reads
|
|
5
5
|
can protect under v25, but reads plus concurrency cannot combine (PLAY0783). Read
|
|
6
6
|
[protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
7
|
-
for admission and
|
|
7
|
+
for admission and the Cratis C# renderer's protected-read refusal (STAGE-ESM-044). The legacy diagnostics below describe this
|
|
8
8
|
control, not a blanket refusal of command reads.
|
|
9
9
|
|
|
10
10
|
A complete design-mode model for course enrolment. It shows one business identity per stream,
|
|
@@ -135,8 +135,10 @@ changes with the root folder name.
|
|
|
135
135
|
`references/diagnostics.md` for proof/support failures. Binding is not rendering.
|
|
136
136
|
Tool/renderer authors: read [references/generation-checks.md](references/generation-checks.md)
|
|
137
137
|
when discovering strategy options, checking one concept or value, or consuming rule proofs.
|
|
138
|
-
- **v22–
|
|
139
|
-
batches, described handlers, text rules, protected reads
|
|
138
|
+
- **v22–v26:** read [language admission](references/language-admission.md) for atomic
|
|
139
|
+
batches, described handlers, text rules, protected reads, chronological command
|
|
140
|
+
Date/DateTime comparisons (Requires Screenplay 4.199.0; `screenplay --version`;
|
|
141
|
+
older binders refuse PLAY0268) and Stage refusals.
|
|
140
142
|
Read [diagnostic arguments](references/diagnostic-arguments.md) for MCP/JSON subjects:
|
|
141
143
|
code and typed arguments, never message parsing.
|
|
142
144
|
- **Caller/compliance metadata:** `$identity` aliases caller built-ins;
|
|
@@ -326,13 +326,16 @@ refusal reasons. Read [language admission](language-admission.md) before changin
|
|
|
326
326
|
| PLAY0786 (I) | Eligible legacy model; preview typed preamble repair, individually review absence/conflict semantics |
|
|
327
327
|
| PLAY0787 (W) | Exact deprecated Studio text-rule pattern; repair to literal rule or equality, preserving message/severity |
|
|
328
328
|
| STAGE-ESM-043 | Atomic mode not realized, even in admitted v23–v25; retain declaration and gap-fill |
|
|
329
|
-
| STAGE-ESM-044 |
|
|
329
|
+
| STAGE-ESM-044 | Cratis C# renderer refuses protected reads despite v25 admission; semantic Host/executor support is separate; keep protection and gap-fill generated-app scope |
|
|
330
|
+
| STAGE-ESM-045 | Non-Error protected requirement; semantic Host/executor refuse before execution, including reaction-invoked commands; keep severity and report Unsupported |
|
|
330
331
|
| STAGE-IMPL-002 | Described handler body not realized by Stage, even Stub mode; no stubs emitted |
|
|
331
332
|
|
|
332
333
|
Invalid match syntax remains PLAY0367. Property/concept text rules bind v24;
|
|
333
334
|
`contains`/`starts with` in conditions only still fail PLAY0268. Stage rejects
|
|
334
335
|
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
|
+
bodies, batches or rendered protected reads (STAGE-ESM-044). Requires Stage 4.129.0
|
|
337
|
+
for semantic Host/executor protected reads; older engines refuse -044. Read
|
|
338
|
+
[language admission](language-admission.md) for the stricter Host outside-append guard.
|
|
336
339
|
|
|
337
340
|
## Binding (V2 and V3) - see `executable-subset.md` for the full table
|
|
338
341
|
| Code | Meaning | Fix |
|
|
@@ -340,7 +343,7 @@ bodies, batches or protected reads (STAGE-ESM-044).
|
|
|
340
343
|
| 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 |
|
|
341
344
|
| PLAY0269 / 0270 | UI deferred / authoring metadata (I) | none |
|
|
342
345
|
| 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 |
|
|
343
|
-
| PLAY0273 | incoherent: ambiguous `for`, property not on event revision, operand type mismatch, derived `$eventContext` path | fix the reference |
|
|
346
|
+
| PLAY0273 | incoherent: ambiguous `for`, property not on event revision, operand type mismatch, derived `$eventContext` path, unparsable date literal or offset-less DateTime literal in an admitted v26 comparison | fix the reference or literal; DateTime needs offset/Z |
|
|
344
347
|
| 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 |
|
|
345
348
|
| PLAY0351 | given/then readmodel lacks the key property | add the keyed query's `by` property |
|
|
346
349
|
| PLAY0352 | when-less spec asserting an action outcome, except a sole query Validation error (v18) | add an action or assert readmodel/query |
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
- Time, reactions and captures (ESM v6)
|
|
11
11
|
- Generated values and responses (ESM v7)
|
|
12
12
|
- Released public boundaries and observer routes
|
|
13
|
+
- Chronological command date comparisons (ESM v26)
|
|
13
14
|
- Code attachments (what binds, what never does)
|
|
14
15
|
- Refused (code, reason): fix, or record as a mode gap
|
|
15
16
|
- Not refused, but do not rely on it
|
|
@@ -40,7 +41,8 @@ Complete examples that bind live in `executable-example.md`, `pdl-example.md` (p
|
|
|
40
41
|
`automation-translate-example.md` (ESM v6) and `generated-responses-example.md` (ESM v7).
|
|
41
42
|
|
|
42
43
|
For atomic batches (v22), described handlers (v23), ordinal text rules (v24) and
|
|
43
|
-
protected reads (v25)
|
|
44
|
+
protected reads (v25) and chronological command dates (v26), read
|
|
45
|
+
[language admission](language-admission.md). A later
|
|
44
46
|
version alone does not enable either application opt-in.
|
|
45
47
|
|
|
46
48
|
## Caller and compliance boundary
|
|
@@ -251,12 +253,26 @@ Stage renders v13 concept protection; protected identities/enums still refuse
|
|
|
251
253
|
|
|
252
254
|
Requires Screenplay 4.117.0 or later (`screenplay --version`) for ESM v9, 4.129.0 or later for production overrides and observer filters (v10), 4.135.0 or later for v11 and 4.139.0 or later for enum numbers (v12).
|
|
253
255
|
|
|
256
|
+
## Chronological command date comparisons (ESM v26)
|
|
257
|
+
|
|
258
|
+
Requires Screenplay 4.199.0 (ESM v26; `screenplay --version`); older binders refuse
|
|
259
|
+
with PLAY0268. `==`, `!=`, `>`, `>=`, `<`, `<=` bind for Date/Date or DateTime/DateTime.
|
|
260
|
+
`require`/`produces when` compare required scalar command properties to properties
|
|
261
|
+
or literals; command/property validation rules accept literal right operands only.
|
|
262
|
+
DateTime compares UTC instants at tick precision, not text. Every participating
|
|
263
|
+
DateTime input needs an offset or `Z`, else Validation rejects before rules, even
|
|
264
|
+
for skipped comparisons. `then` matching stays ordinal. Invalid date literals or
|
|
265
|
+
offset-less DateTime literals in admitted comparisons report PLAY0273. Read
|
|
266
|
+
[date comparisons](../../cratis-screenplay-command-surface/references/date-comparisons.md)
|
|
267
|
+
for the complete window model and retained PLAY0268 refusals. Stage refuses v26
|
|
268
|
+
with STAGE-ESM-016, independently of standalone binding/reference execution.
|
|
269
|
+
|
|
254
270
|
## Code attachments (what binds, what never does)
|
|
255
271
|
|
|
256
272
|
Pending `handler implementation` beside unconditional `produces` binds as a described
|
|
257
273
|
command (v23). Its payload-only body returns Unsupported ImplementationBody when reached;
|
|
258
274
|
denial/validation specs still run. Read [language admission](language-admission.md) for
|
|
259
|
-
v22–
|
|
275
|
+
v22–v26 and [described handlers](../../cratis-screenplay-command-surface/references/described-handlers.md)
|
|
260
276
|
for the result contract. Attached handlers remain unbound.
|
|
261
277
|
|
|
262
278
|
Inline fences (`csharp`, `typescript`, `react`, `html`, `sql`) and `file <path>` attach
|
|
@@ -302,8 +318,8 @@ bodies still leave their owner non-executable.
|
|
|
302
318
|
| `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 |
|
|
303
319
|
| `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 |
|
|
304
320
|
| 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 |
|
|
305
|
-
| `contains` or `starts with` in conditions only | PLAY0268 |
|
|
306
|
-
| Date
|
|
321
|
+
| `contains` or `starts with` in conditions only | PLAY0268 | conditions admit scalar equality and numeric ordering, plus same-primitive command date comparisons from v26; property/concept text rules bind as v24 |
|
|
322
|
+
| Date comparisons with mixed primitives, `$context` (including occurred), `today`, protected read paths, optional condition operands, concept rules or reaction `where` | PLAY0268 | v26 admits only command conditions and command/property literal validation rules |
|
|
307
323
|
| Rule on a nested path (`lines.qty all > 0`) | PLAY0268 | put the rule on the nested value's concept |
|
|
308
324
|
| Read paths without protected opt-in, or in `produces when` | PLAY0268 | v25 admits single-level paths only in `require` and produced-event mappings |
|
|
309
325
|
| Legacy `reads <View> ...` on a command | PLAY0271 (error) | `command reads protected` opts eligible views into v25; see command-surface protected reads |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- Copyright (c) Cratis. All rights reserved. -->
|
|
2
2
|
<!-- Licensed under the MIT license. See LICENSE file in the project root for full license information. -->
|
|
3
3
|
|
|
4
|
-
# Language admission: batches, described bodies, text and
|
|
4
|
+
# Language admission: batches, described bodies, text, reads and dates
|
|
5
5
|
|
|
6
6
|
Select the highest version required by constructs in the model. A newer version
|
|
7
7
|
alone never opts into either application mode. Consumers must explicitly admit
|
|
@@ -12,7 +12,8 @@ exact language/semantic pairs; binding, reference execution and rendering are se
|
|
|
12
12
|
| v22 | Application-root `reaction batches atomic` | Direct productions per trigger occurrence and each selected refusal branch are separate atomic batches; commands remain independent | v22 refused STAGE-ESM-016; mode in admitted v23–v25 refused STAGE-ESM-043 |
|
|
13
13
|
| v23 | Pending `handler implementation` beside unconditional `produces` | Payload-only body; PLAY0695 information; reaching body gives Unsupported ImplementationBody | v23 admitted, body refused STAGE-IMPL-002 in renderer/Host/executor, even Stub mode |
|
|
14
14
|
| v24 | `contains`, `not contains`, `starts with`, `ends with` property/concept rules | Ordinal UTF-16, absent optional passes; not text-condition operators | v24 admitted; semantic Host/executor and generated ordinal comparisons preserve rules |
|
|
15
|
-
| v25 | Application-root `command reads protected` | Admitted reads in requirements/mappings, absence Validation, matching decide/commit changes Conflict | v25 admitted;
|
|
15
|
+
| v25 | Application-root `command reads protected` | Admitted reads in requirements/mappings, absence Validation, matching decide/commit changes Conflict | v25 admitted; Cratis C# renderer refuses STAGE-ESM-044; semantic Host/executor execute reads, non-Error protected requirements refuse STAGE-ESM-045 |
|
|
16
|
+
| v26 | Chronological command Date/DateTime comparisons | Same-primitive `==`, `!=`, `>`, `>=`, `<`, `<=`; DateTime UTC ticks and pre-rule offset validation | v26 refused STAGE-ESM-016 |
|
|
16
17
|
|
|
17
18
|
Requires Screenplay 4.181.0 or later (`screenplay --version`) for atomic batches; older compilers cannot admit the preamble.
|
|
18
19
|
|
|
@@ -22,9 +23,13 @@ Requires Screenplay 4.184.0 or later (`screenplay --version`) for literal text r
|
|
|
22
23
|
|
|
23
24
|
Requires Screenplay 4.193.0 or later (`screenplay --version`) for protected reads; older binders retain PLAY0271/PLAY0268.
|
|
24
25
|
|
|
26
|
+
Requires Screenplay 4.199.0 (ESM v26; `screenplay --version`) for date comparisons; older binders report PLAY0268.
|
|
27
|
+
|
|
25
28
|
Requires Stage 4.124.0 for v24 text-rule admission (`cratis --version` identifies the CLI bundle); older renderers refuse v24 with STAGE-ESM-016. V23 admission alone does not implement described bodies.
|
|
26
29
|
|
|
27
|
-
Requires Stage 4.127.0 for v25 version admission; older renderers refuse v25 with STAGE-ESM-016.
|
|
30
|
+
Requires Stage 4.127.0 for v25 version admission; older renderers refuse v25 with STAGE-ESM-016. The Cratis C# renderer still refuses protected reads with STAGE-ESM-044; no artifacts are emitted.
|
|
31
|
+
|
|
32
|
+
Requires Stage 4.129.0 for semantic Host/executor protected reads; older engines refuse STAGE-ESM-044. Absence rejects before requirements/generation; read properties feed requirements and productions. Non-Error protected requirements refuse STAGE-ESM-045, including reaction invocations. Legacy Host/structural runner retain -044. The Host faults on any outside append, stricter than reference dependency-scoped conflicts; see [sandbox boundaries](../../cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md#protected-command-reads).
|
|
28
33
|
|
|
29
34
|
Read [atomic batches and event-source invocation mappings](../../cratis-screenplay-captures-and-reactions/references/atomic-batches-and-source-mappings.md)
|
|
30
35
|
for atomic boundaries and the source-identity mapping prerequisite. Start new models
|
|
@@ -39,8 +44,20 @@ Text comparisons and matching are in [text and match rules](../../cratis-screenp
|
|
|
39
44
|
PLAY0699 refuses nonportable constructs, PLAY0367 invalid syntax, PLAY0787 warns
|
|
40
45
|
on exact Studio text-rule patterns and offers a literal-rule repair.
|
|
41
46
|
|
|
47
|
+
For v26, `require`/`produces when` compare a required scalar command property to
|
|
48
|
+
a required same-primitive property or literal. Command/property validation rules
|
|
49
|
+
compare only to literals. Date is a calendar date; DateTime is a UTC instant at
|
|
50
|
+
seven-fractional-digit tick precision. Participating DateTime inputs without an
|
|
51
|
+
offset or `Z` reject with Validation before any rule, even if a comparison is skipped.
|
|
52
|
+
`then` matching, keys, constraints and freshness remain ordinal. PLAY0268 retains
|
|
53
|
+
mixed Date/DateTime, optional condition operands, `$context` (including occurred),
|
|
54
|
+
`today`, protected read paths, concept date rules and reaction `where`. In admitted
|
|
55
|
+
positions, invalid date literals or offset-less DateTime literals use PLAY0273.
|
|
56
|
+
Read [date comparisons](../../cratis-screenplay-command-surface/references/date-comparisons.md)
|
|
57
|
+
for the complete interval example and input/target boundaries.
|
|
58
|
+
|
|
42
59
|
Stage's semantic engines admit exact v1–v21 and v23–v25 pairs. V22/v26 and mixed
|
|
43
60
|
pairs refuse STAGE-ESM-016. Admission of v23–v25 is not admission of described bodies,
|
|
44
|
-
atomic mode or protected reads. A CLI may bundle an older compiler/Stage pair: run no-write render
|
|
61
|
+
atomic mode or rendered protected reads. A CLI may bundle an older compiler/Stage pair: run no-write render
|
|
45
62
|
admission rather than transferring a standalone verdict. Pattern diagnostics arise
|
|
46
63
|
in Screenplay before rendering; diagnostic arguments add no ESM version or new tool.
|
|
@@ -22,7 +22,9 @@ and concept compliance (v13) render.
|
|
|
22
22
|
## Current admission
|
|
23
23
|
|
|
24
24
|
Stage admits exact ESM v1–v21 and v23–v25 pairs; v22/v26 and mixed pairs
|
|
25
|
-
refuse STAGE-ESM-016.
|
|
25
|
+
refuse STAGE-ESM-016. Chronological command Date/DateTime comparisons select v26:
|
|
26
|
+
standalone binding/reference execution does not make them renderable. Keep the
|
|
27
|
+
rule and use authorized gap-fill. Version admission is separate from construct support.
|
|
26
28
|
Requires Stage 4.106.0 for v18 admission; older Stage refuses it with `STAGE-ESM-016`.
|
|
27
29
|
For generated-concept v20/v21 admission and construct prerequisites, read
|
|
28
30
|
[Stage admission](../../cratis-stage-rendering-and-sandbox/references/admission.md).
|
|
@@ -58,12 +60,14 @@ This table is a reading of the renderer's admission, not a render result: run th
|
|
|
58
60
|
| Evolved events | initial revisions only (migrations are not rendered) | `STAGE-ESM-026` |
|
|
59
61
|
| Descriptions, documentation | XML `<summary>`/`<remarks>` doc comments only | characters invalid in XML: `CLI-RENDER-005`; never behavior |
|
|
60
62
|
|
|
61
|
-
|
|
63
|
+
The Cratis C# renderer refuses protected command reads with STAGE-ESM-044, described handlers
|
|
62
64
|
with STAGE-IMPL-002 (even Stub mode), and atomic mode in admitted pairs with
|
|
63
65
|
STAGE-ESM-043. Literal
|
|
64
66
|
text rules execute/render ordinal UTF-16 comparisons. Read [language admission](language-admission.md).
|
|
65
67
|
A CLI's older bundled compiler may fail first: legacy reads/concurrency PLAY0271,
|
|
66
|
-
attached handlers PLAY0268. Protected reads bind
|
|
68
|
+
attached handlers PLAY0268. Protected reads bind v25, not a Stage render. Requires Stage 4.129.0 for semantic
|
|
69
|
+
Host/executor protected reads; older engines refuse -044. Non-Error protected requirements
|
|
70
|
+
refuse STAGE-ESM-045, including reaction invocations; this is not a rendering result.
|
|
67
71
|
Response-name authoring scopes are not rendered and Scene runtime does not supply them.
|
|
68
72
|
|
|
69
73
|
Compliance mapping in the generated C#: personal data to `[PII]`, operational secrets to
|