@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.
Files changed (46) hide show
  1. package/package/corpus/product-sync.json +4 -4
  2. package/package/corpus/skills/cratis-fundamentals-concept/references/shop-generation.md +16 -3
  3. package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +2 -1
  4. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +3 -1
  5. package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +13 -3
  6. package/package/corpus/skills/cratis-screenplay-command-surface/references/date-comparisons.md +100 -0
  7. package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +30 -0
  8. package/package/corpus/skills/cratis-screenplay-command-surface/references/protected-reads.md +15 -5
  9. package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +12 -2
  10. package/package/corpus/skills/cratis-screenplay-command-surface/verification.json +3 -0
  11. package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +2 -2
  12. package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +1 -1
  13. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generated-recovery.md +14 -2
  14. package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +3 -2
  15. package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +1 -1
  16. package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +1 -1
  17. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/principles.md +1 -1
  18. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +1 -1
  19. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +3 -2
  20. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +3 -1
  21. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +6 -1
  22. package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +12 -1
  23. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +5 -5
  24. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +1 -1
  25. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +3 -2
  26. package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +1 -1
  27. package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +1 -1
  28. package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +20 -0
  29. package/package/corpus/skills/cratis-screenplay-specifications/references/outcome-comparison.md +6 -0
  30. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +1 -1
  31. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +3 -2
  32. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +1 -1
  33. package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +4 -2
  34. package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +6 -3
  35. package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +20 -4
  36. package/package/corpus/skills/cratis-screenplay-toolchain/references/language-admission.md +21 -4
  37. package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +7 -3
  38. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +1429 -25
  39. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
  40. package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +1 -1
  41. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +12 -4
  42. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +8 -3
  43. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +41 -1
  44. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +32 -1
  45. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/scene-runtime.md +10 -0
  46. 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
@@ -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
- | Rules over dates or `today`, nested paths | spec them in design | rule does not bind: `recorded` | `recorded` |
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 | protected reads STAGE-ESM-044; v25 pair admitted |
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 Stage's protected-read refusal (STAGE-ESM-044); never remove protection to obtain rendering. Forbidden: caller-supplied copies of state in `require`, boolean attestation
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 Stage's separate refusal (STAGE-ESM-044; the v25 pair itself is admitted). Read
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
 
@@ -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 Stage'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
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; Stage refuses protected reads (STAGE-ESM-044), so reference protection is not target realization |
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). A payload-keyed
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 Stage's protected-read refusal (STAGE-ESM-044). The legacy diagnostics below describe this
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–v25:** read [language admission](references/language-admission.md) for atomic
139
- batches, described handlers, text rules, protected reads and Stage refusals.
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 | Protected reads not realized despite v25 version admission; keep protection and gap-fill |
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), read [language admission](language-admission.md). A later
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–v25 and [described handlers](../../cratis-screenplay-command-surface/references/described-handlers.md)
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 | `require`/`produces when` conditions admit equality and numeric ordering only; property/concept text rules bind as v24 |
306
- | Date or DateTime comparison, `today` | PLAY0268 | no runtime date value |
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 reads
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; protected reads refused STAGE-ESM-044 in renderer/Host/executor |
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. Protected reads still refuse STAGE-ESM-044, including on legacy paths; no artifacts are emitted.
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. Version admission is separate from construct support.
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
- Stage refuses protected command reads with STAGE-ESM-044, described handlers
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 standalone v25, not a Stage render.
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