@cratis/pi 7.20.0 → 7.22.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/rules/concepts.md +10 -2
- package/package/corpus/rules/vertical-slices.md +4 -2
- package/package/corpus/skills/cratis-fundamentals-concept/SKILL.md +58 -5
- package/package/corpus/skills/cratis-fundamentals-concept/verification.json +4 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +19 -12
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +4 -3
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +13 -15
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/cases-to-specify.md +4 -4
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +21 -0
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/provenance.md +4 -2
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +7 -4
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/verification.json +4 -4
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +38 -36
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/complete-examples.md +1 -1
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/invocation-identity.md +84 -0
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/refusals-and-redelivery.md +102 -0
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/specifying-triggers-and-clock.md +4 -2
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +28 -16
- package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +9 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +15 -13
- package/package/corpus/skills/cratis-screenplay-command-surface/references/operations.md +80 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/policy-persona-seed.md +23 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/verification.json +2 -2
- package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +9 -6
- package/package/corpus/skills/cratis-screenplay-discovery/references/storming-loop.md +6 -5
- package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +7 -5
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +6 -5
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +39 -49
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +5 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +48 -8
- package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +44 -42
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +46 -9
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +35 -11
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +118 -13
- package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +3 -3
- package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +11 -6
- 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 +11 -2
- package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +10 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/references/guarded-actions.md +79 -0
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +9 -7
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +6 -3
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/verification.json +2 -2
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +3 -2
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +13 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +3 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +3 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/references/slicing.md +40 -0
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +24 -16
- package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +103 -0
- package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +5 -6
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +4 -4
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +4 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/verification.json +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +34 -32
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +47 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +57 -9
- package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +6 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +19 -10
- package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +4 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +8 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +90 -27
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +10 -6
- package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +29 -12
- package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +91 -136
- package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +7 -5
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +20 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +9 -5
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +8 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +2 -2
- package/package.json +1 -1
|
@@ -10,6 +10,12 @@
|
|
|
10
10
|
- Not refused, but do not rely on it
|
|
11
11
|
- Never do this to reach V3
|
|
12
12
|
|
|
13
|
+
Current pins are Screenplay 4.125.0 / CLI 3.41.0 (`versions.md`). Detailed
|
|
14
|
+
4.66.0/4.68.0 binder probes below retain their historical labels. Current source
|
|
15
|
+
admits sources/streams/routes as ESM v8 and policy negation as ESM v7; operations,
|
|
16
|
+
exact numbers and reaction refusals/redelivery remain unadmitted. Use the actual
|
|
17
|
+
binder before promoting an older probe to a current capability claim.
|
|
18
|
+
|
|
13
19
|
What the binder admits, and what it refuses with which code. The answer depends on the
|
|
14
20
|
compiler version: standalone Screenplay 4.68.0 admits ESM v1 to v7; the 4.66.0 compiler bundled in
|
|
15
21
|
cratis 3.28.2 and 3.28.3 admits v1 to v6; the 4.60.1 compiler bundled in cratis before 3.28.2 admits v1 to v5.
|
|
@@ -63,9 +69,10 @@ Complete examples that bind live in `executable-example.md` (both compilers),
|
|
|
63
69
|
|
|
64
70
|
- `slice Automation` with `reaction`: `when <Event>` (with values) then `produces` (no
|
|
65
71
|
`for` means the trigger's event source) or `invokes <Command>`; `where`; clock `at ... on
|
|
66
|
-
...` with an explicit `for`.
|
|
67
|
-
|
|
68
|
-
|
|
72
|
+
...` with an explicit `for`. Without a declared actor, a gated invocation denies.
|
|
73
|
+
On 4.125.0 reaction `runs as system role "<Role>"` supplies the actor and
|
|
74
|
+
selects ESM v10; keep the gate. CLI 3.41.0's older compiler rejects this syntax,
|
|
75
|
+
while standalone reference execution admits it.
|
|
69
76
|
- Application `trigger` declarations and `when trigger` specifications.
|
|
70
77
|
- `slice Translate` with `capture` (`key`, `map ... translate`, `append ... when x from "a"
|
|
71
78
|
to "b"`), and `given capture` / `when capture` specifications.
|
|
@@ -173,7 +180,7 @@ bodies still leave their owner non-executable.
|
|
|
173
180
|
| `$eventContext.occurred.Week` | PLAY0273 | derived value |
|
|
174
181
|
| Projection `parent p` where `p` is not on the child event | PLAY0273 | "Event property not found" |
|
|
175
182
|
| `generated` or `returns` on a compiler before 4.68.0 (4.66.0 and 4.67.0 refuse; 4.66.0 is bundled in cratis 3.28.x) | PLAY0268 | admitted from standalone 4.68.0 (ESM v7), see above |
|
|
176
|
-
| Operations or systems, `numbers exact`,
|
|
183
|
+
| Operations or systems, `numbers exact`, reaction refusals/redelivery | PLAY0268 | not admitted by any supported ESM version; one such construct leaves the **whole** application without an executable model. Event sources/streams/routes instead bind as ESM v8 on the current compiler (`sources-and-streams.md`) |
|
|
177
184
|
| Spec of a gated command or query without `given caller` | PLAY0389 | module and feature gates count |
|
|
178
185
|
| `given` or `then readmodel` missing the key property | PLAY0351 | key is the keyed query's `by` |
|
|
179
186
|
| When-less spec asserting events or errors | PLAY0352 | |
|
|
@@ -185,15 +192,17 @@ bodies still leave their owner non-executable.
|
|
|
185
192
|
- Plain `produces` without `for` binds (PLAY0478, information) but means allocation in the
|
|
186
193
|
ESM and "the identifier" in rendered Arc code. Always write `for`.
|
|
187
194
|
- A projection-level (root) `remove via join` binds, but the reference execution plan refuses it (`UnsupportedProjectionBlock`), so no specification in the application runs; Chronicle wires it as a child pull. See the blocked-plan rows above.
|
|
188
|
-
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
field lineage by hand.
|
|
195
|
+
- At Screenplay 4.125.0, V1 reports absent projection/children/nested targets
|
|
196
|
+
with PLAY0514 and unknown removal/capture events with PLAY0166. An unmapped
|
|
197
|
+
declared field can be found by opt-in `--check field-origins` (PLAY0534);
|
|
198
|
+
unknown or opaque coverage is skipped, so still check lineage by hand.
|
|
193
199
|
|
|
194
200
|
## Never do this to reach V3
|
|
195
201
|
|
|
196
202
|
Do not remove `@pii`, `@sensitive`, `authorize` or policies, list queries, automations or
|
|
197
203
|
rules a domain needs just to make binding pass. Report `V3 blocked: <codes>` and record the
|
|
198
204
|
slice in the gap list. A `@pii` or `@sensitive` attribute blocks V3 and rendering, and
|
|
199
|
-
either attribute on an
|
|
205
|
+
either attribute on an identifier or typed destination is a source error
|
|
206
|
+
PLAY0515 on the current compiler (including stream-id parts and route mapping
|
|
207
|
+
sources). Chronicle also rejects `[PII]`/`[Encrypted]` on event-source identifiers
|
|
208
|
+
(CHR0034/CHR0052). Keep surrogate identity and protected payload separate.
|
|
@@ -28,6 +28,7 @@ is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
|
28
28
|
|
|
29
29
|
## Sources read for facts
|
|
30
30
|
|
|
31
|
+
- Current baseline: Screenplay `v4.125.0` `Documentation/screenplay/{tool,diagnostics,editor-diagnostics,grammar,event-sources,specifications,policies}.md`, MCP reference/authoring guides and `Semantics/Versions.cs`; CLI `v3.41.0` dependency pins, `RenderedSemanticVersions.cs` and its v7 planning specification. Installed versions/CLI help and changed examples were checked separately. Pins are in `versions.md`; the older probes below retain their original labels.
|
|
31
32
|
- Screenplay `v4.66.0` (`c89198b`): `Documentation/screenplay/` (grammar, commands, queries,
|
|
32
33
|
specifications, reactions, diagnostics, mcp), `decisions/0017`, `0020`, `0022` to `0024`,
|
|
33
34
|
`Source/DotNET/Screenplay/Semantics/` (binder, versions, execution),
|
|
@@ -39,8 +40,9 @@ is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
|
39
40
|
- cratis `v3.28.2` (`141c499`; `Render/`, `Run/`, `Prologue/` and `Screenplay/Generate*` are unchanged since `v3.27.1`, `a327e89`): `Source/Cli/Commands/Render/`, `ScreenplayMcpRoot.cs`,
|
|
40
41
|
`Documentation/reference/screenplay.md`.
|
|
41
42
|
- Arc `v22.50.5` and Chronicle `v19.32.0` for the code-level facts cited in `versions.md`.
|
|
42
|
-
-
|
|
43
|
-
|
|
43
|
+
- Historical issue inventory at the old probes: cli#242, #243, #244, #245;
|
|
44
|
+
Stage#79, #165, #178; Chronicle#3744, #4123, #4131. Current invocation actor and
|
|
45
|
+
reference-execution availability are verified against v4.125.0, not old open-issue status.
|
|
44
46
|
|
|
45
47
|
## Changes from the earlier toolkit
|
|
46
48
|
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# Renderable subset (V5): what `cratis render` admits
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Current pins: standalone Screenplay 4.125.0; CLI 3.41.0 bundles Screenplay
|
|
4
|
+
4.114.0 and Stage 4.51.3 (`versions.md`). CLI admits ESM v7 to Stage planning;
|
|
5
|
+
above v7 is CLI-RENDER-004. Its v7 canonical corpus gets STAGE-ESM-028/029 for
|
|
6
|
+
generated values/responses (`v3.41.0:Source/Cli.Specs/for_ScreenplayPlanning/when_planning_an_esm_v7_model.cs`).
|
|
7
|
+
The following detailed Stage 4.24.x results are **historical**, not reverified
|
|
8
|
+
4.51.3 claims. Run the bundled renderer before asserting current renderability.
|
|
9
|
+
|
|
10
|
+
Historical sources, all read at tags: Stage v4.24.1 `Source/Rendering.Cratis/Semantics/SemanticSurfaceLedger.cs`
|
|
4
11
|
(an exhaustive map of every ESM member to Rendered, Rejected(code) or Ignored),
|
|
5
12
|
`CratisArtifactRenderPlanner.cs`, `PureTransitionAdmission.cs`; cli v3.28.2
|
|
6
13
|
`Commands/Render/RenderSettings.cs` and `Documentation/reference/screenplay.md`. Re-run the
|
|
@@ -1,29 +1,92 @@
|
|
|
1
1
|
# Event sources, streams and command routes
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- Admission
|
|
6
|
+
- Declare and route
|
|
7
|
+
- Specification routes
|
|
8
|
+
- Boundaries
|
|
9
|
+
|
|
10
|
+
## Admission
|
|
11
|
+
|
|
12
|
+
Sources, streams and command/specification routes bind and reference-execute as
|
|
13
|
+
**ESM v8** on Screenplay 4.125.0. Current evidence: released `event-sources.md`,
|
|
14
|
+
`specifications.md`, `Versions.cs`; the complete example below compiled with
|
|
15
|
+
`--warnaserror` and passed `screenplay test` on 4.125.0.
|
|
16
|
+
|
|
17
|
+
CLI 3.41.0 renders only model versions up to v7: routed v8 models receive
|
|
18
|
+
`CLI-RENDER-004` before planning/publication. This is not a source-validation or
|
|
19
|
+
binder refusal. Keep the routed model as contract and gap-fill its realization;
|
|
20
|
+
never remove routing to obtain a render. Pins: `versions.md`.
|
|
21
|
+
|
|
22
|
+
The 4.68.0 historical binder refusal (`PLAY0268`, no admitted version then) is
|
|
23
|
+
not the current disposition. Systems/operations and exact numbers still report
|
|
24
|
+
PLAY0268; they are separate capabilities, not evidence against v8 routing.
|
|
25
|
+
|
|
26
|
+
## Declare and route
|
|
27
|
+
|
|
28
|
+
An `eventsource` belongs to the application. Its `identifier` states the nominal
|
|
29
|
+
source-id type; streams belong to that source. A command's `stream Source.Stream`
|
|
30
|
+
selects the exact declared source/stream, with nested scalar `streamId = <value>`
|
|
31
|
+
for a keyed stream. Portable mapping sources are required direct non-generated
|
|
32
|
+
command properties or compatible scalar literals; nested paths can be authored
|
|
33
|
+
but refuse executable admission with PLAY0268. An unkeyed stream takes no id. Composite stream ids instead
|
|
34
|
+
use a bare nested `streamId` followed by all named part mappings exactly once.
|
|
35
|
+
A property literally named `stream` is written `@stream` where the command clause
|
|
36
|
+
would otherwise consume it. Do not invent source-only route syntax.
|
|
37
|
+
|
|
38
|
+
```screenplay
|
|
39
|
+
concept AccountId : Uuid
|
|
40
|
+
concept Month : Int
|
|
41
|
+
eventsource Account
|
|
42
|
+
identifier AccountId
|
|
43
|
+
stream Transactions
|
|
44
|
+
streamId Month
|
|
45
|
+
module Banking
|
|
46
|
+
feature Deposits
|
|
47
|
+
slice StateChange Deposit
|
|
48
|
+
command Deposit
|
|
49
|
+
accountId AccountId identifier
|
|
50
|
+
month Month
|
|
51
|
+
amount Decimal
|
|
52
|
+
stream Account.Transactions
|
|
53
|
+
streamId = month
|
|
54
|
+
produces event Deposited
|
|
55
|
+
amount Decimal = amount
|
|
56
|
+
specification Depositing
|
|
57
|
+
when Deposit
|
|
58
|
+
accountId = "3fa85f64-5717-4562-b3fc-2c963f66afa6"
|
|
59
|
+
month = 10
|
|
60
|
+
amount = 40
|
|
61
|
+
then Deposited
|
|
62
|
+
for "3fa85f64-5717-4562-b3fc-2c963f66afa6"
|
|
63
|
+
stream Account.Transactions
|
|
64
|
+
streamId = 10
|
|
65
|
+
amount = 40
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Specification routes
|
|
69
|
+
|
|
70
|
+
`given <Event>`, `when append <Event>` and `then <Event>` may state a route;
|
|
71
|
+
`when <Command>` may not, because its route comes from the declaration. Routes
|
|
72
|
+
belong to occurrences, not event types. Scalar ids are concrete literals of the
|
|
73
|
+
stream's declared type; composite ids name every declared part. Routed history
|
|
74
|
+
and appends require a concrete `for` of the source identifier type; routed `then`
|
|
75
|
+
may omit it. Unknown/ambiguous destination types refuse, never default to text.
|
|
76
|
+
|
|
77
|
+
`then` without routing leaves the route unspecified (wildcard), while
|
|
78
|
+
`then ... no stream` explicitly expects an unrouted occurrence. `no stream` is
|
|
79
|
+
not permitted on `given` or `when append`; no route there already means unrouted.
|
|
80
|
+
An event-level `stream = ...` or `streamId = ...` remains payload, not routing.
|
|
81
|
+
Typed event examples may supply a route, replaced as a whole by step overrides;
|
|
82
|
+
`for` is independent. No spelling restores a wildcard after an example supplies
|
|
83
|
+
a route. See `cratis-screenplay-specifications` for fixture provenance.
|
|
84
|
+
|
|
85
|
+
## Boundaries
|
|
86
|
+
|
|
87
|
+
Reference routing does not prove target deployment, concurrency or protected
|
|
88
|
+
reads. Personal/secret values cannot become source or stream ids (PLAY0515),
|
|
89
|
+
including composite parts and nested command mapping sources. Use surrogates.
|
|
90
|
+
Code-level realization uses Chronicle `IEventSource`, `[EventSource]`,
|
|
91
|
+
`[EventStream]` and Arc's event-source route attribute; follow the corresponding
|
|
92
|
+
client/command skills rather than translating route metadata to payload copies.
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# Traps (one line each, with the fix)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Current pins: Screenplay 4.125.0 / CLI 3.41.0 (`versions.md`). Unless explicitly
|
|
4
|
+
updated below, [probed]/[source] rows retain their historical v4.66.0/CLI 3.28.2
|
|
5
|
+
scope; negative capability claims there are not current verdicts. Current routes
|
|
6
|
+
bind as v8, v7 reaches Stage planning, reference tests have CLI/MCP routes, and
|
|
7
|
+
exact numbers are documented in the grammar. Compiler syntax: `cheat-sheet.md`.
|
|
4
8
|
|
|
5
9
|
1. Clean V1 is not executable: binding errors appear only through MCP (V2) or `render`. Neither `screenplay <folder>` nor `cratis screenplay validate` binds. [probed]
|
|
6
10
|
2. The Screenplay samples validate clean but are not all executable; copying their idioms (list queries, `@pii`, `today`, `reads`, `$causedBy`, templates, performers) breaks V3. [probed]
|
|
@@ -8,10 +12,10 @@ Re-checked against Screenplay v4.66.0 and cli v3.28.2 where marked [probed] or [
|
|
|
8
12
|
4. Plain `produces` without `for` means allocation in the ESM but "the identifier" in rendered code. Always write `for <identifier>`. [PLAY0478 probed]
|
|
9
13
|
5. PLAY0029 is a warning: a misspelled keyword (or `type` inside a slice) drops the construct silently. Use `--warnings-as-errors`. [probed]
|
|
10
14
|
6. Validate the folder: `cratis screenplay validate file.play` ignores imports and reports false unknown-name warnings (cli#244, open); the standalone tool follows them. [probed on 3.28.2 and 4.66.0]
|
|
11
|
-
7.
|
|
15
|
+
7. Current V1 warns on absent projection/children/nested targets (PLAY0514) and unknown removal/capture events (PLAY0166). Opt-in field-origins checks find unmapped declared fields (PLAY0534) where coverage is known; still walk lineage for skipped/opaque shapes.
|
|
12
16
|
8. Severity does not soften a rule: `severity warning` still rejects the command.
|
|
13
17
|
9. Authorization (module AND feature AND construct) runs before validation; unauthorized is `then denied`, never `then error`.
|
|
14
|
-
10.
|
|
18
|
+
10. Without a declared actor an invocation is caller-less. At 4.125.0 declare reaction `runs as system role "<Role>"` (ESM v10), keep its gate, and reference-test the trusted path. CLI 3.41.0's 4.114.0 parser rejects this syntax (PLAY0137); Stage 4.51.3 audits through v7 only. Arc gap-fill uses `[ExecuteCommandsAsSystem]` for returned commands, not a fictional `given caller`.
|
|
15
19
|
11. A reaction `produces` without `for` lands on the trigger's event source; clock and application triggers need an explicit `for`.
|
|
16
20
|
12. Read-model identity comes from its keyed queries, which must all use the same `by` property: `query XById => RM optional` + `by xId XId` with `xId` a read-model property, and the identifier equals the projection's effective key (table in slice-design `references/read-model-design.md`; full rule, including Stage's narrower admission and `STAGE-ESM-017`, in `cratis-stage-rendering-and-sandbox` `references/admission.md`). Never mark a read-model property `identifier`. (PLAY0268 when the keyed queries do not share one `by` property; PLAY0351 when a `given`/`then` readmodel block omits that property.)
|
|
17
21
|
13. Projection `key` routes only on `from` (projection-level: PLAY0381). `all` is per event source. Joins never create instances and match the joined event's source id. [probed]
|
|
@@ -27,10 +31,10 @@ Re-checked against Screenplay v4.66.0 and cli v3.28.2 where marked [probed] or [
|
|
|
27
31
|
23. `@` escapes are mandatory for `tag`, `authorize`, `produces`, `reads`, `file`, `validate`, `sequence`, `occurred`, `causedBy`, `namespace`, `correlation`, `causation`, and projection `key`/`parent`/`with` as names.
|
|
28
32
|
24. Comments do not survive canonicalizing edits (PLAY0288 reprint; `droppedCommentCount`); keep durable rationale in `description` text, not `//`.
|
|
29
33
|
25. MCP writes: propose, review, approval, apply by the identity owner (the session that owns the MCP connection); other subagents return edit requests; proposals are connection-local, at most 16 (`cratis-screenplay-model-authoring`).
|
|
30
|
-
26.
|
|
34
|
+
26. Operations/systems and exact numbers remain unadmitted. Sources/streams/routes bind and reference-execute as ESM v8 at 4.125.0; generated values/responses bind as v7. CLI 3.41.0 renders through v7 only, with construct-specific Stage refusals. Consult released grammar rather than inventing syntax from decisions.
|
|
31
35
|
27. Translate vs Automation is semantic: external facts become local facts in `Translate`; in-app event-to-event goes in `Automation`.
|
|
32
36
|
28. Personas drive the board: a persona must list every policy on the path, including module-level `IsAuthenticated`.
|
|
33
|
-
29.
|
|
37
|
+
29. A sample's source check is not execution. Run selected admitted specifications through `screenplay test`/MCP; given==when clock still fires no scheduled occurrence.
|
|
34
38
|
30. Claims compare with `matches` (`claim "dept" matches "Finance"`); `==` is PLAY0120. Conditions with `contains`/`starts with` compile but do not bind. [probed]
|
|
35
39
|
31. One `every`/`all` block per projection level for V3; `$eventContext.occurred.Week` does not bind. [probed]
|
|
36
40
|
32. Concept rules: `min`/`max`/`length ==`, not `length 3 to 10` (PLAY0141). [probed]
|
|
@@ -38,7 +42,7 @@ Re-checked against Screenplay v4.66.0 and cli v3.28.2 where marked [probed] or [
|
|
|
38
42
|
|
|
39
43
|
34. A `from <Event> key <property>` routes only if every such event carries that property: an event that frees or updates a row keyed by another stream's id must carry that id in its payload, or the row never changes. Whether the compiler reports a missing key property is unverified [to probe]; check by hand.
|
|
40
44
|
35. `description`/`documentation` are authoring metadata: board, MCP and Prologue show them; `cratis render` never does (Stage#178). A rule only in prose is unenforced in rendered code; make it a rule layer, a spec or a recorded target requirement.
|
|
41
|
-
36.
|
|
45
|
+
36. One unadmitted construct (operations, exact numbers, refusal/redelivery) blocks whole-model binding. Routing is admitted v8, not one of those constructs; CLI render's v7 boundary is a separate refusal. Do not remove routing or authorization to render a model.
|
|
42
46
|
37. Personas are not in the ESM (Screenplay#254); specs cannot reference them. Write `given caller` as the roles/claims that stand for the persona.
|
|
43
47
|
38. A rule that depends on stored state is `reads <View>` + `require <expr> message "..."` (stated intent; PLAY0268/0271 at binding are expected in design mode). The slice `description` must mark it NOT enforced in the model today (Screenplay#129/#209) and name the target: Arc `[ProtectedDecision]` + `DecisionRead<T>` (Arc v22.39.0 and later; not available in a Stage-rendered app on Arc 22.25.0), Chronicle DCB (`concurrency` scope), or a constraint where one fits. Forbidden: caller-supplied copies of state in `require`, boolean attestation inputs (`confirmsX == true`), rules hidden in `handler`/implementation-hint prose. An unguarded materialized read is unsafe for a protected decision.
|
|
44
48
|
|
|
@@ -28,12 +28,20 @@ V3 are read from the MCP server or from a render, V1 and V5 from the CLIs.
|
|
|
28
28
|
|
|
29
29
|
| Tool | Command | Pass | Fail |
|
|
30
30
|
| --- | --- | --- | --- |
|
|
31
|
-
| Standalone (preferred) | `screenplay <model-
|
|
31
|
+
| Standalone 4.125.0 (preferred) | `screenplay <model-root> --warnaserror --no-color` | exit 0 and a nonzero compiled file count | exit 1 defects; exit 2 could not run/invalid arguments or input |
|
|
32
32
|
| cratis (fallback) | `cratis screenplay validate <model-folder> --warnings-as-errors -o json-compact` | exit 0 | exit 5; exit 1 means missing path or no files |
|
|
33
33
|
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
-
|
|
34
|
+
- Validate the complete application root, not an independently selected fragment.
|
|
35
|
+
Standalone file mode follows imports; folder mode includes all files. The CLI
|
|
36
|
+
file-import limitation below was a 3.28.2 probe, not a current tool claim.
|
|
37
|
+
- Require a nonzero file count; empty input is not a model-validation pass.
|
|
38
|
+
- Optional `--scope <Module.Feature.Slice>` compiles the whole application but
|
|
39
|
+
reports descendants and direct dependent declarations, not transitive impact.
|
|
40
|
+
Exit/`--warnaserror` apply to that reported set; inspect the separate whole
|
|
41
|
+
application counts before a whole-model claim. Unknown/ambiguous scopes exit 2.
|
|
42
|
+
- `--check <names>` (repeatable) or `--check all` opts into completeness warnings
|
|
43
|
+
PLAY0530–PLAY0537. Whole-source errors skip them; a skipped check is not passed.
|
|
44
|
+
Names/codes, coverage limits and editor support: `diagnostics.md`.
|
|
37
45
|
- Warnings are failures here. PLAY0029 (a construct dropped silently) and the unresolved-name
|
|
38
46
|
warnings are the defects this verdict exists to catch.
|
|
39
47
|
- Syntax and consistency checks (PLAY0282 to PLAY0294) run; binding does not.
|
|
@@ -75,14 +83,21 @@ never "specifications pass".
|
|
|
75
83
|
- A blocked V3 is not repaired by deleting protection or domain rules. Never remove `@pii`,
|
|
76
84
|
`@sensitive`, authorization, list queries, automations or rules to reach V3; record the
|
|
77
85
|
slice and the code in the gap list.
|
|
78
|
-
- A model is
|
|
79
|
-
|
|
86
|
+
- A model is executable only on the compiler that bound it. V3 does not carry
|
|
87
|
+
to render admission: CLI 3.41.0 passes up to ESM v7 to Stage, refuses newer
|
|
88
|
+
models with CLI-RENDER-004, and its v7 corpus receives STAGE-ESM-028/029.
|
|
89
|
+
The old 3.28.x/Stage 4.24.x probes remain historical in the subset references.
|
|
80
90
|
|
|
81
91
|
## V4: reference specifications run
|
|
82
92
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
93
|
+
Run `screenplay test <root> [--filter <exact-address>] [--format text|json]` on
|
|
94
|
+
4.125.0, or MCP `run-specifications`. The compile command alone still does not
|
|
95
|
+
execute scenarios. Reference execution is in-memory: no external services or
|
|
96
|
+
opaque code run. Record route, expected versus discovered/selected counts,
|
|
97
|
+
passed, failed and unsupported outcomes. Exit 0 means all selected passed; 1
|
|
98
|
+
failed, 2 could not run/invalid input or selection, 3 unbound or unsupported.
|
|
99
|
+
Unknown filters refuse rather than select zero. No discovered specifications
|
|
100
|
+
is not proof of coverage.
|
|
86
101
|
The reference runner returns unsupported for a specification that reads a reducer-built read
|
|
87
102
|
model and for any construct whose evaluation needs an opaque body.
|
|
88
103
|
|
|
@@ -133,9 +148,11 @@ source change makes earlier verdicts stale.
|
|
|
133
148
|
|
|
134
149
|
## Example gate (for skill and documentation authors)
|
|
135
150
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
151
|
+
Historical corpus fences were checked with standalone 4.68.0 and CLI 3.28.2.
|
|
152
|
+
Do not promote those results to current pins without rerunning. Check each changed
|
|
153
|
+
complete fence with standalone 4.125.0 `--warnaserror`; run `screenplay test` for
|
|
154
|
+
specification examples, and verify expected-diagnostic examples against their
|
|
155
|
+
claimed codes. Where bundle compatibility matters, also check CLI 3.41.0.
|
|
139
156
|
The `// Needs the standalone screenplay compiler (ESM v6)` first-line marker belonged to cratis
|
|
140
157
|
before 3.28.2, which could not validate those fences; no fence carries it now, and a
|
|
141
158
|
checker that still skips marked fences under `cratis` skips nothing. Examples meant to execute are also opened through MCP and
|