@cratis/pi 7.62.0 → 7.64.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/corpus/product-sync.json +9 -9
- package/package/corpus/skills/cratis-application-slice-conformance/SKILL.md +1 -1
- package/package/corpus/skills/cratis-arc-command/references/generated-values.md +27 -12
- package/package/corpus/skills/cratis-arc-command/references/shop-generation.md +17 -6
- 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 +37 -30
- package/package/corpus/skills/cratis-screenplay-command-surface/references/date-comparisons.md +100 -0
- 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 +26 -6
- package/package/corpus/skills/cratis-screenplay-command-surface/verification.json +13 -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 +13 -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 +48 -30
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +10 -4
- 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 +9 -4
- 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 +69 -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/outcome-comparison.md +6 -0
- 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 +9 -3
- 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 +32 -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 +66 -6
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +67 -23
- 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 +61 -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 +27 -10
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +3489 -335
- 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-stage-rendering-and-sandbox/SKILL.md +30 -29
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +39 -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-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,22 @@ 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 |
|
|
275
|
+
| Chronological command dates (ESM v26) | Same-primitive Date/DateTime `==`, `!=`, `>`, `>=`, `<`, `<=` in require/produces-when (property or literal RHS) and command/property rules (literal RHS only). DateTime uses UTC ticks, participating offset-less inputs reject Validation before rules; then matching stays ordinal. Requires Screenplay 4.199.0 (`screenplay --version`); older binders refuse PLAY0268. Stage refuses v26 STAGE-ESM-016. Read command-surface `references/date-comparisons.md`. |
|
|
270
276
|
| Current routing and actor admission | Sources/streams and command/specification routes bind and reference-execute as v8; reaction `runs as system role` supplies the invocation actor as v10. Whole-workspace binding determines executable availability; CLI/Stage realization remains separate |
|
|
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
|
|
277
|
+
| Blocks binding (`PLAY0268`) | enum/identity compliance and events combining personal or explicitly subject-scoped secret values with explicit subject marks; a compiler that stops before v13 refuses all `pii`/`secret` concepts ("compliance attributes require portable data-subject semantics"), while v13 binds them and Stage renders protection; attached command `handler` (PLAY0035 beside productions; pending described intent instead binds v23), bare `rule <Name>`, read paths without protected opt-in or in unsupported positions such as `produces when`, date comparisons with mixed primitives, optional condition operands, `$context`, protected read paths or `today`, date rules on concepts or reaction `where`, `$context.tenant`/claims/roles/causation in `produces`, `$env` conditions, `file` constraints, unquoted `import` of an external contract, a read model with neither explicit `key` nor unambiguous query-based identity as described above (composite keys remain unadmitted), queries with context `from` sources (typed query context is unadmitted), single-result filters (collections only), `scoped to` (opaque scope), `performer` (opaque implementation) or composite `by` blocks; optional keyed and collection queries, including caller-supplied equality filters and observable delivery, bind, `$causedBy` and templates in projections |
|
|
278
|
+
| Blocks binding (`PLAY0271`, legacy meaning) | Command reads without protected opt-in and `concurrency`; combined protected reads/concurrency is PLAY0783 |
|
|
273
279
|
| Deferred (`PLAY0269`, information) | Screens, layouts, templates, forms, contributions, UI profiles, themes, behaviors and `on`/`uses` |
|
|
274
280
|
| Metadata only (`PLAY0270`, information) | `domain`, `seed`, `persona`, trigger and other descriptions, and `file` provenance on declarations |
|
|
275
281
|
|
|
@@ -301,8 +307,9 @@ and routes bind and reference-execute as v8; reaction identity as v10.
|
|
|
301
307
|
Use standalone `screenplay test` or MCP `run-specifications` for a reference
|
|
302
308
|
verdict, and independently check CLI/Stage admission. Never drop a contract to bind.
|
|
303
309
|
Generated values and `returns` are not in this group: they bind as ESM v7.
|
|
304
|
-
Protected reads
|
|
305
|
-
|
|
310
|
+
Protected command reads have documented v25 opt-in; see command-surface
|
|
311
|
+
`references/protected-reads.md`. `derive`/`provide` remain undocumented and
|
|
312
|
+
unadmitted: do not invent syntax. Affected-instance declarations and query paging/sorting/change-set delivery
|
|
306
313
|
remain unavailable here. Event `subject` is report-only authoring metadata;
|
|
307
314
|
public events/origin are admitted as ESM v9 (not provider realization).
|
|
308
315
|
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 |
|
|
@@ -166,8 +166,12 @@ exists only for authored `generate`; an implicit UUID default has no block.
|
|
|
166
166
|
| --- | --- |
|
|
167
167
|
| `strategy` | Authored strategy name |
|
|
168
168
|
| `modifiers` | Only set `prefix`, `case`, `size`, `alphabet`, `count`, `encoding`; omitted defaults are not filled in |
|
|
169
|
-
| `
|
|
170
|
-
| `
|
|
169
|
+
| `arguments` | Authored `pattern`, `checksum`, `rule` strings and `range: {text, minimum, maximum}` with exact Int64 endpoints; malformed range retains text only. Replaces `previewArguments`. |
|
|
170
|
+
| `supportCount` | Exact JSON integer for assessed pattern/random distinct support; preserve large numbers without floating-point rounding. Dates use minimum conditioned support over the compiler's 100-year UTC horizon. |
|
|
171
|
+
| `entropyBits` | Built-in random bits; pattern/random use log2(supportCount). Null for opaque rule implementations or invalid/unsupported inputs. |
|
|
172
|
+
| `derivedPattern` | Anchored strategy-derived regex, or null; pattern expressions are deterministic and bounded, but date/checksum digit runs describe shape, not arithmetic containment. |
|
|
173
|
+
| `derivedPatternUnknownReason` | Reason when derivedPattern is null; never invent a regex from it. |
|
|
174
|
+
| `rules` | Authored-order entries: rule kind, line/column, status proven/refuted/unproven; witness for refuted, reason for unproven. diagnosticCode only for reported PLAY0688/0689; repair PLAY0688 only for a reported refuted declarative rule. |
|
|
171
175
|
| `entropyUnknownReason` | Present only when entropy is unknown |
|
|
172
176
|
| `valuesAtOnePercentCollision` | JSON number estimating the 1% birthday collision count, or null; scientific notation can exceed client floating-point range |
|
|
173
177
|
| `executable` | `status`, `diagnosticCodes`, and `reason` only for `notAssessed` |
|
|
@@ -178,7 +182,10 @@ and no such error exists; otherwise `notAssessed`, with a reason that whole-mode
|
|
|
178
182
|
binding failed. `diagnosticCodes` contains only errors at these declaration locations.
|
|
179
183
|
An empty list is not admission; low-entropy property diagnostics require workspace
|
|
180
184
|
inspection. Invalid alphabets/non-positive sizes or counts yield null estimates
|
|
181
|
-
with `entropyUnknownReason`, preserving compiler diagnostics.
|
|
185
|
+
with `entropyUnknownReason`, preserving compiler diagnostics. Pattern support
|
|
186
|
+
budget exhaustion (PLAY0691) or empty support on a scanned date (PLAY0692) also
|
|
187
|
+
leaves estimates null with the compiler's reason; an opaque `rule` has unknown,
|
|
188
|
+
not zero, entropy. Time, prefixes,
|
|
182
189
|
case and encoding add no randomness; the compiler, details and repairs share
|
|
183
190
|
`GenerationEntropy`, not an agent's parallel estimate.
|
|
184
191
|
|
|
@@ -191,8 +198,9 @@ source document under the same revision/review contract. Canonical printing
|
|
|
191
198
|
retains `generate`. Review `read-proposal` changes and `view: "executable-diagnostics"`,
|
|
192
199
|
run candidate specifications where executable, then explicitly `apply`.
|
|
193
200
|
Authoring acceptance does not imply executable readiness: `sequence` reports
|
|
194
|
-
PLAY0682;
|
|
195
|
-
|
|
201
|
+
PLAY0682; generated secrets still report PLAY0268, rule proofs PLAY0688/0689,
|
|
202
|
+
and finite-support failures PLAY0691/0692. Pattern/random/rule and checksum
|
|
203
|
+
validation bind as ESM v21. Do not retype a refused proposal to bypass diagnostics.
|
|
196
204
|
|
|
197
205
|
`screenplay_repair_capabilities` advertises PLAY0683/PLAY0684. Discover concrete
|
|
198
206
|
verified actions with `read-workspace view: "repairs"` at the diagnostic revision:
|
|
@@ -211,10 +219,40 @@ concept; uniqueness changes append-time behavior. Review every changed document
|
|
|
211
219
|
before applying; discovery/proposal write nothing. The saved-file VS Code repair
|
|
212
220
|
picker does not expose these entropy actions.
|
|
213
221
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
222
|
+
Read `generation.rules[]` instead of parsing diagnostic prose: `refuted` names
|
|
223
|
+
the violating `witness`; `unproven` explains its `reason`; `proven` needs no diagnostic.
|
|
224
|
+
A refuted result without `diagnosticCode` means the compiler did not check that
|
|
225
|
+
rule (for example, a UUID concept unused by generated command properties), so
|
|
226
|
+
there is no reported repair. Proof status is not executable admission, and
|
|
227
|
+
passing samples do not prove containment.
|
|
228
|
+
|
|
229
|
+
To add a rule the strategy satisfies, put `derivedPattern` into a typed `matches`
|
|
230
|
+
proposal preserving other concept members. If null, read
|
|
231
|
+
`derivedPatternUnknownReason` and keep the intended invariant; do not fabricate
|
|
232
|
+
an expression. PLAY0688 repair replaces a refuted generated-concept rule with
|
|
233
|
+
the strategy-derived matches pattern. Discover its subject through
|
|
234
|
+
`read-workspace view: "repairs"`, then `propose-repair` with both revisions and
|
|
235
|
+
canonical formatting. Review input/stored-value effects, not just generation.
|
|
236
|
+
For a checksum pattern the same proposal explicitly adds the declared checksum
|
|
237
|
+
validation if absent. Ambiguous/unbounded derived regexes have no repair.
|
|
238
|
+
PLAY0689 is an Unproven warning, not proof; MCP never generates values.
|
|
239
|
+
For an opaque generation rule, inspect `read-workspace view:
|
|
240
|
+
"implementation-requirements"` for its ValueGeneration requirement; the reference
|
|
241
|
+
runner consumes a pinned String and never executes its attached body.
|
|
242
|
+
Requires Screenplay 4.181.1 (`screenplay --version`) for the language-neutral
|
|
243
|
+
version-1 ValueGeneration context contract (Now instant, Tenant portable ID,
|
|
244
|
+
String result); older Cratis C# bindings cannot compile all context-aware bodies.
|
|
245
|
+
The provider selects the binding, not the fence tag: Cratis C# uses Fundamentals'
|
|
246
|
+
`Cratis.Concepts.GenerationContext`; BCL-only C# hosts can use Screenplay's record.
|
|
247
|
+
Portable bodies use Now, tenant interpolation/string assignment and BCL types.
|
|
248
|
+
Passing context to `GenerateValue.*`, constructing/naming the context type or
|
|
249
|
+
reading `Tenant.Value` is target-bound, not a shared language contract. See
|
|
250
|
+
[context reference](https://github.com/Cratis/Screenplay/blob/main/Documentation/screenplay/context.md).
|
|
251
|
+
|
|
252
|
+
Requires Screenplay 4.173.0 or later (`screenplay --version`) for `arguments`,
|
|
253
|
+
exact support, derived patterns and `rules[]`; older servers can expose
|
|
254
|
+
`previewArguments` and omit proofs. Discover schemas and diagnostics instead of
|
|
255
|
+
assuming these fields. Reference: [generation details](https://github.com/Cratis/Screenplay/blob/main/Documentation/screenplay/mcp/reference.md#generated-values-and-responses).
|
|
218
256
|
|
|
219
257
|
Requires Screenplay 4.164.0 or later (`screenplay --version`) for generated-rule proofs and PLAY0688 repair; older servers lack this action. The CLI-bundled MCP can lack
|
|
220
258
|
this generation summary and the entropy repairs. Existing typed concept proposals predate the
|
|
@@ -453,6 +491,11 @@ inspect authored links, not code execution or a transitive runtime graph.
|
|
|
453
491
|
|
|
454
492
|
## Dependencies and intent inventories
|
|
455
493
|
|
|
494
|
+
Diagnostic subjects use code plus typed `arguments`, not parsed messages. This applies
|
|
495
|
+
to `diagnostics`, executable diagnostics and proposal introducedExecutableErrors.
|
|
496
|
+
Read [diagnostic arguments](../../cratis-screenplay-toolchain/references/diagnostic-arguments.md)
|
|
497
|
+
for optional subjects, declaration paths and PLAY0524 step indices.
|
|
498
|
+
|
|
456
499
|
`dependency-graph` edges point consumer → producer. Views: `edges`, `cycles`,
|
|
457
500
|
`order`, `unresolved`, `declarations`; `from`/`to` select slice/feature/module
|
|
458
501
|
aggregation (`to` also accepts context). `scope`, `direction`, `kinds` and
|
|
@@ -479,7 +522,12 @@ Workspace views `named-rule-intents`/`named-rule-intent-details` cover CommandNa
|
|
|
479
522
|
only, including pending hints without a requirement ID. Details select either
|
|
480
523
|
`subject` or attached `requirementId`, not both. `handler-intents` and
|
|
481
524
|
`handler-intent-details` cover CommandHandler only; handler details select
|
|
482
|
-
`requirementId`.
|
|
525
|
+
`requirementId`. A handler entry's `executableReady` means successful v23 binding
|
|
526
|
+
with a matching Pending requirement, not a supplied body; `admission` is described,
|
|
527
|
+
refused or authoring-only. `implementation-requirements` exposes ordered hints and
|
|
528
|
+
provisional/ambiguous flags. Edit HandlerSyntax/ImplementationSyntax/ImplementationHintSyntax
|
|
529
|
+
through `propose-ast` with Authoring validation, preview then apply; unwrapping
|
|
530
|
+
pending metadata is refused. All page ordered hints, not implementation correctness. Continue
|
|
483
531
|
with `expectedRevision` and `expectedCatalogRevision`; provisional owner IDs are
|
|
484
532
|
not authoritative. Edit hints through reviewed `propose-ast`.
|
|
485
533
|
|
|
@@ -137,7 +137,8 @@
|
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
"kind": "skill-contains",
|
|
140
|
-
"value": "cratis screenplay mcp <model-folder>"
|
|
140
|
+
"value": "cratis screenplay mcp <model-folder>",
|
|
141
|
+
"file": "references/mcp-loop.md"
|
|
141
142
|
},
|
|
142
143
|
{
|
|
143
144
|
"kind": "skill-contains",
|
|
@@ -174,7 +175,8 @@
|
|
|
174
175
|
},
|
|
175
176
|
{
|
|
176
177
|
"kind": "skill-contains",
|
|
177
|
-
"value": "registered Git worktree"
|
|
178
|
+
"value": "registered Git worktree",
|
|
179
|
+
"file": "references/mcp-loop.md"
|
|
178
180
|
},
|
|
179
181
|
{
|
|
180
182
|
"kind": "skill-contains",
|
|
@@ -127,11 +127,8 @@ rejected state and its evidence.
|
|
|
127
127
|
Optional, on request, all read-only and yielding edit requests: a subject's information journey (`references/model-inventory-report.md`), a resilience pass (`references/stressor-analysis.md`) and a slice-by-slice walkthrough (`references/walkthrough.md`).
|
|
128
128
|
|
|
129
129
|
## Quick self-check (modeler, P4; about ten minutes)
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
origin, NOT-enforced rules marked, coverage matrix filled, personas with their denials, rationale in
|
|
133
|
-
`documentation`, open questions as anchored notes, every Automation with pending work). Any "no" is
|
|
134
|
-
fixed or explained before P5. The list: [quick self-check](references/quick-self-check.md).
|
|
130
|
+
Read [quick self-check](references/quick-self-check.md) before P5 for the eleven
|
|
131
|
+
modeler checks. Fix or explain every "no"; this is not the independent review.
|
|
135
132
|
|
|
136
133
|
## Business-question pass (explain brief)
|
|
137
134
|
Be a sharp business analyst seeing the domain fresh: walk each persona's journey and ask only what a domain person must decide, in plain language with no engineering words (could a non-technical product owner read it and immediately understand what is being asked?), anchored to a place in the model, at most 12 questions (zero is valid). Method, element prompts and the model-word translation table: `references/business-questions.md`. A behavior walk in the Stage sandbox (`cratis-stage-rendering-and-sandbox`) is a separate, optional check; its findings arrive here as review findings.
|
|
@@ -64,8 +64,8 @@ the problem, the checks it violates, the fix, all pinned to one declaration.
|
|
|
64
64
|
| Undeclared removal/append event | `remove with` or capture `append` names an undeclared event | V1 warns (PLAY0166, a failure under warnings as errors); binding fails PLAY0273 | C (executable) / D | declare or fix the name; run V3 |
|
|
65
65
|
| Gated command invoked by a reaction without a declared actor | reaction `invokes` a command under a caller policy and has no `runs as system role "<Role>"` that satisfies the gate | the invocation carries no caller: rejected at run time | D (major) | declare `runs as system role "<Role>"` with the least-privilege role the gate admits (ESM v10, Screenplay 4.125.0; Stage 4.89.1 renders role/authenticated trusted actors, but claim-reading/opaque gates still refuse STAGE-ESM-034 and need gap-fill) or record another trusted-path decision - never just delete the gate. A matching `runs as system role` is the admitted trusted path, not a defect |
|
|
66
66
|
| `reads` + `produces` reaction | reaction both reads a view and produces | fails binding | C (executable) | invoke a command, or produce without reads |
|
|
67
|
-
|
|
|
68
|
-
| Caller-supplied state rule | `require currentStatus == "open"` where the caller sends `currentStatus` | the caller decides its own permission | D (major) | read
|
|
67
|
+
| Unadmitted read claimed protected | rule "checked" by legacy command or trigger reads | no protected contract or target realization | D (major) | opt eligible command reads into `command reads protected` (v25); inspect shape, absence and conflict cases. Stage refuses protected reads (STAGE-ESM-044); distinguish reference protection from target evidence; checklist E3 |
|
|
68
|
+
| Caller-supplied state rule | `require currentStatus == "open"` where the caller sends `currentStatus` | the caller decides its own permission | D (major) | read authoritative stored state through admitted protected reads and `require`; mark legacy/refused shapes and target realization as gaps; checklist E3 |
|
|
69
69
|
| `severity warning` as soft rule | rule meant to warn but still rejects | blocks valid requests | C semantics | remove or make it a real rule |
|
|
70
70
|
| Relay events | `*Synced`, `*Forwarded` events that only move data | noise, not facts | D | translate once into a business fact |
|
|
71
71
|
| External event driving a worker directly | captured external record invokes commands with no local fact | no audit of what was learned | D | append a local fact in `Translate`; automate from it |
|
|
@@ -123,7 +123,7 @@ the format in `worked-example.md`.
|
|
|
123
123
|
|---|---|---|---|
|
|
124
124
|
| E1 | Value formats on `concept`s; input rules on the command; uniqueness as `constraint`; access as `authorize` | declarations | D |
|
|
125
125
|
| E2 | Every refusal has a message a person understands; constraint messages copied verbatim in specs | `message`, specs | D |
|
|
126
|
-
| E3 | A state-dependent rule
|
|
126
|
+
| E3 | A state-dependent rule uses `reads` + `require` over authoritative state: eligible reads opt into `command reads protected` (v25), with required absence and decide/commit conflict cases. Legacy/refused reads are marked unenforced with a named target. Stage refuses protected reads (STAGE-ESM-044); reference protection is not target realization. Not: caller-supplied copies of state, attestation booleans (`confirmsX == true`), rules in `handler` / `implementation hint` prose, or `reads` treated as protection | slice `description`, `require`, `handler` | D (faking or hiding = major) |
|
|
127
127
|
| E4 | `severity warning` is not used as "soft" validation (it still rejects) | validate lines | C semantics |
|
|
128
128
|
| E5 | Preconditions are explicit; nothing relies on "obviously you can't" | descriptions, specs | Q |
|
|
129
129
|
| E6 | Each invariant has an atomic enforcement point (name the storage provider where constraint admission matters); the race loser's outcome is specified | constraints, specs | D |
|
|
@@ -147,7 +147,7 @@ PLAY0516 moves preserve executable bytes/identities. Source: Screenplay
|
|
|
147
147
|
| F2 | No impossible sequence (a fact that requires one that can never precede it) | constraints, specs | D |
|
|
148
148
|
| F3 | Cancellation, failure and correction paths exist where the business has them | slices | Q |
|
|
149
149
|
| F4 | Automations: trigger, todo/work item if work can be pending, a closing fact, retry and once-only story | reactions, views | D (`cratis-screenplay-automations-and-translations`) |
|
|
150
|
-
| F5 | External facts enter through `Translate`; in-app follow-ups through `Automation` | slice kinds | C semantics |
|
|
150
|
+
| F5 | External facts enter through `Translate`; in-app follow-ups through separate `Automation` slices. Keep a capture in Translate, move reactions to its local appends out (PLAY0694 for directionless/unrouted co-location, including child/nested appends; PLAY0616 for explicit inbound). PLAY0694 is a warning that fails `--warnaserror`, with no automatic split | slice kinds, capture appends and reaction triggers | C semantics |
|
|
151
151
|
| F6 | No cycle where fact A's reaction needs fact B and B's needs A, or two features each wait on the other | reactions, MCP `dependencies` | D (redesign the boundary) |
|
|
152
152
|
| F7 | Each slice's consumed events and their producing slices are known; a slice calls another's command only through `invokes` | reactions, `reads` | Q |
|
|
153
153
|
| F8 | Every Automation has a pending-work view (a todo list: membership is the pending work), or a written reason a direct effect needs none (immediate, internal, cannot fail). A "simple relay" is not exempt from the question | reactions, `reads`, views | D |
|
|
@@ -8,7 +8,8 @@ About ten minutes, before the independent review.
|
|
|
8
8
|
4. Every read-model field has an origin; every event has a consumer or terminal reason.
|
|
9
9
|
5. Every command has a reachable, authorized origin (screen or form action, or a reaction to an event, clock or application trigger; a capture appends facts and a command after it is reached through a reaction).
|
|
10
10
|
6. No gated command is invoked by a reaction without a recorded trusted-path decision.
|
|
11
|
-
7. State-dependent rules
|
|
11
|
+
7. State-dependent rules use admitted protected command reads plus `require`, or
|
|
12
|
+
record the legacy/refused shape and target gap; no
|
|
12
13
|
caller-supplied state, attestation boolean (`confirmsX == true`) or handler/hint prose.
|
|
13
14
|
8. Coverage matrix filled; every `n/a` has a domain reason.
|
|
14
15
|
9. Persona text says what each role cannot do, each line backed by a gate and a `then denied`
|
|
@@ -37,8 +37,9 @@ needs; a "no" is a finding only when it has a business consequence.
|
|
|
37
37
|
|
|
38
38
|
## For each slice and the model as a whole
|
|
39
39
|
1. Does each slice depend on other slices only through event contracts, `invokes` and explicitly
|
|
40
|
-
recorded cross-slice `reads` of another slice's view (F7)?
|
|
41
|
-
|
|
40
|
+
recorded cross-slice `reads` of another slice's view (F7)? Check protected-command
|
|
41
|
+
opt-in/admission and absence/conflict cases separately from target realization;
|
|
42
|
+
legacy and trigger reads remain unprotected. The view interface is a dependency:
|
|
42
43
|
check that it is recorded, not implied.
|
|
43
44
|
2. Could two people work on two slices at the same time without reading each other's
|
|
44
45
|
declarations, given only the events' fields (A8)?
|