@cratis/pi 7.75.0 → 7.76.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/harnesses/copilot/instructions/vertical-slices.instructions.md +6 -4
- package/package/corpus/product-sync.json +14 -14
- package/package/corpus/rules/vertical-slices.md +6 -4
- package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/references/authorization.md +9 -0
- package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/references/observable-emission-guards.md +12 -3
- package/package/corpus/skills/cratis-arc-command/references/decisions-and-routing.md +11 -0
- package/package/corpus/skills/cratis-arc-command-execution/SKILL.md +3 -0
- package/package/corpus/skills/cratis-arc-command-execution/references/occurrence-commands.md +78 -0
- package/package/corpus/skills/cratis-arc-command-validation/SKILL.md +10 -36
- package/package/corpus/skills/cratis-arc-command-validation/references/input-binding.md +49 -0
- package/package/corpus/skills/cratis-arc-command-validation/references/read-model-resolution.md +25 -0
- package/package/corpus/skills/cratis-arc-command-validation/references/validation-severity.md +21 -0
- package/package/corpus/skills/cratis-arc-ef-core-migration/SKILL.md +7 -1
- package/package/corpus/skills/cratis-arc-hosting/SKILL.md +3 -0
- package/package/corpus/skills/cratis-arc-hosting/references/connection-resolution.md +61 -0
- package/package/corpus/skills/cratis-arc-query-paging/SKILL.md +4 -2
- package/package/corpus/skills/cratis-arc-react-page/references/queries-and-commands.md +14 -1
- package/package/corpus/skills/cratis-chronicle-client-dotnet/SKILL.md +5 -0
- package/package/corpus/skills/cratis-chronicle-client-dotnet/references/immediate-append-refusal.md +40 -0
- package/package/corpus/skills/cratis-chronicle-client-dotnet/references/lifecycle.md +4 -0
- package/package/corpus/skills/cratis-chronicle-client-dotnet/references/occurrences.md +89 -0
- package/package/corpus/skills/cratis-chronicle-client-dotnet/references/pinned-generation-delivery.md +33 -3
- package/package/corpus/skills/cratis-chronicle-decision-reads/SKILL.md +5 -2
- package/package/corpus/skills/cratis-chronicle-decision-reads/references/admission-and-ownership.md +18 -1
- package/package/corpus/skills/cratis-chronicle-event-type-migration/references/pinned-generations.md +6 -0
- package/package/corpus/skills/cratis-chronicle-hosting/SKILL.md +3 -0
- package/package/corpus/skills/cratis-chronicle-hosting/references/operations.md +26 -0
- package/package/corpus/skills/cratis-chronicle-hosting/references/storage-resolution.md +55 -0
- package/package/corpus/skills/cratis-chronicle-multi-tenancy/SKILL.md +3 -0
- package/package/corpus/skills/cratis-chronicle-multi-tenancy/references/remove-namespace.md +38 -0
- package/package/corpus/skills/cratis-chronicle-projection/references/definition-changes.md +26 -0
- package/package/corpus/skills/cratis-chronicle-projection/references/model-bound-attributes.md +8 -0
- package/package/corpus/skills/cratis-chronicle-reactor/SKILL.md +5 -22
- package/package/corpus/skills/cratis-chronicle-reactor/references/starting-and-replaying.md +33 -0
- package/package/corpus/skills/cratis-chronicle-read-model/SKILL.md +9 -2
- package/package/corpus/skills/cratis-chronicle-read-model/references/queries.md +9 -4
- package/package/corpus/skills/cratis-chronicle-reducer/SKILL.md +4 -0
- package/package/corpus/skills/cratis-multi-service-architecture/SKILL.md +9 -3
- package/package/corpus/skills/cratis-performance-review/SKILL.md +4 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +2 -2
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +10 -2
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +9 -9
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/atomic-batches-and-source-mappings.md +2 -2
- package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +11 -11
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +9 -0
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/model-notes.md +41 -23
- package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +8 -3
- package/package/corpus/skills/cratis-screenplay-projections/SKILL.md +19 -12
- package/package/corpus/skills/cratis-screenplay-projections/references/pdl-grammar.md +37 -2
- package/package/corpus/skills/cratis-screenplay-projections/verification.json +11 -0
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +37 -40
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +3 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +1 -1
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/verification.json +4 -2
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/coverage-matrix.md +9 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +13 -30
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +39 -6
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +5 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/language-admission.md +15 -5
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +7 -4
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +12 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +9 -2
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +38 -56
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +23 -13
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/date-comparisons.md +44 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +8 -2
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +59 -8
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +7 -3
- package/package.json +1 -1
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md
CHANGED
|
@@ -35,7 +35,7 @@ ESM). Only the probe answers renderability. `PLAY0270` entries are information,
|
|
|
35
35
|
| Class | Meaning | Typical examples (each verified in `admission.md`) | Action |
|
|
36
36
|
| --- | --- | --- | --- |
|
|
37
37
|
| **Model fix (in mode)** | the model is in, or the user chose, renderable mode and breaks its own subset in a way that has a renderable equivalent with the same meaning | a `produces` whose `for` is not the command identifier; two projections for one read model (`-007`); a policy Stage cannot express portably (`-015`; role-only and opaque pure policies render) | edit request to the modeler session with address, change and rationale |
|
|
38
|
-
| **Capability gap** | the intended meaning needs a construct Stage does not render yet | DateTime equality filters and required parameters after optional filters (`-010`); context/single-result filters, opaque `scoped to`/`performer` and a list-query `by` block remain PLAY0268; a read model with several key parts or a projection keyed by parts (v27) refuses `STAGE-ESM-048` and a single-instance query by parts `STAGE-ESM-047` (Chronicle#4265); Translate, clocks, captures, non-event triggers and opaque reaction bodies (`-024`); claim-reading/opaque `runs as` gates (`-034`), legacy `from` (`-035`), mixed effects in one handler (`-037`, retries can duplicate events; keep it whole), unsupported reaction mappings (`-039`); unsupported generated types/result combinations (`-028`/`-038`); `then no readmodel` (`-027`); evolved events (`STAGE-ESM-026`); unsupported expression/enum production conditions (`-006`; supported conditional productions render); legacy reads (`PLAY0271`), protected reads the renderer cannot preserve, or any protected read in an older CLI bundle (STAGE-ESM-044 despite v25 admission; semantic Host/executor support is separate); code validation (`-005`); protected identities/enums (`-040`) or unadmitted explicit subject lineage (`PLAY0268`); described handlers (v23, STAGE-IMPL-002 even Stub mode), atomic mode (STAGE-ESM-
|
|
38
|
+
| **Capability gap** | the intended meaning needs a construct Stage does not render yet | DateTime equality filters and required parameters after optional filters (`-010`); context/single-result filters, opaque `scoped to`/`performer` and a list-query `by` block remain PLAY0268; a read model with several key parts or a projection keyed by parts (v27) refuses `STAGE-ESM-048` and a single-instance query by parts `STAGE-ESM-047` (Chronicle#4265); Translate, clocks, captures, non-event triggers and opaque reaction bodies (`-024`); claim-reading/opaque `runs as` gates (`-034`), legacy `from` (`-035`), mixed effects in one handler (`-037`, retries can duplicate events; keep it whole), unsupported reaction mappings (`-039`); unsupported generated types/result combinations (`-028`/`-038`); `then no readmodel` (`-027`); evolved events (`STAGE-ESM-026`); unsupported expression/enum production conditions (`-006`; supported conditional productions render); legacy reads (`PLAY0271`), protected reads the renderer cannot preserve, or any protected read in an older CLI bundle (STAGE-ESM-044 despite v25 admission; semantic Host/executor support is separate); code validation (`-005`); protected identities/enums (`-040`) or unadmitted explicit subject lineage (`PLAY0268`); described handlers (v23, STAGE-IMPL-002 even Stub mode), atomic mode (STAGE-ESM-043; v22 admission Requires Stage 4.139.0, older Stage reports -016) | keep the model; fallback record entry; options a to c in `SKILL.md`; link the Stage issue |
|
|
39
39
|
| **Implementation attachment** | a permanent limitation, not future ESM admission | file/inline command handlers (PLAY0800; typed `subject` names the command) | keep the model contract and gap-fill the slice in code with a constrained implementation attachment; do not wait for a new ESM version |
|
|
40
40
|
| **Tool skew** | the bundled compiler disagrees with documented semantics | the false `PLAY0285` on reaction cascades from an older bundle; codes the standalone compiler does not raise | record in the session state and the fallback record; never "fix" a correct model |
|
|
41
41
|
| **Environment** | not the model | restore failures, missing SDK, a destination that is not writable | fix the environment or report blocked |
|
|
@@ -38,13 +38,15 @@
|
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
"kind": "skill-contains",
|
|
41
|
-
"value": "
|
|
41
|
+
"value": "Preserve refused public/foreign events, production overrides and opaque gates as A/C"
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
"kind": "skill-contains",
|
|
45
45
|
"value": "STAGE-ESM-026"
|
|
46
46
|
},
|
|
47
|
-
{ "kind": "skill-contains", "value": "
|
|
47
|
+
{ "kind": "skill-contains", "value": "`then returns` render" },
|
|
48
|
+
{ "kind": "skill-contains", "value": "Requires Stage 4.141.0" },
|
|
49
|
+
{ "kind": "skill-contains", "value": "Requires Stage 4.146.0" },
|
|
48
50
|
{ "kind": "skill-contains", "value": "Unsupported generated\ntypes (`STAGE-ESM-028`) and result combinations (`-038`)" },
|
|
49
51
|
{ "kind": "skill-contains", "value": "authored-UI parity" },
|
|
50
52
|
{ "kind": "skill-contains", "value": "responsible tool version" }
|
package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/coverage-matrix.md
CHANGED
|
@@ -11,6 +11,15 @@
|
|
|
11
11
|
Write it **before** drafting specs, keep it in `.ai-work/screenplay/<model-slug>/coverage.md` (or the
|
|
12
12
|
`STATE.md` beside it), and update it with the specs. Reviewers check it against the model. Screenplay 4.127.0 MCP `find-specification-obligations` seeds the inventory (SPEC001–SPEC008), for command success, requirements, command/concept validation, effective authorization gates, value constraints, read models, projection removals and reaction outcomes. A met row proves matching authored presence, not full coverage or passing execution: the matrix still records domain judgments and scenario types the heuristic cannot infer.
|
|
13
13
|
|
|
14
|
+
For SPEC004, a gated query's denial can use `when query <Query>` with
|
|
15
|
+
`then denied`, or no `when` and exactly one `then query <Query>` with `arguments`
|
|
16
|
+
and no `result`, followed by `then denied`. The read-only form meets that query's
|
|
17
|
+
denial obligation, not the returned read model's SPEC006 assertion obligation.
|
|
18
|
+
Keep a separate view state, absence or query-result specification.
|
|
19
|
+
Requires Screenplay 4.212.2 (`screenplay --version`) for this inventory matching;
|
|
20
|
+
older servers miss the read-only denial for SPEC004 and count it for SPEC006.
|
|
21
|
+
Upgrade before gating on those rows; a met denial still proves presence, not execution.
|
|
22
|
+
|
|
14
23
|
## Cell values
|
|
15
24
|
- `spec <Name>` - written; the name exists in the model.
|
|
16
25
|
- `n/a: <domain reason>` - the situation cannot occur in this business. "Keeps it short" is not
|
|
@@ -8,9 +8,8 @@ license: MIT
|
|
|
8
8
|
|
|
9
9
|
Read [preferred syntax](references/preferred-syntax.md) when writing or reviewing `.play`.
|
|
10
10
|
|
|
11
|
-
This skill owns tool selection,
|
|
12
|
-
|
|
13
|
-
projection, read-surface, capture/reaction, specification and UI skills.
|
|
11
|
+
This skill owns tool selection, verdicts and admission. Modeling method lives in
|
|
12
|
+
`cratis-screenplay-modeling-lifecycle`; syntax lives in the construct skills.
|
|
14
13
|
|
|
15
14
|
## Locate the model
|
|
16
15
|
|
|
@@ -90,14 +89,12 @@ Independent results, not a ladder. Read `references/verdicts.md` for the command
|
|
|
90
89
|
| V4 | reference specifications run | `screenplay test` or MCP `run-specifications`; unsupported/unbound is not a pass; rendered Debug tests are V5.tests, never V4 |
|
|
91
90
|
| V5 | rendered and target-verified | `cratis render`, then Debug build and tests; report admission, publication, build and tests separately |
|
|
92
91
|
|
|
93
|
-
V2
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
the source
|
|
99
|
-
`modelRevision`, which is semantic and, without `.screenplay/identities.json`,
|
|
100
|
-
changes with the root folder name.
|
|
92
|
+
V2 needs MCP; V3 also supports `cratis screenplay validate --executable <root>`
|
|
93
|
+
(labeled as the bundled compiler). Read [verdict commands](references/verdicts.md)
|
|
94
|
+
for MCP initialization, source identity and reporting. Without MCP, report
|
|
95
|
+
`V2 not run: no MCP in this agent`. Report each verdict separately with tool,
|
|
96
|
+
version, source identity and any blocking codes; MCP `modelRevision` is semantic,
|
|
97
|
+
not the source identity.
|
|
101
98
|
|
|
102
99
|
## Subsets (write from the one your mode needs)
|
|
103
100
|
|
|
@@ -163,25 +160,11 @@ changes with the root folder name.
|
|
|
163
160
|
|
|
164
161
|
## Edit strategy
|
|
165
162
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
followed by V1. Without `.screenplay/identities.json`, plain text edits are fine. Never use a
|
|
172
|
-
text edit to get around an MCP refusal.
|
|
173
|
-
- **Catalog-changing edits** belong to the identity owner (the session that owns MCP). When
|
|
174
|
-
`.screenplay/identities.json` exists, adding, removing or renaming an addressed element
|
|
175
|
-
(declarations, properties of commands, events, read models, composite types and triggers,
|
|
176
|
-
queries, query arguments, specifications), moving declarations, creating, deleting, renaming
|
|
177
|
-
or moving a mapped `.play` document (`IdentityMappingConflict`) and persisted event contract
|
|
178
|
-
evolution go through MCP, and `id` pins alone
|
|
179
|
-
are not enough: a session without MCP returns the request to the owning session.
|
|
180
|
-
- AST JSON costs several times the text it replaces; use it where a typed operation is the
|
|
181
|
-
only identity-safe route.
|
|
182
|
-
- Proposals are connection-local (at most 16); `apply` writes `.screenplay/identities.json`
|
|
183
|
-
and is not crash-atomic; never retry `apply` after `ApplyOutcomeUnknown`. Loop details:
|
|
184
|
-
`cratis-screenplay-model-authoring`.
|
|
163
|
+
Read [the MCP authoring loop](../cratis-screenplay-model-authoring/references/mcp-loop.md)
|
|
164
|
+
when editing: the identity owner uses typed proposals for catalog-changing edits;
|
|
165
|
+
text edits never bypass a refusal. Without MCP, return identity-affecting work
|
|
166
|
+
to its owner. Proposals are connection-local; apply is not crash-atomic, and an
|
|
167
|
+
unknown apply outcome requires recovery, not retry.
|
|
185
168
|
|
|
186
169
|
## Top traps
|
|
187
170
|
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
- Explicit enum member numbers
|
|
9
9
|
- Reserved stored names and event pins
|
|
10
10
|
- Named keys, production routes and observer filters
|
|
11
|
+
- Projection event scope (PLAY0801)
|
|
11
12
|
- Reducer instance identity (PLAY0690)
|
|
12
13
|
- Caller identity, compliance and routes
|
|
13
14
|
- Specification metadata, callers, cases and locators
|
|
@@ -147,6 +148,25 @@ Overrides/filters select released ESM v10; malformed routes also use PLAY0504.
|
|
|
147
148
|
Read read-surface `references/named-keys.md` and
|
|
148
149
|
[production routes and filters](production-routes-and-filters.md).
|
|
149
150
|
|
|
151
|
+
## Projection event scope (PLAY0801)
|
|
152
|
+
|
|
153
|
+
Requires Screenplay 4.212.3 (`screenplay --version`) for this ordinary compilation
|
|
154
|
+
check in both C# and TypeScript; older executable binding rejected these duplicate
|
|
155
|
+
uses later with PLAY0273.
|
|
156
|
+
|
|
157
|
+
| Code | Severity | Meaning / fix |
|
|
158
|
+
| --- | --- | --- |
|
|
159
|
+
| PLAY0801 | E | `DuplicateEventInProjectionScope`: an event name occurs more than once in one projection level's event set or separate join set. Reports the second and each later reference, even with identical or different keys. Combine same-row mappings into one block; one event cannot update two rows of that level through two `from` blocks. |
|
|
160
|
+
|
|
161
|
+
A level is the root, one `children` block, one `nested` block or one variant.
|
|
162
|
+
`from` (including each event in `from A, B` lists), `remove with`, `remove via join`
|
|
163
|
+
and `clear with` share one set of event names. `join` events have their own set:
|
|
164
|
+
once in `from` and once in a join is allowed. Each children, nested and variant
|
|
165
|
+
block starts fresh sets; separate projections are independent. Names compare
|
|
166
|
+
ordinally without resolving qualifications or generations. If the domain has a
|
|
167
|
+
genuine second fact, model it as its own event; never invent events only to
|
|
168
|
+
satisfy the read side. Full scope guidance: projections `references/pdl-grammar.md`.
|
|
169
|
+
|
|
150
170
|
## Reducer instance identity (PLAY0690)
|
|
151
171
|
|
|
152
172
|
| Code | Severity | Meaning / fix |
|
|
@@ -299,6 +319,17 @@ as errors if gating. Ordinary compile success does not imply these ran:
|
|
|
299
319
|
| purposes | PLAY0602–0606 | Personal-data coverage, special/criminal safeguards, basis and unused-purpose prompts; union of ancestor/direct references |
|
|
300
320
|
| personas | PLAY0574–0576 | Unused personas, unreachable gates and ambiguous buildable policy alternatives; unsynthesizable/undecidable is unknown |
|
|
301
321
|
|
|
322
|
+
For `query-keys` (PLAY0535), a collection `by` can match a same-named compatible
|
|
323
|
+
read-model field or composite key part, or the identity. A single-result `by`
|
|
324
|
+
still matches the identity, not an arbitrary field. Parameter optionality is
|
|
325
|
+
ignored for compatibility; `optional` alone does not establish a match. Identity
|
|
326
|
+
inference uses only single-result keyed queries, not collection queries, with
|
|
327
|
+
structurally resolved projection keys as fallback. Performer-served views,
|
|
328
|
+
tenant-context parameters and unknown identity types are skipped.
|
|
329
|
+
Requires Screenplay 4.212.1 (`screenplay --version`) for this check alignment;
|
|
330
|
+
older tools can warn on valid collection fields or optional parameters and infer
|
|
331
|
+
identity from collection queries. Upgrade before using those warnings as a gate.
|
|
332
|
+
|
|
302
333
|
Whole-source errors skip completeness checks. Unknown/opaque coverage is not
|
|
303
334
|
invented: report skipped status/coverage and walk field lineage manually.
|
|
304
335
|
|
|
@@ -359,20 +390,22 @@ refusal reasons. Read [language admission](language-admission.md) before changin
|
|
|
359
390
|
| PLAY0785 | Ambiguous view path; use distinct aliases on repeated reads |
|
|
360
391
|
| PLAY0786 (I) | Eligible legacy model; preview typed preamble repair, individually review absence/conflict semantics |
|
|
361
392
|
| PLAY0787 (W) | Exact deprecated Studio text-rule pattern; repair to literal rule or equality, preserving message/severity |
|
|
362
|
-
| STAGE-ESM-043 | Atomic mode not realized
|
|
393
|
+
| STAGE-ESM-043 | Atomic mode not realized in admitted v22–v27; retain declaration and gap-fill (v22 admission Requires Stage 4.139.0; older Stage reports -016) |
|
|
363
394
|
| STAGE-ESM-047 | Single-instance query by composite key parts (v27) in the renderer, until Chronicle can look up composite keys (Chronicle#4265); keep the query, gap-fill |
|
|
364
395
|
| STAGE-ESM-048 | Read model with several key parts, or projection keyed by parts (v27), in the renderer or legacy syntax engine; keep the model, gap-fill |
|
|
365
396
|
| STAGE-ESM-044 | Renderer refuses a protected read despite v25 admission: any protected read in a bundle that predates protected-read rendering, afterwards only shapes it cannot preserve (constrained events, read paths in `produces when`, optional/collection/composite/mistyped mapping targets, freshness scopes), naming the reason; the legacy Host/structural runner refuse the preamble. Semantic Host/executor support is separate; keep protection and gap-fill generated-app scope |
|
|
366
397
|
| STAGE-ESM-045 | Non-Error protected requirement; semantic Host/executor refuse before execution, including reaction-invoked commands; keep severity and report Unsupported |
|
|
367
398
|
| STAGE-IMPL-002 | Described handler body not realized by Stage, even Stub mode; no stubs emitted |
|
|
399
|
+
| STAGE-IMPL-003 | Reached reducer or command/concept validation body in semantic Host/executor; owner and RequirementId named, unrelated behavior remains admitted (Requires Stage 4.145.0; older engines refuse unrelated behavior too) |
|
|
400
|
+
| STAGE-PROFILE-001 to -006 | Shared target profile-input findings: unknown package, missing layout, incompatible packages, missing theme, invalid root template, unresolved blueprint template (Requires Stage 4.143.0; older consumers may check only in the CLI) |
|
|
368
401
|
|
|
369
402
|
Invalid match syntax remains PLAY0367. Property/concept text rules bind v24;
|
|
370
403
|
`contains`/`starts with` in conditions only still fail PLAY0268. Stage rejects
|
|
371
|
-
|
|
372
|
-
bodies or batches
|
|
373
|
-
protected read in an older bundle),
|
|
374
|
-
keys (STAGE-ESM-048/-047).
|
|
375
|
-
[language admission](language-admission.md) for
|
|
404
|
+
v28 and mixed pairs with STAGE-ESM-016; v1–v27 admission does not implement
|
|
405
|
+
bodies or batches. The renderer refuses protected reads it cannot preserve (STAGE-ESM-044; every
|
|
406
|
+
protected read in an older bundle), unsupported date-comparison shapes (STAGE-ESM-046;
|
|
407
|
+
all date comparisons before Stage 4.141.0) and composite read-model keys (STAGE-ESM-048/-047).
|
|
408
|
+
Read [language admission](language-admission.md) for Host outside-append commit behavior.
|
|
376
409
|
Requires Stage 4.129.0 for semantic Host/executor protected reads; older engines refuse -044.
|
|
377
410
|
|
|
378
411
|
## Binding (V2 and V3) - see `executable-subset.md` for the full table
|
|
@@ -266,8 +266,11 @@ DateTime input needs an offset or `Z`, else Validation rejects before rules, eve
|
|
|
266
266
|
for skipped comparisons. `then` matching stays ordinal. Invalid date literals or
|
|
267
267
|
offset-less DateTime literals in admitted comparisons report PLAY0273. Read
|
|
268
268
|
[date comparisons](../../cratis-screenplay-command-surface/references/date-comparisons.md)
|
|
269
|
-
for the complete window model and retained PLAY0268 refusals.
|
|
270
|
-
|
|
269
|
+
for the complete window model and retained PLAY0268 refusals. Requires Stage 4.141.0
|
|
270
|
+
for rendered date comparisons; older renderers refuse STAGE-ESM-046. Read
|
|
271
|
+
[rendered dates](../../cratis-stage-rendering-and-sandbox/references/date-comparisons.md)
|
|
272
|
+
when checking remaining refusals and input-binding differences. Standalone binding/reference
|
|
273
|
+
execution is independent of rendering.
|
|
271
274
|
|
|
272
275
|
## Flat composite read-model keys (ESM v27)
|
|
273
276
|
|
|
@@ -9,11 +9,11 @@ exact language/semantic pairs; binding, reference execution and rendering are se
|
|
|
9
9
|
|
|
10
10
|
| ESM | Selecting construct | Binding/reference behavior | Stage boundary |
|
|
11
11
|
| --- | --- | --- | --- |
|
|
12
|
-
| v22 | Application-root `reaction batches atomic` | Direct productions per trigger occurrence and each selected refusal branch are separate atomic batches; commands remain independent | v22
|
|
12
|
+
| v22 | Application-root `reaction batches atomic` | Direct productions per trigger occurrence and each selected refusal branch are separate atomic batches; commands remain independent | v22 admitted with a supporting bundle; atomic mode refused STAGE-ESM-043 |
|
|
13
13
|
| v23 | Pending `handler implementation` beside unconditional `produces` | Payload-only body; PLAY0695 information; reaching body gives Unsupported ImplementationBody | v23 admitted, body refused STAGE-IMPL-002 in renderer/Host/executor, even Stub mode |
|
|
14
14
|
| v24 | `contains`, `not contains`, `starts with`, `ends with` property/concept rules | Ordinal UTF-16, absent optional passes; not text-condition operators | v24 admitted; semantic Host/executor and generated ordinal comparisons preserve rules |
|
|
15
15
|
| 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
|
-
| v26 | Chronological command Date/DateTime comparisons | Same-primitive `==`, `!=`, `>`, `>=`, `<`, `<=`; DateTime UTC ticks and pre-rule offset validation | v26 admitted; Host/executor run it
|
|
16
|
+
| 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
17
|
| v27 | A read model with two or more `key` marks | Untyped projection `key` blocks, equality-filter lists, single-instance `by` blocks, per-part fixtures | v27 admitted; Host runs it, renderer refuses STAGE-ESM-048/-047, executor refuses specs over it |
|
|
18
18
|
| v28 | `==`/`!=` between Uuid values in command `require` and `produces when` | Uuid properties, Uuid concepts and identities, canonical literals; protected read paths in `require` only | v28 refused STAGE-ESM-016 |
|
|
19
19
|
|
|
@@ -35,7 +35,7 @@ Requires Stage 4.124.0 for v24 text-rule admission (`cratis --version` identifie
|
|
|
35
35
|
|
|
36
36
|
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.
|
|
37
37
|
|
|
38
|
-
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.
|
|
38
|
+
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).
|
|
39
39
|
|
|
40
40
|
Read [atomic batches and event-source invocation mappings](../../cratis-screenplay-captures-and-reactions/references/atomic-batches-and-source-mappings.md)
|
|
41
41
|
for atomic boundaries and the source-identity mapping prerequisite. Start new models
|
|
@@ -74,10 +74,20 @@ the same condition without Uuid operands keeps its earlier version. To see the s
|
|
|
74
74
|
the model with the `screenplay` MCP server and call `read-workspace` with `view` `executable-model`:
|
|
75
75
|
`languageVersion` reads `28.0`.
|
|
76
76
|
|
|
77
|
-
Stage's semantic engines admit exact v1–
|
|
78
|
-
pairs refuse STAGE-ESM-016.
|
|
77
|
+
Stage's semantic engines admit exact v1–v27 pairs. V28 and mixed
|
|
78
|
+
pairs refuse STAGE-ESM-016.
|
|
79
|
+
Requires Stage 4.139.0 for v22; older Stage refuses -016.
|
|
80
|
+
Admission is not admission of described bodies,
|
|
79
81
|
atomic mode or composite-key rendering, and protected reads render only in a bundle that supports them. A CLI may bundle an older compiler/Stage pair: run no-write render
|
|
80
82
|
admission rather than transferring a standalone verdict. Pattern diagnostics arise
|
|
81
83
|
in Screenplay before rendering; diagnostic arguments add no ESM version or new tool.
|
|
82
84
|
|
|
83
85
|
Requires Stage 4.135.0 for v26 admission and 4.137.0 for v27; older Stage refuses them with STAGE-ESM-016.
|
|
86
|
+
Requires Stage 4.141.0 to render date comparisons; older renderers refuse -046.
|
|
87
|
+
Read [rendered dates](../../cratis-stage-rendering-and-sandbox/references/date-comparisons.md)
|
|
88
|
+
when checking remaining -046 shapes and input-binding differences.
|
|
89
|
+
Requires Stage 4.145.0 for reach-scoped reducer/validation-body refusals
|
|
90
|
+
(STAGE-IMPL-003); older engines refuse unrelated behavior too. Described command
|
|
91
|
+
handlers retain STAGE-IMPL-002; renderer implementation admission is unchanged.
|
|
92
|
+
Read [sandbox boundaries](../../cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md)
|
|
93
|
+
when a semantic run reaches a body or uses an authored reaction clock.
|
|
@@ -23,10 +23,13 @@ and concept compliance (v13) render.
|
|
|
23
23
|
|
|
24
24
|
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
25
|
|
|
26
|
-
Stage admits exact ESM v1–
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
Stage admits exact ESM v1–v27 pairs; v28 and mixed pairs refuse STAGE-ESM-016.
|
|
27
|
+
Requires Stage 4.139.0 for v22 admission; older Stage refuses v22 with -016,
|
|
28
|
+
while atomic mode remains -043. Chronological command dates select v26.
|
|
29
|
+
Requires Stage 4.141.0 to render Date/DateTime comparisons; older renderers refuse -046.
|
|
30
|
+
Read [rendered dates](../../cratis-stage-rendering-and-sandbox/references/date-comparisons.md)
|
|
31
|
+
when checking remaining -046 shapes and input-binding differences. Version admission
|
|
32
|
+
is separate from construct support.
|
|
30
33
|
Requires Stage 4.106.0 for v18 admission; older Stage refuses it with `STAGE-ESM-016`.
|
|
31
34
|
For generated-concept v20/v21 admission and construct prerequisites, read
|
|
32
35
|
[Stage admission](../../cratis-stage-rendering-and-sandbox/references/admission.md).
|
package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json
CHANGED
|
@@ -33536,7 +33536,7 @@
|
|
|
33536
33536
|
"severities": [
|
|
33537
33537
|
"warning"
|
|
33538
33538
|
],
|
|
33539
|
-
"title": "A projection construct binds, but Chronicle\u0027s projection lowering drops part of it: all inside a children or nested block loses its subscription to every event type
|
|
33539
|
+
"title": "A projection construct binds, but Chronicle\u0027s projection lowering drops part of it: all inside a children or nested block loses its subscription to every event type.",
|
|
33540
33540
|
"reserved": false,
|
|
33541
33541
|
"retired": false
|
|
33542
33542
|
},
|
|
@@ -37838,6 +37838,17 @@
|
|
|
37838
37838
|
"meaning": "The command whose handler requires a constrained implementation attachment."
|
|
37839
37839
|
}
|
|
37840
37840
|
]
|
|
37841
|
+
},
|
|
37842
|
+
{
|
|
37843
|
+
"code": "PLAY0801",
|
|
37844
|
+
"name": "DuplicateEventInProjectionScope",
|
|
37845
|
+
"severity": "error",
|
|
37846
|
+
"severities": [
|
|
37847
|
+
"error"
|
|
37848
|
+
],
|
|
37849
|
+
"title": "An event is used more than once in one projection level\u0027s event or join set.",
|
|
37850
|
+
"reserved": false,
|
|
37851
|
+
"retired": false
|
|
37841
37852
|
}
|
|
37842
37853
|
],
|
|
37843
37854
|
"mcpTools": [
|
package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.
|
|
1
|
+
4.212.4
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
{ "kind": "skill-contains", "value": "XML doc comments" },
|
|
48
48
|
{ "kind": "skill-contains", "value": "cratis screenplay validate" },
|
|
49
49
|
{ "kind": "skill-contains", "value": "validating one file with `cratis screenplay validate file.play`", "file": "references/traps.md" },
|
|
50
|
-
{ "kind": "skill-contains", "value": "`notifications/initialized`" },
|
|
50
|
+
{ "kind": "skill-contains", "value": "`notifications/initialized`", "file": "references/verdicts.md" },
|
|
51
51
|
{ "kind": "skill-contains", "value": "Pending described handlers bind but do not execute their bodies" },
|
|
52
52
|
{ "kind": "skill-contains", "value": "STAGE-ESM-043", "file": "references/language-admission.md" },
|
|
53
53
|
{ "kind": "skill-contains", "value": "v25", "file": "references/language-admission.md" },
|
|
@@ -64,6 +64,13 @@
|
|
|
64
64
|
{ "kind": "skill-contains", "value": "RejectsAUsedGeneratedSource", "file": "references/generation-strategies-example.md" },
|
|
65
65
|
{ "kind": "skill-contains", "value": "bind as ESM v8" },
|
|
66
66
|
{ "kind": "skill-contains", "value": "PLAY0530/0531", "file": "references/diagnostics.md" },
|
|
67
|
-
{ "kind": "skill-contains", "value": "
|
|
67
|
+
{ "kind": "skill-contains", "value": "Requires Screenplay 4.212.1", "file": "references/diagnostics.md" },
|
|
68
|
+
{ "kind": "skill-contains", "value": "Identity\ninference uses only single-result keyed queries", "file": "references/diagnostics.md" },
|
|
69
|
+
{ "kind": "skill-contains", "value": "Editor versus C# verdicts", "file": "references/diagnostics.md" },
|
|
70
|
+
{ "kind": "skill-contains", "value": "PLAY0801 | E | `DuplicateEventInProjectionScope`", "file": "references/diagnostics.md" },
|
|
71
|
+
{ "kind": "skill-contains", "value": "Requires Screenplay 4.212.3", "file": "references/diagnostics.md" },
|
|
72
|
+
{ "kind": "skill-contains", "value": "`clear with` share one set of event names", "file": "references/diagnostics.md" },
|
|
73
|
+
{ "kind": "skill-contains", "value": "`join` events have their own set", "file": "references/diagnostics.md" },
|
|
74
|
+
{ "kind": "skill-contains", "value": "Each children, nested and variant\nblock starts fresh sets", "file": "references/diagnostics.md" }
|
|
68
75
|
]
|
|
69
76
|
}
|
|
@@ -11,9 +11,8 @@ ships a **renderer** (a .NET library, driven from a terminal by `cratis render`)
|
|
|
11
11
|
disposable **sandbox** container (`cratis/stage`, started by `cratis run`) and a
|
|
12
12
|
**specification runner** container (`cratis/stage-specrunner`).
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
whether it is admitted; reading the admission rules is not a render result.
|
|
14
|
+
A model Stage cannot render exactly produces **no artifacts**, never thinner ones.
|
|
15
|
+
Probe the model; admission rules are not a render result.
|
|
17
16
|
|
|
18
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).
|
|
19
18
|
|
|
@@ -22,9 +21,9 @@ Requires Cratis CLI 3.74.0 to render ESM v21–v26 models and 3.75.0 for v27; CL
|
|
|
22
21
|
## Batches, described handlers, text rules and protected reads
|
|
23
22
|
|
|
24
23
|
Read [language admission](../cratis-screenplay-toolchain/references/language-admission.md)
|
|
25
|
-
for v22–v25: text rules
|
|
26
|
-
not.
|
|
27
|
-
|
|
24
|
+
for v22–v25: text rules and admitted protected reads render; atomic batches and
|
|
25
|
+
described bodies do not. Semantic execution is separate from rendering. Stub mode
|
|
26
|
+
emits no described-body stubs. Keep protection and report refusal.
|
|
28
27
|
|
|
29
28
|
## When to use
|
|
30
29
|
|
|
@@ -73,12 +72,15 @@ Order: recover any interrupted publication, compile, bind, build the plan, plan
|
|
|
73
72
|
Exit `0` is a published render, `5` is a refusal with nothing published (diagnostics are
|
|
74
73
|
printed), `1` is a missing input. Add `-o json` for the counts and the publication receipt.
|
|
75
74
|
|
|
76
|
-
|
|
75
|
+
Key facts:
|
|
77
76
|
|
|
78
77
|
- **Binding uses the CLI's bundled compiler**, not the standalone one. Version admission
|
|
79
|
-
does not imply construct support: exact ESM v1–
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
does not imply construct support: exact ESM v1–v27 pairs are admitted;
|
|
79
|
+
v28 and mixed pairs refuse `STAGE-ESM-016`. Requires Stage 4.139.0 for v22 admission;
|
|
80
|
+
older Stage refuses v22 with `-016`, while atomic mode still refuses `-043`.
|
|
81
|
+
Requires Stage 4.141.0 to render v26 Date/DateTime command comparisons; older
|
|
82
|
+
renderers refuse `-046`. Read [references/date-comparisons.md](references/date-comparisons.md)
|
|
83
|
+
when rendering dates for the remaining refusals and input-binding differences. Pattern/random generation and checksum validation
|
|
82
84
|
render with an admitting renderer; `generate rule` renders in a new enough bundle (the Host and legacy syntax engine still refuse it with `STAGE-ESM-028`).
|
|
83
85
|
Read [references/admission.md](references/admission.md) for the introducing-release
|
|
84
86
|
prerequisites, all-Proven unpinned specifications and construct/pin checks (-011/-038).
|
|
@@ -116,7 +118,10 @@ modified stale artifacts. Recovery runs before planning:
|
|
|
116
118
|
|
|
117
119
|
## Admission
|
|
118
120
|
|
|
119
|
-
One blocker publishes nothing.
|
|
121
|
+
One blocker publishes nothing. Requires Stage 4.146.0 to collect independent admission
|
|
122
|
+
refusals in one plan; older renderers stop at earlier batches of checks. Target-profile
|
|
123
|
+
and unaudited-version refusals still stop first. Codes, limits and fixes:
|
|
124
|
+
[references/admission.md](references/admission.md).
|
|
120
125
|
|
|
121
126
|
- **Renders:** concepts/types/collections/optionals; portable StateChange and StateView slices,
|
|
122
127
|
flat/scoped projections, pure reducers and reducer `from` filters; keyed optional snapshots,
|
|
@@ -139,11 +144,9 @@ One blocker publishes nothing. Codes, limits and fixes: [references/admission.md
|
|
|
139
144
|
for ESM admission. Read the required typed `arguments.subject` for the command,
|
|
140
145
|
never match message text. Requires Screenplay 4.210.0 (`screenplay --version`);
|
|
141
146
|
older bundled binders use PLAY0268 for these handlers.
|
|
142
|
-
- **Binding refusals
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
pending handlers with unconditional productions bind v23, but neither renders. A read model with several key parts (v27) is admitted but refuses rendering (`STAGE-ESM-048`).
|
|
146
|
-
Never drop protection.
|
|
147
|
+
- **Binding refusals:** read toolchain `references/executable-subset.md` for
|
|
148
|
+
`PLAY0268`/`PLAY0271` families; binding is not rendering. V27 keys are admitted
|
|
149
|
+
but refuse rendering (`STAGE-ESM-048`). Never drop protection.
|
|
147
150
|
|
|
148
151
|
A refusal is not a licence to weaken the model: drop no specification, event generation or
|
|
149
152
|
protection to get a render; keep the model, record the capability gap and gap-fill.
|
|
@@ -156,19 +159,15 @@ prose is not enforced. A documentation edit changes managed-file hashes (a `--ch
|
|
|
156
159
|
Generated identities: read [shop strategy choices](references/choosing-generation.md) before
|
|
157
160
|
rendering a model with generated values. Case tables and whole numbers:
|
|
158
161
|
[case tables and whole numbers](references/case-tables-and-whole-numbers.md).
|
|
159
|
-
`[ProtectedDecision]
|
|
160
|
-
|
|
162
|
+
Gap-fill `[ProtectedDecision]`/`DecisionRead<T>` use still needs admission and
|
|
163
|
+
unit-of-work enrollment.
|
|
161
164
|
|
|
162
165
|
## What it emits
|
|
163
166
|
|
|
164
|
-
|
|
165
|
-
and
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
the `[EventType]` event, the validator and the `[ReadModel]` with its query, `scene.json`,
|
|
169
|
-
and a React/Vite frontend scaffold (`.frontend/`, `package.json`, `tsconfig.json`,
|
|
170
|
-
`.gitignore`). Per-file detail, the scaffold's dependency set and the `Customizations/`
|
|
171
|
-
contract, including the opt-in self-reducing layout for confirmed new Cratis C# applications:
|
|
167
|
+
Application plans hold the backend scaffold, concepts, commands/events/validators,
|
|
168
|
+
read models/queries and policies, plus Scene and React/Vite frontend artifacts.
|
|
169
|
+
Read the per-file scaffold, dependency and `Customizations/` contract, including
|
|
170
|
+
the opt-in self-reducing layout for confirmed new Cratis C# applications:
|
|
172
171
|
[references/rendered-application.md](references/rendered-application.md). Scene
|
|
173
172
|
package ids, host capabilities and the boundary from hand-built Components pages:
|
|
174
173
|
[references/scene-runtime.md](references/scene-runtime.md). A complete renderable model:
|
|
@@ -193,36 +192,19 @@ Silent fallback to a default screen is a failure, not a partial render.
|
|
|
193
192
|
|
|
194
193
|
## Sandbox and specification runner
|
|
195
194
|
|
|
196
|
-
`cratis run [PATH]` (Docker required) starts `cratis/stage
|
|
197
|
-
API on `9090`,
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
`STAGE-ESM-044`. Required absence rejects before requirements/generation, read properties
|
|
210
|
-
feed requirements and productions, and non-Error protected requirements refuse
|
|
211
|
-
`STAGE-ESM-045`, including reaction invocations. The Host faults on any outside append,
|
|
212
|
-
even unrelated facts; this is stricter than reference dependency-scoped conflicts.
|
|
213
|
-
Callers are built from unsigned headers, so
|
|
214
|
-
authorization there is not a security boundary.
|
|
215
|
-
|
|
216
|
-
`cratis/stage-specrunner` checks modeled specifications and writes a results file. The
|
|
217
|
-
default `structural` engine is deprecated and model-level only; `--engine semantic`
|
|
218
|
-
executes admitted specs through Arc's in-memory pipeline and reports `Passed`, `Failed`,
|
|
219
|
-
`Unsupported` or `Cancelled`. A green result is Stage semantic-engine evidence: not V4 and
|
|
220
|
-
not a rendered Debug test run. Commands, the report schema and limits:
|
|
221
|
-
[references/sandbox-and-specrunner.md](references/sandbox-and-specrunner.md).
|
|
222
|
-
|
|
223
|
-
Specification runner exit codes: `0` means the run completed and the results file was
|
|
224
|
-
written **even when a specification failed**, so read the outcomes; `1` is a missing or
|
|
225
|
-
uncompilable input; `2` a missing required argument or an invalid semantic option.
|
|
195
|
+
`cratis run [PATH]` (Docker required) starts the disposable `cratis/stage`, not a
|
|
196
|
+
generated application: API on `9090`, Workbench on `https://localhost:35000`.
|
|
197
|
+
Requires Cratis CLI 3.73.0 for the semantic engine by default, 3.75.0 for v27 keys;
|
|
198
|
+
older CLIs use the legacy EventModel engine, which does not enforce authorization.
|
|
199
|
+
Unsigned caller headers make sandbox authorization no security boundary.
|
|
200
|
+
Read [references/sandbox-and-specrunner.md](references/sandbox-and-specrunner.md)
|
|
201
|
+
before running either image: engine selection, protected reads, outside-append
|
|
202
|
+
conflicts/retries, reached bodies, authored occurrence and generated-spec limits live there.
|
|
203
|
+
|
|
204
|
+
`cratis/stage-specrunner --engine semantic` reports `Passed`, `Failed`, `Unsupported`
|
|
205
|
+
or `Cancelled`; deprecated structural mode is model-level only. Neither proves V4
|
|
206
|
+
or rendered Debug tests. Exit `0` means the report was written **even on failed specs**:
|
|
207
|
+
read outcomes. Exit `1` means missing/uncompilable input; `2` invalid arguments.
|
|
226
208
|
|
|
227
209
|
## Behavior walk (optional, after V3)
|
|
228
210
|
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
- Specification rules (`STAGE-ESM-011`)
|
|
12
12
|
- Refusals seen while drafting a model
|
|
13
13
|
|
|
14
|
-
Stage admits exact ESM v1–
|
|
15
|
-
constructs.
|
|
16
|
-
ESM v1–v27: Stage plans each model and refuses the constructs it cannot render with typed `STAGE
|
|
17
|
-
codes (
|
|
14
|
+
Stage admits exact ESM v1–v27 language/semantic pairs, then checks
|
|
15
|
+
constructs. V28 and mixed or unknown pairs report `STAGE-ESM-016`. `cratis render` admits
|
|
16
|
+
ESM v1–v27: Stage plans each model and refuses the constructs it cannot render with typed `STAGE-*`
|
|
17
|
+
codes (atomic batches report `STAGE-ESM-043`; unsupported v26 date shapes `STAGE-ESM-046`; v27 composite
|
|
18
18
|
read-model keys report `STAGE-ESM-048`/`-047`). The CLI refuses
|
|
19
19
|
a bound model above v27 with `CLI-RENDER-004` before planning; a construct its bundled compiler cannot bind
|
|
20
20
|
reports PLAY0268 instead.
|
|
@@ -38,15 +38,16 @@ opaque/unsupported rules refuse -005 before pin evaluation. Independent executio
|
|
|
38
38
|
always needs pins.
|
|
39
39
|
Requires Stage 4.124.0 for v24 text-rule admission (`cratis --version` identifies the CLI bundle); older renderers refuse v24 with STAGE-ESM-016.
|
|
40
40
|
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).
|
|
41
|
-
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
|
|
41
|
+
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.
|
|
42
42
|
Described handlers refuse STAGE-IMPL-002, even Stub mode; atomic mode in an
|
|
43
43
|
admitted pair refuses STAGE-ESM-043. Version admission never implements a body,
|
|
44
44
|
batch or composite-key rendering. Chronological Date/DateTime command comparisons
|
|
45
|
-
select v26. The semantic Host and specification executor run them
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
select v26. The semantic Host and specification executor run them.
|
|
46
|
+
Requires Stage 4.139.0 for v22 admission; older Stage refuses v22 with -016.
|
|
47
|
+
Requires Stage 4.141.0 for rendered date comparisons; older renderers and legacy
|
|
48
|
+
engines refuse -046. Read [date comparisons](date-comparisons.md) when rendering
|
|
49
|
+
v26 for the remaining -046 shapes and input-binding differences. Keep refused date
|
|
50
|
+
rules; never downgrade to ordinal text or millisecond precision.
|
|
50
51
|
|
|
51
52
|
Requires Stage 4.135.0 for v26 admission; older Stage refuses v26 with STAGE-ESM-016.
|
|
52
53
|
|
|
@@ -61,6 +62,13 @@ prerequisite. The exhaustive construct table is `references/renderable-subset.md
|
|
|
61
62
|
One blocking diagnostic fails the **whole** plan and nothing is published (exit 5).
|
|
62
63
|
Informational diagnostics (`PLAY0270` authoring metadata, `PLAY0469`, `STAGE-ESM-023`) do not.
|
|
63
64
|
|
|
65
|
+
Requires Stage 4.146.0 for one plan collecting all independent version-feature,
|
|
66
|
+
implementation-envelope, typed-context, event-lineage, slice, specification and Scene
|
|
67
|
+
admission refusals; older renderers return earlier batches first. Duplicate refusals
|
|
68
|
+
are listed once; refusals already collected survive an unexpected model shape.
|
|
69
|
+
A target-profile mismatch or unaudited ESM version still stops before these checks.
|
|
70
|
+
Classify the complete plan before editing; another probe is still required after fixes.
|
|
71
|
+
|
|
64
72
|
A refusal can come from four layers, and the code tells you which: compilation and binding
|
|
65
73
|
(`PLAY*`, from the CLI's bundled Screenplay), execution planning (`PLAN-*`), Stage
|
|
66
74
|
admission (`STAGE-*`) and the CLI itself (`CLI-RENDER-*`). A publication conflict (a
|
|
@@ -149,13 +157,13 @@ Requires Stage 4.90.0 for snapshot/live lists, 4.96.0 for non-text secrets and 4
|
|
|
149
157
|
| `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 |
|
|
150
158
|
| `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 |
|
|
151
159
|
| `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 |
|
|
152
|
-
| `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/performer and a list-query `by` block remain PLAY0268; a read model with several key parts (v27) refuses `STAGE-ESM-
|
|
160
|
+
| `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/performer and a list-query `by` block remain PLAY0268; a read model with several key parts (v27) refuses `STAGE-ESM-048` |
|
|
153
161
|
| `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 |
|
|
154
162
|
| `STAGE-ESM-012` | Generated C# names collide (properties, types, namespaces, constraints) | Rename |
|
|
155
163
|
| `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 |
|
|
156
164
|
| `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 |
|
|
157
165
|
| `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 |
|
|
158
|
-
| `STAGE-ESM-016` | Model language/semantic pair is not admitted by the installed Stage; exact v1–
|
|
166
|
+
| `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 |
|
|
159
167
|
| `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 |
|
|
160
168
|
| `STAGE-ESM-018` | `$strings.` key missing in the default locale or containing formatting characters | Fix the strings |
|
|
161
169
|
| `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 |
|
|
@@ -179,9 +187,11 @@ Requires Stage 4.90.0 for snapshot/live lists, 4.96.0 for non-text secrets and 4
|
|
|
179
187
|
| `STAGE-ESM-043` | `reaction batches atomic` in an admitted version pair | Keep the batch boundary; gap-fill without splitting it |
|
|
180
188
|
| `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 |
|
|
181
189
|
| `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 |
|
|
182
|
-
| `STAGE-ESM-046` |
|
|
190
|
+
| `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) |
|
|
183
191
|
| `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 |
|
|
184
192
|
| `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 |
|
|
193
|
+
| `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 |
|
|
194
|
+
| `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 |
|
|
185
195
|
| `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 |
|
|
186
196
|
| `STAGE-ESM-023` | Information: transition bodies analysed | none |
|
|
187
197
|
| `STAGE-CRATIS-001` to `-005` | Profile or `scene.json` not the package-owned shape; unrecognized or missing scaffold input; artifact path collision (`-004`, for example case names that normalize to one path); a modeled module or feature that would render into the reserved `Customizations/` (`-005`) | Rename the module, feature or case |
|