@cratis/pi 7.116.1 → 7.118.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 (36) hide show
  1. package/package/corpus/harnesses/copilot/instructions/profiles.instructions.md +3 -0
  2. package/package/corpus/product-sync.json +12 -12
  3. package/package/corpus/rules/profiles.md +3 -0
  4. package/package/corpus/skills/cratis-orchestration-lanes/LICENSE +2 -0
  5. package/package/corpus/skills/cratis-orchestration-lanes/SKILL.md +130 -0
  6. package/package/corpus/skills/cratis-orchestration-lanes/references/context-handoff.md +85 -0
  7. package/package/corpus/skills/cratis-orchestration-lanes/references/inbox-and-handover.md +78 -0
  8. package/package/corpus/skills/cratis-orchestration-lanes/references/lane-brief.md +83 -0
  9. package/package/corpus/skills/cratis-orchestration-lanes/references/placeholders.md +34 -0
  10. package/package/corpus/skills/cratis-orchestration-lanes/verification.json +15 -0
  11. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +1 -1
  12. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +1 -1
  13. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/phases.md +1 -1
  14. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +2 -1
  15. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +10 -5
  16. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +10 -5
  17. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +5 -2
  18. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +7 -4
  19. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/multi-service-models.md +8 -6
  20. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/read-model-keys.md +5 -2
  21. package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +1 -1
  22. package/package/corpus/skills/cratis-screenplay-toolchain/references/language-admission.md +35 -10
  23. package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +23 -14
  24. package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +1 -1
  25. package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +4 -2
  26. package/package/corpus/skills/cratis-screenplay-ui-composition/references/scene-runtime-boundaries.md +92 -0
  27. package/package/corpus/skills/cratis-screenplay-ui-composition/verification.json +4 -0
  28. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +25 -16
  29. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +40 -27
  30. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/current-boundaries.md +119 -0
  31. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +9 -1
  32. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +19 -12
  33. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/scene-runtime.md +4 -0
  34. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +9 -1
  35. package/package/profile-catalog.json +12 -0
  36. package/package.json +1 -1
@@ -148,8 +148,11 @@ Requires Chronicle 19.59.6 or later (19.59.3 for the InMemory provider) for the
148
148
  is not one transaction. Declared semantics are not a passed concurrency test.
149
149
  - New models declare `reaction batches atomic`: direct productions per trigger
150
150
  occurrence and each selected refusal branch are separate batches; invoked commands
151
- stay independent. Legacy absence retains per-fact appends. Stage refuses v22
152
- with STAGE-ESM-016 and atomic mode in admitted v23–v27 with STAGE-ESM-043. Read
151
+ stay independent. Legacy absence retains per-fact appends. The reviewed Stage
152
+ executes semantic atomic batches and renders bounded event-only batches;
153
+ multiple same-event production triggers and routed productions still refuse
154
+ STAGE-ESM-043. The live Host rolls back the whole initiating command on failure,
155
+ while the specification executor retains earlier successful units. Read
153
156
  [atomic boundaries](../cratis-screenplay-captures-and-reactions/references/atomic-batches-and-source-mappings.md)
154
157
  when defining failure rollback; batching is not redelivery deduplication.
155
158
  - Match duplicate protection to scope. A property constraint lets a source re-claim its own
@@ -165,7 +165,8 @@ integration support.
165
165
  slice with an explicit direction (`cratis-screenplay-automations-and-translations`
166
166
  `references/public-events-and-direction.md`). Nothing checks that the foreign shape matches the
167
167
  other store, so also name the consumers in the event's `documentation` and keep the list in
168
- `STATE.md`. Stage 4.73.1 refuses public events (`STAGE-ESM-032`).
168
+ `STATE.md`. Check [Stage target boundaries](../../cratis-stage-rendering-and-sandbox/references/current-boundaries.md)
169
+ for bounded publication support; public-event use is not universally renderable.
169
170
 
170
171
  ## Crossing a boundary in Screenplay
171
172
  | Situation | Construct |
@@ -178,9 +179,11 @@ integration support.
178
179
 
179
180
  Never let an external system's ids, codes or shapes become our domain vocabulary: translate at
180
181
  the edge, keep the external reference as a property when it is needed for correlation or dedup.
181
- Stage 4.89.1 renders supported internal event-triggered Automation, but Translate,
182
- captures and foreign/public event boundaries remain refused. The translation is gap-fill
183
- with the model as its contract (`cratis-screenplay-render-and-gap-fill`).
182
+ Stage renders supported internal event-triggered Automation and bounded
183
+ source-event capture/outbound Translate paths. Unsupported translation shapes
184
+ remain gap-fill with the model as contract; check
185
+ [Stage target boundaries](../../cratis-stage-rendering-and-sandbox/references/current-boundaries.md)
186
+ rather than assuming that any foreign/public boundary renders.
184
187
 
185
188
  ## Change data capture is not a domain event
186
189
  A row change captured from a database (CDC) says which columns changed, not why. Treat it as an
@@ -168,12 +168,14 @@ Requires Screenplay 4.155.0 or later for `PLAY0687`; older compilers accept a mi
168
168
  then the same for `Billing`. `--name` is the application identity and becomes the
169
169
  Chronicle event-store name and the MongoDB database name, so it must equal every
170
170
  consumer's `from "…"` origin.
171
- - Stage refuses public events and event-target builders (`STAGE-ESM-032`), foreign
172
- events and events-source captures (`STAGE-ESM-033`) and directed Translate slices
173
- (`STAGE-ESM-024`). Render the admitted modules with `--scope` and gap-fill the
174
- publication and the consumer translation by hand against the model, using
175
- `cratis-multi-service-architecture` for the runtime shape
176
- (`cratis-screenplay-render-and-gap-fill` owns the workflow).
171
+ - Stage now renders bounded inbound source-event captures and outbound
172
+ public-event projections; unsupported foreign/public/Translate uses retain
173
+ STAGE-ESM-032/033/024. Check [Stage target boundaries](../../cratis-stage-rendering-and-sandbox/references/current-boundaries.md).
174
+ Render admitted modules with `--scope`; gap-fill refused integration scope by
175
+ hand against the model, using `cratis-multi-service-architecture` for the
176
+ runtime shape (`cratis-screenplay-render-and-gap-fill` owns the workflow).
177
+ A semantic Host's seeded foreign facts/local public appends are not proof of
178
+ real cross-service delivery.
177
179
  - Each rendered scaffold carries its own single-kernel compose file with fixed host
178
180
  ports. Run one kernel for all services instead
179
181
  (`cratis-multi-service-local-orchestration`).
@@ -39,8 +39,11 @@ composite type only to carry flat parts: both hide the identity the model should
39
39
  (PLAY0271, PLAY0781 reason `by-parts`, or PLAY0268 for a producing reaction), so decide on a stream
40
40
  the command owns instead, or restructure the read. Do not drop the read to bind.
41
41
  - **Limits.** Joins, `children`, `nested`, `every`, `all`, `variant` and reducers on the
42
- composite-keyed view are PLAY0268. Stage 4.137.0 admits v27 but the renderer refuses it (STAGE-ESM-048 for several key parts or a projection keyed by parts,
43
- STAGE-ESM-047 for a single-instance query by parts), so deliver it through gap-fill with the model as the contract.
42
+ composite-keyed view are PLAY0268. Stage v4.197.0 renders bounded scoped
43
+ composite-key projections and equality-filtered lists; unsupported shapes retain
44
+ STAGE-ESM-048 and single-instance lookup by parts retains STAGE-ESM-047.
45
+ Semantic Host support does not imply specification-executor support for
46
+ multi-part keys. See [Stage key boundaries](../../cratis-stage-rendering-and-sandbox/references/current-boundaries.md#renderer-support-is-bounded).
44
47
 
45
48
  Read read-surface `references/named-keys.md` for one complete executable example and the
46
49
  projections skill `references/pdl-grammar.md` for the key block syntax.
@@ -75,7 +75,7 @@ superseded statement needs context; exceptions do not change the contract.
75
75
 
76
76
  Read `references/verdicts.md` for exact commands, exit codes, the MCP roots caveat and the model notes gate.
77
77
 
78
- Requires Cratis CLI 3.57.0 or later (`cratis --version`) to render models that use equality filters or concept generation strategies (ESM v14 and v15); an older CLI answers `CLI-RENDER-004`. Requires Cratis CLI 3.74.0 for ESM v21–v26 and 3.75.0 for v27 (v28 and later: `CLI-RENDER-004`); above the CLI's ceiling, a bundled compiler that binds the construct answers `CLI-RENDER-004`, and one that predates it reports the binder's PLAY0268 (Uuid equality before Screenplay 4.205.0). Either way keep the rule and gap-fill.
78
+ Requires Cratis CLI 3.57.0 or later (`cratis --version`) to render models that use equality filters or concept generation strategies (ESM v14 and v15); an older CLI answers `CLI-RENDER-004`. Requires Cratis CLI 3.74.0 for ESM v21–v26 and 3.75.0 for v27; see [language admission](references/language-admission.md#compiler-and-target-minimums) for the v28–v30 CLI minimums. Above the CLI's ceiling, a bundled compiler that binds the construct answers `CLI-RENDER-004`, and one that predates it reports the binder's PLAY0268 (Uuid equality before Screenplay 4.205.0). Either way keep the rule and gap-fill.
79
79
 
80
80
  MCP calls below use the `screenplay` server declared in `.cratis/ai/mcp-servers.json`, for example `screenplay` → `read-workspace`.
81
81
 
@@ -3,26 +3,37 @@
3
3
 
4
4
  # Language admission: batches, described bodies, text, reads, dates and composite keys
5
5
 
6
+ ## Contents
7
+
8
+ - Version selection
9
+ - Compiler and target minimums
10
+ - Construct guidance
11
+ - Stage admission and execution
12
+
13
+ ## Version selection
14
+
6
15
  Select the highest version required by constructs in the model. A newer version
7
16
  alone never opts into either application mode. Consumers must explicitly admit
8
17
  exact language/semantic pairs; binding, reference execution and rendering are separate.
9
18
 
10
19
  | ESM | Selecting construct | Binding/reference behavior | Stage boundary |
11
20
  | --- | --- | --- | --- |
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 admitted with a supporting bundle; atomic mode refused STAGE-ESM-043 |
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 |
21
+ | v22 | Application-root `reaction batches atomic` | Direct productions per trigger occurrence and each selected refusal branch are separate atomic batches; commands remain independent | Semantic execution supports atomic batches; bounded event-only rendering also works. Multiple same-event production triggers/routed productions retain STAGE-ESM-043 |
22
+ | v23 | Pending `handler implementation` beside unconditional `produces` | Payload-only body; PLAY0695 information; reaching body gives Unsupported ImplementationBody | Renderer still refuses described handlers with STAGE-IMPL-002 even in Stub mode; semantic execution reports ImplementationBody only when reached after gates |
14
23
  | 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
24
  | v25 | Application-root `command reads protected` | Admitted reads in requirements/mappings, absence Validation, matching decide/commit changes Conflict | v25 admitted; Cratis renderer renders protected reads in a new enough bundle (STAGE-ESM-044 before it, and for shapes it cannot preserve); semantic Host/executor execute reads, non-Error protected requirements refuse STAGE-ESM-045 |
16
25
  | v26 | Chronological command Date/DateTime comparisons | Same-primitive `==`, `!=`, `>`, `>=`, `<`, `<=`; DateTime UTC ticks and pre-rule offset validation | v26 admitted; Host/executor run it; renderer supports admitted shapes with remaining STAGE-ESM-046 refusals; legacy engines refuse -046 |
17
- | v27 | A read model with two or more `key` marks | Untyped projection `key` blocks, equality-filter lists, single-instance `by` blocks, per-part fixtures | v27 admitted; Host runs it, renderer refuses STAGE-ESM-048/-047, executor refuses specs over it |
18
- | v28 | `==`/`!=` between Uuid values in command `require` and `produces when` | Uuid properties, Uuid concepts and identities, canonical literals; protected read paths in `require` only | v28 refused STAGE-ESM-016 |
19
- | v29 | `decimals <= N`; `add`/`subtract` by `a * b`; a concept mapped to another concept over the same primitive (decision 0098) | Decimal-places rule on a Decimal concept or property; the exact decimal product; the conversion is admitted only when the target declares no rule or compliance the source does not, never for enums, composites or optional into required | v29 refused until Stage admits it |
20
- | v30 | A command `produces ... for <required scalar property>` (several event sources); a specification `given generated <Command>.<property> = <value>` (decision 0098) | Several sources in one accepted command; pinned generated values for reaction-invoked commands, taken in authored order | v30 refused until Stage admits it |
26
+ | v27 | A read model with two or more `key` marks | Untyped projection `key` blocks, equality-filter lists, single-instance `by` blocks, per-part fixtures | Host supports composite keys and key-part lookups; specification execution still refuses multi-part keys; renderer admits bounded scoped parts-key projections, with STAGE-ESM-048 for unsupported shapes and -047 for single-instance lookup |
27
+ | v28 | `==`/`!=` between Uuid values in command `require` and `produces when` | Uuid properties, Uuid concepts and identities, canonical literals; protected read paths in `require` only | Stage admits v28; an admitting CLI passes it to Stage's matched-pair and construct gates |
28
+ | v29 | `decimals <= N`; `add`/`subtract` by `a * b`; a concept mapped to another concept over the same primitive (decision 0098) | Decimal-places rule on a Decimal concept or property; the exact decimal product; the conversion is admitted only when the target declares no rule or compliance the source does not, never for enums, composites or optional into required | Stage admits v29; numeric projection arithmetic and admitted decimal/concept validation have target-specific paths |
29
+ | v30 | A command `produces ... for <required scalar property>` (several event sources); a specification `given generated <Command>.<property> = <value>` (decision 0098) | Several sources in one accepted command; pinned generated values for reaction-invoked commands, taken in authored order | Stage admits v30; generated backends preserve per-production destinations. CLI render admits v30 with an admitting bundle |
21
30
  | v31 | A policy `require anonymous` for a public command or query | A deliberately public surface; the policy is the whole effective authorization | v31 refused until Stage admits it |
22
31
  | v33 | `key <property> is event source` on a single-property `source events` capture (Screenplay 4.242.0; PLAY0809) | Serializes `keyIsEventSource` beside `sourceEvents`. Promises every incoming event is sourced by that key; explicit fixture `for` must equal it, while omission takes the key before projections/reactions. Checks also run on givens without an action. Unmarked captures keep earlier behavior/version/bytes | An admitting renderer may narrow history reads by event source id; binding alone does not prove target realization |
23
32
 
24
33
  Constructs of decision 0098 with no executable-model content need no version: application-level toolbar buttons in the layout's `navigation topbar` region (`button <id> title "..." slice <Slice>` with an optional indented `authorize <Policy>`), a command specification that states the public event its outbound Translate slice publishes (no more false `PLAY0285`), and a capture over events that copies a list (`lines = $.lines`) or fans out with `children lines identified by sku`. Check `screenplay --version` against the release that admitted v29 and v30 before relying on them.
25
34
 
35
+ ## Compiler and target minimums
36
+
26
37
  Requires Screenplay 4.181.0 or later (`screenplay --version`) for atomic batches; older compilers cannot admit the preamble.
27
38
 
28
39
  Requires Screenplay 4.182.0 or later (`screenplay --version`) for described handlers; older binders report PLAY0268.
@@ -37,12 +48,21 @@ Requires Screenplay 4.204.0 (ESM v27; `screenplay --version`) for composite read
37
48
 
38
49
  Requires Screenplay 4.205.0 (ESM v28; `screenplay --version`) for Uuid equality in command conditions; older binders report PLAY0268.
39
50
 
51
+ Current renderer versus semantic-execution support is owned by
52
+ [Stage target boundaries](../../cratis-stage-rendering-and-sandbox/references/current-boundaries.md),
53
+ at the product inventory's reviewed baseline; the CLI still applies its independent version gate.
54
+
55
+ Requires Cratis CLI 3.81.0 for v28 and 3.86.0 for v29–v30; older bundles refuse
56
+ newer semantic versions with `CLI-RENDER-004` (or PLAY0268 if binding fails first).
57
+
40
58
  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.
41
59
 
42
60
  Requires Stage 4.127.0 for v25 version admission; older renderers refuse v25 with STAGE-ESM-016. Requires Stage 4.138.0 for the Cratis renderer to render protected reads as Arc read protection; earlier renderers, and reads it cannot preserve, refuse STAGE-ESM-044 and emit no artifacts. `cratis render` gets this from the first CLI that bundles Stage 4.138.0; CLI 3.75.0 bundles Stage 4.137.0.
43
61
 
44
62
  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. Requires Stage 4.142.0 for outside facts to participate in decide/commit, with unrelated appends absorbed; older Hosts fault on any outside append; see [sandbox boundaries](../../cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md#protected-command-reads).
45
63
 
64
+ ## Construct guidance
65
+
46
66
  Read [atomic batches and event-source invocation mappings](../../cratis-screenplay-captures-and-reactions/references/atomic-batches-and-source-mappings.md)
47
67
  for atomic boundaries and the source-identity mapping prerequisite. Start new models
48
68
  with atomic mode; explicitly review opt-in for legacy models. Keep protection when
@@ -80,11 +100,16 @@ the same condition without Uuid operands keeps its earlier version. To see the s
80
100
  the model with the `screenplay` MCP server and call `read-workspace` with `view` `executable-model`:
81
101
  `languageVersion` reads `28.0`.
82
102
 
83
- Stage's semantic engines admit exact v1–v27 pairs. V28 and mixed
84
- pairs refuse STAGE-ESM-016.
103
+ ## Stage admission and execution
104
+
105
+ Stage's reviewed semantic engines admit matched 1.0–30.0 and 32.0 pairs, not
106
+ 31.0, mixed or unknown pairs (STAGE-ESM-016). CLI v3.100.0 render checks only the
107
+ semantic version and admits through v30; bundled Stage 4.196.0 then applies
108
+ matched-pair and construct gates. V32 needs a direct caller of the reviewed Stage
109
+ baseline in [current target boundaries](../../cratis-stage-rendering-and-sandbox/references/current-boundaries.md#version-admission).
85
110
  Requires Stage 4.139.0 for v22; older Stage refuses -016.
86
- Admission is not admission of described bodies,
87
- atomic mode or composite-key rendering, and protected reads render only in a bundle that supports them. A CLI may bundle an older compiler/Stage pair: run no-write render
111
+ Version admission is not body implementation or proof that a particular atomic
112
+ or composite-key shape renders; protected reads need a bundle that supports them. A CLI may bundle an older compiler/Stage pair: run no-write render
88
113
  admission rather than transferring a standalone verdict. Pattern diagnostics arise
89
114
  in Screenplay before rendering; diagnostic arguments add no ESM version or new tool.
90
115
 
@@ -11,8 +11,9 @@ Renderable is a strict subset of executable (`executable-subset.md`). Order of e
11
11
  `cratis render`: the CLI binds the **whole** model with its **bundled Screenplay** (so PLAY0268
12
12
  and friends appear first, even with `--scope`), then Stage admits or rejects members of the
13
13
  selected scope. Admission is by construct, not blanket: a model above the newest version the
14
- CLI renders receives CLI-RENDER-004 (direct Stage: STAGE-ESM-016). Public/foreign facts and
15
- production overrides retain 032/033/036. Reaction identity renders role/authenticated gates,
14
+ CLI renders receives CLI-RENDER-004 (direct Stage: STAGE-ESM-016). Unsupported
15
+ public/foreign-event uses and production overrides retain 032/033/036; supported
16
+ Translate capture/outbound rendering is target-specific. Reaction identity renders role/authenticated gates,
16
17
  not claim-reading/opaque gates (034). Reaction and reducer filters render on the semantic path;
17
18
  legacy paths retain 034/035. v8 routed read-model/query companion replay renders; reserved
18
19
  names and unformattable fixtures remain STAGE-ESM-030. Case tables and v8+ `long` whole numbers
@@ -23,9 +24,14 @@ and concept compliance (v13) render.
23
24
 
24
25
  The language is frozen at ESM v1–v28 ([the freeze decision](https://github.com/Cratis/Screenplay/blob/main/decisions/0092-the-language-is-frozen-at-esm-v28.md)): no new versions, constructs, keywords or grammar, except a construct for a real model that is blocked with no model-side alternative, accepted in its own record. Model with what v1–v28 offers; when Stage, `cratis render` or Studio does not support a construct yet, treat the typed refusal as a platform gap to report, since consumers are catching up to v28, not a reason to wait for new language.
25
26
 
26
- Stage admits exact ESM v1–v27 pairs; v28 and mixed pairs refuse STAGE-ESM-016.
27
- Requires Stage 4.139.0 for v22 admission; older Stage refuses v22 with -016,
28
- while atomic mode remains -043. Chronological command dates select v26.
27
+ Stage v4.197.0 admits matched language/ESM **1.0–30.0 and 32.0**, not 31.0,
28
+ mixed or unknown pairs (`STAGE-ESM-016`). CLI v3.100.0 render checks only the
29
+ semantic version and admits through **v30**; its bundled Stage then applies
30
+ matched-pair and construct gates. V32 needs a direct caller of the reviewed Stage
31
+ baseline; see [CLI bundle details](language-admission.md#stage-admission-and-execution). Read
32
+ [current Stage target boundaries](../../cratis-stage-rendering-and-sandbox/references/current-boundaries.md)
33
+ for Translate, atomic batches, composites, typed gaps and semantic execution.
34
+ Chronological command dates select v26.
29
35
  Requires Stage 4.141.0 to render Date/DateTime comparisons; older renderers refuse -046.
30
36
  Read [rendered dates](../../cratis-stage-rendering-and-sandbox/references/date-comparisons.md)
31
37
  when checking remaining -046 shapes and input-binding differences. Version admission
@@ -38,7 +44,7 @@ The CLI's bundled Stage can be older: read installed versions and the pins in
38
44
  does not render refuses with its own code before any artifact is planned.
39
45
 
40
46
  Requires Stage 4.96.0 for stored event names (v16), 4.101.0 for no-event assertions (v17), 4.102.0 for refusal branches (v19), and 4.103.0 for rendered redelivery; older renderers refuse the respective shapes.
41
- Requires Cratis CLI 3.60.0 (`cratis --version`) for v16 rendering, 3.74.0 for v21–v26 and 3.75.0 for v27 admission (v28 and later: CLI-RENDER-004); a bundle below the model's version refuses it with CLI-RENDER-004, or with PLAY0268 when its bundled compiler predates the construct.
47
+ Requires Cratis CLI 3.60.0 (`cratis --version`) for v16 rendering, 3.74.0 for v21–v26 and 3.75.0 for v27 admission; the v28–v30 CLI minimums are in [language admission](language-admission.md#compiler-and-target-minimums). A bundle below the model's version refuses it with CLI-RENDER-004, or with PLAY0268 when its bundled compiler predates the construct.
42
48
 
43
49
  With an admitting renderer, all-Proven generated-concept rules allow unpinned
44
50
  rendered specs; warning/info rules and semantic checksum validation are enforced,
@@ -52,24 +58,26 @@ This table is a reading of the renderer's admission, not a render result: run th
52
58
 
53
59
  | Area | Renders | Refused (code) |
54
60
  | --- | --- | --- |
55
- | Slice kinds | `StateChange`, `StateView`, supported event-triggered `Automation` with Chronicle reactors | Translate, captures, non-event triggers, opaque bodies, clock/trigger/capture specs (`-024`); claim-reading/opaque `runs as` gates (`-034`), mixed effects from one handler (`-037`, redelivery can duplicate events), unsupported conditions/destinations/mappings (`-039`). Keep refused reactions whole |
56
- | Queries | optional keyed snapshot lookups; snapshot or observable collections, keyed or unkeyed, with v14 equality filters | context/single-result filters, opaque `scoped to` and a list-query `by` block: PLAY0268; a `performer` query is an opaque read (PLAY0270) left out of the model ([version gate](executable-subset.md#code-attachments-what-binds-what-never-does)); v27 composite-key lookups by parts: STAGE-ESM-047, read models and projections keyed by parts: STAGE-ESM-048. DateTime filters and required parameters after optional filters refuse `-010`; filter-name collisions refuse `-012`; concept arguments retain Arc validation, including nested members/elements; nullable keys or optional concept filters with `not empty` refuse `-010` rather than changing null behavior |
61
+ | Slice kinds | `StateChange`, `StateView`, supported event-triggered `Automation`, bounded inbound source-event capture and outbound Translate paths | Unsupported Translate/reactive shapes, non-event reaction triggers, opaque bodies and unsupported occurrence specs (`-024`); claim-reading/opaque `runs as` gates (`-034`), mixed effects from one handler (`-037`, redelivery can duplicate events), unsupported conditions/destinations/mappings (`-039`). Keep refused reactions whole |
62
+ | Queries | optional keyed snapshot lookups; snapshot or observable collections, keyed or unkeyed, with v14 equality filters | context/single-result filters, opaque `scoped to` and a list-query `by` block: PLAY0268; a `performer` query is an opaque read (PLAY0270) left out of the model ([version gate](executable-subset.md#code-attachments-what-binds-what-never-does)); v27 composite-key lookups by parts: STAGE-ESM-047, unsupported composite-key projection shapes: STAGE-ESM-048 (bounded scoped parts keys now render). DateTime filters and required parameters after optional filters refuse `-010`; filter-name collisions refuse `-012`; concept arguments retain Arc validation, including nested members/elements; nullable keys or optional concept filters with `not empty` refuse `-010` rather than changing null behavior |
57
63
  | Authorization | role-only, authenticated, opaque pure policies, claim conditions with Uuid, Date, DateTime or text targets (numeric and Boolean claim matches render as always false), `not`/and/or; roles read through the identity's `RoleClaimType` | role-claim URIs, nested opaque policies, unresolved or non-portable policies, no single identifier, opaque-policy subjects that are not text, Uuid, Date or DateTime (`STAGE-ESM-015`, a restriction separate from declarative claim targets) |
58
64
  | Event sources, streams, routes (ESM v8) | rendered, including routed read-model/query companion replay | reserved stored names, unformattable routed fixtures (`STAGE-ESM-030`) |
59
65
  | Numbers, case tables | whole numbers as `long` from ESM v8; case tables | out-of-`int` literals below v8 (`STAGE-ESM-031`) |
60
66
  | Generated values and responses (v7/v15/v20/v21) | required scalar UUID/String strategies and Int random, pattern/checksum, concept validators at all severities, all-Proven unpinned relational specs, Guarded v15 freshness, scalar/named responses and fixtures | unknown strategies and unsupported generated types (`-028`); `generate rule` bodies that do not compile (`-019`), shadow a type (`-022`) or lack an attachment (`-020`); unsupported response combinations, generated-property validation, name collisions, unpinned Unproven/Refuted rules or unordered/projected/collision-sensitive expectations (`-038`); invalid pins (`-011`); opaque concept rules (`-005`); unknown rule kinds and legacy checksum (`-042`) |
61
67
  | Enum numbers / compliance | explicit enum numbers (v12); concept `[PII]` or scoped `[Encrypted]` + `[NotAudited]` (v13), property-level `[NotAudited]` for protected command inputs | protected identities/enums (`-040`); explicit subject lineage remains unadmitted |
62
68
  | Specifications | command scenarios and supported single-hop reaction appends; Stage's `admission.md` | appends outside the single-hop subset and commands cascading into reactions (`-011`); `then no readmodel` (`-027`); an unauthenticated caller carrying roles or claims (`-011`); command `given clock` renders only whole milliseconds at or after 1970 |
63
- | v9 and v10 | reaction/reducer `from` filters; role/authenticated `runs as` | public events and event-target projections (`-032`); foreign origins and event-source captures (`-033`); directed Translate (`-024`); claim-reading/opaque `runs as` gates (`-034`); legacy `from` (`-035`); per-production route overrides (`-036`) |
69
+ | v9 and v10 | reaction/reducer `from` filters; role/authenticated `runs as`; bounded source-event captures and outbound public projection | unsupported public-event production (`-032`), foreign-event uses (`-033`) and Translate shapes (`-024`); claim-reading/opaque `runs as` gates (`-034`); legacy `from` (`-035`); per-production route overrides (`-036`) |
64
70
  | Stored event names (v16) | `[EventType("storedName")]` retains stored identity while the class follows the model name | changed/unreadable destination event ids: `STAGE-EVENT-002`, CLI `CLI-RENDER-016` |
65
71
  | No events / redelivery (v17) | otherwise admitted command no-event specs; one production-only reaction no-effect spec; located redelivery to one trigger with productions or one supported invocation | fan-out, deeper cascades, constraints, read/query expectations, redelivery with refusal branches, appends with no observer: `-011` |
66
72
  | Refusal branches (v19) | ordered Arc `OnRefused`/`Acknowledge`, refusal values and supported single-hop append specs | same-event multi-trigger refusal groups, localized `$refusal.message`, ambiguous multiple-constraint `$refusal.constraint`: `-039`; specification limits: `-011` |
67
73
  | Evolved events | initial revisions only (migrations are not rendered) | `STAGE-ESM-026` |
68
74
  | Descriptions, documentation | XML `<summary>`/`<remarks>` doc comments only | characters invalid in XML: `CLI-RENDER-005`; never behavior |
69
75
 
70
- The Cratis renderer renders protected command reads in a bundle that supports them (STAGE-ESM-044 for shapes it cannot preserve and in every earlier bundle), refuses described handlers
71
- with STAGE-IMPL-002 (even Stub mode), and atomic mode in admitted pairs with
72
- STAGE-ESM-043. Literal
76
+ The Cratis renderer renders protected command reads in a bundle that supports them
77
+ (STAGE-ESM-044 for shapes it cannot preserve and in every earlier bundle).
78
+ Described handlers still refuse STAGE-IMPL-002 even in Stub mode. Unsupported
79
+ query performers have a separate explicit gap contract, not completed behavior. Bounded atomic event production
80
+ renders; multiple same-event triggers and routed productions retain STAGE-ESM-043. Literal
73
81
  text rules execute/render ordinal UTF-16 comparisons. Read [language admission](language-admission.md).
74
82
  A CLI's older bundled compiler may fail first: legacy reads/concurrency PLAY0271,
75
83
  attached handlers PLAY0800 (PLAY0268 before Screenplay 4.210.0). Protected reads bind v25. Non-Error protected requirements
@@ -105,8 +113,9 @@ ids into routing to fit a renderer (PLAY0515).
105
113
  attachments: gap-fill in code, not by waiting for ESM admission.
106
114
  Requires Screenplay 4.210.0 (`screenplay --version`); older binders use PLAY0268.
107
115
  Pending handlers beside unconditional
108
- productions bind v23 but Stage refuses their bodies (STAGE-IMPL-002), even Stub mode;
109
- deliver as authorized gap-fill, never as implemented generated stubs.
116
+ productions bind v23 but Stage still refuses rendering STAGE-IMPL-002 even in
117
+ Stub mode. Semantic execution reports ImplementationBody only when reached
118
+ after gates; deliver unresolved bodies as authorized gap-fill.
110
119
  - Descriptions and documentation render only as XML doc comments, never as
111
120
  behavior: a rule that exists only in prose is unenforced in rendered code.
112
121
 
@@ -62,7 +62,7 @@ Identity and compliance traps (`identity.md`, `concepts.md`, `events.md`, `purpo
62
62
  unknown, not safe. Arc needs `[ExecuteCommandsAsSystem]` to supply a principal.
63
63
 
64
64
  Traps 39 to 44 are tool traps.
65
- 39. Attached file/inline command handlers refuse PLAY0800 (`CommandHandlerRequiresAttachment`): permanent constrained-attachment requirement, so gap-fill in code rather than wait for ESM admission. Read required typed `arguments.subject`, not the message; older binders use PLAY0268 (version gate: [diagnostic arguments](diagnostic-arguments.md)). Pending `handler implementation` beside unconditional productions binds as a described v23 command (PLAY0695). Body-reaching specs are Unsupported ImplementationBody; Stage refuses STAGE-IMPL-002, including Stub mode. `implementation` and `hint` are accepted on a command handler, an operation execute/compensate phase and a command property named rule, and are rejected on concept rules, built-in property rules and whole-command `require`/`validate` bodies; hints do not execute, lock or confirm a body. A handler slice is gap-fill, not a customization of a rendered slice.
65
+ 39. Attached file/inline command handlers refuse PLAY0800 (`CommandHandlerRequiresAttachment`): permanent constrained-attachment requirement, so gap-fill in code rather than wait for ESM admission. Read required typed `arguments.subject`, not the message; older binders use PLAY0268 (version gate: [diagnostic arguments](diagnostic-arguments.md)). Pending `handler implementation` beside unconditional productions binds as a described v23 command (PLAY0695). Body-reaching specs are Unsupported ImplementationBody; Stage still refuses rendering STAGE-IMPL-002 even in Stub mode; semantic execution reports ImplementationBody only when reached after gates. `implementation` and `hint` are accepted on a command handler, an operation execute/compensate phase and a command property named rule, and are rejected on concept rules, built-in property rules and whole-command `require`/`validate` bodies; hints do not execute, lock or confirm a body. A handler slice is gap-fill, not a customization of a rendered slice.
66
66
  40. `numbers exact` (the source mode) parses but never binds (PLAY0268; "not admitted by any supported executable model (ESM) version yet") and is PLAY0001 on older compilers; it is absent from `grammar.md`. Exact lowering of qualifying Double-mode literals is separate (v11). Never use it in a model or example meant to execute.
67
67
  41. MCP roots bug: a dynamic-root server on an old tool answers the roots request with an `id: null` error right after `notifications/initialized`; hosts treat it as fatal, and `open-workspace.path` does not help. Start with a fixed root (`screenplay mcp <folder>`, `cratis screenplay mcp` in a project with `.cratis/ai.json`).
68
68
  Requires Screenplay 4.63.2 or later (`screenplay --version`) for a dynamic-root server; the compiler bundled in older cratis releases lacks it.
@@ -31,8 +31,10 @@ Tool versions: toolchain `SKILL.md`. UI statements come from Screenplay
31
31
  `screens.md`, `contributions.md`, `navigation.md`, `sample-data.md`, `forms.md`, `templates.md`, `ui-profile.md`,
32
32
  `fixtures/screen-release-ui.play`, `layout-arrangement.md`, `interactions.md`, `theme.md`,
33
33
  `internationalization.md` and `file-references.md` under `Documentation/screenplay/`. Scene
34
- runtime sources: scaffold Scene tag, `Source/JavaScript/**`. This guidance does not verify
35
- UI rendering.
34
+ runtime sources: scaffold Scene tag, `Source/JavaScript/**`. See
35
+ [Scene v4.82.0 runtime boundaries](references/scene-runtime-boundaries.md) for
36
+ exact query registration/submission, root-profile serialization and interaction
37
+ limits. These host APIs are not new `.play` syntax and do not verify UI rendering.
36
38
 
37
39
  Every construct on this page is deferred from the executable model with
38
40
  information `PLAY0269`: it never blocks binding, and it is not evidence that a
@@ -0,0 +1,92 @@
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
+ # Scene runtime and composition boundaries
5
+
6
+ Reviewed against Scene v4.82.0; the product inventory owns the review baseline.
7
+ These are Scene package/host contracts, **not new Screenplay syntax**. Check Stage's
8
+ emission support and pinned Scene version separately; a newer Scene release does
9
+ not upgrade a generated application.
10
+
11
+ ## Query input is opt-in, exact and submit-driven
12
+
13
+ `Cratis.Components:queryInputForm` owns local string drafts and commits arguments
14
+ only on submit. Editing does not execute or import the query runtime; it hides a
15
+ settled result and cancels pending work. Editing back does not revive an old
16
+ result. Explicit resubmission can retry identical values. Disabling, losing a
17
+ binding or unmounting discards the session and cancels work; stale responses must
18
+ not replace newer state.
19
+
20
+ The host supplies a registered zero-argument native optional-single Arc proxy,
21
+ its Arc context, explicit input declarations and a scalar own result-field name.
22
+ This is not a general collection form, platform-neutral Form schema or guessed
23
+ route. Query and parameter names are case-sensitive. Inputs are strings, with
24
+ explicit required/pattern rules: do not trim, coerce, manufacture identifiers or
25
+ infer a GUID/business format. Optional empty strings remain present. Descriptor
26
+ compatibility is bounded to scalar `String`/`Guid`; unsupported, missing,
27
+ duplicate or enumerable descriptors refuse visibly before execution. A nonempty
28
+ malformed GUID needs an authored pattern or backend validation; Scene does not
29
+ invent that validation.
30
+
31
+ Stage hosts should register each source using `registerQueryIdentity`, not first
32
+ collapse same-named sources into a name-keyed object. `resolveExactQuery` treats
33
+ zero candidates as missing and multiple candidates as ambiguous, including a
34
+ legacy plus identity registration. `registerQuery`/`registerQueries` still replace
35
+ by name for legacy hot reload: that is **not** collision detection. A live exact
36
+ binding collision cancels the form rather than selecting a candidate. Clear both
37
+ registries when switching applications.
38
+
39
+ See the [query input form contract](https://github.com/Cratis/Scene/blob/main/Documentation/components-package/query-input-form.md).
40
+ These are host API names, not `.play` declarations.
41
+
42
+ ## Root templates and canonical profiles
43
+
44
+ The root template is the application chrome, not another screen layout. Its
45
+ `primaryOutlet` names the screen content slot (`content` by default). An
46
+ application-owned root's authored slot content wins over default host chrome;
47
+ blueprint placeholder content can be replaced by host chrome. A root-role screen
48
+ template is application-scope only and cannot fit a slot; a dialog template cannot
49
+ be a root. Root option names belong to the chosen shell, not universal CSS.
50
+
51
+ Preserve the profile's root reference/options, appearance, identity, sample-data
52
+ selection and default screen-template choice when editing it. Legacy `layout`
53
+ remains readable; when both exist, `root` wins. New writers should use `root`.
54
+
55
+ `UiProfileJson` and `parseUiProfile`/`serializeUiProfile` have a shared canonical
56
+ JSON contract: camelCase names, declared enum names, omitted absent members, no
57
+ whitespace, declaration ordering for known model members, ordinal ordering for
58
+ other object keys, and preserved array order. Readers match names/enums
59
+ case-insensitively and ignore unknown members. Do not confuse this lenient reader
60
+ with permission to invent accepted profile properties or discard authored known
61
+ members. C# and TypeScript parity is checked against the same fixtures.
62
+
63
+ See the [root-template and serialization contract](https://github.com/Cratis/Scene/blob/main/Documentation/blueprints/root-template.md)
64
+ and [profile designer contract](https://github.com/Cratis/Scene/blob/main/Documentation/blueprints/ui-profile-designer-contract.md).
65
+
66
+ ## Interaction support remains host-specific
67
+
68
+ Navigation/dialog execution needs the host's dispatcher/history wiring and the
69
+ same application/binding providers as the screen. Serializing an action is not
70
+ proof it runs. The generic `runActions` runner stops on a declined confirmation,
71
+ reports unsupported actions, and ends the old screen's action sequence after
72
+ navigation. Its command completion branch still does not install an action-local
73
+ `response` scope. Keep authored response continuations, but report missing host
74
+ binding support instead of rewriting them to unrelated state; see
75
+ [response continuation admission](response-continuations.md).
76
+
77
+ See the [action runner](https://github.com/Cratis/Scene/blob/main/Source/JavaScript/engine/runActions.ts).
78
+
79
+ ## Component text and runtime packaging
80
+
81
+ Scene's component cross-cutting rules use a strings table merged with the
82
+ element's `strings`, and `Intl` formatting for the element's `locale`. These are
83
+ component contracts, not new `.play` properties or an application-wide locale
84
+ service. Preserve logical-direction styling, density and permission behavior
85
+ when supplying localized component text.
86
+
87
+ `@cratis/scene.components/runtime` remains the runtime-only entry; design-time
88
+ editors are not required to execute a screen. Do not add design-time dependencies
89
+ to work around a missing runtime registration.
90
+
91
+ See the Scene component package documentation for the registered component's
92
+ strings/locale support and the runtime entry's supported registrations.
@@ -3,6 +3,10 @@
3
3
  "input": "Declare the application shell, a screen template and a command form.",
4
4
  "fixtures": [],
5
5
  "assertions": [
6
+ { "kind": "skill-contains", "value": "registerQueryIdentity", "file": "references/scene-runtime-boundaries.md" },
7
+ { "kind": "skill-contains", "value": "legacy plus identity registration", "file": "references/scene-runtime-boundaries.md" },
8
+ { "kind": "skill-contains", "value": "Optional empty strings remain present", "file": "references/scene-runtime-boundaries.md" },
9
+ { "kind": "skill-contains", "value": "not new Screenplay syntax", "file": "references/scene-runtime-boundaries.md" },
6
10
  { "kind": "skill-contains", "value": "Requires Screenplay 4.227.0", "file": "references/ui-profile-and-theme.md" },
7
11
  { "kind": "skill-contains", "value": "theme \"Scene Default Light\"", "file": "references/ui-profile-and-theme.md" },
8
12
  { "kind": "skill-contains", "value": "Empty, blank or unterminated quoted names are `PLAY0229`", "file": "references/ui-profile-and-theme.md" },
@@ -16,14 +16,20 @@ Probe the model; admission rules are not a render result.
16
16
 
17
17
  Requires cratis CLI ≥ 3.57 (`cratis --version`) to render ESM v14 and v15 models; an older CLI refuses newer ESM versions with `CLI-RENDER-004` (or `STAGE-ESM-016` from Stage directly).
18
18
 
19
- Requires Cratis CLI 3.74.0 to render ESM v21–v26 models and 3.75.0 for v27; CLI 3.66.0–3.73.0 refuse v21 and later with `CLI-RENDER-004`, and every CLI refuses v28 and later with it. Above the ceiling, a construct the bundled compiler cannot bind reports PLAY0268 before `CLI-RENDER-004` is reached.
19
+ Requires Cratis CLI 3.74.0 to render ESM v21–v26 models, 3.75.0 for v27, 3.81.0 for v28 and 3.86.0 for v29–v30. CLI 3.66.0–3.73.0 refuse v21 and later with `CLI-RENDER-004`. Above a CLI's ceiling, a construct its bundled compiler cannot bind reports PLAY0268 before `CLI-RENDER-004` is reached.
20
20
 
21
21
  ## Batches, described handlers, text rules and protected reads
22
22
 
23
- Read [language admission](../cratis-screenplay-toolchain/references/language-admission.md)
24
- for v22–v25: text rules and admitted protected reads render; atomic batches and
25
- described bodies do not. Semantic execution is separate from rendering. Stub mode
26
- emits no described-body stubs. Keep protection and report refusal.
23
+ Start with [current target boundaries](references/current-boundaries.md), reviewed
24
+ against Stage v4.197.0: matched language/ESM 1.0–30.0 and 32.0 are admitted, not
25
+ 31.0. The reviewed CLI's `cratis render` admits ESM through v30; its bundled
26
+ Stage then applies matched-pair and construct gates. V32 needs a direct caller of
27
+ the reviewed Stage baseline. See [CLI bundle details](../cratis-screenplay-toolchain/references/language-admission.md#stage-admission-and-execution).
28
+ Renderer, semantic Host/specification execution and legacy syntax admission are
29
+ separate gates.
30
+ Bounded atomic batches render; unverifiable query performers can produce explicit
31
+ gaps, not completed behavior. Described handlers still refuse even in Stub mode.
32
+ Keep protection and report remaining refusals.
27
33
 
28
34
  ## When to use
29
35
 
@@ -75,9 +81,11 @@ printed), `1` is a missing input. Add `-o json` for the counts and the publicati
75
81
  Key facts:
76
82
 
77
83
  - **Binding uses the CLI's bundled compiler**, not the standalone one. Version admission
78
- does not imply construct support: exact ESM v1–v27 pairs are admitted;
79
- v28 and mixed pairs refuse `STAGE-ESM-016`. Requires Stage 4.139.0 for v22 admission;
80
- older Stage refuses v22 with `-016`, while atomic mode still refuses `-043`.
84
+ does not imply construct support: the reviewed CLI render checks only the
85
+ semantic version, admitting through v30 (`CLI-RENDER-004` above it); its bundled
86
+ Stage then checks matched pairs and constructs. Direct Stage admits matched
87
+ pairs 1.0–30.0 and 32.0. Mixed/unknown Stage pairs refuse `STAGE-ESM-016`.
88
+ Atomic shapes the renderer cannot preserve still refuse `-043`.
81
89
  Requires Stage 4.141.0 to render v26 Date/DateTime command comparisons; older
82
90
  renderers refuse `-046`. Read [references/date-comparisons.md](references/date-comparisons.md)
83
91
  when rendering dates for the remaining refusals and input-binding differences. Pattern/random generation and checksum validation
@@ -130,23 +138,24 @@ and unaudited-version refusals still stop first. Codes, limits and fixes:
130
138
  scalar UUID/String generation strategies and v15 freshness, responses and fixtures; concept
131
139
  compliance; supported event-triggered Automation with `runs as`/`from` as `[OnceOnly]` reactors;
132
140
  single-hop reaction append specifications, Debug specifications and authored UI through Scene.
133
- - **Refused:** Translate/captures, non-event triggers, opaque bodies and clock specs (`STAGE-ESM-024`);
141
+ Bounded source-event Translate capture/outbound publication, composite projections
142
+ and further semantic projection/query shapes are covered in [current boundaries](references/current-boundaries.md).
143
+ - **Refused:** unsupported Translate shapes, non-event reaction triggers, opaque bodies and clock specs (`STAGE-ESM-024`);
134
144
  mixed effects (`STAGE-ESM-037`, redelivery duplicates events); unsupported reaction mappings (`-039`),
135
145
  protected identities/enums (`-040`); unsupported generated types/results (`-028`/`-038`);
136
- appends beyond single-hop/cascade specs (`-011`), absence (`-027`), evolution (`STAGE-ESM-026`), public/foreign events
146
+ appends/absence beyond admitted specification shapes (`-011`/`-027`), evolution (`STAGE-ESM-026`), unsupported public/foreign-event uses
137
147
  (`-032`/`-033`), claim-reading/opaque `runs as` gates (`-034`), legacy filters (`-035`), production
138
- overrides (`-036`), code validation (`-005`), DateTime filters (`-010`),
139
- unsupported conditional productions, composite read-model keys (`STAGE-ESM-048`, and `-047` for a single-instance query by parts) and unsupported `all` shapes.
140
- Protected reads render as Arc read protection in a new enough bundle; shapes it cannot preserve, and every protected read in an older bundle, refuse `STAGE-ESM-044` (see admission.md). The renderer refuses described handlers `STAGE-IMPL-002`
141
- (even Stub mode), and atomic mode in admitted pairs `STAGE-ESM-043`.
148
+ overrides (`-036`), unsupported code validation (`-005`), DateTime filters (`-010`),
149
+ unsupported conditional productions, unsupported composite-key projection shapes (`STAGE-ESM-048`, and `-047` for a single-instance query by parts) and unsupported `all` shapes.
150
+ Protected reads render as Arc read protection in a new enough bundle; shapes it cannot preserve, and every protected read in an older bundle, refuse `STAGE-ESM-044` (see admission.md). Described handlers still refuse `STAGE-IMPL-002` even in Stub mode. Query-performer gaps are a separate contract, not a completed implementation.
142
151
  - **Attached command handlers (`PLAY0800`):** file/inline handlers permanently require
143
152
  constrained implementation attachments: gap-fill the slice in code, not by waiting
144
153
  for ESM admission. Read the required typed `arguments.subject` for the command,
145
154
  never match message text. Requires Screenplay 4.210.0 (`screenplay --version`);
146
155
  older bundled binders use PLAY0268 for these handlers.
147
156
  - **Binding refusals:** read toolchain `references/executable-subset.md` for
148
- `PLAY0268`/`PLAY0271` families; binding is not rendering. V27 keys are admitted
149
- but refuse rendering (`STAGE-ESM-048`). Never drop protection.
157
+ `PLAY0268`/`PLAY0271` families; binding is not rendering. Composite keys have
158
+ target-specific support, not blanket refusal. Never drop protection.
150
159
 
151
160
  A refusal is not a licence to weaken the model: drop no specification, event generation or
152
161
  protection to get a render; keep the model, record the capability gap and gap-fill.