@cratis/pi 7.116.1 → 7.118.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/package/corpus/harnesses/copilot/instructions/profiles.instructions.md +3 -0
  2. package/package/corpus/product-sync.json +12 -12
  3. package/package/corpus/rules/profiles.md +3 -0
  4. package/package/corpus/skills/cratis-orchestration-lanes/LICENSE +2 -0
  5. package/package/corpus/skills/cratis-orchestration-lanes/SKILL.md +130 -0
  6. package/package/corpus/skills/cratis-orchestration-lanes/references/context-handoff.md +85 -0
  7. package/package/corpus/skills/cratis-orchestration-lanes/references/inbox-and-handover.md +78 -0
  8. package/package/corpus/skills/cratis-orchestration-lanes/references/lane-brief.md +83 -0
  9. package/package/corpus/skills/cratis-orchestration-lanes/references/placeholders.md +34 -0
  10. package/package/corpus/skills/cratis-orchestration-lanes/verification.json +15 -0
  11. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +1 -1
  12. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +1 -1
  13. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/phases.md +1 -1
  14. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +2 -1
  15. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +10 -5
  16. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +10 -5
  17. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +5 -2
  18. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +7 -4
  19. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/multi-service-models.md +8 -6
  20. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/read-model-keys.md +5 -2
  21. package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +1 -1
  22. package/package/corpus/skills/cratis-screenplay-toolchain/references/language-admission.md +35 -10
  23. package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +23 -14
  24. package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +1 -1
  25. package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +4 -2
  26. package/package/corpus/skills/cratis-screenplay-ui-composition/references/scene-runtime-boundaries.md +92 -0
  27. package/package/corpus/skills/cratis-screenplay-ui-composition/verification.json +4 -0
  28. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +25 -16
  29. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +40 -27
  30. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/current-boundaries.md +119 -0
  31. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +9 -1
  32. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +19 -12
  33. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/scene-runtime.md +4 -0
  34. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +9 -1
  35. package/package/profile-catalog.json +12 -0
  36. package/package.json +1 -1
@@ -12,13 +12,15 @@
12
12
  - Specification rules (`STAGE-ESM-011`)
13
13
  - Refusals seen while drafting a model
14
14
 
15
- Stage admits exact ESM v1–v27 language/semantic pairs, then checks
16
- constructs. V28 and mixed or unknown pairs report `STAGE-ESM-016`. `cratis render` admits
17
- ESM v1–v27: Stage plans each model and refuses the constructs it cannot render with typed `STAGE-*`
18
- codes (atomic batches report `STAGE-ESM-043`; unsupported v26 date shapes `STAGE-ESM-046`; v27 composite
19
- read-model keys report `STAGE-ESM-048`/`-047`). The CLI refuses
20
- a bound model above v27 with `CLI-RENDER-004` before planning; a construct its bundled compiler cannot bind
21
- reports PLAY0268 instead.
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; atomic mode in an
44
- admitted pair refuses STAGE-ESM-043. Version admission never implements a body,
45
- batch or composite-key rendering. Chronological Date/DateTime command comparisons
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. The semantic Host runs read models with several key parts end to end (projections keyed by parts, removals, list queries on any part, queries by parts), and composite-keyed read models get no conventional `Get<ReadModel>ById` query. The specification executor refuses specifications over them as unsupported. The renderer and legacy syntax engine refuse a read model with several key parts or a projection keyed by parts with `STAGE-ESM-048`, and the renderer a single-instance query by parts with `STAGE-ESM-047` until Chronicle can look up composite keys (Chronicle#4265); nothing is published.
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 is `-024` | Keep the model; gap-fill refused scope |
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; a read model with several key parts (v27) refuses `STAGE-ESM-048` |
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; exact v1–v27 pairs are admitted, v28 and mixed pairs refused; 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 |
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, composite keys, unsupported `all` mappings, the refused scope shapes below) | Reshape the projection without changing what it records, or record the gap |
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` | Interval, schedule, application, startup and shutdown triggers, opaque reaction bodies, captures, Translate (including directed Translate), and clock/trigger/capture specifications. Event-triggered Automation slices render as Chronicle reactors, subject to `-013` and `-034` to `-040` below | Keep refused scope as gap-fill; do not confuse semantic Host settlement with live reactor delivery |
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` | Public events and event-target projections or reducers (ESM v9); foreign event origins and event-source captures | Gap-fill |
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` | `reaction batches atomic` in an admitted version pair | Keep the batch boundary; gap-fill without splitting it |
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` | ESM v27 composite read-model keys: `-048` read model with several key parts or projection keyed by parts (also the legacy syntax engine); `-047` single-instance query by parts | Keep the model; gap-fill the composite-keyed scope |
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 generated stub is emitted |
201
- | `STAGE-IMPL-003` | Semantic Host/executor reaches a reducer or command/concept validation body; names owner and RequirementId (Requires Stage 4.145.0; older engines refuse unrelated behavior too) | Keep the body; run unaffected scope separately and gap-fill reached behavior. Renderer admission is unchanged |
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`): composite keys; empty/literal `all` mappings;
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. Code validation
302
- (`STAGE-ESM-005`) is refused outright (opaque pure policies render). Attached
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
- productions binds as a described v23 command, but Stage refuses it with
309
- `STAGE-IMPL-002`, even in Stub mode.
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
 
@@ -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.
@@ -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; refused reactions, captures and Translate slices remain hand-written gap-fill
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 semantic
164
- engines refuse unrelated behavior when any such body exists. Neither Host nor executor
165
- runs these bodies. `STAGE-IMPL-003` names the reached owner and RequirementId:
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 live-world
177
- history rebuilding or renderer admission, nor described-handler `STAGE-IMPL-002`.
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/capture actions
194
- remain `STAGE-ESM-024`. **A clock fixture is not a scheduler.** Generated backend
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
- Both engines refuse public events (`STAGE-ESM-032`), foreign or source-event captures
202
- (`-033`), directed Translate slices (`-024`) and reducer observer filters (`-035`). The
203
- legacy engine also refuses reaction identity and reaction observer filters (`-034`,
204
- `-035`); per-production route overrides fail `-036` on the semantic engine. Clock,
205
- application, startup and shutdown triggers and opaque reaction bodies fail `-024`.
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
 
@@ -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": "exact ESM v1–v27 pairs" },
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" },
@@ -1155,6 +1155,18 @@
1155
1155
  "languages": [
1156
1156
  "typescript"
1157
1157
  ]
1158
+ },
1159
+ {
1160
+ "id": "cratis/orchestration",
1161
+ "composes": [
1162
+ "cratis/engineering/core"
1163
+ ],
1164
+ "availableTargets": [
1165
+ "cratis-orchestration-lanes"
1166
+ ],
1167
+ "languages": [
1168
+ "language-agnostic"
1169
+ ]
1158
1170
  }
1159
1171
  ]
1160
1172
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratis/pi",
3
- "version": "7.116.1",
3
+ "version": "7.118.0",
4
4
  "description": "Configuration-aware Cratis AI integration for Pi",
5
5
  "type": "module",
6
6
  "files": [