@cratis/pi 7.116.0 → 7.117.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 +12 -12
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/phases.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +2 -1
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +10 -5
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +10 -5
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +5 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +7 -4
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/multi-service-models.md +8 -6
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/read-model-keys.md +5 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/language-admission.md +35 -10
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +23 -14
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +1 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +4 -2
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/scene-runtime-boundaries.md +92 -0
- package/package/corpus/skills/cratis-screenplay-ui-composition/verification.json +4 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +25 -16
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +40 -27
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/current-boundaries.md +119 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +9 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +19 -12
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/scene-runtime.md +4 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +9 -1
- package/package.json +1 -1
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
"visibility": "private",
|
|
9
9
|
"packages": [],
|
|
10
10
|
"synced": {
|
|
11
|
-
"version": "0.
|
|
12
|
-
"date": "2026-10-
|
|
13
|
-
"by": "Cratis/AI#
|
|
11
|
+
"version": "0.304.0",
|
|
12
|
+
"date": "2026-10-25",
|
|
13
|
+
"by": "Cratis/AI#820"
|
|
14
14
|
},
|
|
15
15
|
"covers": {
|
|
16
16
|
"skills": [
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
],
|
|
20
20
|
"rules": []
|
|
21
21
|
},
|
|
22
|
-
"notes": "Only the Stage skill states a release baseline. No Studio MCP implementation or production UI execution evidence is admitted. Initial historical floor recorded on 2026-10-12 by Cratis/AI#619; date records this inventory, not a new product verification."
|
|
22
|
+
"notes": "Cratis/AI#820: reviewed 334 stable release announcements after v0.157.5 through v0.304.0 for the two covered skills. Public corpus remains classification-only for Studio MCP: no tool names, private source/implementation detail or production UI execution evidence added. Product model/generation/preview features do not grant MCP effects or widen this boundary. Prior: Only the Stage skill states a release baseline. No Studio MCP implementation or production UI execution evidence is admitted. Initial historical floor recorded on 2026-10-12 by Cratis/AI#619; date records this inventory, not a new product verification."
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
"id": "stage",
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
"repository": "Cratis/Stage",
|
|
28
28
|
"packages": [],
|
|
29
29
|
"synced": {
|
|
30
|
-
"version": "4.
|
|
31
|
-
"date": "2026-10-
|
|
32
|
-
"by": "Cratis/AI#
|
|
30
|
+
"version": "4.197.0",
|
|
31
|
+
"date": "2026-10-25",
|
|
32
|
+
"by": "Cratis/AI#820"
|
|
33
33
|
},
|
|
34
34
|
"covers": {
|
|
35
35
|
"skills": [
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
],
|
|
47
47
|
"rules": []
|
|
48
48
|
},
|
|
49
|
-
"notes": "Cratis/AI#773: release/tag delta v4.139.0-v4.146.0 (including v4.141.1). Exact ESM v1-v27 pairs admitted; v22 from 4.139.0, atomic mode still -043. Date comparisons render from 4.141.0 with remaining -046 shapes and named-policy binding differences. 4.141.1 supplies authored occurrence in independent event-reaction specs, not clock triggers or generated append/redelivery clock fixtures. 4.142.0 Host decide/commit absorbs unrelated outside facts, with dependency conflicts, guarded batch retries only without invocations and fail-closed unknown writes. 4.143.0 shared STAGE-PROFILE-001 through -006 findings; 4.144.0 scaffold pins follow Stage package inputs. 4.145.0 reached reducer/validation bodies use STAGE-IMPL-003 without refusing unrelated behavior; described handlers retain -002. 4.146.0 collects independent render refusals, preserving profile/version early exits. Scene template verification changes classified as internal; no new render/browser/Docker probe. Prior focused checks remain; v4.104-v4.108 were not otherwise fully reviewed."
|
|
49
|
+
"notes": "Cratis/AI#820: reviewed 92 stable releases after v4.146.0 through v4.197.0; corrected target-specific version admission, atomic execution/rendering, source-event Translate and public projection support, bounded composite-key rendering, C# validation bodies, query-performer gaps, runtime-package and reducer migration contracts. CLI v3.100.0 render admits semantic versions through v30; bundled Stage 4.196.0 then applies matched-pair and construct gates, while v32 needs a direct Stage 4.197.0 caller; no new product/browser execution claimed. Prior: Cratis/AI#773: release/tag delta v4.139.0-v4.146.0 (including v4.141.1). Exact ESM v1-v27 pairs admitted; v22 from 4.139.0, atomic mode still -043. Date comparisons render from 4.141.0 with remaining -046 shapes and named-policy binding differences. 4.141.1 supplies authored occurrence in independent event-reaction specs, not clock triggers or generated append/redelivery clock fixtures. 4.142.0 Host decide/commit absorbs unrelated outside facts, with dependency conflicts, guarded batch retries only without invocations and fail-closed unknown writes. 4.143.0 shared STAGE-PROFILE-001 through -006 findings; 4.144.0 scaffold pins follow Stage package inputs. 4.145.0 reached reducer/validation bodies use STAGE-IMPL-003 without refusing unrelated behavior; described handlers retain -002. 4.146.0 collects independent render refusals, preserving profile/version early exits. Scene template verification changes classified as internal; no new render/browser/Docker probe. Prior focused checks remain; v4.104-v4.108 were not otherwise fully reviewed."
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
52
|
"id": "arc",
|
|
@@ -209,9 +209,9 @@
|
|
|
209
209
|
"repository": "Cratis/Scene",
|
|
210
210
|
"packages": [],
|
|
211
211
|
"synced": {
|
|
212
|
-
"version": "4.
|
|
213
|
-
"date": "2026-10-
|
|
214
|
-
"by": "Cratis/AI#
|
|
212
|
+
"version": "4.82.0",
|
|
213
|
+
"date": "2026-10-25",
|
|
214
|
+
"by": "Cratis/AI#820"
|
|
215
215
|
},
|
|
216
216
|
"covers": {
|
|
217
217
|
"skills": [
|
|
@@ -221,7 +221,7 @@
|
|
|
221
221
|
"rules": []
|
|
222
222
|
},
|
|
223
223
|
"coverage": "tracked",
|
|
224
|
-
"notes": "First synced in Cratis/AI#620 from the Components family read of the Scene packages; the Stage scaffold pins them."
|
|
224
|
+
"notes": "Cratis/AI#820: reviewed 88 stable releases after v4.21.0 through v4.82.0 and tagged Scene contracts. Added query-input exact binding/submission/cancellation, canonical root-profile contracts and component strings/locale boundaries; preserved generic response-continuation limitations and runtime-only packaging. Stage emission/pins remain separate; no browser execution claimed. Prior: First synced in Cratis/AI#620 from the Components family read of the Scene packages; the Stage scaffold pins them."
|
|
225
225
|
},
|
|
226
226
|
{
|
|
227
227
|
"id": "orleans",
|
|
@@ -12,7 +12,7 @@ technique: partial work stays visible and nothing is skipped because it looked r
|
|
|
12
12
|
Result is `complete` only when every column is filled or says why it does not apply (for example
|
|
13
13
|
"direct effect: immediate, internal, cannot fail"). `open` names the unresolved decision and who
|
|
14
14
|
answers. `blocked` names the actual capability gap with intended behavior. For example,
|
|
15
|
-
the
|
|
15
|
+
CLI render admits semantic versions through v30 at the reviewed baseline, then bundled Stage applies matched-pair and construct checks (toolchain `references/renderable-subset.md`); role/authenticated reaction identity
|
|
16
16
|
renders, while claim-reading/opaque system gates still refuse STAGE-ESM-034. Previous CLI 3.46.1 refused v10 at the version gate
|
|
17
17
|
with CLI-RENDER-004; do not report that historical refusal as the current gap.
|
|
18
18
|
|
|
@@ -47,7 +47,7 @@ an unproven pass.
|
|
|
47
47
|
| An accepted model covers the scope | **Model** | Change the `.play`, verify V1-V3, review, then render or gap-fill |
|
|
48
48
|
| Opted in, but this scope has no model yet | **Model** | New behavior starts in discovery, then slice design |
|
|
49
49
|
| A computed rule inside a modeled slice | **Model + code attachment** | `csharp`/`file` block; it binds only as the construct allows (`cratis-screenplay-model-authoring`) |
|
|
50
|
-
| Scope Stage cannot render yet (Stage renders supported event-triggered Automation
|
|
50
|
+
| Scope Stage cannot render yet (Stage renders supported event-triggered Automation and bounded source-event capture/outbound Translate paths; refused shapes remain gap-fill. Mixed effects stay one reaction, `STAGE-ESM-037`; a hand-written realization must prove retry safety) | **Gap-fill code** | Hand-written; the `.play` slice and specs are the contract. `cratis-screenplay-render-and-gap-fill` separates an authorized existing generated base from fully hand-written delivery |
|
|
51
51
|
| Outside call, transport or credentials | **Adapter code** | `Customizations/` or the host, applying `cratis-engineering-effect-boundaries` |
|
|
52
52
|
| Infrastructure, clients, framework-profile repositories, brownfield not opted in | **Code** | Arc, Chronicle, spec and React skills; trivial changes keep the proportional-delegation policy |
|
|
53
53
|
|
|
@@ -130,7 +130,7 @@ phase, a decision important enough that a later reader could misread the model (
|
|
|
130
130
|
- **Input**: the accepted identity.
|
|
131
131
|
- **Carry-forward**: the admission result; render output and named gaps in `Customizations/`;
|
|
132
132
|
non-renderable scope handed to a code agent with the model as contract, plus a fallback record
|
|
133
|
-
naming the blocking codes. Stage 4.89.1 renders supported event-triggered Automation; Translate/
|
|
133
|
+
naming the blocking codes. Stage 4.89.1 renders supported event-triggered Automation; newer Stage also renders bounded source-event capture/outbound Translate paths (see its `references/current-boundaries.md`); refused shapes remain gap-fill (mixed effects keep one modeled reaction; `STAGE-ESM-037` is a redelivery-safety refusal, not a reason to split it). Three cases stay distinct: admission failure (nothing rendered); an
|
|
134
134
|
existing generated base plus separately authorized gap-fill; fully hand-written delivery.
|
|
135
135
|
- **Gate**: V5 sub-results, or a fallback entry per non-renderable scope. A customization never
|
|
136
136
|
makes a rejected model renderable; no whole-application V5 from a subset.
|
package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md
CHANGED
|
@@ -43,7 +43,8 @@ Screenplay meaning, and when you meet the older usage, translate it and say so.
|
|
|
43
43
|
`invokes` a command or `produces` events).
|
|
44
44
|
- Chronicle **reactor**: C# observer, usually for side effects; it does not by itself define
|
|
45
45
|
business decisions. Stage renders supported event-triggered Automation as Chronicle reactors.
|
|
46
|
-
|
|
46
|
+
Bounded source-event captures and outbound Translate also render; refused shapes
|
|
47
|
+
remain gap-fill (see Stage's `references/current-boundaries.md`). Mixed events and commands
|
|
47
48
|
in one handler remain `STAGE-ESM-037`: Arc supports the return shape, but redelivery
|
|
48
49
|
after a failed command duplicates events. Keep the reaction whole and prove retry safety.
|
|
49
50
|
Source boundary: Stage skill `references/admission.md`.
|
|
@@ -35,8 +35,10 @@ Tool versions are covered in `cratis-screenplay-toolchain` `SKILL.md`; read it b
|
|
|
35
35
|
## Language modes that block target delivery
|
|
36
36
|
|
|
37
37
|
Read [language admission](../cratis-screenplay-toolchain/references/language-admission.md)
|
|
38
|
-
for
|
|
39
|
-
|
|
38
|
+
for version selection, and [current Stage boundaries](../cratis-stage-rendering-and-sandbox/references/current-boundaries.md)
|
|
39
|
+
for realization. Bounded atomic batches, source-event Translate captures/publication and resolved
|
|
40
|
+
C# validation bodies now render. Described handlers still refuse even in Stub
|
|
41
|
+
mode; query-performer gaps are a separate contract, not completed behavior. Protected reads still need an admitted shape. Semantic Host/executor
|
|
40
42
|
support is not generated-app protection.
|
|
41
43
|
Preserve contracts; reference success is not target realization.
|
|
42
44
|
|
|
@@ -68,15 +70,18 @@ Supported UUID/String generation, v15 freshness, responses, fixtures and
|
|
|
68
70
|
types (`STAGE-ESM-028`) and result combinations (`-038`) still require case A or C:
|
|
69
71
|
preserve the model and its specifications. See Stage's `references/admission.md`.
|
|
70
72
|
Supported event-triggered Automation slices also render as managed Chronicle reactors;
|
|
71
|
-
|
|
73
|
+
bounded source-event captures and outbound Translate also render; refused reaction/Translate shapes remain gap-fill. A `given clock` fixture
|
|
72
74
|
in the semantic executor is not support for rendering clock triggers.
|
|
73
75
|
Requires Stage 4.141.0 to render v26 Date/DateTime command comparisons; older renderers
|
|
74
76
|
refuse `STAGE-ESM-046`. Read [rendered date comparisons](../cratis-stage-rendering-and-sandbox/references/date-comparisons.md)
|
|
75
77
|
when delivering dates for remaining refusals and input-binding differences.
|
|
76
78
|
|
|
77
79
|
Source/stream routes bind and reference-execute as v8; target admission is separate.
|
|
78
|
-
Requires Cratis CLI 3.75.0 for v27 admission; older bundles stop earlier
|
|
79
|
-
|
|
80
|
+
Requires Cratis CLI 3.75.0 for v27 admission; older bundles stop earlier.
|
|
81
|
+
The reviewed CLI admits semantic versions through v30; its bundled Stage then
|
|
82
|
+
applies matched-pair and construct gates. V32 needs a direct caller of the reviewed
|
|
83
|
+
Stage baseline; see [CLI bundle details](../cratis-screenplay-toolchain/references/language-admission.md#stage-admission-and-execution).
|
|
84
|
+
Read toolchain `references/renderable-subset.md` and
|
|
80
85
|
`references/sources-and-streams.md` when delivering routes, actor gates or filters.
|
|
81
86
|
Preserve refused public/foreign events, production overrides and opaque gates as A/C.
|
|
82
87
|
|
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md
CHANGED
|
@@ -76,8 +76,9 @@ a caller-supplied status is not enforcement.
|
|
|
76
76
|
|
|
77
77
|
## Automation and Translate scope
|
|
78
78
|
Stage renders supported event-triggered Automation as Chronicle reactors.
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
Bounded source-event capture and outbound Translate paths also render. Refused shapes remain
|
|
80
|
+
gap-fill against the slice and its specifications; see
|
|
81
|
+
[Stage target boundaries](../../cratis-stage-rendering-and-sandbox/references/current-boundaries.md). The realization follows the actual construct and
|
|
81
82
|
trigger, not the slice label: a capture is an ingestion adapter, an event reaction (including a
|
|
82
83
|
translator reaction) is a reactor, a clock or application trigger is a scheduler or host signal. Where they are
|
|
83
84
|
registered depends on the case. Case B (a generated base exists, and the user authorized the
|
|
@@ -107,11 +108,15 @@ reaction or drop an effect to dodge rendering.
|
|
|
107
108
|
|
|
108
109
|
Preserve declared `reaction batches atomic` boundaries: each trigger occurrence's
|
|
109
110
|
direct productions and each selected refusal branch are separate batches, with
|
|
110
|
-
invoked commands independent.
|
|
111
|
-
|
|
111
|
+
invoked commands independent. Stage v4.197.0 semantic execution supports atomic
|
|
112
|
+
batches; bounded event-only production renders, while multiple same-event
|
|
113
|
+
production triggers and routed productions retain STAGE-ESM-043.
|
|
112
114
|
The declaration is not external-effect deduplication.
|
|
113
115
|
For described handlers, hand off only payload computation under the v23 result
|
|
114
|
-
contract;
|
|
116
|
+
contract; rendering still refuses STAGE-IMPL-002 even in Stub mode.
|
|
117
|
+
Unsupported query performers can instead emit explicit gaps and a not-fully-runnable
|
|
118
|
+
marker. Preserve each requirement identity, typed context, query shape and reason;
|
|
119
|
+
a generated throwing method or gap is not completed behavior. Protected v25 reads
|
|
115
120
|
render from Stage 4.138.0 (STAGE-ESM-044 from older bundles, or for shapes it cannot
|
|
116
121
|
preserve) and need generated-app admission/enrollment tests wherever you hand-write them;
|
|
117
122
|
ordinary injection never supplies protection.
|
|
@@ -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.
|
|
152
|
-
|
|
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
|
package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md
CHANGED
|
@@ -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
|
|
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
|
|
182
|
-
|
|
183
|
-
with the model as
|
|
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
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
`cratis-multi-service-architecture` for the
|
|
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
|
|
43
|
-
|
|
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
|
|
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 |
|
|
13
|
-
| v23 | Pending `handler implementation` beside unconditional `produces` | Payload-only body; PLAY0695 information; reaching body gives Unsupported ImplementationBody |
|
|
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 |
|
|
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
|
|
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
|
|
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
|
|
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
|
|
84
|
-
|
|
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
|
-
|
|
87
|
-
|
|
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).
|
|
15
|
-
production overrides retain 032/033/036
|
|
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
|
|
27
|
-
|
|
28
|
-
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
71
|
-
|
|
72
|
-
STAGE-
|
|
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
|
|
109
|
-
|
|
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
|
|
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/**`.
|
|
35
|
-
|
|
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
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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:
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
-
|
|
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
|
|
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
|
|
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).
|
|
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.
|
|
149
|
-
|
|
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.
|
|
@@ -12,13 +12,15 @@
|
|
|
12
12
|
- Specification rules (`STAGE-ESM-011`)
|
|
13
13
|
- Refusals seen while drafting a model
|
|
14
14
|
|
|
15
|
-
Stage admits
|
|
16
|
-
constructs.
|
|
17
|
-
ESM
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
reports PLAY0268
|
|
15
|
+
Stage v4.197.0 admits matched language/ESM pairs **1.0–30.0 and 32.0**, then
|
|
16
|
+
checks constructs per target. V31 anonymous conditions, mixed and unknown pairs
|
|
17
|
+
report `STAGE-ESM-016`. CLI v3.100.0 `cratis render` independently admits semantic
|
|
18
|
+
versions through v30 (`CLI-RENDER-004` above it); its bundled Stage then
|
|
19
|
+
checks matched pairs and constructs. V32 needs a direct caller of the reviewed
|
|
20
|
+
Stage baseline. See [CLI bundle details](../../cratis-screenplay-toolchain/references/language-admission.md#stage-admission-and-execution).
|
|
21
|
+
A construct the bundled compiler cannot bind reports PLAY0268 first. Read [current target boundaries](current-boundaries.md)
|
|
22
|
+
for renderer, semantic Host/specification, Translate, atomic, composite-key and
|
|
23
|
+
implementation-gap support before applying the historical minimums below.
|
|
22
24
|
|
|
23
25
|
Requires Cratis CLI 3.74.0 (`cratis --version`) for v21–v26 rendering and 3.75.0 for v27; CLI 3.66.0–3.73.0 stop at v20 and refuse v21 and
|
|
24
26
|
later with `CLI-RENDER-004`. A construct newer than the CLI's bundled compiler reports that binder's PLAY0268 first.
|
|
@@ -40,9 +42,12 @@ always needs pins.
|
|
|
40
42
|
Requires Stage 4.124.0 for v24 text-rule admission (`cratis --version` identifies the CLI bundle); older renderers refuse v24 with STAGE-ESM-016.
|
|
41
43
|
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 (`[ReadProtection(On)]`, a nullable read-model `Handle` parameter per read with `[LookUpBy]`, the `<View> '<key>' does not exist.` rejection, requirements evaluated in `Handle` after the reads; generated specifications run in decision mode); `cratis render` gets it from the first CLI that bundles Stage 4.138.0, and earlier bundles (CLI 3.75.0 bundles 4.137.0) refuse every protected read with STAGE-ESM-044. Reads it cannot preserve faithfully stay STAGE-ESM-044 and name the reason: constrained events, read paths in `produces when`, mappings to optional, collection, composite or mistyped event properties, generated-value freshness scopes. See [protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md).
|
|
42
44
|
Requires Stage 4.129.0 for semantic Host/executor protected reads; older engines refuse STAGE-ESM-044. Required absence rejects before requirements or generation; read-backed requirements and produced-event mappings execute. Non-Error protected requirements refuse STAGE-ESM-045, including reaction invocations. See [sandbox boundaries](sandbox-and-specrunner.md#protected-command-reads) for ordering and outside-append commit boundaries.
|
|
43
|
-
Described handlers refuse STAGE-IMPL-002, even Stub mode
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
Described handlers still refuse STAGE-IMPL-002, even in Stub mode. Query
|
|
46
|
+
performers have a separate implementation-gap contract; gaps are not completed
|
|
47
|
+
behavior. Bounded atomic event production renders; multiple same-event
|
|
48
|
+
production triggers and routed direct productions still refuse STAGE-ESM-043.
|
|
49
|
+
Version admission never implements a body or proves a batch boundary.
|
|
50
|
+
Chronological Date/DateTime command comparisons
|
|
46
51
|
select v26. The semantic Host and specification executor run them.
|
|
47
52
|
Requires Stage 4.139.0 for v22 admission; older Stage refuses v22 with -016.
|
|
48
53
|
Requires Stage 4.141.0 for rendered date comparisons; older renderers and legacy
|
|
@@ -52,7 +57,13 @@ rules; never downgrade to ordinal text or millisecond precision.
|
|
|
52
57
|
|
|
53
58
|
Requires Stage 4.135.0 for v26 admission; older Stage refuses v26 with STAGE-ESM-016.
|
|
54
59
|
|
|
55
|
-
Requires Stage 4.137.0 for v27 admission; older Stage refuses v27 with STAGE-ESM-016.
|
|
60
|
+
Requires Stage 4.137.0 for v27 admission; older Stage refuses v27 with STAGE-ESM-016.
|
|
61
|
+
The reviewed semantic Host runs composite-key read models and key-part
|
|
62
|
+
lookups; specification execution still refuses multi-part keys. The renderer admits bounded scoped composite-key
|
|
63
|
+
projections, not every parts-key shape; unsupported shapes retain STAGE-ESM-048.
|
|
64
|
+
Single-instance query lookup by parts still refuses STAGE-ESM-047 until
|
|
65
|
+
Chronicle#4265. The legacy syntax engine retains STAGE-ESM-048. See
|
|
66
|
+
[current composite-key boundaries](current-boundaries.md#renderer-support-is-bounded).
|
|
56
67
|
|
|
57
68
|
Binding with the CLI's bundled compiler is a separate
|
|
58
69
|
prerequisite. The exhaustive construct table is `references/renderable-subset.md` in
|
|
@@ -159,46 +170,46 @@ Requires Stage 4.90.0 for snapshot/live lists, 4.96.0 for non-text secrets and 4
|
|
|
159
170
|
|
|
160
171
|
| Code | Meaning | Usual fix |
|
|
161
172
|
| --- | --- | --- |
|
|
162
|
-
| `STAGE-ESM-001` | Unsupported slice kind; `StateChange`, `StateView` and supported event-triggered `Automation` slices render; Translate
|
|
173
|
+
| `STAGE-ESM-001` | Unsupported slice kind; `StateChange`, `StateView` and supported event-triggered `Automation` slices render; unsupported Translate shapes are `-024` | Keep the model; gap-fill refused scope |
|
|
163
174
|
| `STAGE-ESM-002`, `-003` | Concept values or validation Stage cannot express; unresolved property type | Simplify the concept; fix the type |
|
|
164
175
|
| `STAGE-ESM-004` | A `StateChange` slice without commands | Add the modeled command; multiple commands render |
|
|
165
176
|
| `STAGE-ESM-005` | Code validation or rule predicate bodies; or a command beyond the first capability (optional event property, event revision other than the first, validation or requirement that cannot be rendered, neither `produces` nor a response) | Use declarative validation; non-initial event generations are not rendered |
|
|
166
177
|
| `STAGE-ESM-006` | `produces` that cannot render without changing its destination or mappings (expression/enum conditions, literal or computed mappings, `for` not a command identifier, mappings not one-to-one with event properties, duplicate tags) | Map properties one to one; supported conditional productions render as guarded events, not separate commands |
|
|
167
178
|
| `STAGE-ESM-007`, `-008`, `-009` | Projection count per read model (exactly one projection or reducer each); unresolvable properties or no single read-model transition (**flat** projections only); affected instance not one, not keyed by an event property, or not the event-source identity (flat projections only) | One projection per read model; see "Projections" below |
|
|
168
|
-
| `STAGE-ESM-010` | A query is neither an optional snapshot lookup by the read-model identifier nor a supported snapshot/observable collection query; each query is checked on its own. Both collection modes render. Concept-typed keys and filters retain Arc validation, including composite members and collection elements; nullable concept keys or optional concept filters with `not empty` cannot preserve null semantics | Keyed `XById => X optional` queries or snapshot/observable lists. Equality filters render on both collections; DateTime filters, required filters after optional ones and unsupported null-validation shapes refuse 010. Filter-name collisions refuse 012. Context/single-result filters, opaque scope and a list-query `by` block remain PLAY0268; a performer query is left out of the model (PLAY0270, Requires Screenplay 4.220.1), so render emits nothing for it and it is a gap-fill item;
|
|
179
|
+
| `STAGE-ESM-010` | A query is neither an optional snapshot lookup by the read-model identifier nor a supported snapshot/observable collection query; each query is checked on its own. Both collection modes render. Concept-typed keys and filters retain Arc validation, including composite members and collection elements; nullable concept keys or optional concept filters with `not empty` cannot preserve null semantics | Keyed `XById => X optional` queries or snapshot/observable lists. Equality filters render on both collections; DateTime filters, required filters after optional ones and unsupported null-validation shapes refuse 010. Filter-name collisions refuse 012. Context/single-result filters, opaque scope and a list-query `by` block remain PLAY0268; a performer query is left out of the model (PLAY0270, Requires Screenplay 4.220.1), so render emits nothing for it and it is a gap-fill item; unsupported composite-key projection shapes refuse `STAGE-ESM-048`; single-instance lookup by parts remains `-047` |
|
|
169
180
|
| `STAGE-ESM-011` | A specification cannot render (see the rules below) | Reshape it only if the assertion keeps its meaning; otherwise keep the specification, record the gap, and gap-fill with the specification as the oracle. Never weaken or delete it to get a render |
|
|
170
181
|
| `STAGE-ESM-012` | Generated C# names collide (properties, types, namespaces, constraints) | Rename |
|
|
171
182
|
| `STAGE-ESM-013` | An event-context value other than `$context.occurred` mapped in `produces` | Map a command property when that preserves the meaning; otherwise gap-fill |
|
|
172
183
|
| `STAGE-ESM-014` | A constraint Chronicle cannot reproduce (kind, scope, message; multi-claim in one command; optional or composite targets) | A different constraint is a requirement change for the model owner; otherwise gap-fill |
|
|
173
184
|
| `STAGE-ESM-015` | Authorization Stage cannot render exactly: a role-claim URI, an opaque policy nested inside a condition, an unresolved or non-portable policy, no single identifier, an opaque-policy subject that is not text, Uuid, Date or DateTime (a restriction on opaque-policy subjects, separate from declarative claim targets), an unsupported claim artifact. Role-only, authenticated, opaque pure policies, claim conditions with Uuid, Date, DateTime or text targets (numeric and Boolean claim matches render as always false) and `not`/and/or render; roles are read through the identity's `RoleClaimType` | Reshape the policy to a portable condition; otherwise gap-fill |
|
|
174
|
-
| `STAGE-ESM-016` | Model language/semantic pair is not admitted by the installed Stage;
|
|
175
|
-
| `STAGE-ESM-017` | Read model or projection cannot render (property names that collide with Chronicle paths or expression syntax, mappings that overwrite the key or child identity,
|
|
185
|
+
| `STAGE-ESM-016` | Model language/semantic pair is not admitted by the installed Stage; matched 1.0–30.0 and 32.0 are admitted, not 31.0 or mixed pairs; older Stage also refuses the versions listed in the minimums above. A CLI bundle reports `CLI-RENDER-004` above its ceiling (v27 for CLI 3.75.0) first. v14 filters and v15 generation join v11 numbers, v12 enum numbers and v13 compliance as supported constructs, not blanket construct support | Not fixable by editing: the model needs a newer renderer. Keep the model, record the gap, gap-fill |
|
|
186
|
+
| `STAGE-ESM-017` | Read model or projection cannot render (property names that collide with Chronicle paths or expression syntax, mappings that overwrite the key or child identity, unsupported key/scope shapes and unsupported `all` mappings below) | Reshape the projection without changing what it records, or record the gap |
|
|
176
187
|
| `STAGE-ESM-018` | `$strings.` key missing in the default locale or containing formatting characters | Fix the strings |
|
|
177
188
|
| `STAGE-ESM-019` | Reducer structure or body not admitted (outside a `StateView`, impure, does not compile), or a `generate rule` body that does not compile or produces a compiler warning | An equivalent pure body, or gap-fill |
|
|
178
189
|
| `STAGE-ESM-020` | Implementation body (including a `generate rule` attachment) missing, changed (hash differs) or refused by the loader | Provide the body inside the model root |
|
|
179
190
|
| `STAGE-ESM-021`, `-022` | Reducer typed-context or analysis failure; a construct outside the pure allowlist, or a generated name shadowing a reducer type; also type or namespace shadowing in a `generate rule` body (`-022`) | An equivalent pure body, or gap-fill |
|
|
180
191
|
| `STAGE-ESM-025` | Typed context references an earlier event revision or an earlier property identity; checked before `-026` | Reference the current revision; an earlier reference is not renderable, so gap-fill |
|
|
181
192
|
| `STAGE-ESM-026` | A selected event, or an event a selected slice depends on (producing command, observing projection or reducer, specification, constraint target), is above its initial revision: `Event 'X' has evolved to revision N; Stage does not render event migrations yet.` The whole selection is refused, nothing is emitted | Not fixable by editing without dropping the evolution. Gap-fill the evolved events and hand-write the migrations (`cratis-chronicle-event-type-migration`). A scoped slice of initial events that depends on no evolved event still renders |
|
|
182
|
-
| `STAGE-ESM-024` |
|
|
193
|
+
| `STAGE-ESM-024` | Unsupported reaction triggers, opaque reaction bodies, Translate shapes or occurrence specifications; bounded source-event captures now render and admitted capture cases have semantic support | Keep refused scope as gap-fill; check [current boundaries](current-boundaries.md), and do not confuse semantic settlement with live delivery |
|
|
183
194
|
| `STAGE-ESM-027` | A specification asserting a read model is absent (`then no readmodel`) is not rendered (the semantic specification engine executes keyed absence) | Keep the specification; verify absence another way and record the gap |
|
|
184
195
|
| `STAGE-ESM-028`, `-029` | Generated values or responses Stage cannot render. Supported scalar UUID/String-concept strategies and Int random, v15 freshness, generation fixtures, scalar/named responses and `then returns` render; unknown strategies, unsupported generated types, and (in the Host and legacy syntax engine) a command generating a `generate rule` value report `-028` | Probe the supported form; preserve refused combinations as gap-fill |
|
|
185
196
|
| `STAGE-ESM-038` | Generated/response results combined with routes, generated-property rules, legacy allocation, non-scalar/non-command response sources or generated-name collisions | Keep the model; gap-fill that command |
|
|
186
197
|
| `STAGE-ESM-039`, `-040` | Reaction conditions, destinations or mappings outside the faithful target subset; protected identity uses (including reaction destinations) and protected enum concepts | See the event-reaction boundary above; never declassify protected values |
|
|
187
198
|
| `STAGE-ESM-030` | Named event-source or stream definition with a reserved stored name; unformattable routed fixtures or command replay routes. The default sandbox engine also reports it for every routed model | Rename the reserved name; render the model with `cratis render`, not `cratis run` |
|
|
188
199
|
| `STAGE-ESM-031` | Whole-number literal outside the C# `int` range below ESM v8 (v8 and later render `long`) | Raise the model to v8 constructs or gap-fill |
|
|
189
|
-
| `STAGE-ESM-032`, `-033` |
|
|
200
|
+
| `STAGE-ESM-032`, `-033` | Unsupported public/foreign-event uses; the live semantic Host can append public events locally and accept foreign-event seeds, but does not perform external publication or polling | Check [target-specific Translate support](current-boundaries.md#renderer-support-is-bounded); gap-fill refused uses |
|
|
190
201
|
| `STAGE-ESM-034` | Reaction `runs as` invoking claim-reading or opaque authorization; every `runs as` on legacy syntax paths | Keep the gate; gap-fill |
|
|
191
202
|
| `STAGE-ESM-035` | Observer filters on legacy syntax paths; semantic reaction/reducer filters render | Use semantic admission |
|
|
192
203
|
| `STAGE-ESM-036` | Per-production route overrides | Gap-fill |
|
|
193
204
|
| `STAGE-ESM-041` | Older renderers refuse non-text secrets; supported renderers keep their original types | Keep classification; upgrade the renderer, never declassify |
|
|
194
205
|
| `STAGE-ESM-042` | Unknown validation rule kinds; checksum on the legacy syntax path (semantic checksum renders) | Keep the rule; use an admitting semantic renderer or gap-fill |
|
|
195
|
-
| `STAGE-ESM-043` |
|
|
206
|
+
| `STAGE-ESM-043` | Atomic shapes the renderer cannot preserve: multiple same-event production triggers or routed direct productions; semantic execution supports atomic batches | Keep the batch boundary; gap-fill refused shapes without splitting it |
|
|
196
207
|
| `STAGE-ESM-044` | A protected read the Cratis renderer cannot preserve faithfully, naming the reason (every protected read before Stage 4.138.0); the legacy Host/structural runner refuse the preamble | Keep protection; gap-fill the refused command; semantic Host/executor support is separate from generated-app enforcement |
|
|
197
|
-
| `STAGE-ESM-047`, `-048` |
|
|
208
|
+
| `STAGE-ESM-047`, `-048` | `-048` unsupported composite-key projection shape (legacy syntax refuses composite models); `-047` rendered single-instance lookup by parts. Semantic Host supports composite keys and key-part lookups; specification execution still refuses multi-part keys | Keep the model; check [composite boundaries](current-boundaries.md#renderer-support-is-bounded) |
|
|
198
209
|
| `STAGE-ESM-046` | Compared DateTime concept with compliance or optionality, or a non-camel-case compared DateTime property; older renderers and legacy engines refuse all date comparisons | Keep the date rule and protection; see [date comparisons](date-comparisons.md) |
|
|
199
210
|
| `STAGE-ESM-045` | Non-Error requirement on a protected command, including reaction-invoked commands; semantic admission refuses before reads, requirements or facts | Keep the severity contract; record the execution gap, never silently promote or drop the requirement |
|
|
200
|
-
| `STAGE-IMPL-002` | Described command handler, naming command and RequirementId; also refused in Stub mode | Supply authorized implementation outside rendering; no
|
|
201
|
-
| `STAGE-IMPL-003` | Semantic
|
|
211
|
+
| `STAGE-IMPL-002` | Described command handler, naming command and RequirementId; also refused in Stub mode | Supply authorized implementation outside rendering; no described-body stub is emitted |
|
|
212
|
+
| `STAGE-IMPL-003` | Semantic execution reaches a reducer or command/concept validation body it cannot execute, naming owner and RequirementId | Keep the body; run unaffected scope separately and implement reached gaps |
|
|
202
213
|
| `STAGE-PROFILE-001` to `-006` | Profile input cannot be honored: unknown package, missing layout, incompatible packages, missing theme, invalid root template or unresolved blueprint template | Fix the named input without substituting a different shell. Requires Stage 4.143.0 for shared `CratisRendering.ResolveProfileInputs(scene, approvedPackages)` findings; older consumers may have CLI-only checks |
|
|
203
214
|
| `STAGE-ESM-037` | Events and commands from one handler, even across separate triggers on the same event in one reaction. The scaffold's Arc supports mixed results, but appends events before commands; a refused command causes redelivery and duplicate events | **Do not split the modeled reaction or drop an effect.** Gap-fill only with a proven retry-safe implementation; `[OnceOnly]` excludes replay, not retry |
|
|
204
215
|
| `STAGE-ESM-023` | Information: transition bodies analysed | none |
|
|
@@ -264,12 +275,13 @@ Stage renders two projection forms; the restrictions differ.
|
|
|
264
275
|
Every property it leaves unmapped must be optional, text (not an enum) or a single
|
|
265
276
|
composite object so unrelated instances keep it unset, not a value-type default
|
|
266
277
|
Requires Stage 4.93.0 for this check; older renderers can silently materialize defaults.
|
|
267
|
-
- Refused in a scope (`STAGE-ESM-017`):
|
|
278
|
+
- Refused in a scope (`STAGE-ESM-017`): empty/literal `all` mappings;
|
|
268
279
|
unmapped `all` properties outside that nullable subset; `every` with
|
|
269
280
|
children included beside children or nested blocks; root `remove via join`; joins,
|
|
270
281
|
children or join removals inside `nested`; a `clear` inside `nested`; recursive children;
|
|
271
282
|
duplicate event contracts among `from`, join or
|
|
272
283
|
removal blocks; event or read-model property names that collide with Chronicle syntax.
|
|
284
|
+
Composite-key scope admission is separately bounded in [current boundaries](current-boundaries.md#renderer-support-is-bounded).
|
|
273
285
|
- Running totals: `add`, `subtract`, `increment` and `decrement` start from 0 where nothing was set. `add x by 0`
|
|
274
286
|
(or `subtract x by 0`) on a required plain whole number or decimal only makes the total exist and renders as nothing;
|
|
275
287
|
any other constant operand is refused (Chronicle's `Add` takes an event property), and so is a concept total at zero
|
|
@@ -298,15 +310,16 @@ context, no directives, no writes to statics, `throw` limited to
|
|
|
298
310
|
`InvalidOperationException(string)` or `ArgumentException(string)`, LINQ lambdas that are
|
|
299
311
|
pure expressions, and no generated type shadowing a referenced one. Anything else is
|
|
300
312
|
`STAGE-ESM-019`, `-021` or `-022`. A reducer needs a `StateView` slice, its read model in the
|
|
301
|
-
same slice, a required Guid or text identifier and a matching keyed query.
|
|
302
|
-
|
|
313
|
+
same slice, a required Guid or text identifier and a matching keyed query. Resolved
|
|
314
|
+
C# command/concept rule and iterator validation bodies have pure-gated render
|
|
315
|
+
paths; unsupported body/context shapes still refuse. Attached
|
|
303
316
|
command handlers refuse `PLAY0800` and permanently require constrained implementation
|
|
304
317
|
attachments: gap-fill in code, not by waiting for ESM admission. Requires Screenplay
|
|
305
318
|
4.210.0 (`screenplay --version`); older bundled binders use PLAY0268 for these handlers.
|
|
306
319
|
Read the required typed `arguments.subject` for the command rather than the message.
|
|
307
|
-
A pending handler beside unconditional
|
|
308
|
-
|
|
309
|
-
|
|
320
|
+
A pending handler beside unconditional productions binds as a described v23
|
|
321
|
+
command; rendering still refuses it with STAGE-IMPL-002 even in Stub mode.
|
|
322
|
+
Query-performer gaps are a separate contract: see [bodies and implementation gaps](current-boundaries.md#bodies-and-implementation-gaps).
|
|
310
323
|
|
|
311
324
|
## Specification rules (`STAGE-ESM-011`)
|
|
312
325
|
|
package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/current-boundaries.md
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
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
|
+
# Stage target boundaries
|
|
5
|
+
|
|
6
|
+
## Contents
|
|
7
|
+
|
|
8
|
+
- Version admission
|
|
9
|
+
- Renderer support is bounded
|
|
10
|
+
- Semantic Host and specification execution
|
|
11
|
+
- Bodies and implementation gaps
|
|
12
|
+
- Runtime package and reducer migration
|
|
13
|
+
|
|
14
|
+
Reviewed against Stage v4.197.0. A compiler accepting a model is not proof that a
|
|
15
|
+
renderer, semantic Host, specification runner or CLI accepts it. The product
|
|
16
|
+
inventory owns the review baseline, not a promise that every construct works.
|
|
17
|
+
|
|
18
|
+
## Version admission
|
|
19
|
+
|
|
20
|
+
Stage's renderer and semantic Host/specification path admit matched language and
|
|
21
|
+
semantic pairs **1.0–30.0 and 32.0**, not a continuous 1–32 range. V31 anonymous
|
|
22
|
+
conditions, mismatched and unknown future pairs remain refused. V28 adds UUID
|
|
23
|
+
comparisons; v29 includes decimal rules/projection products; v30 carries per-event
|
|
24
|
+
source routes; v32 typed capture identities must not be lost in conversion.
|
|
25
|
+
|
|
26
|
+
**CLI v3.100.0** `cratis render` independently admits semantic versions through
|
|
27
|
+
**v30**. Its bundled Stage then applies matched-pair and construct
|
|
28
|
+
gates; **v32 needs a direct caller of the reviewed Stage baseline**. The CLI checks only the semantic
|
|
29
|
+
version, not the pair. Do not relabel a newer model to pass it: use a capable
|
|
30
|
+
reviewed caller or report the CLI blocker. The introducing CLI minimums are in
|
|
31
|
+
[the skill's admission prerequisites](../SKILL.md); the exact bundled Stage is in
|
|
32
|
+
[toolchain target boundaries](../../cratis-screenplay-toolchain/references/language-admission.md#stage-admission-and-execution).
|
|
33
|
+
|
|
34
|
+
## Renderer support is bounded
|
|
35
|
+
|
|
36
|
+
- **Translate:** supported inbound `source events` captures render inbox reactors
|
|
37
|
+
with durable per-key capture state. Added, field-change and transition
|
|
38
|
+
conditions have explicit support; unsupported capture guards still refuse by
|
|
39
|
+
name. This does not admit source-less captures, polling/webhook scheduling or a
|
|
40
|
+
Translate slice mixing commands, read models, queries, reducers or reactions.
|
|
41
|
+
- **Outbound:** supported event-target projections in Translate render public
|
|
42
|
+
contracts and outbox reactors. Public events produced directly by commands or
|
|
43
|
+
reactions and unsupported foreign-event uses retain their refusals. Generated
|
|
44
|
+
Translate specifications exercise the generated handlers, not a real external
|
|
45
|
+
integration.
|
|
46
|
+
- **Atomic reactions:** event-only production can render one event-collection
|
|
47
|
+
return per trigger occurrence; a selected invocation-refusal branch is its own
|
|
48
|
+
batch. Multiple production triggers on the same event and routed direct
|
|
49
|
+
productions retain `STAGE-ESM-043`. Models without the atomic declaration keep
|
|
50
|
+
their prior behavior.
|
|
51
|
+
- **Composite keys:** required single non-date primitive/concept parts in a
|
|
52
|
+
scoped projection with complete event-property parts keys for `from`/`remove
|
|
53
|
+
with` blocks render. Reducers, flat projections, joins, nested/child blocks,
|
|
54
|
+
partial keys, collisions and protected live queries over that composite shape
|
|
55
|
+
remain refused. Single-instance lookup by parts remains `STAGE-ESM-047` even
|
|
56
|
+
though composite projections and equality-filtered lists can render.
|
|
57
|
+
- **Projection products:** required numeric products in supported root/child
|
|
58
|
+
`from` blocks can lower through a generated event member. Optional/non-numeric
|
|
59
|
+
factors and unsupported join/`every` product shapes still refuse
|
|
60
|
+
`STAGE-ESM-050`. This is distinct from Play's Chronicle-definition conversion,
|
|
61
|
+
which still refuses a factor rather than silently adding only one operand.
|
|
62
|
+
- **Query UI:** default composition supplies an input form only for an optional
|
|
63
|
+
snapshot single-result lookup with a Text/UUID argument and an eligible scalar
|
|
64
|
+
result field. It omits list queries, required/unkeyed single-result queries and
|
|
65
|
+
unsupported arguments; it is not a general query editor. The form submits exact
|
|
66
|
+
string arguments; draft editing does not execute the query.
|
|
67
|
+
|
|
68
|
+
## Semantic Host and specification execution
|
|
69
|
+
|
|
70
|
+
The semantic path is not generated Chronicle code. Atomic reaction batches run
|
|
71
|
+
with per-unit validation in the specification executor; earlier successful units
|
|
72
|
+
remain after a later failure. The live Host is stricter: it rolls back the whole
|
|
73
|
+
initiating command if any unit fails. Invoked commands remain separate units.
|
|
74
|
+
Legacy syntax execution is a separate capability gate.
|
|
75
|
+
|
|
76
|
+
Semantic specifications fold admitted composite/collection event values,
|
|
77
|
+
composite projection properties and numeric projection products. Composite-key
|
|
78
|
+
models/key-part lookups work in the live Host; specification execution still
|
|
79
|
+
refuses multi-part keys. Recursive composite types still refuse by name; complete
|
|
80
|
+
given-state seeds are not permission to execute partial/null projected seeds or
|
|
81
|
+
opaque reducers. A projection product absent from the run no longer blocks an
|
|
82
|
+
unrelated specification.
|
|
83
|
+
|
|
84
|
+
Supported `source events` capture specifications execute added/change/transition
|
|
85
|
+
behavior; outbound projections append public events **locally**. The live
|
|
86
|
+
runtime's `BlockingModelFeatures`/`RunsAround` API explains which translation
|
|
87
|
+
constructs it can run around: foreign facts arrive through seeds and captures do
|
|
88
|
+
not poll external sources. Local public appends are not external publication.
|
|
89
|
+
Unsupported translation shapes still refuse by name.
|
|
90
|
+
|
|
91
|
+
## Bodies and implementation gaps
|
|
92
|
+
|
|
93
|
+
Resolved C# command/concept validation bodies can render through typed contexts
|
|
94
|
+
and the pure-code gate; context members such as Tenant/CausedBy/Occurred remain
|
|
95
|
+
refused. The semantic Host/executor does not thereby execute opaque validation or
|
|
96
|
+
reducer bodies: reached unsupported bodies retain scoped `STAGE-IMPL-003`.
|
|
97
|
+
Described command handlers still refuse `STAGE-IMPL-002` in rendering, including
|
|
98
|
+
Stub mode; reaching one in semantic execution reports `ImplementationBody` after
|
|
99
|
+
its gates, rather than blocking unrelated behavior application-wide.
|
|
100
|
+
|
|
101
|
+
A **query performer** is a different contract. Verified supported C# performer
|
|
102
|
+
bodies can render; unsupported/unverifiable performers produce explicit
|
|
103
|
+
implementation gaps and a not-fully-runnable marker. A generated throwing method
|
|
104
|
+
or gap is not a completed implementation or publication approval. Preserve the
|
|
105
|
+
performer's requirement identity, query shape, authorization and reason; do not
|
|
106
|
+
replace missing behavior with an empty success. The `ImplementationGapMode` enum
|
|
107
|
+
alone does not prove a target supports stubbing another role.
|
|
108
|
+
|
|
109
|
+
## Runtime package and reducer migration
|
|
110
|
+
|
|
111
|
+
Generated applications consume `@cratis/stage.runtime` pinned to the rendering
|
|
112
|
+
Stage release, rather than copied frontend runtime files. Re-render existing
|
|
113
|
+
applications to migrate; unchanged copies are removed, while edited copies stop
|
|
114
|
+
the render until resolved. Do not hand-edit managed runtime files or dependencies.
|
|
115
|
+
|
|
116
|
+
Classic-to-self reducer migration is per read model and preserves the previous
|
|
117
|
+
observer id. It needs version-2 configuration, evidence of the existing reducer,
|
|
118
|
+
a publisher that handles `ArtifactRenderPlan.RequiredRemovals`, and publication
|
|
119
|
+
checks against changed files. A new profile alone is not migration evidence.
|
package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
## Contents
|
|
4
4
|
|
|
5
5
|
- Scaffold
|
|
6
|
+
- Runtime package migration
|
|
6
7
|
- Lists on screen
|
|
7
8
|
- Reducer layout for new applications
|
|
8
9
|
- What is managed
|
|
@@ -51,6 +52,13 @@ is off), but any override must be proven with a restore and build. The compose f
|
|
|
51
52
|
`35000`, keeps data in the named volumes `chronicle-data` and `chronicle-config`, and
|
|
52
53
|
`docker compose down --volumes` is the only thing that deletes them.
|
|
53
54
|
|
|
55
|
+
## Runtime package migration
|
|
56
|
+
|
|
57
|
+
Stage v4.180.0 and later generate a dependency on `@cratis/stage.runtime`, pinned
|
|
58
|
+
to the rendering Stage release, rather than copied frontend runtime files.
|
|
59
|
+
Re-render existing applications: unchanged old copies are removed; edited copies
|
|
60
|
+
stop the migration until resolved. See [runtime and reducer migration](current-boundaries.md#runtime-package-and-reducer-migration).
|
|
61
|
+
|
|
54
62
|
## Lists on screen
|
|
55
63
|
|
|
56
64
|
A `data <ReadModel>[] via query <Query>` list renders from either list-query mode, but
|
|
@@ -145,7 +153,7 @@ Every file is optional. Rules that bite:
|
|
|
145
153
|
|
|
146
154
|
What the seam does **not** do: it repairs no rejected model and renders nothing.
|
|
147
155
|
Stage renders supported event-triggered Automation slices as managed Chronicle
|
|
148
|
-
reactors;
|
|
156
|
+
reactors; bounded source-event capture and outbound Translate paths also render. Refused reaction or Translate shapes remain hand-written gap-fill
|
|
149
157
|
with the model as their contract. See [admission.md](admission.md). Keep `Customizations/` under version control: whether a re-render keeps
|
|
150
158
|
it depends on the publisher, and `cratis render` writes only the planned paths and
|
|
151
159
|
refuses unmanaged files at them.
|
|
@@ -160,9 +160,10 @@ which never counts as a pass.
|
|
|
160
160
|
|
|
161
161
|
## Implementation bodies and authored occurrence
|
|
162
162
|
|
|
163
|
-
Requires Stage 4.145.0 for reach-scoped reducer and validation refusals; older
|
|
164
|
-
engines refuse unrelated behavior when any such body exists. Neither
|
|
165
|
-
runs these bodies. `STAGE-IMPL-003` names the reached
|
|
163
|
+
Requires Stage 4.145.0 for reach-scoped reducer and validation refusals; older
|
|
164
|
+
semantic engines refuse unrelated behavior when any such body exists. Neither
|
|
165
|
+
Host nor executor runs these opaque bodies. `STAGE-IMPL-003` names the reached
|
|
166
|
+
owner and RequirementId. Reachability includes:
|
|
166
167
|
|
|
167
168
|
- command under test and commands invoked by reactions reach command validation;
|
|
168
169
|
- command input and query argument types reach concept rules through composites,
|
|
@@ -173,8 +174,10 @@ runs these bodies. `STAGE-IMPL-003` names the reached owner and RequirementId:
|
|
|
173
174
|
of an action expected to be refused.
|
|
174
175
|
|
|
175
176
|
Unrelated commands, queries and specifications remain admitted. Reducer refusals use
|
|
176
|
-
Projection capability; validation refusals use Command. This does not relax
|
|
177
|
-
history rebuilding or renderer admission
|
|
177
|
+
Projection capability; validation refusals use Command. This does not relax
|
|
178
|
+
live-world history rebuilding or renderer admission. Described handlers remain
|
|
179
|
+
refused in rendering even in Stub mode; semantic execution reports
|
|
180
|
+
`ImplementationBody` only when reached after their gates. See [current boundaries](current-boundaries.md).
|
|
178
181
|
|
|
179
182
|
Requires Stage 4.141.1 for authored occurrence in event-reaction specifications; older
|
|
180
183
|
executors refuse clocks beside reactions. Independent command, append and named-redelivery
|
|
@@ -190,19 +193,23 @@ A false `where` skips evaluation; the executor never invents wall time. The fixt
|
|
|
190
193
|
supplies time, not audit identity: `$eventSourceId`/`$eventContext.eventSourceId` and
|
|
191
194
|
`$context.causedBy.*` remain `STAGE-ESM-013`, even under `runs as system`.
|
|
192
195
|
|
|
193
|
-
Clock/application/startup/shutdown triggers and `when clock`/trigger
|
|
194
|
-
remain `STAGE-ESM-024`.
|
|
196
|
+
Clock/application/startup/shutdown triggers and `when clock`/trigger actions
|
|
197
|
+
remain `STAGE-ESM-024`. Admitted `source events` capture specifications now run;
|
|
198
|
+
this does not execute polling or an external integration.
|
|
199
|
+
**A clock fixture is not a scheduler.** Generated backend
|
|
195
200
|
occurrence mappings use `EventContext.Occurred`, but context-dependent generated
|
|
196
201
|
reaction specs retain `-011`; generated append/redelivery clock fixtures retain `-024`.
|
|
197
202
|
Rendered clock fixtures remain command-only.
|
|
198
203
|
|
|
199
204
|
## Refusals shared by both engines
|
|
200
205
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
+
Semantic capture/publication support is target-specific: supported capture
|
|
207
|
+
specifications run and the live Host can run around public/foreign constructs
|
|
208
|
+
using local appends and seeded inbound facts, never real external publication or
|
|
209
|
+
polling. Unsupported Translate reactive/read-side shapes still refuse. Legacy
|
|
210
|
+
syntax admission retains broader refusals, including reaction identity, observer
|
|
211
|
+
filters and routing (`-034`, `-035`, `-036`). Clock, application, startup and shutdown reaction triggers and opaque
|
|
212
|
+
reaction bodies fail `-024`. See [current boundaries](current-boundaries.md).
|
|
206
213
|
|
|
207
214
|
## The specification runner
|
|
208
215
|
|
package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/scene-runtime.md
CHANGED
|
@@ -51,6 +51,10 @@ The scaffold's Scene runtime provides:
|
|
|
51
51
|
`component.<id>.<output>` via `resolveArgumentSource`. `useBoundQuery` reruns
|
|
52
52
|
on changed arguments, aborts prior runs and discards stale answers; cleared or
|
|
53
53
|
failed bindings remove the previous data.
|
|
54
|
+
- Stage v4.197.0 default composition adds input forms only for eligible optional
|
|
55
|
+
snapshot single-result lookups with a Text/UUID argument and scalar result field;
|
|
56
|
+
it omits collections and required/unkeyed single results. Drafts do not execute
|
|
57
|
+
queries until submit. See [current target boundaries](current-boundaries.md).
|
|
54
58
|
- `core:toolbar` / `core:toolbarItem`: Action items announce the command and
|
|
55
59
|
resolved parameters with `cratis.scene.command`; Navigate/Dialog items use
|
|
56
60
|
the navigation host, or announce navigation outside one. Host wiring is still
|
|
@@ -24,7 +24,15 @@
|
|
|
24
24
|
{ "kind": "skill-contains", "value": "Requires Cratis CLI 3.64.0 for `--engine`", "file": "references/sandbox-and-specrunner.md" },
|
|
25
25
|
{ "kind": "skill-contains", "value": "the environment setting below", "file": "references/sandbox-and-specrunner.md" },
|
|
26
26
|
{ "kind": "skill-contains", "value": "fresh in-memory Chronicle log per specification", "file": "references/sandbox-and-specrunner.md" },
|
|
27
|
-
{ "kind": "skill-contains", "value": "
|
|
27
|
+
{ "kind": "skill-contains", "value": "matched language/ESM 1.0–30.0 and 32.0" },
|
|
28
|
+
{ "kind": "skill-contains", "value": "not a continuous 1–32 range", "file": "references/current-boundaries.md" },
|
|
29
|
+
{ "kind": "skill-contains", "value": "admits semantic versions through\n**v30**", "file": "references/current-boundaries.md" },
|
|
30
|
+
{ "kind": "skill-contains", "value": "CLI checks only the semantic\nversion, not the pair", "file": "references/current-boundaries.md" },
|
|
31
|
+
{ "kind": "skill-contains", "value": "v32 needs a direct caller of the reviewed Stage baseline", "file": "references/current-boundaries.md" },
|
|
32
|
+
{ "kind": "skill-contains", "value": "3.81.0 for v28 and 3.86.0 for v29–v30" },
|
|
33
|
+
{ "kind": "skill-contains", "value": "specification execution still\nrefuses multi-part keys", "file": "references/current-boundaries.md" },
|
|
34
|
+
{ "kind": "skill-contains", "value": "including\nStub mode", "file": "references/current-boundaries.md" },
|
|
35
|
+
{ "kind": "skill-contains", "value": "ArtifactRenderPlan.RequiredRemovals", "file": "references/current-boundaries.md" },
|
|
28
36
|
{ "kind": "skill-contains", "value": "Requires Stage 4.141.0", "file": "references/date-comparisons.md" },
|
|
29
37
|
{ "kind": "skill-contains", "value": "Requires Stage 4.142.0", "file": "references/sandbox-and-specrunner.md" },
|
|
30
38
|
{ "kind": "skill-contains", "value": "STAGE-IMPL-003", "file": "references/sandbox-and-specrunner.md" },
|