@cratis/pi 7.61.0 → 7.63.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/agents/spec-writer.md +2 -2
- package/package/corpus/harnesses/copilot/instructions/application-profile.instructions.md +2 -2
- package/package/corpus/harnesses/copilot/instructions/glossary.instructions.md +2 -2
- package/package/corpus/harnesses/copilot/instructions/specs.scenarios.csharp.instructions.md +7 -4
- package/package/corpus/harnesses/copilot/instructions/vertical-slices.instructions.md +22 -13
- package/package/corpus/product-sync.json +11 -10
- package/package/corpus/prompts/add-business-rule.prompt.md +1 -1
- package/package/corpus/rules/application-profile.md +2 -2
- package/package/corpus/rules/glossary.md +2 -2
- package/package/corpus/rules/specs.scenarios.csharp.md +7 -4
- package/package/corpus/rules/vertical-slices.md +22 -13
- package/package/corpus/skills/cratis-application-slice-conformance/SKILL.md +1 -1
- package/package/corpus/skills/cratis-application-slice-specifications/SKILL.md +4 -3
- package/package/corpus/skills/cratis-application-slice-specifications/references/query-and-decision-scenarios.md +12 -3
- package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/SKILL.md +12 -7
- package/package/corpus/skills/cratis-arc-authentication-authorization-and-identity/references/authorization.md +11 -11
- package/package/corpus/skills/cratis-arc-command/SKILL.md +3 -2
- package/package/corpus/skills/cratis-arc-command/references/decisions-and-routing.md +95 -51
- package/package/corpus/skills/cratis-arc-command/references/fresh-identifiers.md +5 -2
- package/package/corpus/skills/cratis-arc-command/references/generated-values.md +27 -12
- package/package/corpus/skills/cratis-arc-command/references/read-model-injection.md +9 -5
- package/package/corpus/skills/cratis-arc-command/references/shop-generation.md +17 -6
- package/package/corpus/skills/cratis-arc-command-validation/SKILL.md +99 -52
- package/package/corpus/skills/cratis-chronicle-decision-reads/SKILL.md +37 -15
- package/package/corpus/skills/cratis-chronicle-decision-reads/references/admission-and-ownership.md +3 -2
- package/package/corpus/skills/cratis-chronicle-decision-reads/references/choosing-how-a-rule-holds.md +277 -138
- package/package/corpus/skills/cratis-chronicle-event-constraints/SKILL.md +4 -4
- package/package/corpus/skills/cratis-chronicle-event-modeling/SKILL.md +6 -4
- package/package/corpus/skills/cratis-chronicle-read-model/SKILL.md +2 -1
- package/package/corpus/skills/cratis-chronicle-reducer/SKILL.md +6 -3
- package/package/corpus/skills/cratis-code-review/SKILL.md +6 -3
- package/package/corpus/skills/cratis-fundamentals-concept/SKILL.md +10 -2
- package/package/corpus/skills/cratis-fundamentals-concept/references/shop-generation.md +49 -6
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +43 -41
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/cases-to-specify.md +11 -2
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/integration-interview.md +24 -0
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/public-events-and-direction.md +76 -10
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +5 -0
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translate-example.md +39 -23
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translation-patterns.md +35 -12
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +51 -81
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/atomic-batches-and-source-mappings.md +83 -0
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/capture-map-and-example.md +14 -4
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/reaction-forms.md +59 -0
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/record-capture-specifications.md +60 -0
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/specifying-triggers-and-clock.md +5 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +26 -28
- package/package/corpus/skills/cratis-screenplay-command-surface/references/described-handlers.md +82 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +82 -28
- package/package/corpus/skills/cratis-screenplay-command-surface/references/protected-reads.md +113 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/shop-generation.md +45 -12
- package/package/corpus/skills/cratis-screenplay-command-surface/references/text-and-match-rules.md +119 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +14 -4
- package/package/corpus/skills/cratis-screenplay-command-surface/verification.json +10 -3
- package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +12 -12
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +5 -3
- package/package/corpus/skills/cratis-screenplay-event-modeling/verification.json +5 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +2 -2
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/evidence-table-template.md +1 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generated-recovery.md +51 -14
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/intent-example.md +5 -0
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/loss-report-template.md +2 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md +6 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/signal-to-intent.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +22 -28
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/choosing-generation.md +20 -7
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +12 -6
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +9 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +58 -10
- package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +4 -2
- package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +2 -5
- package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +2 -2
- package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +2 -2
- package/package/corpus/skills/cratis-screenplay-model-review/references/quick-self-check.md +2 -1
- package/package/corpus/skills/cratis-screenplay-model-review/references/review-questions.md +3 -2
- 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/SKILL.md +2 -3
- package/package/corpus/skills/cratis-screenplay-read-surface/references/named-keys.md +3 -1
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +8 -3
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +8 -0
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +6 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +36 -29
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +6 -0
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +15 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-example.md +25 -20
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/public-event-coverage.md +14 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md +9 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +7 -3
- package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +3 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +4 -4
- package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +4 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/references/slicing.md +4 -3
- package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +8 -8
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +49 -47
- package/package/corpus/skills/cratis-screenplay-specifications/references/actions-beyond-commands.md +11 -1
- package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md +48 -17
- package/package/corpus/skills/cratis-screenplay-specifications/references/vocabulary.md +14 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +25 -21
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +2 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +14 -6
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/multi-service-models.md +4 -3
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +7 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +30 -22
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +3 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +47 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostic-arguments.md +60 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +65 -5
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +50 -22
- package/package/corpus/skills/cratis-screenplay-toolchain/references/generation-checks.md +93 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/generation-strategies-example.md +117 -35
- package/package/corpus/skills/cratis-screenplay-toolchain/references/language-admission.md +46 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/preferred-syntax.md +3 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +25 -10
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +1800 -50
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +5 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +6 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +8 -53
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/file-references.md +2 -2
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/interaction-example.md +54 -0
- package/package/corpus/skills/cratis-screenplay-ui-composition/verification.json +6 -3
- package/package/corpus/skills/cratis-specifications-csharp/SKILL.md +3 -2
- package/package/corpus/skills/cratis-specifications-csharp/references/application-scenarios.md +1 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +30 -29
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +36 -9
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/choosing-generation.md +28 -8
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/publication-and-recovery.md +31 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +8 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +4 -1
- package/package.json +1 -1
package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md
CHANGED
|
@@ -10,9 +10,18 @@
|
|
|
10
10
|
| `== <v>` / `!= <v>` | `currency == "NOK"`, `status != draft` |
|
|
11
11
|
| `length == <n>` | `currency length == 3` |
|
|
12
12
|
| `matches email` | the only named pattern; any other name is `PLAY0366` |
|
|
13
|
-
| `matches "<regex>"` |
|
|
13
|
+
| `matches "<regex>"` | Portable linear dialect; any substring unless anchored `^…$`; invalid syntax PLAY0367, refused constructs PLAY0699 |
|
|
14
|
+
| `contains "<text>"` / `not contains "<text>"` | Ordinal substring presence/absence on scalar non-enum text |
|
|
15
|
+
| `starts with "<text>"` / `ends with "<text>"` | Ordinal prefix/suffix; quoted literal operands, not conditions |
|
|
14
16
|
| `all > <v>` / `all >= <v>` | `lines.quantity all > 0` |
|
|
15
17
|
| `rule <Name>` | `orgNumber rule BeAValidOrganizationNumber` |
|
|
18
|
+
| `checksum luhn|mod11|mod97` | String concept `validate checksum luhn`; validates supplied/stored values too |
|
|
19
|
+
|
|
20
|
+
Requires Screenplay 4.172.0 or later (`screenplay --version`) for checksum rules
|
|
21
|
+
(ESM v21); older compilers refuse them with PLAY0268. A pattern's `checksum`
|
|
22
|
+
modifier generates check digits but does not add validation. Check digits catch
|
|
23
|
+
typos, not forgery. For generated-concept proof statuses, deterministic regex
|
|
24
|
+
limits and PLAY0688 repairs, read [generated rules](generated-values-and-responses.md#generated-concept-rules-esm-v20).
|
|
16
25
|
|
|
17
26
|
## `not empty` means non-blank text
|
|
18
27
|
|
|
@@ -60,9 +69,10 @@ validate
|
|
|
60
69
|
|
|
61
70
|
A bodied rule or fenced block on a validation, rule or policy binds as opaque code
|
|
62
71
|
(ESM v3): the reference runner reports it unsupported, and a target must supply the
|
|
63
|
-
implementation.
|
|
64
|
-
|
|
65
|
-
|
|
72
|
+
implementation. Attached command handlers and `file` constraints remain PLAY0268
|
|
73
|
+
(only `unique` constraints bind). Pending command handlers beside unconditional
|
|
74
|
+
`produces` instead bind as described commands; see [described handlers](described-handlers.md).
|
|
75
|
+
Literal text rules, portable patterns and Studio desugaring: [text and match rules](text-and-match-rules.md).
|
|
66
76
|
Stage renders pure reducer transitions and opaque policy bodies, but refuses command and
|
|
67
77
|
concept code validations and rule predicates (STAGE-ESM-005): those are gap-fill code. Prefer a
|
|
68
78
|
declarative rule when one can say it. What binds and what the executable model rejects (Date and
|
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
"fixtures": [],
|
|
5
5
|
"assertions": [
|
|
6
6
|
{ "kind": "play-compiles" },
|
|
7
|
+
{ "kind": "skill-contains", "value": "Unsupported (`ImplementationBody`)", "file": "references/described-handlers.md" },
|
|
8
|
+
{ "kind": "skill-contains", "value": "including Stub mode", "file": "references/described-handlers.md" },
|
|
9
|
+
{ "kind": "skill-contains", "value": "DecisionStateChanged", "file": "references/protected-reads.md" },
|
|
10
|
+
{ "kind": "skill-contains", "value": "checkPortableMatchPattern", "file": "references/text-and-match-rules.md" },
|
|
11
|
+
{ "kind": "skill-contains", "value": "U+00A0", "file": "references/text-and-match-rules.md" },
|
|
7
12
|
{ "kind": "skill-contains", "value": "screenplay_declaration_details", "file": "references/generated-values-and-responses.md" },
|
|
8
13
|
{ "kind": "skill-contains", "value": "do not hand-edit the text", "file": "references/generated-values-and-responses.md" },
|
|
9
14
|
{ "kind": "skill-contains", "value": "A CLI-bundled MCP can lack this summary", "file": "references/generated-values-and-responses.md" },
|
|
@@ -42,7 +47,7 @@
|
|
|
42
47
|
},
|
|
43
48
|
{
|
|
44
49
|
"kind": "skill-contains",
|
|
45
|
-
"value": "
|
|
50
|
+
"value": "A file/code `handler` cannot coexist with `produces`"
|
|
46
51
|
},
|
|
47
52
|
{
|
|
48
53
|
"kind": "skill-contains",
|
|
@@ -54,11 +59,11 @@
|
|
|
54
59
|
},
|
|
55
60
|
{
|
|
56
61
|
"kind": "skill-contains",
|
|
57
|
-
"value": "
|
|
62
|
+
"value": "command reads protected"
|
|
58
63
|
},
|
|
59
64
|
{
|
|
60
65
|
"kind": "skill-contains",
|
|
61
|
-
"value": "
|
|
66
|
+
"value": "reads/concurrency cannot combine (PLAY0783)"
|
|
62
67
|
},
|
|
63
68
|
{
|
|
64
69
|
"kind": "skill-contains",
|
|
@@ -93,6 +98,8 @@
|
|
|
93
98
|
"value": "Generated identifiers need Uuid or String backing and at least 64 random bits.", "file": "references/generated-values-and-responses.md"
|
|
94
99
|
},
|
|
95
100
|
{ "kind": "skill-contains", "value": "Generated values and responses (ESM v7 and v15)" },
|
|
101
|
+
{ "kind": "skill-contains", "value": "names that can match together report PLAY0367", "file": "references/text-and-match-rules.md" },
|
|
102
|
+
{ "kind": "skill-contains", "value": "or reaction `where` remain PLAY0268", "file": "references/text-and-match-rules.md" },
|
|
96
103
|
{ "kind": "skill-contains", "value": "Generated values are not request inputs", "file": "references/generated-values-and-responses.md" },
|
|
97
104
|
{ "kind": "skill-contains", "value": "Generated-concept validation rules select ESM v20", "file": "references/generated-values-and-responses.md" },
|
|
98
105
|
{ "kind": "skill-contains", "value": "PLAY0688 and a violating example", "file": "references/generated-values-and-responses.md" },
|
|
@@ -108,7 +108,7 @@ The independent verdicts V1 to V5 that report them are in
|
|
|
108
108
|
`cratis-screenplay-modeling-lifecycle`.
|
|
109
109
|
|
|
110
110
|
What binds depends on **which tool** you ask, so name the tool and its version:
|
|
111
|
-
Read [references/parsed-not-runnable.md](references/parsed-not-runnable.md) (section "What binds depends on which tool") when stating what a tool binds or renders (`
|
|
111
|
+
Read [references/parsed-not-runnable.md](references/parsed-not-runnable.md) (section "What binds depends on which tool") when stating what a tool binds or renders (legacy reads and `concurrency` fail with `PLAY0271`; protected command reads opt into v25; `persona` declarations are report-only; an older bundle reports *Slice '<name>' of type '<type>' is not admitted by ESM v1.*).
|
|
112
112
|
|
|
113
113
|
The ESM versions, the full disposition table and the Step 7 clock example's binding
|
|
114
114
|
result are in [references/parsed-not-runnable.md](references/parsed-not-runnable.md)
|
|
@@ -169,19 +169,19 @@ compile or will not be safe. Both are deliberate.
|
|
|
169
169
|
|
|
170
170
|
- **A command may read state.** The generic method forbids `ReadModel -> Command`
|
|
171
171
|
edges. Screenplay ships `reads <ReadModel> [as <alias>] [by <property>]` so the
|
|
172
|
-
model shows what a state-dependent decision consulted.
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
172
|
+
model shows what a state-dependent decision consulted. Application-root
|
|
173
|
+
`command reads protected` admits eligible command reads as v25: absent state
|
|
174
|
+
rejects and matching decide/commit changes conflict. Read
|
|
175
|
+
[protected reads](../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
176
|
+
for the strict shape and paths. Legacy reads remain PLAY0271; `concurrency` is
|
|
177
|
+
not protection and cannot combine with protected reads. Stage refuses protected reads
|
|
178
|
+
(STAGE-ESM-044), not v25 itself: name target enforcement separately rather than claiming a render.
|
|
179
|
+
Write state-dependent rules as `reads` plus `require` with an indented message;
|
|
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
|
|
182
182
|
use `reads` to fetch data the command could carry as input. A reaction trigger
|
|
183
|
-
declares
|
|
184
|
-
|
|
183
|
+
declares consulted views with `reads`, but trigger reads remain unprotected;
|
|
184
|
+
decide in an invoked command instead.
|
|
185
185
|
- **Some validation *does* belong in the model.** The generic method routes format
|
|
186
186
|
rules to the type system. Screenplay's type system *is* the `concept`, and a
|
|
187
187
|
concept carries its own `validate` block - so a format rule lives on the concept
|
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 |
|
|
37
|
+
| Command reads/concurrency | Eligible reads opt into v25 with `command reads protected`; legacy reads/concurrency retain PLAY0271; Stage refuses protected reads (STAGE-ESM-044), not the v25 pair |
|
|
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) |
|
|
@@ -70,8 +70,10 @@ accepted proposal or parsed node with a running application.
|
|
|
70
70
|
- `Automation` and `Translate` slices, reactions, captures and triggers bind (ESM v6) on the
|
|
71
71
|
standalone tool and a CLI bundle that admits v6. (An older bundle
|
|
72
72
|
reports *Slice '<name>' of type '<type>' is not admitted by ESM v1.*) Stage renders supported event-triggered Automation, not Translate/captures or non-event triggers.
|
|
73
|
-
-
|
|
74
|
-
|
|
73
|
+
- Eligible command reads bind/reference-execute with `command reads protected`
|
|
74
|
+
(v25); legacy reads and `concurrency` remain PLAY0271. Read command-surface
|
|
75
|
+
[protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
76
|
+
for admission, absence/conflicts and Stage refusal. A reaction trigger's `reads` that only `invokes` is
|
|
75
77
|
report-only intent (`PLAY0270`); one that `produces` directly fails binding (`PLAY0268`).
|
|
76
78
|
- `persona` declarations are report-only and never block; bare `pii` and `secret`
|
|
77
79
|
concepts bind as ESM v13 (Requires Screenplay 4.141.0 or later); Stage renders admitted v13 protection.
|
|
@@ -137,8 +137,8 @@ chain per slice before handoff (`references/evidence-table-template.md`, "Tracea
|
|
|
137
137
|
- one StateChange per decision a person or system makes; events are facts experts recognise;
|
|
138
138
|
consequences (counters, denormalised copies) become projections; an automation only when
|
|
139
139
|
evidence shows a separate decision; no generic names (`Update/Edit/Save<Noun>`, `<Noun>Updated`): split by intent;
|
|
140
|
-
- refusals, state-dependent rules (`reads` + `require
|
|
141
|
-
|
|
140
|
+
- refusals, state-dependent rules (`reads` + `require` with eligible protected-read
|
|
141
|
+
opt-in; legacy/refused shapes marked unenforced and target realization named), unique indexes and preserved `pii` / `secret` protection:
|
|
142
142
|
`references/rule-modeling.md`. Every role gate has `authorize` plus a `then denied` spec,
|
|
143
143
|
else a recorded gap; rules you cannot express truthfully are recorded one by one, never
|
|
144
144
|
fabricated.
|
|
@@ -57,7 +57,7 @@ Example rows:
|
|
|
57
57
|
| id | source | locator | observed fact | technical shape | strength | classification | gen. disposition | candidate | decision | decided by | verdict |
|
|
58
58
|
|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
59
59
|
| E1 | dynamic | capture 0007, `POST /api/checkins` | taking in a coat writes two tables | insert `Checkins`; update `Hooks(occupied)`; 201 x41, 409 x3 | Observed | intent (take in) + consequence (hook) | n/a | `TakeInCoat` -> `CoatTakenIn`; occupancy via projection | change | proposed | not asked |
|
|
60
|
-
| E2 | code | `CheckinService.cs` | 409 when the hook is already free, message "That coat is not on a hook" | throws `ConflictException` | Read | intent (rule) | n/a | `reads CoatStatus` + `require
|
|
60
|
+
| E2 | code | `CheckinService.cs` | 409 when the hook is already free, message "That coat is not on a hook" | throws `ConflictException` | Read | intent (rule) | n/a | legacy control: `reads CoatStatus` + `require` without protected opt-in; inspect v25 admission, record refused shape/Stage target gap in LOSS.md | keep | proposed | not asked |
|
|
61
61
|
| E3 | static | `static.play`, SP0016 at `CheckinValidator` | validation rule held to a condition is emitted unconditionally; the condition is lost | `When(x => x.IsVip)` | Exact (loss) | unknown | Lowered without its condition (semantic mismatch, reported by SP0016) | none yet | undecided | - | question Q4: when does the rule really apply? read `CheckinValidator` and ask an expert |
|
|
62
62
|
| E4 | dynamic | uncorrelated txn, `Hooks` nightly 02:00 | hook flags reset without a command | update `Hooks(*)` daily | Observed | unexplained | n/a | none | undecided | - | question Q5 |
|
|
63
63
|
|
package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generated-recovery.md
CHANGED
|
@@ -24,6 +24,20 @@ Each recovery below has its own gate; use the adapter that has the one you rely
|
|
|
24
24
|
|
|
25
25
|
- Requires Arc.Screenplay 22.78.0 or later for `[GeneratedValue]` Handle parameters whose `New()` is a UUID v4 form, for the `generated identifier` and response they produce, and for scenario pins (`for` / `generated`). Before it none of this is recovered. From 22.78.0 until 22.86.0 any other strategy keeps its source form and reports SP0073.
|
|
26
26
|
- Requires Arc.Screenplay 22.86.0 or later to recover UUIDv7, ULID, TypeID, NanoID, `Bytes` and hex strategies as concept `generate` lines (ESM v15) and a passed-through `GenerationContext`.
|
|
27
|
+
- Requires Arc.Screenplay 22.101.0 for generated-concept validator recovery (ESM
|
|
28
|
+
v20); check `dotnet list package --include-transitive`. Older adapters withhold
|
|
29
|
+
generation on rule-bearing concepts. Recovery covers only a fully recovered,
|
|
30
|
+
non-opaque default validator: Proven rules emit, Unproven rules remain with
|
|
31
|
+
SP0078, Refuted rules withhold generation with SP0073 and a counterexample.
|
|
32
|
+
Generation is also withheld with SP0073 (rules kept) when the validator is
|
|
33
|
+
unreadable, conditional or names a predicate (`rule <Name>`), when a UUID
|
|
34
|
+
concept has any validator, when the concept carries `pii` or `secret`, and
|
|
35
|
+
below a v20 cap.
|
|
36
|
+
- Requires Arc.Screenplay 22.107.0 for pattern/random, checksum validation and
|
|
37
|
+
self-contained String generation-rule recovery (ESM v21); older adapters leave
|
|
38
|
+
those factories in code with SP0073. A v20-or-lower cap withholds generation
|
|
39
|
+
and dependent values/mappings/responses/destinations/scenarios, preserving
|
|
40
|
+
checksum validation as a source attachment rather than dropping it.
|
|
27
41
|
|
|
28
42
|
Tagged evidence:
|
|
29
43
|
|
|
@@ -38,24 +52,30 @@ Tagged evidence:
|
|
|
38
52
|
Use the [same shop vocabulary](../../cratis-screenplay-command-surface/references/shop-generation.md):
|
|
39
53
|
CustomerId (`cus_` + ULID), OrderId (TypeID), InviteCode (NanoID), ApiKey (secret
|
|
40
54
|
Bytes(32) with .NET `[NotAudited]`). Do not claim exact recovery of every factory:
|
|
41
|
-
|
|
42
|
-
TypeID
|
|
43
|
-
tenant behavior. Context-member
|
|
44
|
-
|
|
55
|
+
a custom `cus_` interpolation may recover as a self-contained String rule, not as
|
|
56
|
+
an inferred built-in prefix strategy. TypeID recovers a passed-through context's
|
|
57
|
+
strategy, not proof of equivalent receipt-time/tenant behavior. Context-member
|
|
58
|
+
String bodies can recover under the v21 gate; generated secrets stay in code.
|
|
59
|
+
Recovered rule fixtures supply a String result without reference execution of the body. Preserve ApiKey's protection and source code, not an unprotected
|
|
45
60
|
replacement String. The intentional candidate can author the released customer
|
|
46
61
|
prefix strategy with an explicit target decision, separate from as-is proof.
|
|
47
62
|
|
|
48
63
|
Recover the strategy the source proves; do not choose a replacement because a
|
|
49
64
|
factory is named `New()`. Use the existing [strategy reference](../../cratis-screenplay-command-surface/references/generated-values-and-responses.md)
|
|
50
|
-
for meaning and shapes
|
|
65
|
+
for meaning and shapes (including readable InvoiceNumber patterns and random Int
|
|
66
|
+
TicketNumber values), then the forms below for parameter factories, literal pins
|
|
51
67
|
and retained source pointers.
|
|
52
68
|
|
|
53
69
|
## When not to
|
|
54
70
|
|
|
55
71
|
Do not infer generation for client-supplied IDs, deduplication keys or gapless
|
|
56
72
|
invoice numbers, or turn an observed secret into a random String. Preserve
|
|
57
|
-
protection and unrecovered code
|
|
58
|
-
|
|
73
|
+
protection and unrecovered code. A pattern is not a gapless/sequential allocator
|
|
74
|
+
or secret; check digits detect typos, not forgery. Low-entropy payload codes need
|
|
75
|
+
uniqueness separate from source freshness. Arc recovery does not imply rendering:
|
|
76
|
+
Requires Stage 4.118.0 for checksum validation and 4.119.0 for pattern/random;
|
|
77
|
+
older renderers refuse them. `generate rule` still refuses STAGE-ESM-028.
|
|
78
|
+
Report missing pins, withheld productions/scenarios and version caps
|
|
59
79
|
as losses, not successful recovery. Sources: Arc
|
|
60
80
|
`Documentation/backend/csharp/generating-a-screenplay.md`;
|
|
61
81
|
Screenplay `Documentation/screenplay/generated-values/choosing.md`.
|
|
@@ -65,8 +85,8 @@ Screenplay `Documentation/screenplay/generated-values/choosing.md`.
|
|
|
65
85
|
The UUID v4 forms, pins and the identifier/response rules in this section need Arc.Screenplay 22.78.0 or later; the other strategies in the list below need 22.86.0 or later.
|
|
66
86
|
|
|
67
87
|
A `[GeneratedValue]` Handle parameter becomes a generated command property only
|
|
68
|
-
for a required scalar Uuid/String concept with a proven strategy and no
|
|
69
|
-
|
|
88
|
+
for a required scalar Uuid/String or signed Int32/Int64 random concept with a proven strategy and no compliance
|
|
89
|
+
markers. Validator rules recover under the v20 gate above, not by deleting them. Its explicit attribute name, otherwise
|
|
70
90
|
parameter name, becomes the property name. A directly returned event-source
|
|
71
91
|
identity (alone or beside an event) adds `generated identifier` and a response;
|
|
72
92
|
a direct `EventForEventSourceId(parameter, event)` target adds the identifier
|
|
@@ -85,10 +105,26 @@ Constructors/conversions must forward the primitive unchanged. Recoverable calls
|
|
|
85
105
|
- `RandomNumberGenerator.GetHexString(...)` → hex bytes only with an even literal
|
|
86
106
|
character count; preserve its requested casing.
|
|
87
107
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
108
|
+
Under the v21 recovery gate, literal `GenerateValue.Pattern(pattern[, checksum])`
|
|
109
|
+
and its passed-through context overload recover `generate pattern`; dated patterns
|
|
110
|
+
require that context overload. `GenerateValue.Integer(min, max)` recovers inclusive
|
|
111
|
+
signed Int64 `random`; an Int32 concept needs exactly one `(int)` cast with both
|
|
112
|
+
bounds inside Int32. Invalid/computed arguments, unsigned backing and extra casts
|
|
113
|
+
stay in code with SP0073. Screenplay checks pattern support, proofs and entropy.
|
|
114
|
+
|
|
115
|
+
An unconditional default validator's `Must(v => GenerateValue.HasValidChecksum(v,
|
|
116
|
+
Checksum.Luhn))` recovers `validate checksum luhn` (also Mod11/Mod97). None,
|
|
117
|
+
conditional predicates and arbitrary helper predicates are not checksum rules.
|
|
118
|
+
|
|
119
|
+
A self-contained String factory can instead recover `generate rule <Concept>New`
|
|
120
|
+
with an inline `csharp` body, stripping only proven forwarding constructions.
|
|
121
|
+
Literal/primitive locals, `context.Now`, `context.Tenant`, string, Math, Convert,
|
|
122
|
+
Guid, RandomNumberGenerator and GenerateValue are allowlisted; multi-statement
|
|
123
|
+
bodies can qualify. Compound time-based calls must pass the captured context.
|
|
124
|
+
Private helpers, fields, DI, aliases/static imports, ambient time, raw Default
|
|
125
|
+
comparisons and external dependencies remain SP0073; no file fallback is invented.
|
|
126
|
+
This is the Cratis C# binding to Fundamentals' GenerationContext, not a universal
|
|
127
|
+
runtime type. Opaque entropy is unknown, so a rule cannot supply an identifier.
|
|
92
128
|
The concept owns `generate`; each command property only marks generation.
|
|
93
129
|
Use the shared [strategy reference](../../cratis-screenplay-command-surface/references/generated-values-and-responses.md)
|
|
94
130
|
for exact encodings, ranges, entropy and admission, rather than duplicating them.
|
|
@@ -119,7 +155,8 @@ resolved adapter version, diagnostic, retained/withheld form and open question:
|
|
|
119
155
|
|
|
120
156
|
| Diagnostic | Loss to reconcile |
|
|
121
157
|
| --- | --- |
|
|
122
|
-
| SP0073 | Unproven strategy/body/arguments,
|
|
158
|
+
| SP0073 | Unproven strategy/body/arguments, refuted generated-concept rule with witness, or generation above the ESM cap; no replacement strategy inferred. |
|
|
159
|
+
| SP0078 | Generated-concept rule proof is Unproven; preserve the rule and reason, not a claim of Proven generation. |
|
|
123
160
|
| SP0052 | Unadmitted generated value, dependent response or pre-generation protection stays in code; local-generation fallback is not parameter recovery. |
|
|
124
161
|
| SP0012 | A required payload mapping or condition needs an unavailable value/read: withhold the whole production, never prune it into an incomplete fact. An optional blocked mapping can be omitted alone. |
|
|
125
162
|
| SP0039 | Missing/unreadable pins, unrecoverable source identities or outcomes withhold the whole scenario. Name what was lost. |
|
package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/intent-example.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Intentional candidate example
|
|
2
2
|
|
|
3
|
+
Legacy control: this candidate deliberately omits `command reads protected`, so its
|
|
4
|
+
unenforced markers are about this source. Eligible command reads can instead opt
|
|
5
|
+
into v25; inspect all reads before migration and keep target realization separate.
|
|
6
|
+
Read [protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md).
|
|
7
|
+
|
|
3
8
|
A complete, compiling example of what extraction produces: one legacy write that touched two
|
|
4
9
|
tables (`Checkins`, `Hooks`) is re-sliced into a single decision event plus a projection. The
|
|
5
10
|
numbers in the slice descriptions (`E1`, `E6`, `Q3`) are evidence ids and open questions from
|
package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/loss-report-template.md
CHANGED
|
@@ -35,7 +35,8 @@ and the question raised.
|
|
|
35
35
|
## Rules not enforced or not expressible today
|
|
36
36
|
One line per rule, named individually (never one generic platform caveat): the rule, its
|
|
37
37
|
evidence row, the invariant and consistency risk, and the target enforcement. State-dependent
|
|
38
|
-
checks
|
|
38
|
+
checks use `reads` + `require`: eligible reads opt into v25 protection, while legacy/refused
|
|
39
|
+
shapes are marked unenforced and Stage realization remains a separate gap;
|
|
39
40
|
date rules and opaque policies that no declaration can state stay in the slice `documentation` and here.
|
|
40
41
|
|
|
41
42
|
## Unknowns and undecided target decisions
|
package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md
CHANGED
|
@@ -12,9 +12,12 @@
|
|
|
12
12
|
|
|
13
13
|
## State-dependent rules
|
|
14
14
|
A rule that depends on stored state (current status, existing records, balances) is written
|
|
15
|
-
as `reads <View>`
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
as `reads <View>` plus `require` with an indented message. Opt eligible views into
|
|
16
|
+
application-root `command reads protected` (v25); test present/absent state and rule
|
|
17
|
+
refusal, and matching decide/commit conflicts. Read
|
|
18
|
+
[protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md)
|
|
19
|
+
for admission and Stage's refusal. For legacy/refused shapes, mark the rule unenforced.
|
|
20
|
+
Name the invariant, the race it leaves open and the target realization:
|
|
18
21
|
`[ProtectedDecision]` + `DecisionRead<T>` (Arc 22.39.0 and later; available to gap-fill
|
|
19
22
|
in Stage's rendered package set, not automatically emitted), or a Chronicle
|
|
20
23
|
`concurrency` scope on the event source or stream, or a constraint where one fits. Forbidden: caller-supplied copies of state
|
package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/signal-to-intent.md
CHANGED
|
@@ -71,7 +71,7 @@ files on it. Each hop has a typical yield:
|
|
|
71
71
|
|
|
72
72
|
| Path | Hops | What to take from it |
|
|
73
73
|
|---|---|---|
|
|
74
|
-
| Write | entry point (route, handler, form action), input model and validation, service, entity, repository, schema or migration, response and error mapping | the command name and inputs; `validate` rules with their exact messages; state-dependent checks (`reads` plus `require`,
|
|
74
|
+
| Write | entry point (route, handler, form action), input model and validation, service, entity, repository, schema or migration, response and error mapping | the command name and inputs; `validate` rules with their exact messages; state-dependent checks (`reads` plus `require`, eligible protected opt-in or recorded legacy/refused shape and target gap); unique indexes; the error mapping gives the `then error` text and the legacy HTTP code for the slice `documentation` |
|
|
75
75
|
| Read | entry point, query or repository, response model, paging and filter conventions | the read-model shape and query arguments (`by`, `filter`); which caller may narrow what |
|
|
76
76
|
| Background | listeners, after-commit hooks, message consumers, schedulers, outbox relays | reaction or translation candidates; say "none found" when there is none |
|
|
77
77
|
|
|
@@ -40,25 +40,18 @@ editing concept generation or `generated identifier`.
|
|
|
40
40
|
|
|
41
41
|
## When not to
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
For generation proofs/PLAY0688 repairs, read [generation details](references/mcp-tools.md#concept-generation):
|
|
44
|
+
use `rules[]`, not parsed diagnostics (Requires Screenplay 4.173.0,
|
|
45
|
+
`screenplay --version`; older servers omit proofs).
|
|
44
46
|
|
|
45
47
|
## Locate and connect
|
|
46
48
|
|
|
47
49
|
Use the declared `screenplay` MCP server (for example `open-workspace`).
|
|
48
50
|
|
|
49
|
-
Never ask the user which folder to use before trying
|
|
50
|
-
arguments
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
or that several roots are offered, pass `path`: the folder holding the project's `.play` files, otherwise the
|
|
54
|
-
folder the user names. Without a project, the server works in `Documents/Screenplay`
|
|
55
|
-
in the user's home folder, so do not invent a location. A root fixed at launch
|
|
56
|
-
can switch only to the same model folder in a registered Git worktree of the
|
|
57
|
-
same repository; rules and refusals are in [MCP loop](references/mcp-loop.md).
|
|
58
|
-
|
|
59
|
-
Prefer a fixed root (dynamic-roots history: [MCP loop](references/mcp-loop.md)). Send `initialize` and
|
|
60
|
-
`notifications/initialized` before any tool call, then discover `tools/list`
|
|
61
|
-
schemas rather than relying on a remembered count.
|
|
51
|
+
Never ask the user which folder to use before trying `open-workspace` without
|
|
52
|
+
arguments; do not invent a root. Read [MCP loop](references/mcp-loop.md) when connecting or switching roots;
|
|
53
|
+
it owns fallback discovery, fixed-root limits and the initialization protocol.
|
|
54
|
+
Discover `tools/list` schemas rather than relying on a remembered count.
|
|
62
55
|
|
|
63
56
|
|
|
64
57
|
Look first for the project's existing `.play` files: their folder is the model.
|
|
@@ -71,20 +64,12 @@ explanatory Markdown belongs in repository documentation.
|
|
|
71
64
|
`mcp-servers.json` declares the Screenplay server; supported client registration
|
|
72
65
|
is owned by the Cratis CLI, which preserves other servers and user configuration.
|
|
73
66
|
|
|
74
|
-
The CLI
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
cratis screenplay mcp <model-folder>
|
|
78
|
-
```
|
|
67
|
+
The CLI-bundled MCP can be older than the standalone tool: discover schemas.
|
|
68
|
+
Read [MCP loop](references/mcp-loop.md) for launch options. Use the supported
|
|
69
|
+
channel, not another global tool, Docker or copied managed configuration.
|
|
79
70
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
or hand-copied managed MCP configuration. Installation/status must confirm adapter
|
|
83
|
-
support and no conflicts.
|
|
84
|
-
|
|
85
|
-
If the MCP is unavailable, report that gap. Do not claim compiler-validated AST
|
|
86
|
-
editing while falling back to regex. Existing standalone `screenplay mcp` users
|
|
87
|
-
can keep that entry point; use the project's supported installation channel.
|
|
71
|
+
If MCP is unavailable, report it; regex edits are not compiler-validated AST
|
|
72
|
+
editing. Existing standalone `screenplay mcp` users may retain that entry point.
|
|
88
73
|
|
|
89
74
|
## Understand before editing
|
|
90
75
|
|
|
@@ -96,7 +81,9 @@ can keep that entry point; use the project's supported installation channel.
|
|
|
96
81
|
`kind: "Property"`, `Owner.member` / `Owner.generationN.member`, direct mappings.
|
|
97
82
|
`complete: false` is incomplete evidence, never a successful empty list.
|
|
98
83
|
Edit through MCP proposals, not hand-edited text; [generation](references/mcp-tools.md#concept-generation).
|
|
99
|
-
3. Read diagnostics and coverage limitations.
|
|
84
|
+
3. Read diagnostics and coverage limitations. Identify subjects by code and typed
|
|
85
|
+
`arguments`, never by parsing message text. Read [diagnostic arguments](../cratis-screenplay-toolchain/references/diagnostic-arguments.md)
|
|
86
|
+
for kinds, PLAY0524 step paths/indices, unknown fields and older responses. Use `dependency-graph` for container
|
|
100
87
|
edges, declared-dependency coverage, cycles and advisory order; the board's
|
|
101
88
|
dependency-map toggle exposes this evidence visually. Unknown or ambiguous
|
|
102
89
|
bindings are not an empty, successful dependency graph.
|
|
@@ -114,6 +101,13 @@ Keep reads scoped to the relevant module, feature, slice or document. Do not
|
|
|
114
101
|
request a whole merged AST when a bounded declaration/property query answers the
|
|
115
102
|
question. Size-limit refusals require narrower reads, not truncation.
|
|
116
103
|
|
|
104
|
+
## Application modes and described handler intent
|
|
105
|
+
|
|
106
|
+
Start new models with `reaction batches atomic`; preserve it through proposals.
|
|
107
|
+
Read [language admission](../cratis-screenplay-toolchain/references/language-admission.md)
|
|
108
|
+
for atomic/protected modes and Stage refusals. Read [intent inventories](references/mcp-tools.md#dependencies-and-intent-inventories)
|
|
109
|
+
for handler views: `executableReady` means binding, not an implemented body.
|
|
110
|
+
|
|
117
111
|
## Compare models
|
|
118
112
|
|
|
119
113
|
For a `main` comparison, pass a worktree `path` to `semantic-diff`, not two
|
package/package/corpus/skills/cratis-screenplay-model-authoring/references/choosing-generation.md
CHANGED
|
@@ -7,14 +7,21 @@
|
|
|
7
7
|
|
|
8
8
|
Follow the [threaded shop model](../../cratis-screenplay-command-surface/references/shop-generation.md):
|
|
9
9
|
CustomerId (`cus_` + ULID), OrderId (TypeID) and InviteCode (NanoID) are released
|
|
10
|
-
strategies.
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
strategies. InvoiceNumber uses a readable pattern/checksum and TicketNumber an
|
|
11
|
+
Int pickup-ticket range. ApiKey stays secret without executable generation.
|
|
12
|
+
An attached generation rule can use Now/Tenant, but the reference runner consumes
|
|
13
|
+
pinned Strings rather than executing its implementation.
|
|
13
14
|
|
|
14
15
|
For a server-owned new value, choose implicit UUID for an ordinary identity,
|
|
15
16
|
UUIDv7 for time-ordered UUIDs, ULID for compact time-ordered text, TypeID for
|
|
16
17
|
recognizable typed text, NanoID for opaque text, or bytes for an exact random-bit
|
|
17
|
-
budget.
|
|
18
|
+
budget. Choose `pattern` for readable references (dates/check digits add no
|
|
19
|
+
entropy), `random` for bounded Int values, `rule` only when an opaque implementation
|
|
20
|
+
is needed.
|
|
21
|
+
|
|
22
|
+
Requires Screenplay 4.172.0 (`screenplay --version`) for these v21 constructs; older compilers refuse PLAY0268.
|
|
23
|
+
|
|
24
|
+
Inspect entropy separately from executable admission; prefixes add no
|
|
18
25
|
random bits and identifiers need at least 64. Time-ordered is not strict
|
|
19
26
|
millisecond ordering. Use the existing [strategy and MCP reference](../../cratis-screenplay-command-surface/references/generated-values-and-responses.md),
|
|
20
27
|
not a per-property strategy: the concept owns `generate`, the command property
|
|
@@ -23,7 +30,13 @@ says `generated identifier` or `generated`.
|
|
|
23
30
|
## When not to
|
|
24
31
|
|
|
25
32
|
Do not replace client-minted inputs, authorization, idempotency keys or a gapless
|
|
26
|
-
invoice allocator with generation.
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
invoice allocator with generation. Patterns are not sequential/gapless allocators
|
|
34
|
+
or secrets; check digits detect typos, not forgery. Use a unique constraint for
|
|
35
|
+
short payload codes, and retain whole-source freshness for generated destinations.
|
|
36
|
+
Secret generation and sequence allocation remain refused. Inspect authored-order
|
|
37
|
+
MCP `rules[]` and `derivedPattern` for rule proofs and reviewed PLAY0688 repair;
|
|
38
|
+
never delete a business invariant to silence PLAY0689. Read
|
|
39
|
+
[Stage admission](../../cratis-stage-rendering-and-sandbox/references/admission.md)
|
|
40
|
+
for checksum validation and pattern/random rendering prerequisites.
|
|
41
|
+
`generate rule` remains STAGE-ESM-028, so model admission does not promise rendering.
|
|
29
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
|
@@ -260,16 +260,21 @@ See read-surface `references/named-keys.md` for the collection-key exclusion alg
|
|
|
260
260
|
| Information only, never blocks | `persona` (report-only: `PLAY0270`, the policies it lists must exist), `authentication`, `domain`, `seed`, descriptions and `file` provenance. A persona does not block binding and does not change behavior, so state persona scope in a description or a policy the model uses |
|
|
261
261
|
| Binds as ESM v7 (`PLAY0268` on a compiler that stops before v7) | `generated` properties and `returns` responses, generated fixtures and `then returns`: bound and executed by the reference runner; a policy, rule or requirement that references a generated value is `PLAY0273`, and generated-concept rules select v20 with PLAY0688/0689 proof diagnostics. Stage renders supported UUID/String strategies, scalar/named responses and fixtures; unsupported types/result combinations remain `-028`/`-038` |
|
|
262
262
|
| Authorable, not executable (PLAY0268) | Systems/operations, the `numbers exact` source mode (PLAY0268; exact lowering of qualifying Double literals is the admitted v11) remain unadmitted |
|
|
263
|
-
| Concept generation strategies (ESM v15) | Required scalar generatable Uuid/String concepts; concept-owned uuid/uuidv7/ulid/typeid/nanoid/bytes strategies and admitted modifiers. Strict fixture encoding; Guarded whole-source freshness rejects Concurrency with no append/retry. Generated secrets
|
|
263
|
+
| Concept generation strategies (ESM v15) | Required scalar generatable Uuid/String concepts; concept-owned uuid/uuidv7/ulid/typeid/nanoid/bytes strategies and admitted modifiers. Strict fixture encoding; Guarded whole-source freshness rejects Concurrency with no append/retry. Generated secrets and sequence remain refused; generated-concept rules select v20, pattern/random/rule and checksum validation select v21. Stage renders supported strategies: command-surface `references/generated-values-and-responses.md` |
|
|
264
264
|
| Response-name UI continuations (no ESM change) | Form submit and execute-success scopes, own failure PLAY0685, nested shadowing and outer success in inner failure; field/parameter precedence. An older bundled compiler lacks resolution; Scene runtime binding remains downstream. UI composition `references/response-continuations.md` |
|
|
265
265
|
| Collection equality filters (ESM v14) | Caller-supplied `filter name Type [optional]`, no `from`, matching a same-named scalar primitive/concept/enum read-model property with the same nominal type. AND with `by`; optional omission does not narrow, supplied null is refused. PLAY0468 covers unknown/repeated/missing required spec arguments; result rows compare by read-model/key regardless of order. Read read-surface `references/equality-filters.md` for the compiled example and renderer ceilings |
|
|
266
266
|
| Recovery and no-event assertions (ESM v17) | `when redelivered` delivers one given occurrence to one reaction without append; `then no events` checks no new facts, excluding append input. Requires Screenplay 4.157.0 or later (`screenplay --version`); older compilers report PLAY0268. |
|
|
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
|
-
| Generated-concept rules (ESM v20) | Proven rules bind, Refuted PLAY0688 errors, Unproven PLAY0689 warnings;
|
|
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` remains STAGE-ESM-028; see command-surface `references/generated-values-and-responses.md`. |
|
|
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
|
+
| Described handlers (ESM v23) | Pending implementation beside unconditional produces; payload-only contract, reached body Unsupported ImplementationBody; Stage STAGE-IMPL-002 even Stub mode |
|
|
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 but refuses protected reads STAGE-ESM-044 |
|
|
270
275
|
| 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 |
|
|
271
|
-
| 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; command `handler` (
|
|
272
|
-
| Blocks binding (`PLAY0271`, legacy meaning) | Command
|
|
276
|
+
| 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`, dates and `today` in comparisons, `$context.tenant`/claims/roles/causation in `produces`, `$env` conditions, `file` constraints, unquoted `import` of an external contract, a read model with neither explicit `key` nor unambiguous query-based identity as described above (composite keys remain unadmitted), queries with context `from` sources (typed query context is unadmitted), single-result filters (collections only), `scoped to` (opaque scope), `performer` (opaque implementation) or composite `by` blocks; optional keyed and collection queries, including caller-supplied equality filters and observable delivery, bind, `$causedBy` and templates in projections |
|
|
277
|
+
| Blocks binding (`PLAY0271`, legacy meaning) | Command reads without protected opt-in and `concurrency`; combined protected reads/concurrency is PLAY0783 |
|
|
273
278
|
| Deferred (`PLAY0269`, information) | Screens, layouts, templates, forms, contributions, UI profiles, themes, behaviors and `on`/`uses` |
|
|
274
279
|
| Metadata only (`PLAY0270`, information) | `domain`, `seed`, `persona`, trigger and other descriptions, and `file` provenance on declarations |
|
|
275
280
|
|
|
@@ -301,8 +306,9 @@ and routes bind and reference-execute as v8; reaction identity as v10.
|
|
|
301
306
|
Use standalone `screenplay test` or MCP `run-specifications` for a reference
|
|
302
307
|
verdict, and independently check CLI/Stage admission. Never drop a contract to bind.
|
|
303
308
|
Generated values and `returns` are not in this group: they bind as ESM v7.
|
|
304
|
-
Protected reads
|
|
305
|
-
|
|
309
|
+
Protected command reads have documented v25 opt-in; see command-surface
|
|
310
|
+
`references/protected-reads.md`. `derive`/`provide` remain undocumented and
|
|
311
|
+
unadmitted: do not invent syntax. Affected-instance declarations and query paging/sorting/change-set delivery
|
|
306
312
|
remain unavailable here. Event `subject` is report-only authoring metadata;
|
|
307
313
|
public events/origin are admitted as ESM v9 (not provider realization).
|
|
308
314
|
Purpose declarations, references and processing records are authoring metadata,
|
|
@@ -24,6 +24,14 @@ defined by `cratis-screenplay-modeling-lifecycle`. Discover the installed tool s
|
|
|
24
24
|
|
|
25
25
|
## Connect
|
|
26
26
|
|
|
27
|
+
Never ask which folder to use before trying `open-workspace` with no arguments.
|
|
28
|
+
Without a fixed root, it binds the client's single workspace root, else a launch
|
|
29
|
+
directory holding `.play` files. Only after a no-root or multiple-roots response,
|
|
30
|
+
pass `path`: the folder holding the project's models, otherwise the folder the
|
|
31
|
+
user names. Without a project the server uses `Documents/Screenplay` in the user's
|
|
32
|
+
home; do not invent a location. A fixed root can switch only to the same model
|
|
33
|
+
folder in a registered Git worktree of the same repository.
|
|
34
|
+
|
|
27
35
|
1. Launch with a **fixed root**: `screenplay mcp <model-folder>`, or
|
|
28
36
|
`cratis screenplay mcp <model-folder>`, or `cratis screenplay mcp` inside a
|
|
29
37
|
project, where the CLI locates the model (the project's `.play` files, else `Source/`
|
|
@@ -210,7 +218,7 @@ connection. Passing `open-workspace.path` does **not** avoid it, because the err
|
|
|
210
218
|
| --- | --- | --- |
|
|
211
219
|
| Address-preserving | descriptions; bodies of rules and expressions; mappings between members that already exist; any edit that adds, removes or renames no addressed element. Also every edit in a model with no `.screenplay/identities.json` except persisted names | bounded text edit of the `.play` file, then compile the folder; or `propose-ast` |
|
|
212
220
|
| Catalog-changing (identity file present) | add, remove or rename a declaration (slice, command, event, read model, projection, ...), a property of a command, event, read model, composite type or trigger, a query, a query argument or a specification; create, delete, rename or move a mapped `.play` document (McpState refuses reopening with `IdentityMappingConflict`; use document operations in `propose-ast`); rename, remove or move an event, command, read model, constraint, module, feature or slice; move declarations between files (slices and features across logical parents: `propose-move`); contract evolution of a persisted event (new generation, property added, removed or retyped) | `propose-rename` or a reviewed `propose-ast`; never a blind text rename. Renaming a constraint resets its uniqueness index: ask first unless the request names it, then report the reset. A persisted event rename needs `id "OldName"` (added by default) |
|
|
213
|
-
| Concept `generate` | set/change/remove strategy and modifiers | `propose-ast` replaces `ConceptSyntax.generation` (`GenerationSyntax`; omit/null to remove), or reviewed `propose-source`; never hand-edit `generate` text. Preserve other concept members and inspect executable diagnostics: sequence PLAY0682,
|
|
221
|
+
| Concept `generate` | set/change/remove strategy and modifiers | `propose-ast` replaces `ConceptSyntax.generation` (`GenerationSyntax`; omit/null to remove), or reviewed `propose-source`; never hand-edit `generate` text. Preserve other concept members and inspect executable diagnostics: sequence PLAY0682, generated secrets PLAY0268, generated-rule proofs PLAY0688/0689, finite-support failures PLAY0691/0692. Pattern/random/rule and checksum validation bind as ESM v21 (Requires Screenplay 4.172.0, `screenplay --version`; older compilers refuse PLAY0268). Read `mcp-tools.md#concept-generation` for `arguments`, exact support and `rules[]`, not parsed diagnostic prose. |
|
|
214
222
|
| Repair | `PLAY0166`, `0478`, `0469`, `0471`, `0479`, `0516`, `0563`, `0564`, `0565`, `0614`, `0653`, `0683`, `0684` (and recipe-only `0397`) | `propose-repair` with `formatting`; PLAY0166/0478 may pin attachment evidence (`pinRepairEvidence` and `expectedRepairEvidenceRevision`), never fix-all PLAY0478 |
|
|
215
223
|
| Inline event extraction | `produces event ...` to a declared event | `propose-extract-inline-event` |
|
|
216
224
|
| Parser-invalid document | no editable handles | `propose-source` `replace-document` with corrected source, or typed `propose-ast` document replacement |
|