@cratis/pi 7.62.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/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 +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 +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 +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-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
|
@@ -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 |
|
|
@@ -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)?
|
|
@@ -11,7 +11,7 @@ instruction for the work, not background reading. Skills that restate one cite i
|
|
|
11
11
|
6. **Keep semantic identity independent of names, paths, layout and generated symbols.** Commit the identity catalog with the model.
|
|
12
12
|
7. **Keep unsupported intent visible.** Return a precise gap and its owning issue; never weaken the model so rendering passes.
|
|
13
13
|
8. **Write specifications with intent, including rejection and denial.** Never report an unexecuted or unsupported scenario as passed.
|
|
14
|
-
9. **Treat state reads as a correctness boundary.**
|
|
14
|
+
9. **Treat state reads as a correctness boundary.** Eligible command reads opt into `command reads protected` (v25); legacy/trigger reads remain unprotected. Stage refuses protected reads (STAGE-ESM-044), not the v25 pair: reference absence/conflict guarantees and verified target realization are different claims.
|
|
15
15
|
10. **Separate event-source identity from event payload and choose destinations explicitly.**
|
|
16
16
|
11. **Persisted event shape changes are evolution, never cleanup.** Keep historical generations.
|
|
17
17
|
12. **Model external work as business intent.** Provider interfaces and transport mechanics stay out of the language.
|
package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md
CHANGED
|
@@ -21,7 +21,7 @@ speaks in them; never model board mechanics (lanes, node ids, positions).
|
|
|
21
21
|
| Storyline (ordered beats) | a **family** of specifications sharing example data, each one transition (no storyline syntax) | several spec classes | specifications |
|
|
22
22
|
| Field validation | concept `validate` (every use) / command `validate`, `require` | `ConceptValidator<T>` / `CommandValidator<T>` | command validation |
|
|
23
23
|
| Role permission ("Cannot") | `policy` + `authorize` + `then denied` spec; ownership via `claim ... matches subject` | `[Authorize(Policy)]`, generated policies | authorization |
|
|
24
|
-
| Precondition on stream state | `reads` + `require`
|
|
24
|
+
| Precondition on stream state | `command reads protected` + eligible `reads`/`require` (v25 reference protection); legacy/refused reads remain stated intent. Stage refuses protected reads (STAGE-ESM-044); target Arc `[ProtectedDecision]` + `DecisionRead<T>` or Chronicle DCB needs separate verification | decision over a guarded read | command validation |
|
|
25
25
|
| Generated id (`derived:uuid4()`) | `generated` (authorable, not executable) | id supplied before `Handle()` | commands |
|
|
26
26
|
| External system / outbound call | `Translate` slice (inbound); `system`/`operation` (authorable, not executable) or Automation (outbound) | `ICommandOperation` / reactor | operations, reactors |
|
|
27
27
|
| HTML mockup | `screen` Level 1 + board (`visualize-model`) | default Scene composition | ui composition |
|
|
@@ -263,9 +263,8 @@ choosing a whole action list rather than one labeled command, use block-form
|
|
|
263
263
|
**Inside out:** the slice, then the enclosing feature, then the module, then the
|
|
264
264
|
document. The innermost match wins.
|
|
265
265
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
21 times. Two sibling slices can each declare `All`, and each screen gets its own.
|
|
266
|
+
Sibling slices may each declare `All`; each screen resolves its own query.
|
|
267
|
+
Read `references/named-keys.md` when query scope affects identity inference.
|
|
269
268
|
|
|
270
269
|
Reach across slices by qualifying with **any trailing part** of the scope.
|
|
271
270
|
Excerpt: `Queue` and `Deviations` are sibling slices that each declare `All`.
|
|
@@ -100,7 +100,9 @@ Composite read-model keys, query `by` blocks and fixtures
|
|
|
100
100
|
over those views remain authoring-only: binding reports PLAY0268 citing
|
|
101
101
|
Screenplay#599 (still open). They do not reference-execute or render. This is not
|
|
102
102
|
ESM v10 admission; v10 covers reaction identity, production routes and observer
|
|
103
|
-
filters.
|
|
103
|
+
filters. Eligible command reads separately opt into v25 with `command reads protected`;
|
|
104
|
+
legacy reads remain PLAY0271, and composite keys are still refused (PLAY0781 ByParts).
|
|
105
|
+
See command-surface [protected reads](../../cratis-screenplay-command-surface/references/protected-reads.md).
|
|
104
106
|
A single explicit key does bind; Stage admission still depends on the complete
|
|
105
107
|
model and projection/query shape, not just the key modifier.
|
|
106
108
|
|
|
@@ -32,6 +32,12 @@ Tool versions are covered in `cratis-screenplay-toolchain` `SKILL.md`; read it b
|
|
|
32
32
|
(the user); Stage internals and the sandbox (`cratis-stage-rendering-and-sandbox`); judging
|
|
33
33
|
hand-written code against its slice (`cratis-application-slice-conformance`).
|
|
34
34
|
|
|
35
|
+
## Language modes that block target delivery
|
|
36
|
+
|
|
37
|
+
Read [language admission](../cratis-screenplay-toolchain/references/language-admission.md)
|
|
38
|
+
for v22–v25: Stage refuses atomic batches, described bodies (even Stub mode) and
|
|
39
|
+
protected reads. Preserve contracts; reference success is not target realization.
|
|
40
|
+
|
|
35
41
|
## Interview phase
|
|
36
42
|
**Skip if** the request names the model root, the application name, the destination and the
|
|
37
43
|
decision on non-renderable scope. Otherwise ask only what is missing:
|
|
@@ -143,9 +149,8 @@ Adapters and non-renderable scope follow the contract rules of `cratis-applicati
|
|
|
143
149
|
the Arc/Chronicle set in `cratis-stage-rendering-and-sandbox` `references/rendered-application.md`; API availability alone is not verified enforcement.
|
|
144
150
|
- Adapters that call outside systems follow `cratis-engineering-effect-boundaries`; slice
|
|
145
151
|
specifications follow `cratis-application-slice-specifications`.
|
|
146
|
-
-
|
|
147
|
-
|
|
148
|
-
Executable parts (specifications, mappings, constraints) win over prose, and a contradicting description is a model defect to report.
|
|
152
|
+
- Read conformance's `references/contract-and-precedence.md` for realization-note
|
|
153
|
+
authority. Executable contract wins over prose; report contradictions.
|
|
149
154
|
|
|
150
155
|
## Rules
|
|
151
156
|
|
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md
CHANGED
|
@@ -105,6 +105,14 @@ stable array or list. The Stage scaffold pins an older Arc, so raise the version
|
|
|
105
105
|
`Customizations/Dependencies.props` only after a restore and build proves it. Never split the
|
|
106
106
|
reaction or drop an effect to dodge rendering.
|
|
107
107
|
|
|
108
|
+
Preserve declared `reaction batches atomic` boundaries: each trigger occurrence's
|
|
109
|
+
direct productions and each selected refusal branch are separate batches, with
|
|
110
|
+
invoked commands independent. Stage refuses v22 (STAGE-ESM-016) and atomic mode
|
|
111
|
+
in admitted v23–v25 (STAGE-ESM-043); the declaration is not external-effect deduplication.
|
|
112
|
+
For described handlers, hand off only payload computation under the v23 result
|
|
113
|
+
contract; Stage STAGE-IMPL-002 means no stubs, even Stub mode. Protected v25 reads
|
|
114
|
+
refuse STAGE-ESM-044 despite version admission and need target admission/enrollment tests; ordinary injection never supplies protection.
|
|
115
|
+
|
|
108
116
|
## Re-delivery
|
|
109
117
|
The work list is the full in-scope contract delta since the fallback record's last verified source
|
|
110
118
|
identity (specifications, rules, mappings, realization notes), then the whole contract is
|
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md
CHANGED
|
@@ -14,8 +14,10 @@ probe reports and choosing what to do. Do not copy the code table here.
|
|
|
14
14
|
2. Execution planning builds the plan and can emit `PLAN-*` diagnostics before Stage runs.
|
|
15
15
|
3. Stage plans the target and admits or rejects each member: `STAGE-ESM-0xx`; profile and path
|
|
16
16
|
problems `STAGE-CRATIS-0xx`. An evolved event is reported with Stage's own `STAGE-ESM-026`
|
|
17
|
-
(still refused); the CLI adds nothing.
|
|
18
|
-
|
|
17
|
+
(still refused); the CLI adds nothing. Read the owning Stage admission table and
|
|
18
|
+
toolchain `references/renderable-subset.md` for exact pairs and version minimums;
|
|
19
|
+
CLI admission remains bounded by its bundled renderer. Each unsupported construct
|
|
20
|
+
has its own code; version admission is not construct support.
|
|
19
21
|
4. Any error in the selected scope publishes nothing: the run ends with exit 5 and the diagnostics.
|
|
20
22
|
Without `--scope` the scope is the whole application. With `--scope`, `PLAN-*` problems in
|
|
21
23
|
unselected slices are warnings and `STAGE-ESM-*` refusals in unselected slices do not block;
|
|
@@ -28,8 +30,8 @@ ESM). Only the probe answers renderability. `PLAY0270` entries are information,
|
|
|
28
30
|
|
|
29
31
|
| Class | Meaning | Typical examples (each verified in `admission.md`) | Action |
|
|
30
32
|
| --- | --- | --- | --- |
|
|
31
|
-
| **Model fix (in mode)** | the model is in, or the user chose, renderable mode and breaks its own subset in a way that has a renderable equivalent with the same meaning | a `produces` whose `for` is not the command identifier;
|
|
32
|
-
| **Capability gap** | the intended meaning needs a construct Stage does not render yet |
|
|
33
|
+
| **Model fix (in mode)** | the model is in, or the user chose, renderable mode and breaks its own subset in a way that has a renderable equivalent with the same meaning | a `produces` whose `for` is not the command identifier; two projections for one read model (`-007`); a policy Stage cannot express portably (`-015`; role-only and opaque pure policies render) | edit request to the modeler session with address, change and rationale |
|
|
34
|
+
| **Capability gap** | the intended meaning needs a construct Stage does not render yet | DateTime equality filters and required parameters after optional filters (`-010`); context/single-result filters, opaque `scoped to`/`performer` and composite `by` remain PLAY0268; Translate, clocks, captures, non-event triggers and opaque reaction bodies (`-024`); claim-reading/opaque `runs as` gates (`-034`), legacy `from` (`-035`), mixed effects in one handler (`-037`, retries can duplicate events; keep it whole), unsupported reaction mappings (`-039`); unsupported generated types/result combinations (`-028`/`-038`); `then no readmodel` (`-027`); evolved events (`STAGE-ESM-026`); unsupported expression/enum production conditions (`-006`; supported conditional productions render); legacy reads (`PLAY0271`), protected reads (STAGE-ESM-044 despite v25 admission); code validation (`-005`); protected identities/enums (`-040`) or unadmitted explicit subject lineage (`PLAY0268`); attached command handlers (PLAY0268), described handlers (v23, STAGE-IMPL-002 even Stub mode), atomic mode (STAGE-ESM-016 for v22, STAGE-ESM-043 in admitted v23–v25) | keep the model; fallback record entry; options a to c in `SKILL.md`; link the Stage issue |
|
|
33
35
|
| **Tool skew** | the bundled compiler disagrees with documented semantics | the false `PLAY0285` on reaction cascades from an older bundle; codes the standalone compiler does not raise | record in the session state and the fallback record; never "fix" a correct model |
|
|
34
36
|
| **Environment** | not the model | restore failures, missing SDK, a destination that is not writable | fix the environment or report blocked |
|
|
35
37
|
|