@cratis/pi 7.64.0 → 7.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/corpus/product-sync.json +4 -4
- package/package/corpus/skills/cratis-fundamentals-concept/references/shop-generation.md +16 -3
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +2 -1
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +3 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +2 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +30 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/protected-reads.md +15 -5
- package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +2 -2
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +1 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generated-recovery.md +14 -2
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +2 -2
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/screen-authoring-workflow.md +13 -0
- package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/principles.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +1 -1
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +3 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +3 -1
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +6 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +1 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +1 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +1 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +1 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +1 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +3 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostic-arguments.md +7 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +26 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/language-admission.md +5 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/preferred-syntax.md +2 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +4 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +308 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +1 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +4 -3
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/application-shell.md +1 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +1 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/ui-profile-and-theme.md +124 -2
- package/package/corpus/skills/cratis-screenplay-ui-composition/verification.json +25 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +12 -4
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +5 -3
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +41 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +32 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/scene-runtime.md +10 -0
- package/package.json +1 -1
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
],
|
|
47
47
|
"rules": []
|
|
48
48
|
},
|
|
49
|
-
"notes": "Source-checked Stage v4.103.0: exact ESM v1-v17 and v19, not v18 or v20 (v18 admitted from 4.106.0 and v20 from 4.109.0, taught with Requires lines; 4.104-4.108 not otherwise reviewed). Snapshot/live collection queries, identity-mapping all projections, stored event names, event-id publication checks, release-baseline warnings, command clock/receipt-time generation, conditional and multi-command slices, generated text constraints, no-event and bounded redelivery specs, refusal branches. Query concept validation still uses primitive workaround; Stage#370 released in 4.106.0. CLI v3.62.0 bundles Stage 4.99.0, not 4.103.0. Generated-values-only delta checked at v4.127.0: v21/all-Proven unpinned specs from 4.115.0, warning/info generated rules 4.117.0, checksum validation 4.118.0, pattern/random factories/Host/executor 4.119.0; generate rule still STAGE-ESM-028. Language admission reconciled at the same v4.127.0 tag: exact v1-v21 and v23-v25 pairs; v22/v26 and mixed pairs -016, protected reads -044, atomic mode -043, described bodies STAGE-IMPL-002 even Stub mode; v24 first admitted 4.124.0 (absent 4.123.0).
|
|
49
|
+
"notes": "Source-checked Stage v4.103.0: exact ESM v1-v17 and v19, not v18 or v20 (v18 admitted from 4.106.0 and v20 from 4.109.0, taught with Requires lines; 4.104-4.108 not otherwise reviewed). Snapshot/live collection queries, identity-mapping all projections, stored event names, event-id publication checks, release-baseline warnings, command clock/receipt-time generation, conditional and multi-command slices, generated text constraints, no-event and bounded redelivery specs, refusal branches. Query concept validation still uses primitive workaround; Stage#370 released in 4.106.0. CLI v3.62.0 bundles Stage 4.99.0, not 4.103.0. Generated-values-only delta checked at v4.127.0: v21/all-Proven unpinned specs from 4.115.0, warning/info generated rules 4.117.0, checksum validation 4.118.0, pattern/random factories/Host/executor 4.119.0; generate rule still STAGE-ESM-028. Language admission reconciled at the same v4.127.0 tag: exact v1-v21 and v23-v25 pairs; v22/v26 and mixed pairs -016, protected reads -044, atomic mode -043, described bodies STAGE-IMPL-002 even Stub mode; v24 first admitted 4.124.0 (absent 4.123.0). Reviewed v4.128.0-v4.130.0 deltas for Cratis/AI#739: v4.128.0 new-application self-reducing Cratis C# profile (CreateNewApplicationProfile, ReducerConventionInput.Read, WithReducerConvention; existing callers classic); shared SemanticValidationRules.Check confirmed (already present in v4.127.1, so no new 4.128.0 minimum claimed); v4.129.0 semantic Host/executor protected reads, presence before requirements/generation, read-backed requirements/mappings, non-Error requirements STAGE-ESM-045 including reaction invocations, Host fault on any outside append (stricter than reference scoped conflict). Renderer/legacy Host/structural runner retain STAGE-ESM-044. v4.130.0 root-template shell, options/appearance and fail-closed startup/planning findings reviewed in stage-rendering.md, RootShell.cs and stageShell.ts. Exact pairs remain v1-v21 and v23-v25; v26 refused STAGE-ESM-016 and Stage#473 still open. Earlier unreviewed deltas remain as noted above, so synced stays at the last fully reviewed release. No new render/browser/Docker probe."
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
52
|
"id": "arc",
|
|
@@ -171,9 +171,9 @@
|
|
|
171
171
|
}
|
|
172
172
|
],
|
|
173
173
|
"synced": {
|
|
174
|
-
"version": "4.
|
|
174
|
+
"version": "4.201.0",
|
|
175
175
|
"date": "2026-10-16",
|
|
176
|
-
"by": "Cratis/AI#
|
|
176
|
+
"by": "Cratis/AI#733"
|
|
177
177
|
},
|
|
178
178
|
"covers": {
|
|
179
179
|
"skills": [
|
|
@@ -201,7 +201,7 @@
|
|
|
201
201
|
],
|
|
202
202
|
"rules": []
|
|
203
203
|
},
|
|
204
|
-
"notes": "Standalone 4.
|
|
204
|
+
"notes": "Standalone 4.201.0 and byte-identical compiler contract pinned. Cratis/AI#733: the ui profile root template, shell options, appearance and new screens default (PLAY0788-PLAY0799, quick fix for the legacy layout line, ui-profiles MCP tool, 44 tools). Cratis/AI#735: chronological Date/DateTime ordering in command conditions and command/property literal validation (ESM v26), UTC tick precision and pre-rule offset validation; then matching remains ordinal. Source-checked Screenplay v4.199.0 commands, diagnostics, interoperability and specifications documentation plus decision 0087. Stage v4.127.1 still refuses v26 with STAGE-ESM-016 (stage-rendering.md and SemanticVersionFeatures.Supports); no render/runtime probe. Cratis/AI#576: prior mechanical compiler catch-up. Language batch #717/#722/#723/#724/#720/#728/#734 teaches atomic reaction batches (v22), described payload handlers (v23), portable linear matching, ordinal text rules (v24), protected command reads (v25), diagnostic arguments and event-source invokes mappings. Facts read at Screenplay v4.198.0 and introducing tags; Stage v4.127.0 admits exact v1-v21 and v23-v25 pairs but refuses v22/v26 and mixed pairs (STAGE-ESM-016), protected reads (044), atomic mode (043) and described handlers (STAGE-IMPL-002), even Stub mode. Stage text rules execute/render; no new renderer/runtime probe or Stage pin uplift. Cratis/AI#706: application navigation regions (module inherit, extend or override), toolbar slice buttons, blueprint template references and sample data packs in cratis-screenplay-ui-composition (references/application-shell.md), with the canonical shell vector and the rejection codes PLAY0710-PLAY0722 and PLAY0740-PLAY0765. Examples moved to the executable-state rules since 4.164: translator reactions in an Automation slice beside the Translate slice (PLAY0694) and the first record of a capture key appended with `when added`. Earlier: Standalone 4.164.0 and byte-identical compiler contract pinned. Cratis/AI#663: one origin per capture (PLAY0687). #668: executable no-event/redelivery v17. #684: concept query-argument validation in every version and query-error assertions v18. #681: executable refusal branches and refusal values v19. #666: proposal summary/severity counts and exact structural source proposals. Generated-concept rules select v20 with PLAY0688/0689 proofs and derived-matches repair; generated secrets and preview strategies remain refused. Release-baseline from-esm admission reads storedName. Standalone binding is not renderer admission: Stage 4.103.0 admits v1-v17 and v19; CLI 3.62.0 bundles Screenplay 4.159.0 / Stage 4.99.0 and renders through v16. Prior evidence remains unless superseded; no new renderer, Docker or browser probe."
|
|
205
205
|
},
|
|
206
206
|
{
|
|
207
207
|
"id": "scene",
|
|
@@ -74,9 +74,10 @@ has 74 random bits and the TypeID `order_` prefix. Default NanoID is 21 symbols
|
|
|
74
74
|
with 126 bits; bytes use unpadded base64url (43 symbols for 32 bytes).
|
|
75
75
|
|
|
76
76
|
`IGeneratableInContext<TSelf>` requires `static abstract TSelf New(GenerationContext)`.
|
|
77
|
-
`GenerationContext`
|
|
78
|
-
`Tenant`; `DefaultTenant` is the
|
|
79
|
-
string. The shop passes time and
|
|
77
|
+
Fundamentals' `Cratis.Concepts.GenerationContext` is a readonly record struct with
|
|
78
|
+
one captured `DateTimeOffset Now` and a String `Tenant`; `DefaultTenant` is the
|
|
79
|
+
zero-GUID string, never a display name or empty string. The shop passes time and
|
|
80
|
+
tenant together, for example:
|
|
80
81
|
|
|
81
82
|
```csharp excerpt
|
|
82
83
|
var context = new GenerationContext(
|
|
@@ -91,6 +92,18 @@ A domain factory can read Tenant, but arbitrary tenant IDs cannot be inserted
|
|
|
91
92
|
into a TypeID prefix (only lowercase letters/underscores, letter endpoints).
|
|
92
93
|
Do not present a tenant-prefixed custom string as standard TypeID.
|
|
93
94
|
|
|
95
|
+
For Screenplay `generate rule`, this Fundamentals type is the **Cratis C# target's**
|
|
96
|
+
binding of the language-neutral Now/Tenant descriptor, not the universal runtime
|
|
97
|
+
type. `Cratis.Screenplay.Contexts.GenerationContext` remains a BCL-only record with
|
|
98
|
+
portable `TenantId Tenant`, not a Fundamentals alias. The selected provider, not
|
|
99
|
+
`csharp` or a file reference, chooses the binding. Portable C# uses `context.Now`,
|
|
100
|
+
BCL operations and tenant text (for example `$"{context.Tenant}"`, compared ordinally).
|
|
101
|
+
Passing the whole context to `GenerateValue.*`, naming/constructing GenerationContext,
|
|
102
|
+
using `DefaultTenant` or reading `Tenant.Value` is target-bound. Never add a bridge
|
|
103
|
+
or claim Stage renders a rule merely because its Cratis binding is defined; read
|
|
104
|
+
[generation context binding](../../cratis-screenplay-command-surface/references/generated-values-and-responses.md#generation-context-binding)
|
|
105
|
+
for the compiler prerequisite and renderer refusal.
|
|
106
|
+
|
|
94
107
|
Use the context form only for time/tenant-dependent generation. If both interfaces
|
|
95
108
|
are implemented, callers choose context; the interfaces themselves do not dispatch.
|
|
96
109
|
Time-ordered built-in context overloads reject default Now (`MissingGenerationTime`)
|
|
@@ -171,7 +171,8 @@ or actor that nobody confirmed. Read `references/worked-integration.md` when you
|
|
|
171
171
|
separate binder check.
|
|
172
172
|
- A trigger with `reads` that `produces` directly fails binding: decide in a command.
|
|
173
173
|
Command reads can protect with `command reads protected` and admitted shapes (v25);
|
|
174
|
-
trigger reads cannot.
|
|
174
|
+
trigger reads cannot. The Cratis C# renderer refuses protected reads (STAGE-ESM-044);
|
|
175
|
+
semantic execution is separate from generated-app protection.
|
|
175
176
|
- An authorized command exercised in a spec without `given caller` is PLAY0389 at binding.
|
|
176
177
|
- A list query (`=> Item[]`) binds (a snapshot list is not rendered, `STAGE-ESM-010`);
|
|
177
178
|
a clock sweep that iterates items needs a code body the reference does not run
|
|
@@ -104,7 +104,9 @@ binding, because its decision dependency cannot be protected. A reaction that on
|
|
|
104
104
|
command's own reads. Eligible command reads protect under application-root
|
|
105
105
|
`command reads protected` (ESM v25); legacy reads retain PLAY0271. Read command-surface
|
|
106
106
|
[protected reads](../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
107
|
-
for admission and absence/conflict behavior. Stage admits v25
|
|
107
|
+
for admission and absence/conflict behavior. Stage admits v25; the Cratis C# renderer refuses protected reads with STAGE-ESM-044.
|
|
108
|
+
Semantic Host/executor support is separate; non-Error protected requirements refuse -045,
|
|
109
|
+
including reaction-invoked commands.
|
|
108
110
|
`where` over read paths out of scope, and `where` needs
|
|
109
111
|
every operand to resolve from the trigger's declared scalar occurrence shape (listed in
|
|
110
112
|
the input selection or not; nested paths and read aliases fail binding): keep the logic that uses the state in
|
|
@@ -151,7 +151,8 @@ view name when that view is read once.
|
|
|
151
151
|
Opt eligible state reads into application-root `command reads protected` (v25).
|
|
152
152
|
Absence rejects; matching intervening facts conflict. Read [protected reads](references/protected-reads.md)
|
|
153
153
|
for strict admission, paths and PLAY0780–0786. Legacy reads stay unprotected;
|
|
154
|
-
reads/concurrency cannot combine (PLAY0783).
|
|
154
|
+
reads/concurrency cannot combine (PLAY0783). The Cratis C# renderer refuses protected reads (STAGE-ESM-044), not v25 itself;
|
|
155
|
+
semantic Host/executor support is separate.
|
|
155
156
|
Uniqueness still uses a constraint; reference success is not target realization.
|
|
156
157
|
|
|
157
158
|
Do not use `reads` to fetch data the caller could supply. A composite-key view's `by` block is
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
- Choosing a strategy
|
|
6
6
|
- When not to
|
|
7
7
|
- The concept declares how; the property declares that
|
|
8
|
+
- Generation context binding
|
|
8
9
|
- Inspect and edit generation through MCP
|
|
9
10
|
- Generated-concept rules (ESM v20)
|
|
10
11
|
- Version and freshness
|
|
@@ -94,6 +95,35 @@ checks only suffix shape on fixtures. `generate sequence` stays reserved (PLAY06
|
|
|
94
95
|
and compliance markers on generated concepts, including secrets, remain refused.
|
|
95
96
|
Never remove classification to make a model bind.
|
|
96
97
|
|
|
98
|
+
## Generation context binding
|
|
99
|
+
|
|
100
|
+
Requires Screenplay 4.181.1 or later (`screenplay --version`) for per-target context
|
|
101
|
+
binding and tenant value formatting; older context documentation does not establish
|
|
102
|
+
that binding. The version-1 ValueGeneration descriptor is language-neutral: `Now`
|
|
103
|
+
(an instant), portable `TenantId` `Tenant`, and a String result. The selected provider,
|
|
104
|
+
not a `csharp` fence or file attachment, chooses the native context type.
|
|
105
|
+
|
|
106
|
+
The Cratis C# target (Arc and Stage's Cratis target contract) binds it to Fundamentals'
|
|
107
|
+
`Cratis.Concepts.GenerationContext` (`DateTimeOffset Now`, `string Tenant`). BCL-only
|
|
108
|
+
hosts can use `Cratis.Screenplay.Contexts.GenerationContext` (`Now`, `TenantId Tenant`);
|
|
109
|
+
that package stays BCL-only. The types are name-compatible, not type-identical.
|
|
110
|
+
|
|
111
|
+
For portable C# bodies, use `context.Now`, BCL operations and the tenant as text:
|
|
112
|
+
`$"{context.Tenant}:{context.Now:yyyyMMdd}"`. `TenantId` formats as its value;
|
|
113
|
+
compare that formatted string ordinally when a tenant comparison is needed.
|
|
114
|
+
Passing `context` to `GenerateValue.*`, naming `GenerationContext` or
|
|
115
|
+
`GenerationContext.DefaultTenant`, constructing a context, or reading
|
|
116
|
+
`context.Tenant.Value` is target-bound.
|
|
117
|
+
|
|
118
|
+
For example, `generate rule TenantReceiptNew` can own the inline `csharp` body
|
|
119
|
+
`return $"{context.Tenant}:{GenerateValue.Ulid(context)}";` on the Cratis C# binding.
|
|
120
|
+
Do not insert a bridge to Screenplay's record or promise another provider accepts it.
|
|
121
|
+
Arc can recover such self-contained compound bodies under the adapter gate in
|
|
122
|
+
[generated recovery](../../cratis-screenplay-legacy-extraction/references/generated-recovery.md).
|
|
123
|
+
Recovery does not run the body; reference execution consumes a String pin, opaque
|
|
124
|
+
entropy cannot supply an identifier, and Stage rendering still refuses `generate rule`
|
|
125
|
+
with STAGE-ESM-028. A target binding contract is not released renderer support.
|
|
126
|
+
|
|
97
127
|
## Inspect and edit generation through MCP
|
|
98
128
|
|
|
99
129
|
A concept `generation` summary and entropy repairs are available.
|
package/package/corpus/skills/cratis-screenplay-command-surface/references/protected-reads.md
CHANGED
|
@@ -105,9 +105,19 @@ explicit `apply`. The repair inserts into the domain document or sole document,
|
|
|
105
105
|
refuses ambiguous roots and requires individual review, never fix-all. It changes
|
|
106
106
|
absence/conflict behavior, not merely formatting.
|
|
107
107
|
|
|
108
|
-
Stage admits ESM v25 but refuses protected reads with
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
108
|
+
Stage admits ESM v25, but the Cratis C# renderer refuses protected reads with
|
|
109
|
+
STAGE-ESM-044: no artifacts are emitted. Preserve protection and deliver authorized
|
|
110
|
+
hand-written enforcement through render-and-gap-fill; never remove the preamble.
|
|
111
|
+
|
|
112
|
+
Requires Stage 4.129.0 for semantic Host/specification-executor protected reads;
|
|
113
|
+
older engines refuse STAGE-ESM-044. They require presence before requirements or
|
|
114
|
+
generation and use stored read properties in requirements and produced mappings,
|
|
115
|
+
including reaction-invoked commands. Any non-Error requirement on a protected
|
|
116
|
+
command refuses STAGE-ESM-045 before execution, even when a rejection is expected.
|
|
117
|
+
Legacy Host and structural runner still refuse the preamble with STAGE-ESM-044.
|
|
118
|
+
The semantic Host faults on any outside append, even an unrelated one, before
|
|
119
|
+
committing an accepted command: stricter than dependency-scoped reference conflicts,
|
|
120
|
+
not proof of full conflict parity. Read Stage's [sandbox boundaries](../../cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md#protected-command-reads).
|
|
121
|
+
A semantic-engine pass is separate from reference behavior and from generated Arc
|
|
122
|
+
protection. `screenplay <root> --warnaserror` must exit zero;
|
|
113
123
|
`screenplay test <root>` separately establishes reference behavior, not target support.
|
|
@@ -174,8 +174,8 @@ compile or will not be safe. Both are deliberate.
|
|
|
174
174
|
rejects and matching decide/commit changes conflict. Read
|
|
175
175
|
[protected reads](../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
176
176
|
for the strict shape and paths. Legacy reads remain PLAY0271; `concurrency` is
|
|
177
|
-
not protection and cannot combine with protected reads.
|
|
178
|
-
(STAGE-ESM-044), not v25 itself:
|
|
177
|
+
not protection and cannot combine with protected reads. The Cratis C# renderer refuses protected reads
|
|
178
|
+
(STAGE-ESM-044), not v25 itself: semantic Host/executor support is not generated-app protection.
|
|
179
179
|
Write state-dependent rules as `reads` plus `require` with an indented message;
|
|
180
180
|
mark refused shapes as unenforced and name the intended target mechanism. Model uniqueness as a `unique` constraint. Never copy state into a
|
|
181
181
|
command input, add an attestation flag, or hide the rule in `handler` prose. Do not
|
package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md
CHANGED
|
@@ -34,7 +34,7 @@ Tool versions and consumer boundaries: toolchain `SKILL.md`.
|
|
|
34
34
|
| Compliance concepts | Bare `pii`/`personal` and `secret`, qualifiers and scope bind as v13; enum/identity compliance and events combining personal or explicitly subject-scoped secret values with an explicit `subject` mark refuse PLAY0268 at binding only. A CLI bundle that admits v13 binds markers; Stage renders v13 protection, not protected identities/enums or subject lineage. Never remove protection |
|
|
35
35
|
| Identity details / processing purposes / event subject | Report-only metadata; executable detail reads refuse PLAY0268, not source declaration errors |
|
|
36
36
|
| Composite stream ids | v8 routing; complete named parts/canonical comparisons, PLAY0515 refuses protected keys/sources; not a legacy text split |
|
|
37
|
-
| Command reads/concurrency | Eligible reads opt into v25 with `command reads protected`; legacy reads/concurrency retain PLAY0271;
|
|
37
|
+
| Command reads/concurrency | Eligible reads opt into v25 with `command reads protected`; legacy reads/concurrency retain PLAY0271; the Cratis C# renderer refuses protected reads (STAGE-ESM-044), not the v25 pair; semantic Host/executor support is separate |
|
|
38
38
|
| Invokes-only trigger reads | Report-only, not protected state; direct production with reads refuses |
|
|
39
39
|
| Generated values/responses | v7 binding/reference execution; v15 strategies/strict fixtures/freshness. Stage renders supported UUID/String strategies, responses and fixtures; unsupported types/combinations remain -028/-038 |
|
|
40
40
|
| Sources/streams and command/specification routes | v8 binding/reference execution; the CLI (toolchain `references/renderable-subset.md`) reaches Stage checks through its bundled ceiling (v16 without v17 support) |
|
package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generated-recovery.md
CHANGED
|
@@ -123,8 +123,20 @@ Guid, RandomNumberGenerator and GenerateValue are allowlisted; multi-statement
|
|
|
123
123
|
bodies can qualify. Compound time-based calls must pass the captured context.
|
|
124
124
|
Private helpers, fields, DI, aliases/static imports, ambient time, raw Default
|
|
125
125
|
comparisons and external dependencies remain SP0073; no file fallback is invented.
|
|
126
|
-
|
|
127
|
-
|
|
126
|
+
For example, a proven forwarding factory returning
|
|
127
|
+
`new($"{context.Tenant}:{context.Now:yyyyMMdd}:{GenerateValue.Ulid(context)}")`
|
|
128
|
+
recovers `generate rule <Concept>New` with inline body
|
|
129
|
+
`return $"{context.Tenant}:{context.Now:yyyyMMdd}:{GenerateValue.Ulid(context)}";`.
|
|
130
|
+
The compound call remains a rule, not an inferred built-in ULID strategy.
|
|
131
|
+
|
|
132
|
+
This uses the Cratis C# binding to Fundamentals' `Cratis.Concepts.GenerationContext`,
|
|
133
|
+
not Screenplay's BCL-only record. Passing `context` to `GenerateValue.*` makes the
|
|
134
|
+
body target-bound; a `csharp` tag alone does not select that binding. `Now` and the
|
|
135
|
+
tenant formatted as text are the portable subset; other providers must admit the
|
|
136
|
+
body against their own native type. Read the command-surface [binding guide](../../cratis-screenplay-command-surface/references/generated-values-and-responses.md#generation-context-binding)
|
|
137
|
+
when deciding whether to retain target-bound code. Recovery preserves the body but
|
|
138
|
+
neither executes it nor proves another target can compile it. Opaque entropy is
|
|
139
|
+
unknown, so a rule cannot supply an identifier.
|
|
128
140
|
The concept owns `generate`; each command property only marks generation.
|
|
129
141
|
Use the shared [strategy reference](../../cratis-screenplay-command-surface/references/generated-values-and-responses.md)
|
|
130
142
|
for exact encodings, ranges, entropy and admission, rather than duplicating them.
|
package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md
CHANGED
|
@@ -271,7 +271,7 @@ See read-surface `references/named-keys.md` for the collection-key exclusion alg
|
|
|
271
271
|
| Atomic reaction batches (ESM v22) | Root `reaction batches atomic`; direct productions per occurrence and selected refusal branches are separate batches, commands independent; Stage refuses v22 and atomic mode |
|
|
272
272
|
| Described handlers (ESM v23) | Pending implementation beside unconditional produces; payload-only contract, reached body Unsupported ImplementationBody; Stage STAGE-IMPL-002 even Stub mode |
|
|
273
273
|
| Ordinal text rules (ESM v24) | contains/not contains/starts with/ends with on scalar non-enum text properties; quoted literals, not conditions; Stage semantic engines execute/render |
|
|
274
|
-
| Protected command reads (ESM v25) | Root `command reads protected`; eligible read paths in requirements and production mappings, absence Validation, concurrent matching facts Conflict; Stage admits v25
|
|
274
|
+
| Protected command reads (ESM v25) | Root `command reads protected`; eligible read paths in requirements and production mappings, absence Validation, concurrent matching facts Conflict; Stage admits v25; Cratis C# rendering refuses STAGE-ESM-044, semantic Host/executor execute admitted reads with non-Error protected requirements refused STAGE-ESM-045 |
|
|
275
275
|
| Chronological command dates (ESM v26) | Same-primitive Date/DateTime `==`, `!=`, `>`, `>=`, `<`, `<=` in require/produces-when (property or literal RHS) and command/property rules (literal RHS only). DateTime uses UTC ticks, participating offset-less inputs reject Validation before rules; then matching stays ordinal. Requires Screenplay 4.199.0 (`screenplay --version`); older binders refuse PLAY0268. Stage refuses v26 STAGE-ESM-016. Read command-surface `references/date-comparisons.md`. |
|
|
276
276
|
| Current routing and actor admission | Sources/streams and command/specification routes bind and reference-execute as v8; reaction `runs as system role` supplies the invocation actor as v10. Whole-workspace binding determines executable availability; CLI/Stage realization remains separate |
|
|
277
277
|
| Blocks binding (`PLAY0268`) | enum/identity compliance and events combining personal or explicitly subject-scoped secret values with explicit subject marks; a compiler that stops before v13 refuses all `pii`/`secret` concepts ("compliance attributes require portable data-subject semantics"), while v13 binds them and Stage renders protection; attached command `handler` (PLAY0035 beside productions; pending described intent instead binds v23), bare `rule <Name>`, read paths without protected opt-in or in unsupported positions such as `produces when`, date comparisons with mixed primitives, optional condition operands, `$context`, protected read paths or `today`, date rules on concepts or reaction `where`, `$context.tenant`/claims/roles/causation in `produces`, `$env` conditions, `file` constraints, unquoted `import` of an external contract, a read model with neither explicit `key` nor unambiguous query-based identity as described above (composite keys remain unadmitted), queries with context `from` sources (typed query context is unadmitted), single-result filters (collections only), `scoped to` (opaque scope), `performer` (opaque implementation) or composite `by` blocks; optional keyed and collection queries, including caller-supplied equality filters and observable delivery, bind, `$causedBy` and templates in projections |
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
- Formatting and recovery limits
|
|
26
26
|
- Code attachments
|
|
27
27
|
|
|
28
|
-
The standalone MCP server lists
|
|
28
|
+
The standalone MCP server lists 44 tools (including the MCP-Apps visualization tool); `tools/list` is the authority for the installed server.
|
|
29
29
|
|
|
30
30
|
The supported CLI launch is `cratis screenplay mcp <model-root>`, or `cratis screenplay mcp`
|
|
31
31
|
alone inside a project, where the CLI locates the model (the project's `.play` files, else
|
|
@@ -51,7 +51,7 @@ the [MCP loop](mcp-loop.md).
|
|
|
51
51
|
| --- | --- | --- |
|
|
52
52
|
| Understanding | `describe-application`, `search-declarations`, `find-declaration`, `declaration-details` | Navigate logical hierarchy and inspect bounded details |
|
|
53
53
|
| References and examples | `find-references`, `dependencies`, `dependency-graph`, `find-fixtures`, `find-assertion-gaps`, `find-specification-obligations`, `find-modeling-smells`, `semantic-diff` | Inspect declared relationships and authored examples, not executed coverage |
|
|
54
|
-
| Source and validation | `diagnostics`, `read-document`, `merged-document`, `syntax-schema` | Read exact source or typed structure and diagnose problems |
|
|
54
|
+
| Source and validation | `diagnostics`, `ui-profiles`, `read-document`, `merged-document`, `syntax-schema` | Read exact source or typed structure and diagnose problems |
|
|
55
55
|
| Workspace inspection | `open-workspace`, `read-workspace`, `read-ast`, `workspace-state`, `export-workspace`, `repair-capabilities` | Obtain current identities, handles, readiness, code attachment requirements, source-map locations, durable-state status and the repair catalog |
|
|
56
56
|
| Visual (MCP-Apps hosts only) | `visualize-model` | Draw the board for the model or a `proposalId`; its `sketch` argument previews a what-if of whole documents. Reads only |
|
|
57
57
|
| Planning | `propose-source`, `propose-ast`, `propose-rename`, `propose-move`, `propose-repair`, `propose-property`, `propose-number-enum-members`, `propose-extract-inline-event`, `propose`, `recommend-layout`, `expand-layout` | Produce validated, reviewable candidates without writing them |
|
|
@@ -170,6 +170,19 @@ open, read, propose, review, apply, reopen loop; the syntax and rules are in
|
|
|
170
170
|
5. Switching a module from inherit to override copies the application's items; retarget each copy to the module's own
|
|
171
171
|
features first or the proposal is refused.
|
|
172
172
|
|
|
173
|
+
### The profile's shell
|
|
174
|
+
|
|
175
|
+
`ui-profiles` (Screenplay 4.201.0 or later) reads each `ui profile`'s root template, shell options, appearance, new screens default and
|
|
176
|
+
shell diagnostics, and lists the own templates that could be the root template (`applicableRootTemplates`) or the new screens
|
|
177
|
+
default (`applicableNewScreenTemplates`); pick from those instead of guessing. Edit `RootTemplateSyntax` (`name`, `blueprint`,
|
|
178
|
+
`version`), `ShellOptionSyntax` (`add` to the root's `options`; `syntaxKind` is `Word`, `Text`, `Number` or `Flag`),
|
|
179
|
+
`ProfileAppearanceSyntax` (`colorScheme`, `accent`) and `NewScreenTemplateSyntax` with `propose-ast`. A refusal is the answer:
|
|
180
|
+
`PLAY0790` (a template nothing declares), `PLAY0792` (a blueprint the profile does not list), `PLAY0794` (a template that cannot
|
|
181
|
+
be the shell), `PLAY0795` (no `content` slot), `PLAY0797` (a bad color scheme or accent), `PLAY0799` (a new screens default that
|
|
182
|
+
cannot start a screen). `PLAY0796` (an option the shell does not expose) and `PLAY0791` (the legacy `layout` line) are warnings:
|
|
183
|
+
the proposal is accepted and `ui-profiles` shows them. Replay against the `ui-profile-root-positive` vector and its rejection
|
|
184
|
+
vectors (`ui-profile-root-unknown`, `ui-profile-root-not-a-shell`, `ui-profile-root-invalid`) in `Cratis.Screenplay.CanonicalCorpus`.
|
|
185
|
+
|
|
173
186
|
Requires Screenplay 4.188.0 or later (`screenplay --version`) to `add` the first region, button or sub-item to a member
|
|
174
187
|
the node JSON omits while empty; an older MCP server answers "Unknown typed syntax member".
|
|
175
188
|
|
|
@@ -64,7 +64,7 @@ the problem, the checks it violates, the fix, all pinned to one declaration.
|
|
|
64
64
|
| Undeclared removal/append event | `remove with` or capture `append` names an undeclared event | V1 warns (PLAY0166, a failure under warnings as errors); binding fails PLAY0273 | C (executable) / D | declare or fix the name; run V3 |
|
|
65
65
|
| Gated command invoked by a reaction without a declared actor | reaction `invokes` a command under a caller policy and has no `runs as system role "<Role>"` that satisfies the gate | the invocation carries no caller: rejected at run time | D (major) | declare `runs as system role "<Role>"` with the least-privilege role the gate admits (ESM v10, Screenplay 4.125.0; Stage 4.89.1 renders role/authenticated trusted actors, but claim-reading/opaque gates still refuse STAGE-ESM-034 and need gap-fill) or record another trusted-path decision - never just delete the gate. A matching `runs as system role` is the admitted trusted path, not a defect |
|
|
66
66
|
| `reads` + `produces` reaction | reaction both reads a view and produces | fails binding | C (executable) | invoke a command, or produce without reads |
|
|
67
|
-
| Unadmitted read claimed protected | rule "checked" by legacy command or trigger reads | no protected contract or target realization | D (major) | opt eligible command reads into `command reads protected` (v25); inspect shape, absence and conflict cases.
|
|
67
|
+
| Unadmitted read claimed protected | rule "checked" by legacy command or trigger reads | no protected contract or target realization | D (major) | opt eligible command reads into `command reads protected` (v25); inspect shape, absence and conflict cases. The Cratis C# renderer refuses protected reads (STAGE-ESM-044); distinguish reference/semantic-engine evidence from generated-app protection; checklist E3 |
|
|
68
68
|
| Caller-supplied state rule | `require currentStatus == "open"` where the caller sends `currentStatus` | the caller decides its own permission | D (major) | read authoritative stored state through admitted protected reads and `require`; mark legacy/refused shapes and target realization as gaps; checklist E3 |
|
|
69
69
|
| `severity warning` as soft rule | rule meant to warn but still rejects | blocks valid requests | C semantics | remove or make it a real rule |
|
|
70
70
|
| Relay events | `*Synced`, `*Forwarded` events that only move data | noise, not facts | D | translate once into a business fact |
|
|
@@ -123,7 +123,7 @@ the format in `worked-example.md`.
|
|
|
123
123
|
|---|---|---|---|
|
|
124
124
|
| E1 | Value formats on `concept`s; input rules on the command; uniqueness as `constraint`; access as `authorize` | declarations | D |
|
|
125
125
|
| E2 | Every refusal has a message a person understands; constraint messages copied verbatim in specs | `message`, specs | D |
|
|
126
|
-
| E3 | A state-dependent rule uses `reads` + `require` over authoritative state: eligible reads opt into `command reads protected` (v25), with required absence and decide/commit conflict cases. Legacy/refused reads are marked unenforced with a named target.
|
|
126
|
+
| E3 | A state-dependent rule uses `reads` + `require` over authoritative state: eligible reads opt into `command reads protected` (v25), with required absence and decide/commit conflict cases. Legacy/refused reads are marked unenforced with a named target. The Cratis C# renderer refuses protected reads (STAGE-ESM-044); reference/semantic-engine evidence is not generated-app protection. Not: caller-supplied copies of state, attestation booleans (`confirmsX == true`), rules in `handler` / `implementation hint` prose, or `reads` treated as protection | slice `description`, `require`, `handler` | D (faking or hiding = major) |
|
|
127
127
|
| E4 | `severity warning` is not used as "soft" validation (it still rejects) | validate lines | C semantics |
|
|
128
128
|
| E5 | Preconditions are explicit; nothing relies on "obviously you can't" | descriptions, specs | Q |
|
|
129
129
|
| E6 | Each invariant has an atomic enforcement point (name the storage provider where constraint admission matters); the race loser's outcome is specified | constraints, specs | D |
|
|
@@ -11,7 +11,7 @@ instruction for the work, not background reading. Skills that restate one cite i
|
|
|
11
11
|
6. **Keep semantic identity independent of names, paths, layout and generated symbols.** Commit the identity catalog with the model.
|
|
12
12
|
7. **Keep unsupported intent visible.** Return a precise gap and its owning issue; never weaken the model so rendering passes.
|
|
13
13
|
8. **Write specifications with intent, including rejection and denial.** Never report an unexecuted or unsupported scenario as passed.
|
|
14
|
-
9. **Treat state reads as a correctness boundary.** Eligible command reads opt into `command reads protected` (v25); legacy/trigger reads remain unprotected.
|
|
14
|
+
9. **Treat state reads as a correctness boundary.** Eligible command reads opt into `command reads protected` (v25); legacy/trigger reads remain unprotected. The Cratis C# renderer refuses protected reads (STAGE-ESM-044), not the v25 pair: reference absence/conflict guarantees, semantic-engine execution and generated-app protection are different claims.
|
|
15
15
|
10. **Separate event-source identity from event payload and choose destinations explicitly.**
|
|
16
16
|
11. **Persisted event shape changes are evolution, never cleanup.** Keep historical generations.
|
|
17
17
|
12. **Model external work as business intent.** Provider interfaces and transport mechanics stay out of the language.
|
package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md
CHANGED
|
@@ -21,7 +21,7 @@ speaks in them; never model board mechanics (lanes, node ids, positions).
|
|
|
21
21
|
| Storyline (ordered beats) | a **family** of specifications sharing example data, each one transition (no storyline syntax) | several spec classes | specifications |
|
|
22
22
|
| Field validation | concept `validate` (every use) / command `validate`, `require` | `ConceptValidator<T>` / `CommandValidator<T>` | command validation |
|
|
23
23
|
| Role permission ("Cannot") | `policy` + `authorize` + `then denied` spec; ownership via `claim ... matches subject` | `[Authorize(Policy)]`, generated policies | authorization |
|
|
24
|
-
| Precondition on stream state | `command reads protected` + eligible `reads`/`require` (v25 reference protection); legacy/refused reads remain stated intent.
|
|
24
|
+
| Precondition on stream state | `command reads protected` + eligible `reads`/`require` (v25 reference protection); legacy/refused reads remain stated intent. The Cratis C# renderer refuses protected reads (STAGE-ESM-044); semantic-engine execution is separate from generated-app protection. Target Arc `[ProtectedDecision]` + `DecisionRead<T>` or Chronicle DCB needs separate verification | decision over a guarded read | command validation |
|
|
25
25
|
| Generated id (`derived:uuid4()`) | `generated` (authorable, not executable) | id supplied before `Handle()` | commands |
|
|
26
26
|
| External system / outbound call | `Translate` slice (inbound); `system`/`operation` (authorable, not executable) or Automation (outbound) | `ICommandOperation` / reactor | operations, reactors |
|
|
27
27
|
| HTML mockup | `screen` Level 1 + board (`visualize-model`) | default Scene composition | ui composition |
|
|
@@ -35,8 +35,9 @@ Tool versions are covered in `cratis-screenplay-toolchain` `SKILL.md`; read it b
|
|
|
35
35
|
## Language modes that block target delivery
|
|
36
36
|
|
|
37
37
|
Read [language admission](../cratis-screenplay-toolchain/references/language-admission.md)
|
|
38
|
-
for v22–v25: Stage refuses atomic batches, described bodies (even Stub mode)
|
|
39
|
-
protected reads.
|
|
38
|
+
for v22–v25: Stage rendering refuses atomic batches, described bodies (even Stub mode)
|
|
39
|
+
and protected reads. Semantic Host/executor support is not generated-app protection.
|
|
40
|
+
Preserve contracts; reference success is not target realization.
|
|
40
41
|
|
|
41
42
|
## Interview phase
|
|
42
43
|
**Skip if** the request names the model root, the application name, the destination and the
|
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md
CHANGED
|
@@ -111,7 +111,9 @@ invoked commands independent. Stage refuses v22 (STAGE-ESM-016) and atomic mode
|
|
|
111
111
|
in admitted v23–v25 (STAGE-ESM-043); the declaration is not external-effect deduplication.
|
|
112
112
|
For described handlers, hand off only payload computation under the v23 result
|
|
113
113
|
contract; Stage STAGE-IMPL-002 means no stubs, even Stub mode. Protected v25 reads
|
|
114
|
-
refuse STAGE-ESM-044 despite version admission and need
|
|
114
|
+
refuse Cratis C# rendering with STAGE-ESM-044 despite version admission and need
|
|
115
|
+
generated-app admission/enrollment tests; ordinary injection never supplies protection.
|
|
116
|
+
Semantic Host/executor support is a separate result, not generated-app enforcement.
|
|
115
117
|
|
|
116
118
|
## Re-delivery
|
|
117
119
|
The work list is the full in-scope contract delta since the fallback record's last verified source
|
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md
CHANGED
|
@@ -31,10 +31,15 @@ ESM). Only the probe answers renderability. `PLAY0270` entries are information,
|
|
|
31
31
|
| Class | Meaning | Typical examples (each verified in `admission.md`) | Action |
|
|
32
32
|
| --- | --- | --- | --- |
|
|
33
33
|
| **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 |
|
|
34
|
-
| **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 composite `by` remain PLAY0268; 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
|
|
34
|
+
| **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 composite `by` remain PLAY0268; 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-read rendering (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`); attached command handlers (PLAY0268), described handlers (v23, STAGE-IMPL-002 even Stub mode), atomic mode (STAGE-ESM-016 for v22, STAGE-ESM-043 in admitted v23–v25) | keep the model; fallback record entry; options a to c in `SKILL.md`; link the Stage issue |
|
|
35
35
|
| **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 |
|
|
36
36
|
| **Environment** | not the model | restore failures, missing SDK, a destination that is not writable | fix the environment or report blocked |
|
|
37
37
|
|
|
38
|
+
Requires Stage 4.129.0 for semantic Host/executor protected reads; older engines
|
|
39
|
+
refuse STAGE-ESM-044. Non-Error protected requirements refuse STAGE-ESM-045, including
|
|
40
|
+
reaction invocations. A semantic-engine pass does not resolve the rendering gap;
|
|
41
|
+
read [sandbox boundaries](../../cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md#protected-command-reads).
|
|
42
|
+
|
|
38
43
|
## Triage rules
|
|
39
44
|
- A capability gap never becomes a model fix by deleting meaning. Turning a list screen into a
|
|
40
45
|
keyed lookup, dropping `pii`, removing authorization or a rule, or splitting a conditional
|
package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md
CHANGED
|
@@ -4,7 +4,7 @@ This is a legacy control without `command reads protected`; the unprotected-read
|
|
|
4
4
|
markers below describe that control, not all command reads. Eligible views can opt
|
|
5
5
|
into v25; the date-rule blocker still remains. Read
|
|
6
6
|
[protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
7
|
-
for admission and
|
|
7
|
+
for admission and the Cratis C# renderer's protected-read refusal (STAGE-ESM-044).
|
|
8
8
|
|
|
9
9
|
Complete, compiled design-mode model (marina guest berths) showing a coverage matrix turned into specifications: happy path, one rejection per rule, authorization denial, duplicate and retry, competing claim, state violation, alternative branches, compensation and a view lifecycle family. The matrix for it is in `coverage-matrix.md`; the catalogue (`scenario-catalogue.md`) names its specifications.
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Read [protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
5
5
|
for the opt-in alternative. Do not insert the preamble blindly: every read must meet
|
|
6
6
|
finite event-source-keyed admission with removals. A v25 reference pass still does not
|
|
7
|
-
render protected reads: Stage admits v25 but refuses them with STAGE-ESM-044. The comments and unenforced markers below describe
|
|
7
|
+
render protected reads: Stage admits v25 but the Cratis C# renderer refuses them with STAGE-ESM-044. The comments and unenforced markers below describe
|
|
8
8
|
this legacy control, not a general limit on command reads.
|
|
9
9
|
|
|
10
10
|
**Design mode.** This document states the stored-state rules of the
|
package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md
CHANGED
|
@@ -40,7 +40,7 @@ Typed example/override forms: `cratis-screenplay-specifications`
|
|
|
40
40
|
| Pending described command handlers (v23) | specify intent | binds; denial/validation execute, body-reaching specs Unsupported ImplementationBody; all-Unsupported is not green | STAGE-IMPL-002 even Stub mode |
|
|
41
41
|
| Attached command handlers, `file` constraints, query `performer`s | spec them in design | blocked: PLAY0268 at binding, no spec runs (V3 blocked) | no |
|
|
42
42
|
| Atomic reaction mode (v22) | declare for new models | failed batch adds no facts or view changes; earlier batches/commands remain; `then error` alone is insufficient | v22 STAGE-ESM-016; mode in admitted v23–v25 STAGE-ESM-043 |
|
|
43
|
-
| Protected command reads (v25) | declare opt-in for eligible reads | absence Validation; matching intervening facts Conflict; race vectors are not a new spec construct |
|
|
43
|
+
| Protected command reads (v25) | declare opt-in for eligible reads | absence Validation; matching intervening facts Conflict; race vectors are not a new spec construct | Cratis C# rendering STAGE-ESM-044; semantic Host/executor execute admitted reads, non-Error protected requirements STAGE-ESM-045; v25 pair admitted |
|
|
44
44
|
|
|
45
45
|
Requires Screenplay 4.105.0 or later (`screenplay --version`) for list-query specifications, and 4.143.0 or later for collection equality filters (ESM v14).
|
|
46
46
|
|
|
@@ -20,7 +20,7 @@ protected decisions. Gap-fill must use an admitted projection/key shape and acti
|
|
|
20
20
|
unit-of-work enrollment; do not edit managed dependencies. Keep the `.play` rule
|
|
21
21
|
target enforcement separate from reference semantics until target tests verify it.
|
|
22
22
|
Read [protected command reads](../../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
23
|
-
for admission and
|
|
23
|
+
for admission and the Cratis C# renderer's protected-read refusal (STAGE-ESM-044); never remove protection to obtain rendering. Forbidden: caller-supplied copies of state in `require`, boolean attestation
|
|
24
24
|
inputs (`confirmsX == true`), rules in `handler` / implementation-hint prose.
|
|
25
25
|
|
|
26
26
|
## Authorization is executable
|
|
@@ -5,7 +5,7 @@ One complete legacy design-mode control for `cratis-screenplay-slice-design`, wi
|
|
|
5
5
|
specification runs here. List queries and clock fixtures bind on an admitting compiler;
|
|
6
6
|
they are not the remaining blocker. Personas and screens are informational.
|
|
7
7
|
Eligible command reads can opt into v25; inspect every projection/key/removal before
|
|
8
|
-
migration and retain
|
|
8
|
+
migration and retain the Cratis C# renderer's separate refusal (STAGE-ESM-044; the v25 pair itself is admitted). Read
|
|
9
9
|
[protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md).
|
|
10
10
|
The unenforced descriptions below refer to this legacy control, not all command reads.
|
|
11
11
|
The specifications still seed every read-model source (`LockerInstalled`, `LockerRequested`,
|
|
@@ -114,7 +114,7 @@ Unattended work takes the conservative option and marks it `ASSUMED` in model
|
|
|
114
114
|
conflict. Legacy reads remain PLAY0271/PLAY0268; `concurrency` remains unbound and
|
|
115
115
|
combining it with protected reads is PLAY0783. Read
|
|
116
116
|
[protected reads](../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
117
|
-
for admission and
|
|
117
|
+
for admission and the Cratis C# renderer's STAGE-ESM-044 protected-read refusal (the v25 pair itself is admitted). `description` text never reaches rendered code: a rule that lives only in prose is
|
|
118
118
|
unenforced there.
|
|
119
119
|
- `pii` and `secret` bind as ESM v13;
|
|
120
120
|
enum/identity compliance and protected events with explicit subject marks still
|
|
@@ -58,7 +58,7 @@ observed legacy check from verified atomic protection.
|
|
|
58
58
|
| a value across all sources | `unique <prop> on <Event>` | value owned by one source; same source may re-claim |
|
|
59
59
|
| a fact at most once per source; mutually exclusive facts | `unique event` (+ `released by`) | covers simple lifecycle transitions |
|
|
60
60
|
| state-dependent rule (balance, capacity, "only if approved") | eligible `reads` + `require` under `command reads protected` (v25) | required absence rejects; matching intervening facts conflict. Payload-key fan-in, joins, reducers and other refused shapes remain target gaps |
|
|
61
|
-
| a view (read model) | unguarded materialized reads are not protection | legacy command and trigger reads remain unprotected;
|
|
61
|
+
| a view (read model) | unguarded materialized reads are not protection | legacy command and trigger reads remain unprotected; the Cratis C# renderer refuses protected reads (STAGE-ESM-044); semantic Host/executor evidence is not generated-app protection |
|
|
62
62
|
|
|
63
63
|
## 3. Record each state-dependent rule that the model cannot enforce
|
|
64
64
|
Never accept the caller's copy of the state: `currentStatus Status` on the command with
|
|
@@ -69,7 +69,8 @@ the rule unenforced in rendered scope.
|
|
|
69
69
|
|
|
70
70
|
First inspect [protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md):
|
|
71
71
|
opt eligible command reads into v25, retain absence/conflict specifications and verify
|
|
72
|
-
target consistency separately. Stage admits v25 but refuses protected reads (STAGE-ESM-044).
|
|
72
|
+
target consistency separately. Stage admits v25 but the Cratis C# renderer refuses protected reads (STAGE-ESM-044).
|
|
73
|
+
Semantic Host/executor support has separate severity and outside-append limits. A payload-keyed
|
|
73
74
|
fan-in such as the course-capacity example remains refused; the preamble is not a
|
|
74
75
|
blanket admission of arbitrary projections.
|
|
75
76
|
|
|
@@ -4,7 +4,7 @@ Legacy control: no `command reads protected` preamble is declared. The course-ca
|
|
|
4
4
|
payload-key fan-in remains refused even with opt-in; eligible active-enrolment reads
|
|
5
5
|
can protect under v25, but reads plus concurrency cannot combine (PLAY0783). Read
|
|
6
6
|
[protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
7
|
-
for admission and
|
|
7
|
+
for admission and the Cratis C# renderer's protected-read refusal (STAGE-ESM-044). The legacy diagnostics below describe this
|
|
8
8
|
control, not a blanket refusal of command reads.
|
|
9
9
|
|
|
10
10
|
A complete design-mode model for course enrolment. It shows one business identity per stream,
|
package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostic-arguments.md
CHANGED
|
@@ -49,6 +49,13 @@ a separate `case` names an expansion. Argument order is immaterial.
|
|
|
49
49
|
| PLAY0524 | `specification` (declaration), `step` (keyword), `stepIndex` (index), `property`, `type`, `example?`, `case?`, `parameter?` |
|
|
50
50
|
| PLAY0525, PLAY0526 | `example` |
|
|
51
51
|
| PLAY0583 | `case?`, `parameter?`, `type?`, `text?` |
|
|
52
|
+
| PLAY0790, PLAY0794, PLAY0799 | `profile`, `template`, `blueprint?` |
|
|
53
|
+
| PLAY0791 | `profile`, `template` (the layout name) |
|
|
54
|
+
| PLAY0792 | `profile`, `template`, `blueprint` |
|
|
55
|
+
| PLAY0793 | `profile`, `template`, `blueprint`, `version` |
|
|
56
|
+
| PLAY0795 | `profile`, `template`, `blueprint?`, `outlet` |
|
|
57
|
+
| PLAY0796 | `profile`, `template`, `blueprint?`, `option` |
|
|
58
|
+
| PLAY0797 | `profile`, `value` |
|
|
52
59
|
|
|
53
60
|
For PLAY0524, `step` is given, given readmodel, when, when append or then.
|
|
54
61
|
`stepIndex` counts every authored given/when/then clause once across all forms,
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
- Caller identity, compliance and routes
|
|
12
12
|
- Specification metadata, callers, cases and locators
|
|
13
13
|
- Guarded interaction diagnostics
|
|
14
|
+
- UI profile shell: root template, options, appearance
|
|
14
15
|
- Structural completeness and timeline checks
|
|
15
16
|
- Editor versus C# verdicts
|
|
16
17
|
- Consistency errors (V1: the model contradicts itself)
|
|
@@ -248,6 +249,26 @@ comment loss and do not support pinned evidence. TypeScript diagnoses but does
|
|
|
248
249
|
not offer these repairs. Preview through MCP `propose-repair`, never text-patch
|
|
249
250
|
around a refusal. Condition/subject errors also use guarded-action PLAY0341–0348.
|
|
250
251
|
|
|
252
|
+
## UI profile shell: root template, options, appearance
|
|
253
|
+
|
|
254
|
+
Requires Screenplay 4.200.0 or later (`screenplay --version`); 4.197.0 reads the syntax without the checks. The fix for each is in
|
|
255
|
+
`../../cratis-screenplay-ui-composition/references/ui-profile-and-theme.md`.
|
|
256
|
+
|
|
257
|
+
| Code | Severity | Meaning / fix |
|
|
258
|
+
| --- | --- | --- |
|
|
259
|
+
| PLAY0788 | E | A `root template` / `new screens use template` line is malformed, or pins a version on an own template. |
|
|
260
|
+
| PLAY0789 | E | A malformed or repeated `appearance` line, or a second `appearance` block. |
|
|
261
|
+
| PLAY0790 | E | The template is not declared (or the blueprint does not ship it). Declare it or take it from a blueprint. |
|
|
262
|
+
| PLAY0791 | W | The profile selects its shell with the legacy `layout <Name>`. Write `root template <Name>`; the quick fix rewrites it (or removes the ignored line beside a `root template`). |
|
|
263
|
+
| PLAY0792 | E | The blueprint is not in the profile's `packages` (or not installed). |
|
|
264
|
+
| PLAY0793 | W | The pinned `version` range is not satisfied by the installed blueprint (catalog hosts only). |
|
|
265
|
+
| PLAY0794 | E | The root template cannot be the shell (not a layout or application-scope template, fits a slot, `scopes` without `application`). |
|
|
266
|
+
| PLAY0795 | E | The root template has no `content` slot. |
|
|
267
|
+
| PLAY0796 | W | An `option` the shell does not expose. |
|
|
268
|
+
| PLAY0797 | E | Color scheme is not `light`, `dark` or `system`, or the accent is not a hex colour. |
|
|
269
|
+
| PLAY0798 | E | More than one `root template` in a profile. |
|
|
270
|
+
| PLAY0799 | E | `new screens use template` cannot start a screen in a feature. |
|
|
271
|
+
|
|
251
272
|
## Structural completeness and timeline checks
|
|
252
273
|
|
|
253
274
|
Opt in with `--check <names>` or MCP diagnostics `checks`, then treat warnings
|
|
@@ -326,13 +347,16 @@ refusal reasons. Read [language admission](language-admission.md) before changin
|
|
|
326
347
|
| PLAY0786 (I) | Eligible legacy model; preview typed preamble repair, individually review absence/conflict semantics |
|
|
327
348
|
| PLAY0787 (W) | Exact deprecated Studio text-rule pattern; repair to literal rule or equality, preserving message/severity |
|
|
328
349
|
| STAGE-ESM-043 | Atomic mode not realized, even in admitted v23–v25; retain declaration and gap-fill |
|
|
329
|
-
| STAGE-ESM-044 |
|
|
350
|
+
| STAGE-ESM-044 | Cratis C# renderer refuses protected reads despite v25 admission; semantic Host/executor support is separate; keep protection and gap-fill generated-app scope |
|
|
351
|
+
| STAGE-ESM-045 | Non-Error protected requirement; semantic Host/executor refuse before execution, including reaction-invoked commands; keep severity and report Unsupported |
|
|
330
352
|
| STAGE-IMPL-002 | Described handler body not realized by Stage, even Stub mode; no stubs emitted |
|
|
331
353
|
|
|
332
354
|
Invalid match syntax remains PLAY0367. Property/concept text rules bind v24;
|
|
333
355
|
`contains`/`starts with` in conditions only still fail PLAY0268. Stage rejects
|
|
334
356
|
v22/v26 and mixed pairs with STAGE-ESM-016; v23–v25 admission does not implement
|
|
335
|
-
bodies, batches or protected reads (STAGE-ESM-044).
|
|
357
|
+
bodies, batches or rendered protected reads (STAGE-ESM-044). Requires Stage 4.129.0
|
|
358
|
+
for semantic Host/executor protected reads; older engines refuse -044. Read
|
|
359
|
+
[language admission](language-admission.md) for the stricter Host outside-append guard.
|
|
336
360
|
|
|
337
361
|
## Binding (V2 and V3) - see `executable-subset.md` for the full table
|
|
338
362
|
| Code | Meaning | Fix |
|
|
@@ -12,7 +12,7 @@ exact language/semantic pairs; binding, reference execution and rendering are se
|
|
|
12
12
|
| v22 | Application-root `reaction batches atomic` | Direct productions per trigger occurrence and each selected refusal branch are separate atomic batches; commands remain independent | v22 refused STAGE-ESM-016; mode in admitted v23–v25 refused STAGE-ESM-043 |
|
|
13
13
|
| v23 | Pending `handler implementation` beside unconditional `produces` | Payload-only body; PLAY0695 information; reaching body gives Unsupported ImplementationBody | v23 admitted, body refused STAGE-IMPL-002 in renderer/Host/executor, even Stub mode |
|
|
14
14
|
| v24 | `contains`, `not contains`, `starts with`, `ends with` property/concept rules | Ordinal UTF-16, absent optional passes; not text-condition operators | v24 admitted; semantic Host/executor and generated ordinal comparisons preserve rules |
|
|
15
|
-
| v25 | Application-root `command reads protected` | Admitted reads in requirements/mappings, absence Validation, matching decide/commit changes Conflict | v25 admitted;
|
|
15
|
+
| v25 | Application-root `command reads protected` | Admitted reads in requirements/mappings, absence Validation, matching decide/commit changes Conflict | v25 admitted; Cratis C# renderer refuses STAGE-ESM-044; semantic Host/executor execute reads, non-Error protected requirements refuse STAGE-ESM-045 |
|
|
16
16
|
| v26 | Chronological command Date/DateTime comparisons | Same-primitive `==`, `!=`, `>`, `>=`, `<`, `<=`; DateTime UTC ticks and pre-rule offset validation | v26 refused STAGE-ESM-016 |
|
|
17
17
|
|
|
18
18
|
Requires Screenplay 4.181.0 or later (`screenplay --version`) for atomic batches; older compilers cannot admit the preamble.
|
|
@@ -27,7 +27,9 @@ Requires Screenplay 4.199.0 (ESM v26; `screenplay --version`) for date compariso
|
|
|
27
27
|
|
|
28
28
|
Requires Stage 4.124.0 for v24 text-rule admission (`cratis --version` identifies the CLI bundle); older renderers refuse v24 with STAGE-ESM-016. V23 admission alone does not implement described bodies.
|
|
29
29
|
|
|
30
|
-
Requires Stage 4.127.0 for v25 version admission; older renderers refuse v25 with STAGE-ESM-016.
|
|
30
|
+
Requires Stage 4.127.0 for v25 version admission; older renderers refuse v25 with STAGE-ESM-016. The Cratis C# renderer still refuses protected reads with STAGE-ESM-044; no artifacts are emitted.
|
|
31
|
+
|
|
32
|
+
Requires Stage 4.129.0 for semantic Host/executor protected reads; older engines refuse STAGE-ESM-044. Absence rejects before requirements/generation; read properties feed requirements and productions. Non-Error protected requirements refuse STAGE-ESM-045, including reaction invocations. Legacy Host/structural runner retain -044. The Host faults on any outside append, stricter than reference dependency-scoped conflicts; see [sandbox boundaries](../../cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md#protected-command-reads).
|
|
31
33
|
|
|
32
34
|
Read [atomic batches and event-source invocation mappings](../../cratis-screenplay-captures-and-reactions/references/atomic-batches-and-source-mappings.md)
|
|
33
35
|
for atomic boundaries and the source-identity mapping prerequisite. Start new models
|
|
@@ -56,6 +58,6 @@ for the complete interval example and input/target boundaries.
|
|
|
56
58
|
|
|
57
59
|
Stage's semantic engines admit exact v1–v21 and v23–v25 pairs. V22/v26 and mixed
|
|
58
60
|
pairs refuse STAGE-ESM-016. Admission of v23–v25 is not admission of described bodies,
|
|
59
|
-
atomic mode or protected reads. A CLI may bundle an older compiler/Stage pair: run no-write render
|
|
61
|
+
atomic mode or rendered protected reads. A CLI may bundle an older compiler/Stage pair: run no-write render
|
|
60
62
|
admission rather than transferring a standalone verdict. Pattern diagnostics arise
|
|
61
63
|
in Screenplay before rendering; diagnostic arguments add no ESM version or new tool.
|