@cratis/pi 7.69.1 → 7.70.1
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/hooks/scripts/cratis-check-pr.mjs +17 -10
- package/package/corpus/product-sync.json +7 -7
- package/package/corpus/skills/cratis-arc-command/references/generated-values.md +3 -1
- package/package/corpus/skills/cratis-arc-command/references/shop-generation.md +2 -2
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +1 -1
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +1 -1
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/atomic-batches-and-source-mappings.md +1 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +3 -3
- package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +4 -4
- package/package/corpus/skills/cratis-screenplay-command-surface/references/protected-reads.md +34 -7
- package/package/corpus/skills/cratis-screenplay-command-surface/references/shop-generation.md +2 -2
- package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +3 -3
- 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 +1 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/choosing-generation.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +2 -2
- 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-read-surface/references/named-keys.md +10 -5
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +2 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +4 -3
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +2 -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 +2 -2
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-catalogue.md +2 -2
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +2 -2
- 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-specifications/references/generated-fixtures.md +3 -3
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +2 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +2 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/read-model-keys.md +3 -3
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostic-arguments.md +8 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +13 -10
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +4 -5
- package/package/corpus/skills/cratis-screenplay-toolchain/references/language-admission.md +9 -8
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +12 -8
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +1 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +16 -12
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +19 -15
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/behavior-walk.md +4 -3
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/choosing-generation.md +1 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +9 -9
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +2 -2
- package/package.json +1 -1
|
@@ -79,16 +79,23 @@ function originRepository(cwd) {
|
|
|
79
79
|
return repositoryName(git(['remote', 'get-url', 'origin'], cwd));
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
function targetCallers(repository, cwd) {
|
|
82
|
+
function targetCallers(repository, cwd, warn) {
|
|
83
83
|
if (cwd && repository?.toLowerCase() === originRepository(cwd)?.toLowerCase()) return callers(cwd);
|
|
84
|
-
let
|
|
85
|
-
try {
|
|
86
|
-
|
|
87
|
-
|
|
84
|
+
let listed = false;
|
|
85
|
+
try {
|
|
86
|
+
const files = JSON.parse(gh(['api', `repos/${repository}/contents/.github/workflows`]));
|
|
87
|
+
listed = true;
|
|
88
|
+
return files.filter(file => file.type === 'file' && /\.ya?ml$/.test(file.name)).flatMap(file =>
|
|
89
|
+
workflowCallers(gh(['api', '-H', 'Accept: application/vnd.github.raw', `repos/${repository}/contents/${file.path}`])));
|
|
90
|
+
} catch (error) {
|
|
91
|
+
// Only a missing workflows directory means no opt-in; a failed file fetch is an unknown.
|
|
92
|
+
if (!listed && /HTTP 404/.test(error.message)) return [];
|
|
93
|
+
if (/^Cratis\/[^/]+$/i.test(repository)) {
|
|
94
|
+
warn(`Could not determine release-workflow opt-in for ${repository} (${error.message}); checking against bundled reviewed rules`);
|
|
95
|
+
return [{ name: 'verify-release-notes', ref: reviewedRulesRef }];
|
|
96
|
+
}
|
|
88
97
|
throw new Error(`Could not determine release-workflow opt-in for ${repository}: ${error.message}`);
|
|
89
98
|
}
|
|
90
|
-
return files.filter(file => file.type === 'file' && /\.ya?ml$/.test(file.name)).flatMap(file =>
|
|
91
|
-
workflowCallers(gh(['api', '-H', 'Accept: application/vnd.github.raw', `repos/${repository}/contents/${file.path}`])));
|
|
92
99
|
}
|
|
93
100
|
|
|
94
101
|
function optedIn(cwd) {
|
|
@@ -126,7 +133,7 @@ function rules(warn, repositoryCallers) {
|
|
|
126
133
|
renameSync(temporary, file);
|
|
127
134
|
return file;
|
|
128
135
|
} catch (error) {
|
|
129
|
-
if (floating) {
|
|
136
|
+
if (floating || ref === reviewedRulesRef) {
|
|
130
137
|
const bundled = fileURLToPath(new URL('./cratis-release-notes-reviewed.cjs', import.meta.url));
|
|
131
138
|
new Script(readFileSync(bundled, 'utf8'));
|
|
132
139
|
warn(`Could not fetch release-note rules at ${ref}; using bundled reviewed ${reviewedRulesRef}. ${error.message}`);
|
|
@@ -193,7 +200,7 @@ function check(argv, repositoryCallers, lookupOptions) {
|
|
|
193
200
|
// The release-intent check above still applies to bot-authored pull requests.
|
|
194
201
|
if (author === 'dependabot[bot]') return 0;
|
|
195
202
|
const base = values.base || pull?.baseRefName || defaultBranch;
|
|
196
|
-
const file = rules(warn, repositoryCallers || targetCallers(repository, process.cwd()));
|
|
203
|
+
const file = rules(warn, repositoryCallers || targetCallers(repository, process.cwd(), warn));
|
|
197
204
|
if (!file) return 3;
|
|
198
205
|
const env = { PATH: process.env.PATH, HOME: homedir(), LANG: 'C.UTF-8',
|
|
199
206
|
PR_BODY: body, PR_LABELS: JSON.stringify([...labels]),
|
|
@@ -369,7 +376,7 @@ function hook() {
|
|
|
369
376
|
throw new Error('Use a literal directory before gh pr create/edit.');
|
|
370
377
|
}
|
|
371
378
|
if (!/^Cratis\/[^/]+$/i.test(repository)) continue;
|
|
372
|
-
const repositoryCallers = targetCallers(repository, knownDirectory ? cwd : undefined);
|
|
379
|
+
const repositoryCallers = targetCallers(repository, knownDirectory ? cwd : undefined, message => warning(`Warning: ${message}`));
|
|
373
380
|
if (!repositoryCallers.length) continue;
|
|
374
381
|
if (!knownDirectory) throw new Error('Use a literal directory before gh pr create/edit.');
|
|
375
382
|
const args = [];
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
"repository": "Cratis/Stage",
|
|
28
28
|
"packages": [],
|
|
29
29
|
"synced": {
|
|
30
|
-
"version": "4.
|
|
31
|
-
"date": "2026-10-
|
|
32
|
-
"by": "Cratis/AI#
|
|
30
|
+
"version": "4.138.0",
|
|
31
|
+
"date": "2026-10-17",
|
|
32
|
+
"by": "Cratis/AI#752"
|
|
33
33
|
},
|
|
34
34
|
"covers": {
|
|
35
35
|
"skills": [
|
|
@@ -125,9 +125,9 @@
|
|
|
125
125
|
}
|
|
126
126
|
],
|
|
127
127
|
"synced": {
|
|
128
|
-
"version": "3.
|
|
128
|
+
"version": "3.75.0",
|
|
129
129
|
"date": "2026-10-17",
|
|
130
|
-
"by": "Cratis/AI#
|
|
130
|
+
"by": "Cratis/AI#752"
|
|
131
131
|
},
|
|
132
132
|
"covers": {
|
|
133
133
|
"skills": [
|
|
@@ -171,9 +171,9 @@
|
|
|
171
171
|
}
|
|
172
172
|
],
|
|
173
173
|
"synced": {
|
|
174
|
-
"version": "4.
|
|
174
|
+
"version": "4.207.0",
|
|
175
175
|
"date": "2026-10-17",
|
|
176
|
-
"by": "Cratis/AI#
|
|
176
|
+
"by": "Cratis/AI#752"
|
|
177
177
|
},
|
|
178
178
|
"covers": {
|
|
179
179
|
"skills": [
|
|
@@ -141,7 +141,9 @@ Arc resolves these through the concept's generation interface, not strategy-spec
|
|
|
141
141
|
`[GeneratedValue]` options. Requires Arc.Screenplay 22.107.0 for pattern/random,
|
|
142
142
|
checksum and self-contained String-rule recovery; older adapters keep them in code.
|
|
143
143
|
Requires Stage 4.118.0 for checksum validation and 4.119.0 for pattern/random
|
|
144
|
-
rendering; older renderers refuse them. `generate rule`
|
|
144
|
+
rendering; older renderers refuse them. Requires Stage 4.136.0 to render `generate rule` as an
|
|
145
|
+
`IGeneratableInContext<T>.New(GenerationContext)` factory (body errors STAGE-ESM-019, shadowing -022, missing
|
|
146
|
+
attachment -020); the Host and legacy syntax engine still refuse a command generating its value with STAGE-ESM-028.
|
|
145
147
|
Screenplay separately admits concept `generate` strategies and freshness; see `cratis-screenplay-command-surface/references/generated-values-and-responses.md`
|
|
146
148
|
for that language contract and Stage's explicit scopes. Native Arc freshness is a
|
|
147
149
|
separate policy; a factory alone is not a storage guard.
|
|
@@ -106,8 +106,8 @@ and captured-time semantics, never one exact random suffix.
|
|
|
106
106
|
as `.play`. Read [generated-value recovery](../../cratis-screenplay-legacy-extraction/references/generated-recovery.md)
|
|
107
107
|
for Arc.Screenplay prerequisites and refusal boundaries, and
|
|
108
108
|
[Stage admission](../../cratis-stage-rendering-and-sandbox/references/admission.md)
|
|
109
|
-
for checksum
|
|
110
|
-
|
|
109
|
+
for checksum, pattern/random and `generate rule` rendering prerequisites (Stage 4.136.0 renders
|
|
110
|
+
`generate rule`; the Host and legacy engine still refuse it with STAGE-ESM-028).
|
|
111
111
|
|
|
112
112
|
## Sources
|
|
113
113
|
|
|
@@ -171,7 +171,7 @@ 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. Stage 4.138.0 renders protected reads as Arc read protection (`cratis render` gets it from the first CLI that bundles it; CLI 3.75.0 refuses them with STAGE-ESM-044);
|
|
175
175
|
semantic execution is separate from generated-app protection.
|
|
176
176
|
- An authorized command exercised in a spec without `given caller` is PLAY0389 at binding.
|
|
177
177
|
- A list query (`=> Item[]`) binds (a snapshot list is not rendered, `STAGE-ESM-010`);
|
|
@@ -12,7 +12,7 @@ technique: partial work stays visible and nothing is skipped because it looked r
|
|
|
12
12
|
Result is `complete` only when every column is filled or says why it does not apply (for example
|
|
13
13
|
"direct effect: immediate, internal, cannot fail"). `open` names the unresolved decision and who
|
|
14
14
|
answers. `blocked` names the actual capability gap with intended behavior. For example,
|
|
15
|
-
the CLI/Stage pair (toolchain `references/renderable-subset.md`) admits through ESM
|
|
15
|
+
the CLI/Stage pair (toolchain `references/renderable-subset.md`) admits through ESM v27 to construct checks; role/authenticated reaction identity
|
|
16
16
|
renders, while claim-reading/opaque system gates still refuse STAGE-ESM-034. Previous CLI 3.46.1 refused v10 at the version gate
|
|
17
17
|
with CLI-RENDER-004; do not report that historical refusal as the current gap.
|
|
18
18
|
|
|
@@ -23,7 +23,7 @@ rejected model renderable, and never claim a whole-application V5 from a subset.
|
|
|
23
23
|
with `cratis-screenplay-render-and-gap-fill`.
|
|
24
24
|
|
|
25
25
|
Application-root `reaction batches atomic` also blocks Stage delivery: v22
|
|
26
|
-
refuses STAGE-ESM-016; mode in admitted v23–
|
|
26
|
+
refuses STAGE-ESM-016; mode in admitted v23–v27 refuses STAGE-ESM-043. Preserve the
|
|
27
27
|
per-occurrence/selected-branch batch boundary and independent invoked commands.
|
|
28
28
|
Atomic appends do not prove redelivery deduplication or external exactly-once effects.
|
|
29
29
|
|
|
@@ -104,7 +104,7 @@ 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 and, from 4.138.0, renders protected reads as Arc read protection (CLI 3.75.0 refuses them with STAGE-ESM-044).
|
|
108
108
|
Semantic Host/executor support is separate; non-Error protected requirements refuse -045,
|
|
109
109
|
including reaction-invoked commands.
|
|
110
110
|
`where` over read paths out of scope, and `where` needs
|
|
@@ -36,7 +36,7 @@ batch and unchanged read models with evaluator world/read-model assertions; earl
|
|
|
36
36
|
accepted work can remain. `then no events` means accepted zero outcomes and cannot
|
|
37
37
|
accompany `then error`. Do not invent a mixed success/error specification form.
|
|
38
38
|
|
|
39
|
-
Stage refuses ESM v22 with STAGE-ESM-016. Even an admitted v23–
|
|
39
|
+
Stage refuses ESM v22 with STAGE-ESM-016. Even an admitted v23–v27 model carrying
|
|
40
40
|
atomic mode is refused with STAGE-ESM-043 by renderer, Host and specification executor.
|
|
41
41
|
Keep the declaration and report authorized gap-fill; do not promise a render date or
|
|
42
42
|
strip atomicity to lower the version.
|
|
@@ -151,12 +151,12 @@ 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).
|
|
155
|
-
|
|
154
|
+
reads/concurrency cannot combine (PLAY0783). Semantic Host/executor support is separate.
|
|
155
|
+
Requires Stage 4.138.0 to render protected reads as Arc read protection (shapes it cannot preserve stay STAGE-ESM-044); `cratis render` gets it from the first CLI that bundles it, and CLI 3.75.0 refuses every protected read with STAGE-ESM-044.
|
|
156
156
|
Uniqueness still uses a constraint; reference success is not target realization.
|
|
157
157
|
|
|
158
158
|
Do not use `reads` to fetch data the caller could supply. A composite-key view's `by` block in a
|
|
159
|
-
command read is `PLAY0271`, or `PLAY0781`
|
|
159
|
+
command read is `PLAY0271`, or `PLAY0781` reason `by-parts` under `command reads protected`
|
|
160
160
|
(read-surface `references/named-keys.md`).
|
|
161
161
|
|
|
162
162
|
## `validate`
|
|
@@ -121,8 +121,7 @@ Do not insert a bridge to Screenplay's record or promise another provider accept
|
|
|
121
121
|
Arc can recover such self-contained compound bodies under the adapter gate in
|
|
122
122
|
[generated recovery](../../cratis-screenplay-legacy-extraction/references/generated-recovery.md).
|
|
123
123
|
Recovery does not run the body; reference execution consumes a String pin, opaque
|
|
124
|
-
entropy cannot supply an identifier, and
|
|
125
|
-
with STAGE-ESM-028. A target binding contract is not released renderer support.
|
|
124
|
+
entropy cannot supply an identifier. Requires Stage 4.136.0 to render `generate rule`: the attached C# body becomes the concept's `IGeneratableInContext<T>.New(GenerationContext)` factory; a body that does not compile or warns refuses STAGE-ESM-019, type or namespace shadowing STAGE-ESM-022 and a missing attachment STAGE-ESM-020. The Host and the legacy syntax engine still refuse a command that generates a `generate rule` value with STAGE-ESM-028. Rendering emits the attached body as written; it does not turn a portable body into another provider's contract.
|
|
126
125
|
|
|
127
126
|
## Inspect and edit generation through MCP
|
|
128
127
|
|
|
@@ -268,7 +267,8 @@ Requires Stage 4.94.0 or later for receipt-time generation; older factories use
|
|
|
268
267
|
|
|
269
268
|
| Refusal | Still unsupported |
|
|
270
269
|
| --- | --- |
|
|
271
|
-
| STAGE-ESM-028 |
|
|
270
|
+
| STAGE-ESM-028 | unknown strategies, non-concepts, optional/collection generation; a command generating a `generate rule` value in the Host; every explicit strategy and `generate rule` on the legacy syntax engine |
|
|
271
|
+
| STAGE-ESM-019 / -022 / -020 | `generate rule` body that does not compile or warns / type or namespace shadowing / missing attachment (Requires Stage 4.136.0) |
|
|
272
272
|
| STAGE-ESM-011 | A fixture that does not match its strategy shape or concept rules |
|
|
273
273
|
| STAGE-ESM-038 | Routing combined with generation/responses; generated-property rules/requirements; occurrence parameter/response/factory name collisions; unsupported response sources/composites/collections; generated identifier plus destination-less plain production |
|
|
274
274
|
| STAGE-ESM-038 | Unpinned generation with any Unproven/Refuted concept rule, production-condition reads, unordered event/read-model/query expectations or collision-sensitive generated constraints |
|
|
@@ -293,7 +293,7 @@ renderers refuse them with -038. Every severity is enforced as a generation defe
|
|
|
293
293
|
Requires Stage 4.118.0 for semantic checksum validation and 4.119.0 for
|
|
294
294
|
pattern/random factories, Host sampling and executor fixture checks; older
|
|
295
295
|
renderers refuse those constructs with -042/-028. Dated patterns use receipt-time
|
|
296
|
-
context; Int ranges render as `long`. `generate rule`
|
|
296
|
+
context; Int ranges render as `long`. `generate rule` renders from Stage 4.136.0 (see above).
|
|
297
297
|
Requires Arc.Screenplay 22.107.0 for pattern/random/checksum and self-contained
|
|
298
298
|
String-rule recovery; older adapters leave these factories in code. Recovery is
|
|
299
299
|
not Stage rendering: keep refused rule contracts for gap-fill, never delete rules
|
package/package/corpus/skills/cratis-screenplay-command-surface/references/protected-reads.md
CHANGED
|
@@ -66,10 +66,24 @@ Every read must satisfy both boundaries:
|
|
|
66
66
|
PLAY0781 refuses reducers, joins (including removal joins), children/nested scopes,
|
|
67
67
|
`every`/`all`, payload/composite keys, missing removals, empty handled-event sets,
|
|
68
68
|
named sources/streams, singleton views and unsupported/generated/optional/collection
|
|
69
|
-
keys.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
keys. `optional`, `advisory` and `via query` remain refused; `via query` uses parser
|
|
70
|
+
code PLAY0175. There is no unguarded fallback.
|
|
71
|
+
|
|
72
|
+
Requires Screenplay 4.207.0 (`screenplay --version`) for typed diagnostic arguments;
|
|
73
|
+
earlier compilers omit these arguments. Read the arguments, never the message:
|
|
74
|
+
|
|
75
|
+
| Code | Arguments |
|
|
76
|
+
| --- | --- |
|
|
77
|
+
| PLAY0781 | `command`, `read` (the alias, else the read model name), `readModel`, `reason` |
|
|
78
|
+
| PLAY0782 | `command`, `read` |
|
|
79
|
+
| PLAY0783 | `command` |
|
|
80
|
+
| PLAY0784, PLAY0785 | `command`, `read`, `path` |
|
|
81
|
+
|
|
82
|
+
`reason` is one of `reducer`, `join`, `children`, `open-subscription`, `payload-key`,
|
|
83
|
+
`by-parts`, `no-removal`, `empty-handled-set`, `named-source-or-stream`, `singleton`,
|
|
84
|
+
`key-type`, `generated-key`, `optional-key` or `collection-key`. These lowercase,
|
|
85
|
+
hyphenated values are published and stable; they are not C# enum names, and a tool must
|
|
86
|
+
tolerate a value it does not know. Every refused read gets its own PLAY0781.
|
|
73
87
|
|
|
74
88
|
Single-level `read.property` paths bind in `require` operands and produced-event
|
|
75
89
|
mapping sources only. Deeper paths and read paths in `produces when`, response
|
|
@@ -105,9 +119,22 @@ explicit `apply`. The repair inserts into the domain document or sole document,
|
|
|
105
119
|
refuses ambiguous roots and requires individual review, never fix-all. It changes
|
|
106
120
|
absence/conflict behavior, not merely formatting.
|
|
107
121
|
|
|
108
|
-
Stage admits ESM v25
|
|
109
|
-
|
|
110
|
-
|
|
122
|
+
Stage admits ESM v25.
|
|
123
|
+
|
|
124
|
+
Requires Stage 4.138.0 for the Cratis renderer to render protected reads; `cratis render` gets it from the first CLI that bundles it, and CLI 3.75.0 (Stage 4.137.0) and older refuse every protected read with STAGE-ESM-044.
|
|
125
|
+
|
|
126
|
+
Each command with `reads` becomes an Arc command with `[ReadProtection(On)]`, a
|
|
127
|
+
nullable read-model `Handle` parameter per read looked up with `[LookUpBy]`, the
|
|
128
|
+
`<View> '<key>' does not exist.` rejection, and every requirement evaluated in `Handle`
|
|
129
|
+
after the reads. Generated specifications run protected commands in decision mode.
|
|
130
|
+
Reads it cannot preserve faithfully (reads combined with constrained events, read paths
|
|
131
|
+
in `produces when`, read-path mappings to optional, collection, composite or differently
|
|
132
|
+
typed event properties, generated-value freshness scopes) refuse STAGE-ESM-044 naming the
|
|
133
|
+
reason, and no artifacts are emitted. Where rendering refuses, preserve protection and deliver authorized
|
|
134
|
+
hand-written enforcement through render-and-gap-fill; never remove the preamble. Read
|
|
135
|
+
Stage's [protected reads rendering](https://github.com/Cratis/Stage/blob/main/Documentation/reference/protected-reads-rendering.md)
|
|
136
|
+
for the rendered shape and where it differs from the reference (a race is an Arc
|
|
137
|
+
validation failure, not `DecisionStateChanged`; only the first failing requirement is reported).
|
|
111
138
|
|
|
112
139
|
Requires Stage 4.129.0 for semantic Host/specification-executor protected reads;
|
|
113
140
|
older engines refuse STAGE-ESM-044. They require presence before requirements or
|
package/package/corpus/skills/cratis-screenplay-command-surface/references/shop-generation.md
CHANGED
|
@@ -116,8 +116,8 @@ example realizes that credential behavior. Never drop ApiKey's secret marker to
|
|
|
116
116
|
make its generation bind/render. A pattern is not gapless/sequential numbering;
|
|
117
117
|
check digits catch typos, not forgery. ESM v21 binds and reference-executes with
|
|
118
118
|
pins. Requires Stage 4.118.0 for checksum validation and 4.119.0 for pattern/random
|
|
119
|
-
rendering; older renderers refuse those constructs. `generate rule`
|
|
120
|
-
STAGE-ESM-028. Sequence allocation and secret generation stay explicit gaps.
|
|
119
|
+
rendering; older renderers refuse those constructs. `generate rule` renders from Stage 4.136.0 (the Host
|
|
120
|
+
and legacy syntax engine still refuse it with STAGE-ESM-028). Sequence allocation and secret generation stay explicit gaps.
|
|
121
121
|
|
|
122
122
|
## Sources
|
|
123
123
|
|
|
@@ -115,7 +115,8 @@ result are in [references/parsed-not-runnable.md](references/parsed-not-runnable
|
|
|
115
115
|
and `cratis-screenplay-toolchain` (`references/executable-subset.md`). Read `references/parsed-not-runnable.md` when determining the required ESM version or interpreting binding dispositions. Read `cratis-screenplay-toolchain`'s `references/executable-subset.md` when checking binder admission or reference-execution limits. Model the wider
|
|
116
116
|
language freely when the `.play` file **is** the deliverable - documentation,
|
|
117
117
|
review, a shared description of a system. Never read a clean `screenplay` run as
|
|
118
|
-
evidence a construct works downstream.
|
|
118
|
+
evidence a construct works downstream. 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)): model with it, and report a typed
|
|
119
|
+
Stage, `cratis render` or Studio refusal as a platform gap rather than waiting for new constructs.
|
|
119
120
|
|
|
120
121
|
## Locate the model
|
|
121
122
|
|
|
@@ -174,8 +175,7 @@ compile or will not be safe. Both are deliberate.
|
|
|
174
175
|
rejects and matching decide/commit changes conflict. Read
|
|
175
176
|
[protected reads](../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
176
177
|
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: semantic Host/executor support is not generated-app protection.
|
|
178
|
+
not protection and cannot combine with protected reads. Stage 4.138.0 renders protected reads as Arc read protection (`cratis render` gets it from the first CLI that bundles it; CLI 3.75.0 refuses them with STAGE-ESM-044); 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; the Cratis
|
|
37
|
+
| Command reads/concurrency | Eligible reads opt into v25 with `command reads protected`; legacy reads/concurrency retain PLAY0271; the Cratis renderer renders protected reads as Arc read protection in a new enough bundle (older bundles, and shapes it cannot preserve, refuse STAGE-ESM-044); 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
|
@@ -74,7 +74,7 @@ protection and unrecovered code. A pattern is not a gapless/sequential allocator
|
|
|
74
74
|
or secret; check digits detect typos, not forgery. Low-entropy payload codes need
|
|
75
75
|
uniqueness separate from source freshness. Arc recovery does not imply rendering:
|
|
76
76
|
Requires Stage 4.118.0 for checksum validation and 4.119.0 for pattern/random;
|
|
77
|
-
older renderers refuse them. `generate rule` still
|
|
77
|
+
older renderers refuse them. `generate rule` renders from Stage 4.136.0; the Host and legacy syntax engine still refuse it with STAGE-ESM-028.
|
|
78
78
|
Report missing pins, withheld productions/scenarios and version caps
|
|
79
79
|
as losses, not successful recovery. Sources: Arc
|
|
80
80
|
`Documentation/backend/csharp/generating-a-screenplay.md`;
|
package/package/corpus/skills/cratis-screenplay-model-authoring/references/choosing-generation.md
CHANGED
|
@@ -38,5 +38,5 @@ MCP `rules[]` and `derivedPattern` for rule proofs and reviewed PLAY0688 repair;
|
|
|
38
38
|
never delete a business invariant to silence PLAY0689. Read
|
|
39
39
|
[Stage admission](../../cratis-stage-rendering-and-sandbox/references/admission.md)
|
|
40
40
|
for checksum validation and pattern/random rendering prerequisites.
|
|
41
|
-
`generate rule`
|
|
41
|
+
`generate rule` renders only from Stage 4.136.0 (STAGE-ESM-028 before it, and still in the Host), so model admission does not promise rendering.
|
|
42
42
|
Sources: `Documentation/screenplay/generated-values/choosing.md` and `Documentation/screenplay/generated-values.md` in `Cratis/Screenplay`.
|
package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md
CHANGED
|
@@ -267,11 +267,11 @@ See read-surface `references/named-keys.md` for the collection-key exclusion alg
|
|
|
267
267
|
| Query Validation rejection (ESM v18) | Exactly one queried call plus one `then error`, no other action/result/denial. Concept key/supplied filters validate after authorization in every version. Requires Screenplay 4.161.0 or later (`screenplay --version`); older runners may answer absence. |
|
|
268
268
|
| Invocation refusal branches (ESM v19) | Ordered first-match `on refused` productions or acknowledgement, `$refusal` values; bare refusal excludes authorization. Requires Screenplay 4.160.0 or later (`screenplay --version`); older compilers report PLAY0268. |
|
|
269
269
|
| Generated-concept rules (ESM v20) | Proven rules bind silently, Refuted PLAY0688 errors include a witness, Unproven PLAY0689 warnings include a reason; deterministic regex containment only, not passing samples. Fixtures obey shape and rules. Requires Screenplay 4.164.0 or later (`screenplay --version`); older compilers report PLAY0268. |
|
|
270
|
-
| Finite generation and attachments (ESM v21) | String pattern with optional Luhn/Mod11/Mod97 checksum, inclusive Int random range, attached String generation rule with language-neutral Now/Tenant context and String result, String checksum validation. Requires Screenplay 4.172.0 (`screenplay --version`); older compilers report PLAY0268. PLAY0691 is support-budget exhaustion, PLAY0692 empty support on a scanned date. Pin date fixtures with given clock. Requires Stage 4.118.0 for checksum validation and 4.119.0 for pattern/random rendering; older renderers refuse them. `generate rule`
|
|
270
|
+
| Finite generation and attachments (ESM v21) | String pattern with optional Luhn/Mod11/Mod97 checksum, inclusive Int random range, attached String generation rule with language-neutral Now/Tenant context and String result, String checksum validation. Requires Screenplay 4.172.0 (`screenplay --version`); older compilers report PLAY0268. PLAY0691 is support-budget exhaustion, PLAY0692 empty support on a scanned date. Pin date fixtures with given clock. Requires Stage 4.118.0 for checksum validation and 4.119.0 for pattern/random rendering; older renderers refuse them. current renderers render `generate rule` (the Host and legacy syntax engine keep STAGE-ESM-028); see command-surface `references/generated-values-and-responses.md`. |
|
|
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 and, in a new enough bundle, renders protected reads as Arc read protection, refusing unpreservable shapes and every older bundle with 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. The Stage Host and executor run v26 (older Stage refuses STAGE-ESM-016); the renderer and legacy engines refuse STAGE-ESM-046 (toolchain `language-admission.md`). 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 (several key marks bind as v27; older binders refuse PLAY0268; toolchain `language-admission.md`), queries with context `from` sources (typed query context is unadmitted), single-result filters (collections only), `scoped to` (opaque scope), `performer` (opaque implementation) or a `by` block on a list query or non-optional single result; optional keyed and collection queries, including caller-supplied equality filters and observable delivery, bind, `$causedBy` and templates in projections |
|
|
@@ -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 renderer renders protected reads as Arc read protection once the CLI bundles a Stage that supports it (older bundles refuse them with STAGE-ESM-044; releases in command-surface `references/protected-reads.md`); 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. Uuid ownership compares the caller with the stored owner (`require caller == Document.owner`, v28) |
|
|
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 renderer renders protected reads as Arc read protection once the CLI bundles a Stage that supports it (older bundles refuse them with STAGE-ESM-044; releases in command-surface `references/protected-reads.md`); reference/semantic-engine evidence is not generated-app protection. An ownership rule compares the caller with the stored owner (`require caller == Document.owner`, Uuid equality, same concept on both sides, Requires Screenplay 4.205.0, ESM v28; ordering and Uuid validation rules stay PLAY0268). 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 renderer renders protected reads as Arc read protection once the CLI bundles a Stage that supports it (older bundles refuse them with STAGE-ESM-044; releases in command-surface `references/protected-reads.md`), and the v25 pair is a separate admission: 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 renderer renders protected reads as Arc read protection once the CLI bundles a Stage that supports it (older bundles refuse them with STAGE-ESM-044; releases in command-surface `references/protected-reads.md`); 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 |
|
|
@@ -76,7 +76,7 @@ noncollection sources of compatible nominal types, not literals. Neither execute
|
|
|
76
76
|
over a composite view in the usual way:
|
|
77
77
|
|
|
78
78
|
- A command `reads … by` without the application-root `command reads protected`
|
|
79
|
-
preamble is PLAY0271. With the preamble it is PLAY0781 (reason
|
|
79
|
+
preamble is PLAY0271. With the preamble it is PLAY0781 (reason `by-parts`), PLAY0782
|
|
80
80
|
first when the command has no `identifier`, and PLAY0273 when the key is not an
|
|
81
81
|
input property.
|
|
82
82
|
- A trigger `reads … by` binds when the reaction only invokes commands (information
|
|
@@ -214,12 +214,17 @@ Projections on a composite-keyed read model admit only root `from` and `remove w
|
|
|
214
214
|
Joins, `children`, `remove via join`, `every`, `all`, `nested`, `clear with`,
|
|
215
215
|
`variant` and reducers are PLAY0268. This is not ESM v10 admission.
|
|
216
216
|
|
|
217
|
-
Stage
|
|
218
|
-
`
|
|
217
|
+
Requires Stage 4.137.0 for v27 admission (older Stage refuses the whole model with
|
|
218
|
+
`STAGE-ESM-016`). The semantic Host runs composite-keyed read models and the CLI's `cratis run`
|
|
219
|
+
default engine runs them (Requires Cratis CLI 3.75.0); the legacy `eventmodel` engine and the specification
|
|
220
|
+
executor refuse them. Rendering refuses a read model with several key parts or a projection keyed by
|
|
221
|
+
parts (`STAGE-ESM-048`) and a single-instance query by parts (`STAGE-ESM-047`, pending Chronicle#4265),
|
|
222
|
+
and publishes nothing, so `cratis render` cannot deliver it. Verify and reference-test the model with the
|
|
219
223
|
standalone compiler, then hand the delivery to gap-fill
|
|
220
|
-
(`cratis-screenplay-render-and-gap-fill`) with the model as the contract.
|
|
224
|
+
(`cratis-screenplay-render-and-gap-fill`) with the model as the contract. Composite-keyed read models get
|
|
225
|
+
no conventional `Get<ReadModel>ById` query.
|
|
221
226
|
Eligible command reads separately opt into v25 with `command reads protected`;
|
|
222
|
-
a composite lookup there is still refused (PLAY0781
|
|
227
|
+
a composite lookup there is still refused (PLAY0781 reason `by-parts`). See command-surface
|
|
223
228
|
[protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md).
|
|
224
229
|
|
|
225
230
|
## Repairs and evidence
|
|
@@ -67,7 +67,7 @@ refused reactions, captures and Translate slices remain gap-fill.
|
|
|
67
67
|
Models with event sources, streams or command routes bind and reference-execute as ESM v8 on the standalone
|
|
68
68
|
tool, so report V3 and V4 from that tool. The CLI/Stage pair
|
|
69
69
|
(`cratis-screenplay-toolchain/references/renderable-subset.md`) reaches v8 route checks
|
|
70
|
-
and construct admission through
|
|
70
|
+
and construct admission through v27 (Requires Cratis CLI 3.75.0; older bundles stop earlier, v28 is `CLI-RENDER-004`). Public/foreign events and production overrides
|
|
71
71
|
still refuse; semantic reaction/reducer filters and role/authenticated `runs as` render.
|
|
72
72
|
Claim-reading/opaque system gates, legacy actor/filter paths and mixed effects still refuse. Keep refused scope as case A/C,
|
|
73
73
|
never infer target support from binding. Read Stage's `references/admission.md` and
|
|
@@ -163,7 +163,7 @@ Adapters and non-renderable scope follow the contract rules of `cratis-applicati
|
|
|
163
163
|
- `description` and `documentation` reach rendered code only as XML documentation comments (Stage#178),
|
|
164
164
|
never as behavior. A rule stated only in prose is unenforced: fallback record entry or target requirement,
|
|
165
165
|
never "delivered".
|
|
166
|
-
- The `cratis run` sandbox's default engine enforces only simple literal validation rules and no
|
|
166
|
+
- The `cratis run` sandbox's legacy EventModel engine (the default engine before CLI 3.73.0) enforces only simple literal validation rules and no
|
|
167
167
|
authorization; it is no evidence for denial behaviour or for any other rule.
|
|
168
168
|
- Never remove `pii`, `secret`, authorization or rules to get a render through; report the gap.
|
|
169
169
|
- Stop and ask only on a genuine contradiction between model, specs, descriptions and declared
|
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md
CHANGED
|
@@ -108,11 +108,12 @@ reaction or drop an effect to dodge rendering.
|
|
|
108
108
|
Preserve declared `reaction batches atomic` boundaries: each trigger occurrence's
|
|
109
109
|
direct productions and each selected refusal branch are separate batches, with
|
|
110
110
|
invoked commands independent. Stage refuses v22 (STAGE-ESM-016) and atomic mode
|
|
111
|
-
in admitted v23–
|
|
111
|
+
in admitted v23–v27 (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
|
-
|
|
115
|
-
generated-app admission/enrollment tests
|
|
114
|
+
render from Stage 4.138.0 (STAGE-ESM-044 from older bundles, or for shapes it cannot
|
|
115
|
+
preserve) and need generated-app admission/enrollment tests wherever you hand-write them;
|
|
116
|
+
ordinary injection never supplies protection.
|
|
116
117
|
Semantic Host/executor support is a separate result, not generated-app enforcement.
|
|
117
118
|
|
|
118
119
|
## Re-delivery
|
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md
CHANGED
|
@@ -31,7 +31,7 @@ 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 a list-query `by` block remain PLAY0268; a read model with several key parts (v27) refuses `STAGE-ESM-
|
|
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 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`); 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–v27) | 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
|
|
|
@@ -39,6 +39,7 @@ Requires Stage 4.129.0 for semantic Host/executor protected reads; older engines
|
|
|
39
39
|
refuse STAGE-ESM-044. Non-Error protected requirements refuse STAGE-ESM-045, including
|
|
40
40
|
reaction invocations. A semantic-engine pass does not resolve the rendering gap;
|
|
41
41
|
read [sandbox boundaries](../../cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md#protected-command-reads).
|
|
42
|
+
Requires Stage 4.138.0 for the Cratis renderer to render protected reads.
|
|
42
43
|
|
|
43
44
|
## Triage rules
|
|
44
45
|
- A capability gap never becomes a model fix by deleting meaning. Turning a list screen into a
|
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 protected-read rendering (Stage 4.138.0; STAGE-ESM-044 otherwise).
|
|
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
|
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
**Legacy control without `command reads protected`, not binding-ready by design.**
|
|
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
|
-
finite event-source-keyed admission with removals. A v25 reference pass
|
|
7
|
-
|
|
6
|
+
finite event-source-keyed admission with removals. A v25 reference pass is not
|
|
7
|
+
rendering: Stage admits v25 and renders protected reads from 4.138.0, and older bundles refuse 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/scenario-catalogue.md
CHANGED
|
@@ -102,8 +102,8 @@ name them as unfinished.
|
|
|
102
102
|
matching value. Both are needed. Ownership checks on text, Uuid, Date and DateTime subjects render;
|
|
103
103
|
other subjects are STAGE-ESM-015: note it.
|
|
104
104
|
- Traps: `then error` for a denial; a denial spec whose inputs also break a rule (it still
|
|
105
|
-
denies, but reads ambiguously); trusting a `cratis run` sandbox answer (the
|
|
106
|
-
the
|
|
105
|
+
denies, but reads ambiguously); trusting a `cratis run` sandbox answer (the legacy EventModel engine enforces no authorization;
|
|
106
|
+
the semantic engine, `cratis run`'s default from CLI 3.73.0, enforces both but reads forgeable caller headers, so it is no security boundary); counting another command's denial.
|
|
107
107
|
|
|
108
108
|
## 4. State violation
|
|
109
109
|
- Ask: "After which earlier facts must this request be refused?"
|
package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md
CHANGED
|
@@ -39,8 +39,8 @@ Typed example/override forms: `cratis-screenplay-specifications`
|
|
|
39
39
|
| Bodied rules, code policies | spec them | spec reported **unsupported**, never passed | no |
|
|
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
|
-
| 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–
|
|
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 |
|
|
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–v27 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 | Cratis C# rendering in a new enough bundle (STAGE-ESM-044 before, or for unpreservable shapes); 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 protected-read rendering (Stage 4.138.0; STAGE-ESM-044 otherwise); 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
|
|
8
|
+
migration and keep the separate rendering result (Stage 4.138.0 renders protected reads, STAGE-ESM-044 otherwise; 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`,
|